6#include <deal.II/base/bounding_box.h>
7#include <deal.II/fe/fe_values.h>
22#include <prismspf/config.h>
28template <
unsigned int dim,
unsigned int degree,
typename number>
46 std::map<std::string, Types::Index> field_indices =
49 solve_context->get_user_inputs().spatial_discretization.refinement_criteria)
52 const unsigned field_index = field_indices.at(name);
54 solve_context->get_field_attributes().at(field_index).field_type;
113 if (!
solve_context->get_user_inputs().spatial_discretization.has_adaptivity)
136 for (
auto &
solver : solvers)
155 const std::vector<std::shared_ptr<const CellMarkerBase<dim>>> &
176 dealii::types::global_dof_index
new_dofs = 0;
187 for (
auto &
solver : solvers)
218 solve_context->get_triangulation_manager().clear_user_flags();
223 .active_cell_iterators())
225 if (
cell->is_locally_owned())
232 std::map<std::string, Types::Index> field_indices =
236 .spatial_discretization.refinement_criteria)
239 const unsigned int index = field_indices.at(name);
247 solve_context->get_dof_manager().get_field_dof_handler(index));
257 solve_context->get_solution_indexer().get_solution_vector(index);
272 dealii::Vector<number>(
dim));
316 std::vector<std::vector<dealii::Tensor<1, dim, number>>>
318 std::vector<dealii::Tensor<1, dim, number>>(
357 dealii::ExcMessage(
"Cell refinement level is less than one, which "
358 "will lead to underflow."));
362 cell->set_user_flag();
363 cell->clear_coarsen_flag();
364 cell->set_refine_flag();
368 cell->set_user_flag();
369 cell->clear_coarsen_flag();
372 !
cell->user_flag_set())
374 cell->set_coarsen_flag();
392 .active_cell_iterators())
394 if (
cell->is_locally_owned())
402 return marker_function->flag(*cell,
403 solve_context->get_simulation_timer());
406 cell->set_user_flag();
407 cell->clear_coarsen_flag();
410 cell->set_refine_flag();
432 for (
auto solver : solvers)
439 for (
auto &
solver : solvers)
441 solver->prepare_for_solution_transfer();
448 triangulation_manager.
reinit();
449 dof_manager.
reinit(triangulation_manager);
453 for (
auto &
solver : solvers)
456 solver->execute_solution_transfer();
Base class for cell markers.
Definition cell_marker_base.h:25
static dealii::ConditionalOStream & pout_base()
Generic parallel output stream. Used for essential information in release and debug mode.
Definition conditional_ostreams.cc:43
The class handles the generation and application of boundary conditions based on the user-inputs.
Definition constraint_manager.h:50
void reinit(const std::vector< FieldAttributes > &field_attributes)
Make constraints based on the inputs of the constructor.
Definition constraint_manager.cc:98
Class that manages the deal.II DoFHandlers.
Definition dof_manager.h:27
dealii::types::global_dof_index get_total_dofs() const
Get the total DoFs excluding multigrid DoFs.
Definition dof_manager.h:90
void reinit(const TriangulationManager< dim > &triangulation_handler)
Reinitialize the DoFHandlers.
Definition dof_manager.cc:59
Definition refinement_manager.h:30
unsigned int min_refinement
Minimum global refinement level.
Definition refinement_manager.h:485
RefinementManager(const RefinementManager &grid_refiner)=delete
Copy constructor.
bool mark_cells_for_refinement()
Mark cells based on function. Note: cells are only marked for refinement but not coarsening.
Definition refinement_manager.h:387
unsigned int max_refinement
Maximum global refinement level.
Definition refinement_manager.h:480
std::array< dealii::UpdateFlags, 2 > fe_values_flags
Update flags for the FEValues determined by the grid refinement criterion. For now,...
Definition refinement_manager.h:470
void mark_cells_for_refinement_and_coarsening()
Mark cells for refinement and coarsening.
Definition refinement_manager.h:210
RefinementManager(SolveContext< dim, degree, number > &_solve_context)
Constructor. Init the flags for refinement.
Definition refinement_manager.h:35
RefinementManager(RefinementManager &&grid_refiner) noexcept=delete
Move constructor.
void clear_refinement_markers()
Definition refinement_manager.h:150
RefinementManager & operator=(RefinementManager &&grid_refiner) noexcept=delete
Move assignment.
~RefinementManager()=default
Destructor.
void add_refinement_marker(std::shared_ptr< const CellMarkerBase< dim > > marker)
Definition refinement_manager.h:144
const std::vector< std::shared_ptr< const CellMarkerBase< dim > > > & get_refinement_markers() const
Definition refinement_manager.h:156
void do_initial_refinement(std::vector< std::shared_ptr< SolverBase< dim, degree, number > > > &solvers)
Similar to do_adaptive_refinement but loops coarsening.
Definition refinement_manager.h:168
void do_adaptive_refinement(std::vector< std::shared_ptr< SolverBase< dim, degree, number > > > &solvers)
Do the adaptive refinement.
Definition refinement_manager.h:109
unsigned int num_quad_points
Number of quadrature points.
Definition refinement_manager.h:475
SolveContext< dim, degree, number > * solve_context
Grid refinement context.
Definition refinement_manager.h:463
void refine_grid(std::vector< std::shared_ptr< SolverBase< dim, degree, number > > > &solvers)
Refine the grid once.
Definition refinement_manager.h:423
RefinementManager & operator=(const RefinementManager &grid_refiner)=delete
Copy assignment.
std::list< std::shared_ptr< const CellMarkerBase< dim > > > marker_functions
Marker functions.
Definition refinement_manager.h:490
This class provides context for a solver with ptrs to all the relevant dependencies.
Definition solve_context.h:36
Definition solver_base.h:32
This is the main class that handles the construction and solving of user-specified PDEs.
Definition system_wide.h:24
static void start_section(const char *name)
Start a new timer section.
Definition timer.cc:116
static void end_section(const char *name)
End the timer section.
Definition timer.cc:127
This class handlers the generation and manipulation of triangulations.
Definition triangulation_manager.h:26
void reinit()
Reinitialize the triangulation handler. This is used for AMR with multigrid so the coarsened meshes c...
Definition triangulation_manager.cc:44
void execute_grid_refinement()
Execute grid refinement on the triangulation.
Definition triangulation_manager.h:109
void prepare_for_grid_refinement()
Prepare the triangulation for grid refinement.
Definition triangulation_manager.h:100
std::map< std::string, Types::Index > field_index_map(const std::vector< FieldAttributes > &fields)
Make a map that maps field names to field indices.
Definition field_attributes.h:64
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
@ Gradient
Use gradient of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:36
Definition conditional_ostreams.cc:20
Struct that holds spatial discretization parameters.
Definition spatial_discretization.h:230
TensorRank
Tensor rank of the field.
Definition type_enums.h:30
@ Scalar
Definition type_enums.h:32