ryujin 2.1.1 revision 955e869188d49b3c97ca7b1cf4fd9ceb0e6f46ef
initial_values.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2020 - 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
11#include "mpi_ensemble.h"
12#include "offline_data.h"
13
14#include <deal.II/base/parameter_acceptor.h>
15#include <deal.II/base/smartpointer.h>
16#include <deal.II/base/tensor.h>
17
18#include <functional>
19
20namespace ryujin
21{
38 template <typename Description, int dim, typename Number = double>
39 class InitialValues : public dealii::ParameterAcceptor
40 {
41 public:
47
49
50 using View =
51 typename Description::template HyperbolicSystemView<dim, Number>;
52
53 static constexpr auto problem_dimension = View::problem_dimension;
54
55 using state_type = typename View::state_type;
56
57 static constexpr auto n_initial_precomputed_values =
58 View::n_initial_precomputed_values;
59
60 using initial_precomputed_type = typename View::initial_precomputed_type;
61
62 using HyperbolicVector = typename View::HyperbolicVector;
63
64 using InitialPrecomputedVector = typename View::InitialPrecomputedVector;
65
67
71
75 InitialValues(const MPIEnsemble &mpi_ensemble,
76 const OfflineData<dim, Number> &offline_data,
77 const HyperbolicSystem &hyperbolic_system,
78 const ParabolicSystem &parabolic_system,
79 const std::string &subsection = "/InitialValues");
80
81
89
90
98 DEAL_II_ALWAYS_INLINE inline state_type
99 initial_state(const dealii::Point<dim> &point, Number t) const
100 {
101 return initial_state_(point, t);
102 }
103
104
112 DEAL_II_ALWAYS_INLINE inline initial_precomputed_type
113 initial_precomputed(const dealii::Point<dim> &point) const
114 {
115 return initial_precomputed_(point);
116 }
117
118
124
125
131
132 private:
134
138
139 std::string configuration_;
140
141 dealii::Point<dim> initial_position_;
142
143 dealii::Tensor<1, dim> initial_direction_;
144
145 Number perturbation_;
146
148
152
153 const MPIEnsemble &mpi_ensemble_;
154
155 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
156 dealii::SmartPointer<const HyperbolicSystem> hyperbolic_system_;
157 dealii::SmartPointer<const ParabolicSystem> parabolic_system_;
158
160 initial_state_list_type initial_state_list_;
161
162 std::function<state_type(const dealii::Point<dim> &, Number)>
163 initial_state_;
164
165 std::function<initial_precomputed_type(const dealii::Point<dim> &)>
166 initial_precomputed_;
167
169 };
170
171} /* namespace ryujin */
InitialValues(const MPIEnsemble &mpi_ensemble, const OfflineData< dim, Number > &offline_data, const HyperbolicSystem &hyperbolic_system, const ParabolicSystem &parabolic_system, const std::string &subsection="/InitialValues")
InitialPrecomputedVector interpolate_initial_precomputed_vector() const
typename View::initial_precomputed_type initial_precomputed_type
typename View::InitialPrecomputedVector InitialPrecomputedVector
static constexpr auto problem_dimension
typename Description::HyperbolicSystem HyperbolicSystem
typename Description::template HyperbolicSystemView< dim, Number > View
static constexpr auto n_initial_precomputed_values
typename Description::ParabolicSystem ParabolicSystem
HyperbolicVector interpolate_hyperbolic_vector(Number t=0) const
typename View::HyperbolicVector HyperbolicVector
DEAL_II_ALWAYS_INLINE state_type initial_state(const dealii::Point< dim > &point, Number t) const
DEAL_II_ALWAYS_INLINE initial_precomputed_type initial_precomputed(const dealii::Point< dim > &point) const
typename View::state_type state_type
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:32
ryujin::StubParabolicSystem ParabolicSystem
Definition: description.h:37