16 #ifndef parsed_tools_grid_refinement_h
17 #define parsed_tools_grid_refinement_h
30 #ifdef DEAL_II_WITH_MPI
31 # ifdef DEAL_II_WITH_P4EST
84 const std::map<std::string, std::function<
void(dealii::Vector<float> &)>>
86 const dealii::ComponentMask &
component_mask = dealii::ComponentMask());
97 template <
int dim,
int spacedim>
100 dealii::Triangulation<dim, spacedim> &tria)
const;
102 #ifdef DEAL_II_WITH_MPI
103 # ifdef DEAL_II_WITH_P4EST
115 template <
int dim,
int spacedim>
118 const dealii::Vector<float> &criteria,
119 dealii::parallel::distributed::Triangulation<dim, spacedim> &tria)
const;
126 template <
int dim,
int spacedim,
typename VectorType>
129 const dealii::Mapping<dim, spacedim> &mapping,
130 const dealii::DoFHandler<dim, spacedim> &dof_handler,
131 const VectorType &solution,
132 dealii::Vector<float> &estimated_error_per_cell,
134 dealii::types::boundary_id,
135 const dealii::Function<spacedim, typename VectorType::value_type> *>
137 const dealii::Function<spacedim> *coefficients =
nullptr,
138 const typename dealii::KellyErrorEstimator<dim, spacedim>::Strategy
140 dealii::KellyErrorEstimator<dim, spacedim>::cell_diameter_over_24)
147 template <
int dim,
int spacedim,
typename VectorType>
150 const dealii::DoFHandler<dim, spacedim> &dof_handler,
151 const VectorType &solution,
152 dealii::Vector<float> &estimated_error_per_cell,
154 dealii::types::boundary_id,
155 const dealii::Function<spacedim, typename VectorType::value_type> *>
157 const dealii::Function<spacedim> *coefficients =
nullptr,
158 const typename dealii::KellyErrorEstimator<dim, spacedim>::Strategy
160 dealii::KellyErrorEstimator<dim, spacedim>::cell_diameter_over_24)
185 dealii::std_cxx20::ranges::iota_view<unsigned int, unsigned int>
188 return dealii::std_cxx20::ranges::iota_view<unsigned int, unsigned int>(
195 template <
int dim,
int spacedim,
typename VectorType,
typename Tria>
198 const dealii::DoFHandler<dim, spacedim> &dof_handler,
199 const VectorType &solution,
205 template <
int dim,
int spacedim,
typename VectorType,
typename Tria>
208 const VectorType &solution,
216 template <
int dim,
int spacedim>
229 std::map<std::string, std::function<void(dealii::Vector<float> &)>>
233 dealii::numbers::invalid_material_id;
235 dealii::numbers::invalid_material_id;
243 # ifdef DEAL_II_WITH_MPI
244 # ifdef DEAL_II_WITH_P4EST
245 template <
int dim,
int spacedim>
248 const dealii::Vector<float> &criteria,
249 dealii::parallel::distributed::Triangulation<dim, spacedim> &tria)
const
253 if constexpr (dim > 1)
255 dealii::parallel::distributed::GridRefinement::
256 refine_and_coarsen_fixed_number(
262 std::numeric_limits<unsigned int>::max());
271 if constexpr (dim > 1)
273 dealii::parallel::distributed::GridRefinement::
274 refine_and_coarsen_fixed_fraction(tria,
285 for (
const auto &cell : tria.active_cell_iterators())
286 cell->set_refine_flag();
296 template <
int dim,
int spacedim>
299 dealii::Triangulation<dim, spacedim> &tria)
const
303 if constexpr (dim == 1 && spacedim == 3)
307 "Not instantiated for dim=1, spacedim=3"));
311 dealii::GridRefinement::refine_and_coarsen_fixed_number(
317 std::numeric_limits<unsigned int>::max());
322 if constexpr (dim == 1 && spacedim == 3)
326 "Not instantiated for dim=1, spacedim=3"));
330 dealii::GridRefinement::refine_and_coarsen_fixed_fraction(
336 std::numeric_limits<unsigned int>::max());
341 for (
const auto &cell : tria.active_cell_iterators())
342 if (cell->is_locally_owned())
343 cell->set_refine_flag();
352 template <
int dim,
int spacedim>
357 for (
const auto &cell : tria.active_cell_iterators())
358 if (cell->is_locally_owned())
361 cell->set_refine_flag();
363 cell->set_coarsen_flag();
365 cell->clear_refine_flag();
367 cell->clear_coarsen_flag();
373 template <
int dim,
int spacedim,
typename VectorType>
376 const dealii::Mapping<dim, spacedim> &mapping,
377 const dealii::DoFHandler<dim, spacedim> &dof_handler,
378 const VectorType &solution,
379 dealii::Vector<float> &estimated_error_per_cell,
381 dealii::types::boundary_id,
382 const dealii::Function<spacedim, typename VectorType::value_type> *>
384 const dealii::Function<spacedim> *coefficients,
385 const typename dealii::KellyErrorEstimator<dim, spacedim>::Strategy
391 dof_handler.get_triangulation().all_reference_cells_are_hyper_cube(),
393 "Local refinement is only supported on quad-only or "
394 "hex-only triangulations."));
397 dealii::QGauss<dim - 1> face_quadrature_formula(
398 dof_handler.get_fe().tensor_degree() + 1);
400 estimated_error_per_cell.reinit(
401 dof_handler.get_triangulation().n_active_cells());
403 dealii::KellyErrorEstimator<dim, spacedim>::estimate(
406 face_quadrature_formula,
409 estimated_error_per_cell,
410 this->component_mask,
412 dealii::numbers::invalid_unsigned_int,
420 estimated_error_per_cell);
429 template <
int dim,
int spacedim,
typename VectorType>
432 const dealii::DoFHandler<dim, spacedim> &dof_handler,
433 const VectorType &solution,
434 dealii::Vector<float> &estimated_error_per_cell,
436 dealii::types::boundary_id,
437 const dealii::Function<spacedim, typename VectorType::value_type> *>
439 const dealii::Function<spacedim> *coefficients,
440 const typename dealii::KellyErrorEstimator<dim, spacedim>::Strategy
443 const auto &mapping =
444 dealii::get_default_linear_mapping(dof_handler.get_triangulation());
448 estimated_error_per_cell,
456 template <
int dim,
int spacedim,
typename VectorType,
typename Tria>
459 const dealii::DoFHandler<dim, spacedim> &dof_handler,
460 const VectorType &solution,
463 const auto &mapping =
464 dealii::get_default_linear_mapping(dof_handler.get_triangulation());
470 template <
int dim,
int spacedim,
typename VectorType,
typename Tria>
473 const dealii::Mapping<dim, spacedim> &mapping,
474 const dealii::DoFHandler<dim, spacedim> &dof_handler,
475 const VectorType &solution,
480 tria.refine_global(1);
483 dealii::Vector<float> estimated_error_per_cell;
487 estimated_error_per_cell);
489 tria.execute_coarsening_and_refinement();
const std::string section_name
#define Assert(cond, exc)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)