ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
Loading...
Searching...
No Matches
initial_state_radial_contrast.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2022 - 2025 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
11
12namespace ryujin
13{
14 namespace EulerInitialStates
15 {
30 template <typename Description, int dim, typename Number>
31 class RadialContrast : public InitialState<Description, dim, Number>
32 {
33 public:
35 using View = typename HyperbolicSystem::template View<dim, Number>;
36 using state_type = typename View::state_type;
38 typename HyperbolicSystem::template View<1, Number>::state_type;
39
40 RadialContrast(const HyperbolicSystem &hyperbolic_system,
41 const std::string &subsection)
42 : InitialState<Description, dim, Number>("radial contrast",
43 subsection)
44 , hyperbolic_system_(hyperbolic_system)
45 {
46 primitive_inner_[0] = 1.4;
47 primitive_inner_[1] = 0.0;
48 if constexpr (View::have_energy_equation)
49 primitive_inner_[2] = 1.;
50 this->add_parameter("primitive state inner",
51 primitive_inner_,
52 "1d primitive state [rho, u, p] on the inner disk "
53 "(or [rho, u] for the barotropic Euler module)");
54
55 primitive_outer_[0] = 1.4;
56 primitive_outer_[1] = 0.0;
57 if constexpr (View::have_energy_equation)
58 primitive_outer_[2] = 1.;
59 this->add_parameter(
60 "primitive state outer",
61 primitive_outer_,
62 "1d primitive state [rho, u, p] on the outer annulus (or [rho, u] "
63 "for the barotropic Euler module)");
64
65 radius_ = 0.5;
66 this->add_parameter("radius", radius_, "Radius of radial area");
67
68 const auto convert_states = [&]() {
69 const auto view = hyperbolic_system_.template view<dim, Number>();
70 state_inner_ = view.from_initial_state(primitive_inner_);
71 state_outer_ = view.from_initial_state(primitive_outer_);
72 };
73 this->parse_parameters_call_back.connect(convert_states);
74 convert_states();
75 }
76
77 auto compute(const dealii::Point<dim> &point, Number /*t*/)
78 -> state_type final
79 {
80 return (point.norm() > radius_ ? state_outer_ : state_inner_);
81 }
82
83 private:
84 const HyperbolicSystem &hyperbolic_system_;
85
86 double radius_;
87
88 state_type_1d primitive_inner_;
89 state_type_1d primitive_outer_;
90
91 state_type state_inner_;
92 state_type state_outer_;
93 };
94 } // namespace EulerInitialStates
95} // namespace ryujin
RadialContrast(const HyperbolicSystem &hyperbolic_system, const std::string &subsection)
typename Description::HyperbolicSystem HyperbolicSystem
auto compute(const dealii::Point< dim > &point, Number) -> state_type final
typename HyperbolicSystem::template View< 1, Number >::state_type state_type_1d
typename HyperbolicSystem::template View< dim, Number > View
Euler::HyperbolicSystem HyperbolicSystem
Definition description.h:34