ryujin 2.1.1 revision 46bf70e400e423a8ffffe8300887eeb35b8dfb2c
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 - 2024 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 =
36 typename Description::template HyperbolicSystemView<dim, Number>;
37 using state_type = typename View::state_type;
38
39 RadialContrast(const HyperbolicSystem &hyperbolic_system,
40 const std::string &subsection)
41 : InitialState<Description, dim, Number>("radial contrast",
42 subsection)
43 , hyperbolic_system_(hyperbolic_system)
44 {
45 primitive_inner_[0] = 1.4;
46 primitive_inner_[1] = 0.0;
47 primitive_inner_[2] = 1.;
48 this->add_parameter(
49 "primitive state inner",
50 primitive_inner_,
51 "Initial 1d primitive state (rho, u, p) on the inner disk");
52
53 primitive_outer_[0] = 1.4;
54 primitive_outer_[1] = 0.0;
55 primitive_outer_[2] = 1.;
56 this->add_parameter(
57 "primitive state outer",
58 primitive_outer_,
59 "Initial 1d primitive state (rho, u, p) on the outer annulus");
60
61 radius_ = 0.5;
62 this->add_parameter("radius", radius_, "Radius of radial area");
63
64 const auto convert_states = [&]() {
65 const auto view = hyperbolic_system_.template view<dim, Number>();
66 state_inner_ = view.from_initial_state(primitive_inner_);
67 state_outer_ = view.from_initial_state(primitive_outer_);
68 };
69 this->parse_parameters_call_back.connect(convert_states);
70 convert_states();
71 }
72
73 auto compute(const dealii::Point<dim> &point, Number /*t*/)
74 -> state_type final
75 {
76 return (point.norm() > radius_ ? state_outer_ : state_inner_);
77 }
78
79 private:
80 const HyperbolicSystem &hyperbolic_system_;
81
82 dealii::Tensor<1, 3, Number> primitive_inner_;
83 dealii::Tensor<1, 3, Number> primitive_outer_;
84 double radius_;
85
86 state_type state_inner_;
87 state_type state_outer_;
88 };
89 } // namespace EulerInitialStates
90} // namespace ryujin
RadialContrast(const HyperbolicSystem &hyperbolic_system, const std::string &subsection)
typename Description::template HyperbolicSystemView< dim, Number > View
typename Description::HyperbolicSystem HyperbolicSystem
auto compute(const dealii::Point< dim > &point, Number) -> state_type final
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:34