10#include <compile_time_options.h>
20#include <deal.II/base/mg_level_object.h>
21#include <deal.II/base/parameter_acceptor.h>
22#include <deal.II/base/timer.h>
23#include <deal.II/lac/la_parallel_block_vector.h>
24#include <deal.II/lac/precondition.h>
25#include <deal.II/lac/sparse_matrix.templates.h>
26#include <deal.II/lac/vector.h>
27#include <deal.II/matrix_free/matrix_free.h>
28#include <deal.II/multigrid/mg_base.h>
29#include <deal.II/multigrid/mg_smoother.h>
30#include <deal.II/multigrid/mg_transfer_matrix_free.h>
34 namespace NavierStokes
36 template <
int,
typename>
111 template <
typename Description,
int dim,
typename Number =
double>
149 const MPI_Comm &mpi_communicator,
150 std::map<std::string, dealii::Timer> &computing_timer,
155 const std::string &subsection =
"ParabolicSolver");
180 const bool reinitialize_gmg)
const;
206 bool use_gmg_velocity_;
209 bool use_gmg_internal_energy_;
213 bool tolerance_linfty_norm_;
215 unsigned int gmg_max_iter_vel_;
216 unsigned int gmg_max_iter_en_;
217 double gmg_smoother_range_vel_;
218 double gmg_smoother_range_en_;
219 double gmg_smoother_max_eig_vel_;
220 double gmg_smoother_max_eig_en_;
221 unsigned int gmg_smoother_degree_;
222 unsigned int gmg_smoother_n_cg_iter_;
223 unsigned int gmg_min_level_;
232 static constexpr unsigned int order_fe = 1;
233 static constexpr unsigned int order_quad = 2;
235 const MPI_Comm &mpi_communicator_;
236 std::map<std::string, dealii::Timer> &computing_timer_;
238 dealii::SmartPointer<const HyperbolicSystem> hyperbolic_system_;
239 dealii::SmartPointer<const ParabolicSystem> parabolic_system_;
240 dealii::SmartPointer<const ryujin::OfflineData<dim, Number>>
242 dealii::SmartPointer<
246 mutable unsigned int n_restarts_;
247 mutable unsigned int n_warnings_;
248 mutable double n_iterations_velocity_;
249 mutable double n_iterations_internal_energy_;
251 mutable dealii::MatrixFree<dim, Number> matrix_free_;
259 mutable dealii::MGLevelObject<dealii::MatrixFree<dim, float>>
261 mutable dealii::MGConstrainedDoFs mg_constrained_dofs_;
262 mutable dealii::MGLevelObject<
263 dealii::LinearAlgebra::distributed::Vector<float>>
266 mutable dealii::MGLevelObject<VelocityMatrix<dim, float, Number>>
267 level_velocity_matrices_;
269 mutable dealii::MGLevelObject<EnergyMatrix<dim, float, Number>>
270 level_energy_matrices_;
272 mutable dealii::mg::SmootherRelaxation<
273 dealii::PreconditionChebyshev<
275 dealii::LinearAlgebra::distributed::BlockVector<float>,
277 dealii::LinearAlgebra::distributed::BlockVector<float>>
278 mg_smoother_velocity_;
280 mutable dealii::mg::SmootherRelaxation<
281 dealii::PreconditionChebyshev<
283 dealii::LinearAlgebra::distributed::Vector<float>>,
284 dealii::LinearAlgebra::distributed::Vector<float>>
void backward_euler_step(const StateVector &old_state_vector, const Number old_t, StateVector &new_state_vector, Number tau, const IDViolationStrategy id_violation_strategy, const bool reinitialize_gmg) const
static constexpr auto problem_dimension
typename Description::ParabolicSystem ParabolicSystem
typename View::ScalarNumber ScalarNumber
typename View::StateVector StateVector
typename Description::template HyperbolicSystemView< dim, Number > View
void print_solver_statistics(std::ostream &output) const
typename Description::HyperbolicSystem HyperbolicSystem
Vectors::ScalarVector< Number > ScalarVector
ParabolicSolver(const MPI_Comm &mpi_communicator, std::map< std::string, dealii::Timer > &computing_timer, const HyperbolicSystem &hyperbolic_system, const ParabolicSystem ¶bolic_system, const OfflineData< dim, Number > &offline_data, const InitialValues< Description, dim, Number > &initial_values, const std::string &subsection="ParabolicSolver")
Vectors::BlockVector< Number > BlockVector
typename View::state_type state_type
#define ACCESSOR_READ_ONLY(member)
dealii::LinearAlgebra::distributed::Vector< Number > ScalarVector
dealii::LinearAlgebra::distributed::BlockVector< Number > BlockVector
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, BlockVector< Number > > StateVector
Euler::HyperbolicSystem HyperbolicSystem
NavierStokes::ParabolicSystem ParabolicSystem