include/meltpooldg/utilities/amr.hpp Source File

Developer Documentation: include/meltpooldg/utilities/amr.hpp Source File
Developer Documentation
amr.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/dofs/dof_handler.h>
4
5#include <deal.II/grid/tria.h>
6
9
10#include <functional>
11#include <vector>
12
13
15{
20 template <int dim>
21 using MarkCellsForRefinementType = std::function<bool(dealii::Triangulation<dim> &)>;
22
29 template <typename number>
30 inline bool
31 now(const AdaptiveMeshingData<number> &amr, const int n_time_step)
32 {
33 return not(n_time_step % amr.every_n_step) or n_time_step == 0;
34 }
35
53 template <int dim, typename VectorType, typename number = typename VectorType::value_type>
54 void
55 refine_grid(const MarkCellsForRefinementType<dim> &mark_cells_for_refinement,
57 const std::function<void()> &setup_dof_system,
59 dealii::Triangulation<dim> &tria,
60 const int n_time_step,
61 const std::function<void()> &post = std::function<void()>(),
62 const std::function<void()> &pre = std::function<void()>());
63
67 template <int dim, typename VectorType, typename number>
68 void
69 refine_grid(const std::function<bool(dealii::Triangulation<dim> &)> &mark_cells_for_refinement,
70 const std::function<void(std::vector<VectorType *> &)> &attach_vectors,
71 const std::function<void()> &setup_dof_system,
73 dealii::DoFHandler<dim> &dof_handler,
74 const int n_time_step,
75 const std::function<void()> &post = std::function<void()>(),
76 const std::function<void()> &pre = std::function<void()>());
77
90 template <int dim, typename number>
91 bool
92 mark_fixed_number(dealii::Triangulation<dim> &tria,
93 const dealii::Vector<number> &indicator,
94 const AdaptiveMeshingData<number> &amr_data,
95 dealii::types::global_cell_index max_n_cells =
96 std::numeric_limits<dealii::types::global_cell_index>::max());
97
109 template <int dim, typename number>
110 bool
111 mark_fixed_fraction(dealii::Triangulation<dim> &tria,
112 const dealii::Vector<number> &indicator,
113 const AdaptiveMeshingData<number> &amr_data);
114
115 namespace internal
116 {
117 // Limit the maximum and minimum refinement levels of cells of the grid and do not
118 // coarsen/refine cells along boundary
119 // TODO use this function within mark_cells_for_refinement
120 template <int dim, typename number>
121 void
122 limit_amr(dealii::Triangulation<dim> &tria, const AdaptiveMeshingData<number> &amr_data);
123
135 template <int dim, typename number>
136 void
137 clear_refine_flags_below_threshold(dealii::Triangulation<dim> &tria,
138 const dealii::Vector<number> &indicator,
139 number threshold);
140
154 template <int dim>
155 bool
156 do_refine_based_on_n_marked_cells(const dealii::Triangulation<dim> &tria,
157 unsigned min_cells = 1);
158 } // namespace internal
159} // namespace MeltPoolDG::AMR
void limit_amr(dealii::Triangulation< dim > &tria, const AdaptiveMeshingData< number > &amr_data)
Definition amr.cpp:281
bool do_refine_based_on_n_marked_cells(const dealii::Triangulation< dim > &tria, unsigned min_cells=1)
Definition amr.cpp:314
void clear_refine_flags_below_threshold(dealii::Triangulation< dim > &tria, const dealii::Vector< number > &indicator, number threshold)
Definition amr.cpp:330
Definition amr.hpp:15
std::function< bool(dealii::Triangulation< dim > &)> MarkCellsForRefinementType
Definition amr.hpp:21
bool now(const AdaptiveMeshingData< number > &amr, const int n_time_step)
Definition amr.hpp:31
bool mark_fixed_number(dealii::Triangulation< dim > &tria, const dealii::Vector< number > &indicator, const AdaptiveMeshingData< number > &amr_data, dealii::types::global_cell_index max_n_cells=std::numeric_limits< dealii::types::global_cell_index >::max())
Definition amr.cpp:144
void refine_grid(const MarkCellsForRefinementType< dim > &mark_cells_for_refinement, const AttachDoFHandlerAndVectorsType< dim, VectorType > &attach_vectors, const std::function< void()> &setup_dof_system, const AdaptiveMeshingData< number > &amr, dealii::Triangulation< dim > &tria, const int n_time_step, const std::function< void()> &post=std::function< void()>(), const std::function< void()> &pre=std::function< void()>())
Definition amr.cpp:18
bool mark_fixed_fraction(dealii::Triangulation< dim > &tria, const dealii::Vector< number > &indicator, const AdaptiveMeshingData< number > &amr_data)
Definition amr.cpp:162
std::function< void(DoFHandlerAndVectorDataType< dim, VectorType > &)> AttachDoFHandlerAndVectorsType
Definition attach_vectors.hpp:21
Definition amr_data.hpp:9
int every_n_step
Definition amr_data.hpp:15