22#ifndef INCLUDE_EXADG_GRID_GRID_H_
23#define INCLUDE_EXADG_GRID_GRID_H_
26#include <deal.II/grid/grid_tools.h>
27#include <deal.II/grid/tria.h>
30#include <exadg/grid/mapping_dof_vector.h>
42 typedef typename std::vector<
43 dealii::GridTools::PeriodicFacePair<typename dealii::Triangulation<dim>::cell_iterator>>
82template<
int dim,
typename Number>
90 std::shared_ptr<dealii::Mapping<dim>> mapping_coarse_levels)
91 : mapping_fine_level(mapping),
92 mapping_coarse_levels(mapping_coarse_levels),
93 degree_coarse_mappings(1)
101 unsigned int const degree_coarse_mappings)
102 : mapping_dof_vector_fine_level(mapping_dof_vector),
103 degree_coarse_mappings(degree_coarse_mappings)
115 if(mapping_dof_vector_fine_level.get())
119 mapping_dof_vector_coarse_levels.resize(n_h_levels - 1);
126 AssertThrow(mapping_fine_level.get(),
127 dealii::ExcMessage(
"Fine-level mapping is uninitialized."));
137 dealii::Mapping<dim>
const &
138 get_mapping(
unsigned int const h_level,
unsigned int const n_h_levels)
const
140 if(mapping_dof_vector_fine_level.get())
143 if(h_level == n_h_levels - 1)
145 return *(mapping_dof_vector_fine_level->get_mapping());
149 AssertThrow(h_level < mapping_dof_vector_coarse_levels.size(),
150 dealii::ExcMessage(
"Vector of coarse mappings seems to have incorrect size."));
152 return *(mapping_dof_vector_coarse_levels[h_level]->get_mapping());
159 if(h_level == n_h_levels - 1 or not(mapping_coarse_levels.get()))
161 AssertThrow(mapping_fine_level.get(),
162 dealii::ExcMessage(
"Fine-level mapping is uninitialized."));
164 return *mapping_fine_level;
168 AssertThrow(mapping_coarse_levels.get(),
169 dealii::ExcMessage(
"mapping_coarse_levels is uninitialized."));
171 return *mapping_coarse_levels;
186 std::shared_ptr<dealii::Triangulation<dim>
const>
const & fine_triangulation,
187 std::vector<std::shared_ptr<dealii::Triangulation<dim>
const>>
const & coarse_triangulations)>
189 [&](std::shared_ptr<dealii::Triangulation<dim>
const>
const & fine_triangulation,
190 std::vector<std::shared_ptr<dealii::Triangulation<dim>
const>>
const &
191 coarse_triangulations) {
193 mapping_dof_vector_fine_level.get(),
195 "Coarse mappings can not be initialized because fine level mapping is invalid."));
197 MappingTools::initialize_coarse_mappings<dim, Number>(mapping_dof_vector_coarse_levels,
198 degree_coarse_mappings,
199 mapping_dof_vector_fine_level,
201 coarse_triangulations);
208 std::shared_ptr<dealii::Mapping<dim>> mapping_fine_level;
215 std::shared_ptr<dealii::Mapping<dim>> mapping_coarse_levels;
220 std::shared_ptr<MappingDoFVector<dim, Number>> mapping_dof_vector_fine_level;
226 std::vector<std::shared_ptr<MappingDoFVector<dim, Number>>> mapping_dof_vector_coarse_levels;
232 unsigned int const degree_coarse_mappings;
PeriodicFacePairs periodic_face_pairs
Definition grid.h:54
std::shared_ptr< dealii::Triangulation< dim > > triangulation
Definition grid.h:49
std::vector< PeriodicFacePairs > coarse_periodic_face_pairs
Definition grid.h:72
std::vector< std::shared_ptr< dealii::Triangulation< dim > const > > coarse_triangulations
Definition grid.h:63
Definition mapping_dof_vector.h:54
void initialize_coarse_mappings(Grid< dim > const &grid, unsigned int const n_h_levels)
Definition grid.h:111
MultigridMappings(std::shared_ptr< dealii::Mapping< dim > > mapping, std::shared_ptr< dealii::Mapping< dim > > mapping_coarse_levels)
Definition grid.h:89
MultigridMappings(std::shared_ptr< MappingDoFVector< dim, Number > > mapping_dof_vector, unsigned int const degree_coarse_mappings)
Definition grid.h:100
std::function< void(std::shared_ptr< dealii::Triangulation< dim > const > const &fine_triangulation, std::vector< std::shared_ptr< dealii::Triangulation< dim > const > > const &coarse_triangulations)> lambda_initialize_coarse_mappings
Definition grid.h:188
dealii::Mapping< dim > const & get_mapping(unsigned int const h_level, unsigned int const n_h_levels) const
Definition grid.h:138