6#include <deal.II/base/parameter_handler.h>
7#include <deal.II/base/patterns.h>
8#include <deal.II/base/vectorization.h>
9#include <deal.II/distributed/tria.h>
10#include <deal.II/dofs/dof_handler.h>
11#include <deal.II/dofs/dof_tools.h>
12#include <deal.II/grid/grid_generator.h>
13#include <deal.II/grid/grid_tools.h>
14#include <deal.II/grid/tria.h>
15#include <deal.II/lac/affine_constraints.h>
16#include <deal.II/lac/full_matrix.h>
27#include <prismspf/config.h>
47template <
unsigned int dim>
60template <
unsigned int dim>
64 std::conditional_t<dim == 1,
65 dealii::Triangulation<dim>,
66 dealii::parallel::distributed::Triangulation<dim>>;
90 distance(
const dealii::Point<dim> &point_1,
const dealii::Point<dim> &point_2)
const;
94 template <
typename real1,
typename real2>
96 distance(
const dealii::Point<dim, real1> &point_1,
97 const dealii::Point<dim, real2> &point_2)
const;
101 template <
typename real1>
102 dealii::VectorizedArray<real1>
103 distance(
const dealii::Point<dim, dealii::VectorizedArray<real1>> &point_1,
104 const dealii::Point<dim, dealii::VectorizedArray<real1>> &point_2)
const;
120 virtual std::list<PeriodicPair<dim>>
132 template <
typename number>
135 dealii::AffineConstraints<number> &constraints)
const;
141template <
unsigned int dim>
168 dealii::Tensor<1, dim, double> _lower_bound,
169 std::vector<unsigned int> _subdivisions);
190 std::list<PeriodicPair<dim>>
197 distance(
const dealii::Point<dim> &point_1,
198 const dealii::Point<dim> &point_2)
const override;
221 dealii::Tensor<1, dim, double>
size;
231 std::vector<unsigned int>
subdivisions = std::vector<unsigned int>(dim, 1);
242template <
unsigned int dim>
304template <
unsigned int dim>
315 declare(dealii::ParameterHandler ¶meter_handler,
322 assign(dealii::ParameterHandler ¶meter_handler,
329 validate(
const std::vector<FieldAttributes> &field_attributes,
330 const std::vector<SolveBlock> &solve_blocks)
const override;
351 std::list<PeriodicPair<dim>>
358 distance(
const dealii::Point<dim> &point_1,
359 const dealii::Point<dim> &point_2)
const override;
413PRISMS_PF_END_NAMESPACE
static constexpr unsigned int default_subsections
Max number of subsections.
Definition types.h:33
Definition conditional_ostreams.cc:20
TriangulationType
Internal enum for various triangulation types.
Definition spatial_discretization.h:35
@ Custom
Definition spatial_discretization.h:38
@ Rectangular
Definition spatial_discretization.h:36
@ Spherical
Definition spatial_discretization.h:37
virtual std::list< PeriodicPair< dim > > periodicity_set() const
Periodicity set.
Definition spatial_discretization.cc:65
void mark_periodic(Triangulation &triangulation) const
Mark the periodic faces of the mesh.
virtual void mark_boundaries(Triangulation &triangulation) const
Mark the boundaries of the mesh.
Definition spatial_discretization.h:83
virtual void generate_mesh(Triangulation &triangulation) const =0
Generate the mesh.
virtual double distance(const dealii::Point< dim > &point_1, const dealii::Point< dim > &point_2) const
Calculation the distance between two points considering periodic boundaries.
Definition spatial_discretization.cc:17
virtual void validate() const
Validate.
Definition spatial_discretization.h:110
Mesh()=default
Constructor.
std::conditional_t< dim==1, dealii::Triangulation< dim >, dealii::parallel::distributed::Triangulation< dim > > Triangulation
Definition spatial_discretization.h:63
Periodicity face pair.
Definition spatial_discretization.h:49
unsigned int direction
Definition spatial_discretization.h:52
dealii::FullMatrix< double > rotation_matrix
Definition spatial_discretization.h:54
unsigned int boundary_id_1
Definition spatial_discretization.h:50
unsigned int boundary_id_2
Definition spatial_discretization.h:51
dealii::Tensor< 1, dim > translation_vector
Definition spatial_discretization.h:53
Class for rectangular mesh parameters.
Definition spatial_discretization.h:143
Boundary
Simple enum for boundary ids to natural language.
Definition spatial_discretization.h:150
@ Back
Definition spatial_discretization.h:156
@ Front
Definition spatial_discretization.h:155
@ Right
Definition spatial_discretization.h:152
@ Bottom
Definition spatial_discretization.h:154
@ Left
Definition spatial_discretization.h:151
@ Top
Definition spatial_discretization.h:153
dealii::Tensor< 1, dim, double > lower_bound
Lower bound point.
Definition spatial_discretization.h:226
void validate() const override
Validate.
Definition spatial_discretization.cc:282
void assign_parameters(dealii::ParameterHandler ¶meter_handler)
Assign the parameters read from an input file to this object.
Definition spatial_discretization.cc:261
typename Mesh< dim >::Triangulation Triangulation
Definition spatial_discretization.h:144
dealii::Tensor< 1, dim, double > size
Upper bound point.
Definition spatial_discretization.h:221
static void declare_parameters(dealii::ParameterHandler ¶meter_handler)
Declare the parameters to be read from an input file.
Definition spatial_discretization.cc:212
double distance(const dealii::Point< dim > &point_1, const dealii::Point< dim > &point_2) const override
Calculation the distance between two points considering periodic boundaries.
Definition spatial_discretization.cc:181
std::list< PeriodicPair< dim > > periodicity_set() const override
Periodicity set.
Definition spatial_discretization.cc:165
std::set< unsigned int > periodic_directions
Which directions have periodic conditions.
Definition spatial_discretization.h:236
std::vector< unsigned int > subdivisions
Mesh subdivisions in each cartesian direction.
Definition spatial_discretization.h:231
RectangularMesh()=default
Constructor.
void generate_mesh(Triangulation &triangulation) const override
Generate the mesh.
Definition spatial_discretization.cc:133
void mark_boundaries(Triangulation &triangulation) const override
Mark the boundaries of the mesh.
Definition spatial_discretization.cc:147
Struct that holds spatial discretization parameters.
Definition spatial_discretization.h:308
static void declare(dealii::ParameterHandler ¶meter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition spatial_discretization.cc:360
unsigned int min_refinement
Definition spatial_discretization.h:404
RectangularMesh< dim > rectangular_mesh
Definition spatial_discretization.h:386
const Mesh< dim > & get_mesh() const
Get the mesh object.
Definition spatial_discretization.cc:529
void generate_mesh(Triangulation &triangulation) const override
Generate the mesh.
Definition spatial_discretization.cc:579
TriangulationType mesh_type
Definition spatial_discretization.h:383
std::map< std::string, RefinementCriterion > refinement_criteria
Definition spatial_discretization.h:410
void assign(dealii::ParameterHandler ¶meter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition spatial_discretization.cc:439
SphericalMesh< dim > spherical_mesh
Definition spatial_discretization.h:389
void mark_boundaries(Triangulation &triangulation) const override
Mark the boundaries of the mesh.
Definition spatial_discretization.cc:586
std::list< PeriodicPair< dim > > periodicity_set() const override
Periodicity set.
Definition spatial_discretization.cc:593
unsigned int remeshing_period
Definition spatial_discretization.h:407
unsigned int global_refinement
Definition spatial_discretization.h:395
bool should_refine_mesh(unsigned int increment) const
Whether the provided increment is a valid grid refinement step.
Definition spatial_discretization.cc:608
unsigned int max_refinement
Definition spatial_discretization.h:401
typename Mesh< dim >::Triangulation Triangulation
Definition spatial_discretization.h:310
bool has_adaptivity
Definition spatial_discretization.h:398
Mesh< dim > * custom_mesh
Definition spatial_discretization.h:392
double distance(const dealii::Point< dim > &point_1, const dealii::Point< dim > &point_2) const override
Calculation the distance between two points considering periodic boundaries.
Definition spatial_discretization.cc:600
Class for spherical mesh parameters.
Definition spatial_discretization.h:244
void assign_parameters(dealii::ParameterHandler ¶meter_handler)
Assign the parameters read from an input file to this object.
Definition spatial_discretization.cc:342
Boundary
Simple enum for boundary ids to natural language.
Definition spatial_discretization.h:251
@ Surface
Definition spatial_discretization.h:252
SphericalMesh()=default
Constructor.
void validate() const override
Validate.
Definition spatial_discretization.cc:353
static void declare_parameters(dealii::ParameterHandler ¶meter_handler)
Declare the parameters to be read from an input file.
Definition spatial_discretization.cc:328
double radius
Radius of the spherical domain.
Definition spatial_discretization.h:298
void generate_mesh(Triangulation &triangulation) const override
Generate the mesh.
Definition spatial_discretization.cc:303
void mark_boundaries(Triangulation &triangulation) const override
Mark the boundaries of the mesh.
Definition spatial_discretization.cc:320
typename Mesh< dim >::Triangulation Triangulation
Definition spatial_discretization.h:245