39 const std::string &subsection)
40 :
InitialState<Description, dim, Number>(
"three state contrast",
42 , hyperbolic_system_(hyperbolic_system)
45 primitive_left_[0] = 1.;
46 primitive_left_[1] = 0.;
47 if constexpr (View::have_energy_equation)
48 primitive_left_[2] = 1.e3;
49 this->add_parameter(
"primitive state left",
51 "1d primitive state [rho, u, p] on the left (or "
52 "[rho, u] for the barotropic Euler module)");
55 this->add_parameter(
"left region length",
57 "The length of the left region");
59 primitive_middle_[0] = 1.;
60 primitive_middle_[1] = 0.;
61 if constexpr (View::have_energy_equation)
62 primitive_middle_[2] = 1.e-2;
63 this->add_parameter(
"primitive state middle",
65 "1d primitive state [rho, u, p] in the middle (or "
66 "[rho, u] for the barotropic Euler module)");
69 this->add_parameter(
"middle region length",
71 "The length of the middle region");
73 primitive_right_[0] = 1.;
74 primitive_right_[1] = 0.;
75 if constexpr (View::have_energy_equation)
76 primitive_right_[2] = 1.e2;
77 this->add_parameter(
"primitive state right",
79 "1d primitive state [rho, u, p] on the right (or "
80 "[rho, u] for the barotropic Euler module)");
82 const auto convert_states = [&]() {
83 const auto view = hyperbolic_system_.template view<dim, Number>();
84 state_left_ = view.from_initial_state(primitive_left_);
85 state_middle_ = view.from_initial_state(primitive_middle_);
86 state_right_ = view.from_initial_state(primitive_right_);
88 this->parse_parameters_call_back.connect(convert_states);