6#include <deal.II/base/mg_level_object.h>
7#include <deal.II/dofs/dof_handler.h>
8#include <deal.II/fe/mapping.h>
9#include <deal.II/lac/affine_constraints.h>
10#include <deal.II/multigrid/mg_constrained_dofs.h>
21#include <prismspf/config.h>
26template <
unsigned int dim,
unsigned int degree,
typename number>
49template <
unsigned int dim,
unsigned int degree,
typename number>
70 [[nodiscard]] std::vector<const dealii::AffineConstraints<number> *>
76 [[nodiscard]]
const dealii::AffineConstraints<number> &
82 [[nodiscard]]
const std::array<dealii::AffineConstraints<number>, 2> &
88 [[nodiscard]]
const dealii::AffineConstraints<number> &
96 [[nodiscard]]
const std::vector<std::vector<dealii::AffineConstraints<number>>> &
102 [[nodiscard]] std::vector<const dealii::AffineConstraints<number> *>
108 [[nodiscard]]
const dealii::AffineConstraints<number> &
114 [[nodiscard]]
const std::vector<std::array<dealii::AffineConstraints<number>, 2>> &
120 [[nodiscard]]
const std::array<dealii::AffineConstraints<number>, 2> &
126 [[nodiscard]]
const dealii::AffineConstraints<number> &
133 reinit(
const std::vector<FieldAttributes> &field_attributes);
154 const dealii::DoFHandler<dim> &dof_handler,
158 unsigned int relative_level = -1);
165 const dealii::DoFHandler<dim> &dof_handler,
175 unsigned int boundary_id,
176 unsigned int component,
178 const dealii::DoFHandler<dim> &dof_handler,
193 const dealii::DoFHandler<dim> &dof_handler,
194 const unsigned int &boundary_id,
195 const unsigned int &field_index,
196 const bool &is_vector_field,
197 const dealii::ComponentMask &mask)
const;
205 const dealii::DoFHandler<dim> &dof_handler,
206 const unsigned int &boundary_id,
207 const dealii::ComponentMask &mask)
const;
251template <
unsigned int dim,
unsigned int degree,
typename number>
252inline const std::array<dealii::ComponentMask, dim>
255 std::array<dealii::ComponentMask, dim> masks {};
256 for (
unsigned int i = 0; i < dim; ++i)
258 dealii::ComponentMask temp_mask(dim,
false);
259 temp_mask.set(i,
true);
260 masks.at(i) = temp_mask;
265template <
unsigned int dim,
unsigned int degree,
typename number>
266inline const dealii::ComponentMask
269PRISMS_PF_END_NAMESPACE
void update_time_dependent_constraints(const std::vector< FieldAttributes > &field_attributes)
Update time-dependent constraints. For now this only updates the Dirichlet constraints.
Definition constraint_manager.cc:425
const dealii::AffineConstraints< number > & get_mg_generic_constraint(unsigned int rank, unsigned int relative_level) const
Getter function for the constraint of an index (constant reference).
Definition constraint_manager.cc:133
const PDEOperatorBase< dim, degree, number > * pde_operator
PDE operator.
Definition constraint_manager.h:227
std::vector< const dealii::AffineConstraints< number > * > get_field_constraints() const
Getter function for the constraints.
Definition constraint_manager.cc:52
std::array< dealii::AffineConstraints< number >, 2 > generic_constraints
Constraints not specific to any field. We need this for invm.
Definition constraint_manager.h:237
const BoundaryParameters< dim > * boundary_parameters
User-inputs constraint parameters.
Definition constraint_manager.h:212
std::vector< dealii::AffineConstraints< number > > field_constraints
Constraints. Outer vector is indexed by field index.
Definition constraint_manager.h:232
void make_periodic_constraints(dealii::AffineConstraints< number > &_constraints, const dealii::DoFHandler< dim > &dof_handler, const unsigned int &boundary_id, const dealii::ComponentMask &mask) const
make periodic constraints.
Definition constraint_manager.cc:502
void make_dirichlet_constraints(dealii::AffineConstraints< number > &_constraints, const dealii::DoFHandler< dim > &dof_handler, const unsigned int &boundary_id, const unsigned int &field_index, const bool &is_vector_field, const dealii::ComponentMask &mask) const
Make dirichlet constraints.
Definition constraint_manager.cc:480
void make_one_boundary_constraint(dealii::AffineConstraints< number > &_constraints, unsigned int boundary_id, unsigned int component, Condition boundary_type, const dealii::DoFHandler< dim > &dof_handler, TensorRank tensor_rank, Types::Index field_index) const
Apply constraints for common boundary conditions.
Definition constraint_manager.cc:362
const std::array< dealii::AffineConstraints< number >, 2 > & get_generic_constraints() const
Getter function for the constraints.
Definition constraint_manager.cc:72
std::vector< std::array< dealii::AffineConstraints< number >, 2 > > mg_generic_constraints
Constraints not specific to any field. We need this for invm.
Definition constraint_manager.h:248
void make_bc_constraints(dealii::AffineConstraints< number > &constraint, const dealii::DoFHandler< dim > &dof_handler, const FieldConstraints< dim > &boundary_condition, TensorRank tensor_rank, Types::Index field_index)
Add boundary conditions to a single constraint.
Definition constraint_manager.cc:336
const dealii::AffineConstraints< number > & get_field_constraint(Types::Index index) const
Getter function for the constraint of an index.
Definition constraint_manager.cc:65
const dealii::AffineConstraints< number > & get_mg_field_constraint(Types::Index index, unsigned int relative_level) const
Getter function for the constraint of an index (constant reference).
Definition constraint_manager.cc:109
const SpatialDiscretization< dim > * spatial_discretization
User-inputs discretization.
Definition constraint_manager.h:217
void reinit(const std::vector< FieldAttributes > &field_attributes)
Make constraints based on the inputs of the constructor.
Definition constraint_manager.cc:142
const std::array< dealii::AffineConstraints< number >, 2 > & get_mg_generic_constraints(unsigned int relative_level) const
Getter function for the constraints.
Definition constraint_manager.cc:125
std::vector< std::vector< dealii::AffineConstraints< number > > > mg_field_constraints
Constraints. Outer vector is indexed by field index. Inner vector is indexed by relative mg level.
Definition constraint_manager.h:243
void make_natural_constraints() const
Apply natural constraints.
Definition constraint_manager.cc:473
const std::vector< std::array< dealii::AffineConstraints< number >, 2 > > & get_mg_generic_constraints_levels() const
Getter function for the constraints.
Definition constraint_manager.cc:118
static const dealii::ComponentMask scalar_empty_mask
Definition constraint_manager.h:146
const std::vector< std::vector< dealii::AffineConstraints< number > > > & get_mg_field_constraints_levels() const
Getter function for a selection of the constraints.
Definition constraint_manager.cc:88
static const std::array< dealii::ComponentMask, dim > vector_component_mask
Create a component mask.
Definition constraint_manager.h:145
const dealii::AffineConstraints< number > & get_generic_constraint(unsigned int rank) const
Getter function for the constraint of an index.
Definition constraint_manager.cc:79
const DoFManager< dim, degree > * dof_manager
Dof manager pointer.
Definition constraint_manager.h:222
std::vector< const dealii::AffineConstraints< number > * > get_mg_field_constraints(unsigned int relative_level) const
Getter function for the constraints.
Definition constraint_manager.cc:95
void init(const BoundaryParameters< dim > &_boundary_parameters, const SpatialDiscretization< dim > &_spatial_discretization, const DoFManager< dim, degree > &_dof_manager, const PDEOperatorBase< dim, degree, number > &_pde_operator)
Initialize the constraint manager.
Definition constraint_manager.cc:36
void make_constraints_for_single_field(dealii::AffineConstraints< number > &constraint, const dealii::DoFHandler< dim > &dof_handler, const FieldConstraints< dim > &_field_constraints, TensorRank tensor_rank, Types::Index field_index, unsigned int relative_level=-1)
Construct constraints for a single field based on the boundary conditions.
Definition constraint_manager.cc:277
ConstraintManager()=default
Constructor.
Class that manages the deal.II DoFHandlers.
Definition dof_manager.h:25
This class contains the user implementation of each PDE operator.
Definition pde_operator_base.h:27
Condition
Condition of boundary condition.
Definition constraint_parameters.h:33
Definition conditional_ostreams.cc:20
unsigned int Index
Type for field indices.
Definition types.h:19
Struct that holds boundary parameters.
Definition constraint_parameters.h:162
Definition constraint_parameters.h:142
Struct that holds spatial discretization parameters.
Definition spatial_discretization.h:231
TensorRank
Tensor rank of the field.
Definition type_enums.h:52