ryujin 2.1.1 revision 0b194b984a74af675d09b5e928529ca8c7b634f2
mesh_adaptor.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include "offline_data.h"
9
10#include <deal.II/base/parameter_acceptor.h>
11
12#include <random>
13
14namespace ryujin
15{
21 enum class AdaptationStrategy {
26
33 };
34
42 enum class MarkingStrategy {
47 };
48
59 };
60} // namespace ryujin
61
62#ifndef DOXYGEN
65 "global refinement"},
67 "random adaptation"}, ));
68
69DECLARE_ENUM(ryujin::MarkingStrategy,
70 LIST({ryujin::MarkingStrategy::fixed_number, "fixed number"}, ));
71
72DECLARE_ENUM(
75 "fixed adaptation time points"}, ));
76#endif
77
78namespace ryujin
79{
86 template <typename Description, int dim, typename Number = double>
87 class MeshAdaptor final : public dealii::ParameterAcceptor
88 {
89 public:
94
97
98 using View =
99 typename Description::template HyperbolicSystemView<dim, Number>;
100
101 static constexpr auto problem_dimension = View::problem_dimension;
102
104
106
108
112
116 MeshAdaptor(const MPI_Comm &mpi_communicator,
117 const OfflineData<dim, Number> &offline_data,
118 const HyperbolicSystem &hyperbolic_system,
119 const ParabolicSystem &parabolic_system,
120 const std::string &subsection = "/MeshAdaptor");
121
126 void prepare(const Number t);
127
132 void analyze(const StateVector &state_vector,
133 const Number t,
134 unsigned int cycle);
135
143
144
149 dealii::Triangulation<dim> &triangulation) const;
150
151 private:
156
157 AdaptationStrategy adaptation_strategy_;
158 std::uint_fast64_t random_adaptation_mersenne_twister_seed_;
159
160 MarkingStrategy marking_strategy_;
161 double fixed_number_refinement_fraction_;
162 double fixed_number_coarsening_fraction_;
163
164 TimePointSelectionStrategy time_point_selection_strategy_;
165 std::vector<Number> adaptation_time_points_;
166
168
172
173 const MPI_Comm &mpi_communicator_;
174
175 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
176 dealii::SmartPointer<const HyperbolicSystem> hyperbolic_system_;
177 dealii::SmartPointer<const ParabolicSystem> parabolic_system_;
178
179 bool need_mesh_adaptation_;
180
181 mutable std::mt19937_64 mersenne_twister_;
183 };
184
185} // namespace ryujin
typename View::StateVector StateVector
Definition: mesh_adaptor.h:103
Vectors::ScalarVector< Number > ScalarVector
Definition: mesh_adaptor.h:105
static constexpr auto problem_dimension
Definition: mesh_adaptor.h:101
void analyze(const StateVector &state_vector, const Number t, unsigned int cycle)
auto & need_mesh_adaptation() const
Definition: mesh_adaptor.h:142
typename Description::ParabolicSystem ParabolicSystem
Definition: mesh_adaptor.h:96
typename Description::HyperbolicSystem HyperbolicSystem
Definition: mesh_adaptor.h:95
void mark_cells_for_coarsening_and_refinement(dealii::Triangulation< dim > &triangulation) const
typename Description::template HyperbolicSystemView< dim, Number > View
Definition: mesh_adaptor.h:99
void prepare(const Number t)
MeshAdaptor(const MPI_Comm &mpi_communicator, const OfflineData< dim, Number > &offline_data, const HyperbolicSystem &hyperbolic_system, const ParabolicSystem &parabolic_system, const std::string &subsection="/MeshAdaptor")
TimePointSelectionStrategy
Definition: mesh_adaptor.h:54
AdaptationStrategy
Definition: mesh_adaptor.h:21
MarkingStrategy
Definition: mesh_adaptor.h:42
#define ACCESSOR_READ_ONLY(member)
dealii::LinearAlgebra::distributed::Vector< Number > ScalarVector
Definition: state_vector.h:31
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