6#include <deal.II/distributed/tria.h>
7#include <deal.II/grid/grid_generator.h>
8#include <deal.II/grid/grid_tools.h>
9#include <deal.II/grid/tria.h>
18#include <prismspf/config.h>
32template <
unsigned int dim>
34 std::conditional_t<
dim == 1,
35 dealii::Triangulation<dim>,
36 dealii::parallel::distributed::Triangulation<dim>>;
41template <
unsigned int dim>
66 dealii::GridGenerator::subdivided_hyper_rectangle(triangulation,
69 dealii::Point<dim>(
size));
84 dealii::Tensor<1, dim, double>
size;
108 for (
const auto &
cell : triangulation.active_cell_iterators())
139 dealii::GridTools::PeriodicFacePair<typename Triangulation<dim>::cell_iterator>>
144 triangulation.add_periodicity(periodicity_vector);
150 template <
typename MeshType>
154 std::vector<dealii::GridTools::PeriodicFacePair<typename MeshType::cell_iterator>>
155 &periodicity_vector)
const
160 unsigned int boundary_id =
direction * 2;
161 dealii::GridTools::collect_periodic_faces(triangulation,
173template <
unsigned int dim>
197 AssertThrow(
dim != 1, dealii::ExcMessage(
"Spherical mesh not valid in 1D"));
198 dealii::GridGenerator::hyper_ball(triangulation, dealii::Point<dim>(),
radius);
228template <
unsigned int dim>
246 "Adaptive meshing for the matrix-free method is not currently supported."));
254 "The maximum refinement level must be greater than or equal to the "
255 "global refinement level."));
258 "The minimum refinement level must be less than or equal to the "
259 "global refinement level."));
262 "The maximum refinement level must be greater than or equal to the "
263 "minimum refinement level."));
321template <
unsigned int dim>
326 <<
"================================================\n"
327 <<
" Spatial Discretization\n"
328 <<
"================================================\n";
341 <<
"Global refinement: " << global_refinement <<
"\n"
342 <<
"Degree: " << degree <<
"\n"
343 <<
"Adaptivity enabled: " <<
bool_to_string(has_adaptivity) <<
"\n"
344 <<
"Max refinement: " << max_refinement <<
"\n"
345 <<
"Min refinement: " << min_refinement <<
"\n"
346 <<
"Remeshing period: " << remeshing_period <<
"\n";
348 if (!refinement_criteria.empty())
351 for (
const auto &[field_name, criterion] : refinement_criteria)
354 <<
" Field name: " << field_name <<
"\n"
355 <<
" Criterion type: " << criterion.criterion_string() <<
"\n"
356 <<
" Value lower bound: " << criterion.value_lower_bound <<
"\n"
357 <<
" Value upper bound: " << criterion.value_upper_bound <<
"\n"
358 <<
" Gradient lower bound: " << criterion.gradient_lower_bound <<
"\n\n";
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:34
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
static const double mesh_tolerance
Default mesh tolerance.
Definition types.h:62
Definition conditional_ostreams.cc:20
TriangulationType
Internal enum for various triangulation types.
Definition spatial_discretization.h:26
@ Custom
Definition spatial_discretization.h:29
@ Rectangular
Definition spatial_discretization.h:27
@ Spherical
Definition spatial_discretization.h:28
std::conditional_t< dim==1, dealii::Triangulation< dim >, dealii::parallel::distributed::Triangulation< dim > > Triangulation
Definition spatial_discretization.h:36
Class for rectangular mesh parameters.
Definition spatial_discretization.h:43
void mark_periodic(Triangulation< dim > &triangulation) const
Mark the periodic faces of the mesh.
Definition spatial_discretization.h:134
RectangularMesh(dealii::Tensor< 1, dim, double > _size, dealii::Tensor< 1, dim, double > _lower_bound, std::array< unsigned int, dim > _subdivisions)
Constructor.
Definition spatial_discretization.h:52
void mark_boundaries(Triangulation< dim > &triangulation) const
Mark the boundaries of the mesh.
Definition spatial_discretization.h:105
dealii::Tensor< 1, dim, double > lower_bound
Domain extents in each cartesian direction.
Definition spatial_discretization.h:89
dealii::Tensor< 1, dim, double > size
Domain extents in each cartesian direction.
Definition spatial_discretization.h:84
void generate_mesh(Triangulation< dim > &triangulation) const
Generate the mesh.
Definition spatial_discretization.h:63
std::set< unsigned int > periodic_directions
Which directions have periodic conditions.
Definition spatial_discretization.h:99
std::vector< unsigned int > subdivisions
Mesh subdivisions in each cartesian direction.
Definition spatial_discretization.h:94
void collect_periodic_faces(const MeshType &triangulation, std::vector< dealii::GridTools::PeriodicFacePair< typename MeshType::cell_iterator > > &periodicity_vector) const
Get the periodic face pairs.
Definition spatial_discretization.h:152
RectangularMesh()=default
Constructor.
void validate() const
Validate.
Definition spatial_discretization.h:78
Struct that holds spatial discretization parameters.
Definition spatial_discretization.h:230
unsigned int min_refinement
Definition spatial_discretization.h:312
unsigned int degree
Definition spatial_discretization.h:303
TriangulationType type
Definition spatial_discretization.h:291
RectangularMesh< dim > rectangular_mesh
Definition spatial_discretization.h:294
std::map< std::string, RefinementCriterion > refinement_criteria
Definition spatial_discretization.h:318
void validate()
Validate.
Definition spatial_discretization.h:241
SphericalMesh< dim > spherical_mesh
Definition spatial_discretization.h:297
unsigned int remeshing_period
Definition spatial_discretization.h:315
unsigned int global_refinement
Definition spatial_discretization.h:300
bool should_refine_mesh(unsigned int increment) const
Whether the provided increment is a valid grid refinement step.
Definition spatial_discretization.h:285
unsigned int max_refinement
Definition spatial_discretization.h:309
bool has_adaptivity
Definition spatial_discretization.h:306
void print_parameter_summary() const
Print parameters to summary.log.
Definition spatial_discretization.h:323
Class for spherical mesh parameters.
Definition spatial_discretization.h:175
SphericalMesh()=default
Constructor.
double radius
Radius of the spherical domain.
Definition spatial_discretization.h:212
void generate_mesh(Triangulation< dim > &triangulation) const
Generate the mesh.
Definition spatial_discretization.h:192
void mark_boundaries(Triangulation< dim > &triangulation) const
Mark the boundaries of the mesh.
Definition spatial_discretization.h:219
void validate() const
Validate.
Definition spatial_discretization.h:206
SphericalMesh(double _radius)
Constructor.
Definition spatial_discretization.h:184
const char * bool_to_string(bool boolean)
Convert bool to string.
Definition utilities.h:232