ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
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 - 2025 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
11#include "mpi_ensemble.h"
12#include "observer_pointer.h"
13#include "offline_data.h"
14
15#include <deal.II/base/parameter_acceptor.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 final : public dealii::ParameterAcceptor
40 {
41 public:
46
49
50 using View = typename HyperbolicSystem::template View<dim, Number>;
51
52 static constexpr auto problem_dimension = View::problem_dimension;
53
54 using state_type = typename View::state_type;
55
56 static constexpr auto n_initial_precomputed_values =
57 View::n_initial_precomputed_values;
58
59 using initial_precomputed_type = typename View::initial_precomputed_type;
60
61 using HyperbolicVector = typename View::HyperbolicVector;
62
63 using InitialPrecomputedVector = typename View::InitialPrecomputedVector;
64
66
70
74 InitialValues(const MPIEnsemble &mpi_ensemble,
75 const OfflineData<dim, Number> &offline_data,
76 const HyperbolicSystem &hyperbolic_system,
77 const ParabolicSystem &parabolic_system,
78 const std::string &subsection = "/InitialValues");
79
87
89
93
101 DEAL_II_ALWAYS_INLINE inline state_type
102 initial_state(const dealii::Point<dim> &point, Number t) const
103 {
104 return initial_state_(point, t);
105 }
106
114 DEAL_II_ALWAYS_INLINE inline initial_precomputed_type
115 initial_precomputed(const dealii::Point<dim> &point) const
116 {
117 return initial_precomputed_(point);
118 }
119
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::ObserverPointer<const OfflineData<dim, Number>> offline_data_;
156 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
157 dealii::ObserverPointer<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 */
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
static constexpr auto n_initial_precomputed_values
typename Description::ParabolicSystem ParabolicSystem
HyperbolicVector interpolate_hyperbolic_vector(Number t=0) const
typename HyperbolicSystem::template View< dim, Number > View
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:34
ryujin::StubParabolicSystem ParabolicSystem
Definition description.h:36