ryujin 2.1.1 revision 9dcb748690310d6a540ebb8b066d1a0834fc7604
initial_state_contrast.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: MIT
3// Copyright (C) 2020 - 2023 by the ryujin authors
4//
5
6#pragma once
7
8#include "hyperbolic_system.h"
9#include <initial_state.h>
10
11namespace ryujin
12{
13 namespace ShallowWater
14 {
21 template <int dim, typename Number, typename state_type>
22 class Contrast : public InitialState<dim, Number, state_type, 1>
23 {
24 public:
25 Contrast(const HyperbolicSystem &hyperbolic_system,
26 const std::string subsection)
27 : InitialState<dim, Number, state_type, 1>("contrast", subsection)
28 , hyperbolic_system(hyperbolic_system)
29 {
30 primitive_left_[0] = 1.;
31 primitive_left_[1] = 0.0;
32 this->add_parameter("primitive state left",
33 primitive_left_,
34 "Initial 1d primitive state (h, u) on the left");
35
36 primitive_right_[0] = 1.;
37 primitive_right_[1] = 0.0;
38 this->add_parameter("primitive state right",
39 primitive_right_,
40 "Initial 1d primitive state (h, u) on the right");
41 }
42
43 state_type compute(const dealii::Point<dim> &point, Number /*t*/) final
44 {
45 const auto temp = hyperbolic_system.from_primitive_state(
46 point[0] > 0. ? primitive_right_ : primitive_left_);
47 return hyperbolic_system.template expand_state<dim>(temp);
48 }
49
50 private:
51 const HyperbolicSystem &hyperbolic_system;
52
53 dealii::Tensor<1, 2, Number> primitive_left_;
54 dealii::Tensor<1, 2, Number> primitive_right_;
55 };
56 } // namespace ShallowWater
57} // namespace ryujin
typename HyperbolicSystemView::state_type state_type
Contrast(const HyperbolicSystem &hyperbolic_system, const std::string subsection)
state_type compute(const dealii::Point< dim > &point, Number) final
dealii::Tensor< 1, problem_dim, Number > from_primitive_state(const dealii::Tensor< 1, problem_dim, Number > &primitive_state) const