ryujin 2.1.1 revision 9dcb748690310d6a540ebb8b066d1a0834fc7604
discretization.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: MIT
3// Copyright (C) 2020 - 2023 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
10#include "convenience_macros.h"
11#include "geometry.h"
12#include "patterns_conversion.h"
13
14#include <deal.II/base/parameter_acceptor.h>
15#include <deal.II/base/quadrature.h>
16#include <deal.II/distributed/shared_tria.h>
17#include <deal.II/distributed/tria.h>
18#include <deal.II/fe/fe.h>
19#include <deal.II/fe/mapping.h>
20
21#include <memory>
22#include <set>
23
24namespace ryujin
25{
48 enum Boundary : dealii::types::boundary_id {
58
65
75 slip = 2,
76
86
98
106 };
107} // namespace ryujin
108
109#ifndef DOXYGEN
110DECLARE_ENUM(ryujin::Boundary,
111 LIST({ryujin::Boundary::do_nothing, "do_nothing"},
112 {ryujin::Boundary::periodic, "periodic"},
113 {ryujin::Boundary::slip, "slip"},
114 {ryujin::Boundary::no_slip, "no_slip"},
115 {ryujin::Boundary::dirichlet, "dirichlet"},
116 {ryujin::Boundary::dynamic, "dynamic"}));
117#endif
118
119namespace ryujin
120{
121 namespace
122 {
123 template <int dim>
124 struct Proxy {
125 using Triangulation = dealii::parallel::distributed::Triangulation<dim>;
126 };
127
128 template <>
129 struct Proxy<1> {
130 using Triangulation = dealii::parallel::shared::Triangulation<1>;
131 };
132
133 } // namespace
134
135#ifndef DOXYGEN
136 /* forward declaration */
137 template <int dim>
138 class Discretization;
139#endif
140
145 template <int dim>
147 std::is_same<typename Discretization<dim>::Triangulation,
148 dealii::parallel::distributed::Triangulation<dim>>::value;
149
150
166 template <int dim>
167 class Discretization : public dealii::ParameterAcceptor
168 {
169 public:
177 using Triangulation = typename Proxy<dim>::Triangulation;
178
179 static_assert(dim == 1 || have_distributed_triangulation<dim>);
180
184 Discretization(const MPI_Comm &mpi_communicator,
185 const std::string &subsection = "/Discretization");
186
191 void prepare();
192
197
198 static constexpr unsigned int order_finite_element = ORDER_FINITE_ELEMENT;
199 static constexpr unsigned int order_mapping = ORDER_MAPPING;
200 static constexpr unsigned int order_quadrature = ORDER_QUADRATURE;
201
203
207
208 protected:
209 const MPI_Comm &mpi_communicator_;
210
211 std::unique_ptr<Triangulation> triangulation_;
212 std::unique_ptr<const dealii::Mapping<dim>> mapping_;
213 std::unique_ptr<const dealii::FiniteElement<dim>> finite_element_;
214 std::unique_ptr<const dealii::Quadrature<dim>> quadrature_;
215 std::unique_ptr<const dealii::Quadrature<1>> quadrature_1d_;
216
217 public:
221 ACCESSOR(refinement)
222
223
227
228
232
237
242
247
252
253 private:
255
259
260 std::string geometry_;
261
262 double mesh_distortion_;
263
264 unsigned int refinement_;
265
266 bool repartitioning_;
267
269
273
274 std::set<std::unique_ptr<Geometry<dim>>> geometry_list_;
275
277 };
278} /* namespace ryujin */
auto & finite_element() const
typename Proxy< dim >::Triangulation Triangulation
std::unique_ptr< Triangulation > triangulation_
auto & triangulation() const
std::unique_ptr< const dealii::Quadrature< 1 > > quadrature_1d_
std::unique_ptr< const dealii::Mapping< dim > > mapping_
static constexpr unsigned int order_mapping
static constexpr unsigned int order_quadrature
auto & mapping() const
auto & quadrature() const
Discretization(const MPI_Comm &mpi_communicator, const std::string &subsection="/Discretization")
const MPI_Comm & mpi_communicator_
auto & quadrature_1d() const
static constexpr unsigned int order_finite_element
std::unique_ptr< const dealii::FiniteElement< dim > > finite_element_
std::unique_ptr< const dealii::Quadrature< dim > > quadrature_
#define ACCESSOR(member)
#define ACCESSOR_READ_ONLY(member)
constexpr bool have_distributed_triangulation