5#include <initial_state.h>
16 template <
int dim,
typename Number,
typename state_type>
23 , hyperbolic_system(hyperbolic_system)
26 this->add_parameter(
"left resevoir depth",
28 "Depth of water at left resevoir");
31 this->add_parameter(
"left resevoir position",
33 "Position of left resevoir");
36 this->add_parameter(
"right resevoir depth",
38 "Depth of water at right resevoir");
40 right_position = 14.5;
41 this->add_parameter(
"right resevoir position",
43 "Position of right resevoir");
47 this->add_parameter(
"step position",
49 "Center position of the triangular step");
53 "step width", step_width,
"Total width of the triangular step");
57 "step height", step_height,
"Height of the triangular step");
62 const Number x = point[0];
63 const Number bath = compute_bathymetry(point);
67 if (x < left_position)
68 h = std::max(Number(0.), left_depth - bath);
69 else if (x > right_position)
70 h = std::max(Number(0.), right_depth - bath);
72 return hyperbolic_system.template expand_state<dim>(
81 return {compute_bathymetry(point)};
87 DEAL_II_ALWAYS_INLINE
inline Number
88 compute_bathymetry(
const dealii::Point<dim> &point)
const
90 const Number x = point[0];
92 const Number slope = Number(2.) * step_height / step_width;
93 const Number triangular_step =
94 step_height - slope * std::abs(x - step_position);
95 return std::max(Number(0.), triangular_step);
102 Number right_position;
104 Number step_position;
typename HyperbolicSystemView::state_type state_type
dealii::Tensor< 1, problem_dimension< dim >, Number > state_type
auto initial_precomputations(const dealii::Point< dim > &point) -> typename InitialState< dim, Number, state_type, 1 >::precomputed_type final
TriangularDamBreak(const HyperbolicSystem &hyperbolic_system, const std::string s)
state_type compute(const dealii::Point< dim > &point, Number) final