ryujin 2.5.0 revision 3a6c8d57210175dea14d8116e1fe878f349f8c1c
Loading...
Searching...
No Matches
solution_transfer.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception or LGPL-2.1-or-later
3// Copyright (C) 2020 - 2026 by the ryujin authors
4//
5
6#pragma once
7
8#include <ryujin/base/compile_time_options.h>
16
17#include <deal.II/base/parameter_acceptor.h>
18
19#include <utility>
20#include <vector>
21
22namespace ryujin
23{
40 template <typename HyperbolicDescription, int dim, typename Number = double>
41 class SolutionTransfer final : public Interface::SolutionTransfer<dim, Number>
42 {
43 public:
48
49 using HyperbolicSystem = typename HyperbolicDescription::HyperbolicSystem;
50
51 using View = typename HyperbolicSystem::template View<dim, Number>;
52
53 using Limiter = typename HyperbolicDescription::template Limiter<Number>;
54
56 decltype(std::declval<const Limiter &>().template view<dim, Number>());
57
58 static constexpr auto problem_dimension = View::problem_dimension;
59
60 static constexpr auto n_precomputed_values = View::n_precomputed_values;
61
62 using state_type = typename View::state_type;
63
67 static constexpr unsigned int n_bounds = LimiterView::n_bounds;
68
72 using Bounds = typename LimiterView::Bounds;
73
75
79
83 SolutionTransfer(const MPIEnsemble &mpi_ensemble,
84 Interface::Discretization<dim> &discretization, /*mutable*/
85 const Interface::OfflineData<dim, Number> &offline_data,
86 const HyperbolicSystem &hyperbolic_system,
87 const Interface::ParabolicSystem &parabolic_system,
88 const std::string &subsection = "/SolutionTransfer");
89
93 ~SolutionTransfer() override = default;
94
96
101
108 void
109 prepare_projection(const StateVector<Number> &old_state_vector) override;
110
123 void project(StateVector<Number> &new_state_vector) override;
124
125 private:
127
131
132 Limiter limiter_;
133
135
139
140 const MPIEnsemble &mpi_ensemble_;
141
142 dealii::ObserverPointer<Interface::Discretization<dim>> discretization_;
143 dealii::ObserverPointer<const Interface::OfflineData<dim, Number>>
144 offline_data_;
145 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
146 dealii::ObserverPointer<const Interface::ParabolicSystem> parabolic_system_;
147
149
153
164 state_type read_tensor(const MultiComponentVector<Number> &U,
165 const dealii::types::global_dof_index global_i);
166
172 void add_tensor(MultiComponentVector<Number> &U,
173 const state_type &U_i,
174 const dealii::types::global_dof_index global_i);
175
177 };
178} // namespace ryujin
typename HyperbolicDescription::template Limiter< Number > Limiter
~SolutionTransfer() override=default
static constexpr unsigned int n_bounds
typename HyperbolicSystem::template View< dim, Number > View
typename HyperbolicDescription::HyperbolicSystem HyperbolicSystem
static constexpr auto problem_dimension
typename LimiterView::Bounds Bounds
static constexpr auto n_precomputed_values
void project(StateVector< Number > &new_state_vector) override
typename View::state_type state_type
void prepare_projection(const StateVector< Number > &old_state_vector) override