ryujin 2.1.1 revision b04fb4aba7bd97ddfa5994a6b4b6e8586eb15db2
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 <compile_time_options.h>
9
10#include <ryujin/interface/parabolic_system.h>
11
13#include "mpi_ensemble.h"
14#include "observer_pointer.h"
15#include "offline_data.h"
16
17#include <deal.II/base/parameter_acceptor.h>
18#include <deal.II/base/tensor.h>
19
20#include <functional>
21
22namespace ryujin
23{
40 template <typename HyperbolicDescription, int dim, typename Number = double>
41 class InitialValues final : public dealii::ParameterAcceptor
42 {
43 public:
48
50
51 using View = typename HyperbolicSystem::template View<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
63
67
71 InitialValues(const MPIEnsemble &mpi_ensemble,
72 const OfflineData<dim, Number> &offline_data,
73 const HyperbolicSystem &hyperbolic_system,
74 const Interface::ParabolicSystem &parabolic_system,
75 const std::string &subsection = "/InitialValues");
76
84
86
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
111 DEAL_II_ALWAYS_INLINE inline initial_precomputed_type
112 initial_precomputed(const dealii::Point<dim> &point) const
113 {
114 return initial_precomputed_(point);
115 }
116
122 interpolate_hyperbolic_vector(Number t = 0) const;
123
129
130 private:
132
136
137 std::string configuration_;
138
139 dealii::Point<dim> initial_position_;
140
141 dealii::Tensor<1, dim> initial_direction_;
142
143 Number perturbation_;
144
146
150
151 const MPIEnsemble &mpi_ensemble_;
152
153 dealii::ObserverPointer<const OfflineData<dim, Number>> offline_data_;
154 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
155 dealii::ObserverPointer<const Interface::ParabolicSystem> parabolic_system_;
156
158 initial_state_list_type initial_state_list_;
159
160 std::function<state_type(const dealii::Point<dim> &, Number)>
161 initial_state_;
162
163 std::function<initial_precomputed_type(const dealii::Point<dim> &)>
164 initial_precomputed_;
165
167 };
168
169} /* 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
MultiComponentVector< Number > interpolate_hyperbolic_vector(Number t=0) const
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
static constexpr auto n_initial_precomputed_values