ryujin 2.5.0 revision 3a6c8d57210175dea14d8116e1fe878f349f8c1c
Loading...
Searching...
No Matches
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 - 2026 by the ryujin authors
4//
5
6#pragma once
7
8#include <ryujin/base/compile_time_options.h>
15
16#include <deal.II/base/parameter_acceptor.h>
17#include <deal.II/base/tensor.h>
18
19#include <functional>
20#include <memory>
21#include <vector>
22
23namespace ryujin
24{
41 template <typename HyperbolicDescription, int dim, typename Number = double>
42 class InitialValues final : public Interface::InitialValues<dim, Number>
43 {
44 public:
49
50 using HyperbolicSystem = typename HyperbolicDescription::HyperbolicSystem;
51
52 using View = typename HyperbolicSystem::template View<dim, Number>;
53
54 static constexpr auto problem_dimension = View::problem_dimension;
55
56 using state_type = typename View::state_type;
57
58 static constexpr auto n_initial_precomputed_values =
59 View::n_initial_precomputed_values;
60
61 using initial_precomputed_type = typename View::initial_precomputed_type;
62
64
68
72 InitialValues(const MPIEnsemble &mpi_ensemble,
73 const Interface::OfflineData<dim, Number> &offline_data,
74 const HyperbolicSystem &hyperbolic_system,
75 const Interface::ParabolicSystem &parabolic_system,
76 const std::string &subsection = "/InitialValues");
77
85
87
91
99 DEAL_II_ALWAYS_INLINE inline state_type
100 initial_state(const dealii::Point<dim> &point, Number t) const
101 {
102 return initial_state_(point, t);
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
123 interpolate_hyperbolic_vector(Number t = 0) const override;
124
130
131 private:
133
137
138 std::string configuration_;
139
140 dealii::Point<dim> initial_position_;
141
142 dealii::Tensor<1, dim> initial_direction_;
143
144 Number perturbation_;
145
147
151
152 const MPIEnsemble &mpi_ensemble_;
153
154 dealii::ObserverPointer<const Interface::OfflineData<dim, Number>>
155 offline_data_;
156 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
157 dealii::ObserverPointer<const Interface::ParabolicSystem> parabolic_system_;
158
159 std::vector<
160 std::unique_ptr<InitialState<HyperbolicDescription, dim, Number>>>
161 initial_state_list_;
162
163 std::function<state_type(const dealii::Point<dim> &, Number)>
164 initial_state_;
165
166 std::function<initial_precomputed_type(const dealii::Point<dim> &)>
167 initial_precomputed_;
168
170 };
171
172} // namespace ryujin
static constexpr auto problem_dimension
DEAL_II_ALWAYS_INLINE state_type initial_state(const dealii::Point< dim > &point, Number t) const
typename View::state_type state_type
typename View::initial_precomputed_type initial_precomputed_type
typename HyperbolicDescription::HyperbolicSystem HyperbolicSystem
DEAL_II_ALWAYS_INLINE initial_precomputed_type initial_precomputed(const dealii::Point< dim > &point) const
typename HyperbolicSystem::template View< dim, Number > View
MultiComponentVector< Number > interpolate_initial_precomputed_vector() const
MultiComponentVector< Number > interpolate_hyperbolic_vector(Number t=0) const override
static constexpr auto n_initial_precomputed_values