ryujin 2.1.1 revision 9391072059490dd712e0ea92785f21acd6605f00
time_integrator.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2022 - 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
10#include "convenience_macros.h"
11#include "hyperbolic_module.h"
12#include "offline_data.h"
13#include "parabolic_module.h"
14#include "patterns_conversion.h"
15
16namespace ryujin
17{
28 none,
29
37 };
38
39
45 enum class TimeSteppingScheme {
73
78 erk_11,
79
91 erk_22,
92
105 erk_33,
106
119 erk_43,
120
125 erk_54,
126
132
138
144 };
145} // namespace ryujin
146
147#ifndef DOXYGEN
148DECLARE_ENUM(ryujin::CFLRecoveryStrategy,
151 "bang bang control"}));
152
153DECLARE_ENUM(
155 LIST({ryujin::TimeSteppingScheme::ssprk_22, "ssprk 22"},
164 {ryujin::TimeSteppingScheme::strang_erk_43_cn, "strang erk 43 cn"}, ));
165#endif
166
167namespace ryujin
168{
175 template <typename Description, int dim, typename Number = double>
176 class TimeIntegrator final : public dealii::ParameterAcceptor
177 {
178 public:
183
185
186 using View =
187 typename Description::template HyperbolicSystemView<dim, Number>;
188
190
192
194
198
203 const MPI_Comm &mpi_communicator,
204 const OfflineData<dim, Number> &offline_data,
205 const HyperbolicModule<Description, dim, Number> &hyperbolic_module,
206 const ParabolicModule<Description, dim, Number> &parabolic_module,
207 const std::string &subsection = "/TimeIntegrator");
208
214 void prepare();
215
217
221
234 Number step(StateVector &state_vector, Number t);
235
240
248
249 protected:
260 Number step_ssprk_22(StateVector &state_vector, Number t);
261
272 Number step_ssprk_33(StateVector &state_vector, Number t);
273
279 Number step_erk_11(StateVector &state_vector, Number t);
280
286 Number step_erk_22(StateVector &state_vector, Number t);
287
293 Number step_erk_33(StateVector &state_vector, Number t);
294
300 Number step_erk_43(StateVector &state_vector, Number t);
301
308 Number step_erk_54(StateVector &state_vector, Number t);
309
317 Number step_strang_ssprk_33_cn(StateVector &state_vector, Number t);
318
326 Number step_strang_erk_33_cn(StateVector &state_vector, Number t);
327
335 Number step_strang_erk_43_cn(StateVector &state_vector, Number t);
336
337 private:
339
343
344 Number cfl_min_;
345 Number cfl_max_;
346
347 CFLRecoveryStrategy cfl_recovery_strategy_;
348
349 TimeSteppingScheme time_stepping_scheme_;
350 double efficiency_;
351
353
355
359
360 const MPI_Comm &mpi_communicator_;
361
362 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
363 dealii::SmartPointer<const HyperbolicModule<Description, dim, Number>>
364 hyperbolic_module_;
365 dealii::SmartPointer<const ParabolicModule<Description, dim, Number>>
366 parabolic_module_;
367
368 std::vector<StateVector> temp_;
369
371 };
372
373} /* namespace ryujin */
Number step_ssprk_33(StateVector &state_vector, Number t)
TimeIntegrator(const MPI_Comm &mpi_communicator, const OfflineData< dim, Number > &offline_data, const HyperbolicModule< Description, dim, Number > &hyperbolic_module, const ParabolicModule< Description, dim, Number > &parabolic_module, const std::string &subsection="/TimeIntegrator")
Number step_erk_54(StateVector &state_vector, Number t)
Number step_strang_erk_33_cn(StateVector &state_vector, Number t)
typename Description::HyperbolicSystem HyperbolicSystem
typename View::StateVector StateVector
Number step(StateVector &state_vector, Number t)
Number step_strang_erk_43_cn(StateVector &state_vector, Number t)
Number step_strang_ssprk_33_cn(StateVector &state_vector, Number t)
typename Description::ParabolicSystem ParabolicSystem
auto & efficiency() const
auto & time_stepping_scheme() const
Number step_ssprk_22(StateVector &state_vector, Number t)
typename Description::template HyperbolicSystemView< dim, Number > View
Number step_erk_22(StateVector &state_vector, Number t)
Number step_erk_43(StateVector &state_vector, Number t)
Number step_erk_33(StateVector &state_vector, Number t)
Number step_erk_11(StateVector &state_vector, Number t)
#define ACCESSOR_READ_ONLY(member)
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, BlockVector< Number > > StateVector
Definition: state_vector.h:51
Euler::ParabolicSystem ParabolicSystem
Definition: description.h:37
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:32