8#include <compile_time_options.h>
14 namespace EulerInitialStates
29 template <
typename Description,
int dim,
typename Number>
39 const std::string &subsection)
42 , hyperbolic_system_(hyperbolic_system)
45 primitive_left_[0] = 1.;
46 primitive_left_[1] = 0.;
47 primitive_left_[2] = 1.e3;
49 "primitive state left",
51 "Initial 1d primitive state (rho, u, p) on the left");
54 this->add_parameter(
"left region length",
56 "The length of the left region");
58 primitive_middle_[0] = 1.;
59 primitive_middle_[1] = 0.;
60 primitive_middle_[2] = 1.e-2;
62 "primitive state middle",
64 "Initial 1d primitive state (rho, u, p) in the middle");
67 this->add_parameter(
"middle region length",
69 "The length of the middle region");
71 primitive_right_[0] = 1.;
72 primitive_right_[1] = 0.;
73 primitive_right_[2] = 1.e2;
75 "primitive state right",
77 "Initial 1d primitive state (rho, u, p) on the right");
79 const auto convert_states = [&]() {
80 const auto view = hyperbolic_system_.template view<dim, Number>();
81 state_left_ = view.from_initial_state(primitive_left_);
82 state_middle_ = view.from_initial_state(primitive_middle_);
83 state_right_ = view.from_initial_state(primitive_right_);
85 this->parse_parameters_call_back.connect(convert_states);
91 return point[0] >= left_length_ + middle_length_ ? state_right_
92 : point[0] >= left_length_ ? state_middle_
100 Number middle_length_;
102 dealii::Tensor<1, 3, Number> primitive_left_;
103 dealii::Tensor<1, 3, Number> primitive_middle_;
104 dealii::Tensor<1, 3, Number> primitive_right_;
state_type compute(const dealii::Point< dim > &point, Number) final
ThreeStateContrast(const HyperbolicSystem &hyperbolic_system, const std::string &subsection)
typename Description::template HyperbolicSystemView< dim, Number > View
typename Description::HyperbolicSystem HyperbolicSystem
typename View::state_type state_type
Euler::HyperbolicSystem HyperbolicSystem