ryujin 2.1.1 revision 3bc2805b8013f3db96af2324837f4d07c0f9fb89
parabolic_module.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2023 - 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include "hyperbolic_module.h"
9
10#include <compile_time_options.h>
11
12#include "convenience_macros.h"
13#include "initial_values.h"
14#include "offline_data.h"
15
16#include <deal.II/base/parameter_acceptor.h>
17#include <deal.II/base/timer.h>
18#include <deal.II/lac/sparse_matrix.templates.h>
19#include <deal.II/lac/vector.h>
20
21#include <functional>
22
23namespace ryujin
24{
31 template <typename Description, int dim, typename Number = double>
32 class ParabolicModule final : public dealii::ParameterAcceptor
33 {
34 public:
39
41
42 using View =
43 typename Description::template HyperbolicSystemView<dim, Number>;
44
46
48 typename Description::template ParabolicSolver<dim, Number>;
49
51
53
57
62 const MPI_Comm &mpi_communicator,
63 std::map<std::string, dealii::Timer> &computing_timer,
64 const OfflineData<dim, Number> &offline_data,
65 const HyperbolicSystem &hyperbolic_system,
66 const ParabolicSystem &parabolic_system,
67 const InitialValues<Description, dim, Number> &initial_values,
68 const std::string &subsection = "/ParabolicModule");
69
75 void prepare();
76
78
82
92 template <int stages>
93 void step(const StateVector &old_state_vector,
94 const Number old_t,
95 std::array<std::reference_wrapper<const StateVector>, stages>
96 stage_state_vectors,
97 const std::array<Number, stages> stage_weights,
98 StateVector &new_state_vector,
99 Number tau) const;
100
106 void print_solver_statistics(std::ostream &output) const;
107
109
117
118
123
124 // FIXME: refactor to function
126
127 private:
129
133
134 // FIXME: refactor contents into this class.
135 ParabolicSolver parabolic_solver_;
136 mutable unsigned int cycle_;
137
138 mutable unsigned int n_restarts_;
139 mutable unsigned int n_warnings_;
140
142 };
143
144} /* namespace ryujin */
typename View::StateVector StateVector
ParabolicModule(const MPI_Comm &mpi_communicator, std::map< std::string, dealii::Timer > &computing_timer, const OfflineData< dim, Number > &offline_data, const HyperbolicSystem &hyperbolic_system, const ParabolicSystem &parabolic_system, const InitialValues< Description, dim, Number > &initial_values, const std::string &subsection="/ParabolicModule")
IDViolationStrategy id_violation_strategy_
typename Description::ParabolicSystem ParabolicSystem
typename Description::template ParabolicSolver< dim, Number > ParabolicSolver
typename Description::template HyperbolicSystemView< dim, Number > View
typename Description::HyperbolicSystem HyperbolicSystem
void step(const StateVector &old_state_vector, const Number old_t, std::array< std::reference_wrapper< const StateVector >, stages > stage_state_vectors, const std::array< Number, stages > stage_weights, StateVector &new_state_vector, Number tau) const
void print_solver_statistics(std::ostream &output) const
#define ACCESSOR_READ_ONLY(member)
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, BlockVector< Number > > StateVector
Definition: state_vector.h:45
Euler::ParabolicSystem ParabolicSystem
Definition: description.h:37
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:32