31 template <
int dim,
int spacedim,
class... Arguments>
33 parse_and_create(
void (*generator)(Triangulation<dim, spacedim> &,
35 const std::string &arguments,
36 Triangulation<dim, spacedim> &tria)
38 std::function<void(Arguments...)> wrapper =
39 [&tria, &generator](Arguments... args) { generator(tria, args...); };
41 bound_function.parse_arguments(arguments);
51 template <
int dim,
int spacedim>
52 std::enable_if_t<dim != spacedim, bool>
53 generate_codimension_zero_grid(
const std::string &,
55 Triangulation<dim, spacedim> &)
67 generate_codimension_zero_grid(
const std::string &name,
68 const std::string &arguments,
69 Triangulation<dim> &tria)
71 if (name ==
"simplex")
72 parse_and_create<dim, dim, const std::vector<Point<dim>> &>(
simplex,
75 else if (name ==
"subdivided_hyper_rectangle")
85 const std::vector<unsigned int> &,
96 const std::vector<std::vector<double>> &,
104 else if (name ==
"plate_with_a_hole")
105 parse_and_create<dim,
119 else if (name ==
"channel_with_cylinder")
120 parse_and_create<dim, dim, double, unsigned int, double, bool>(
122 else if (name ==
"uniform_channel_with_cylinder")
123 parse_and_create<dim,
125 const std::vector<unsigned int> &,
133 else if (name ==
"enclosed_hyper_cube")
134 parse_and_create<dim, dim, double, double, double, bool>(
137 else if (name ==
"hyper_ball")
138 parse_and_create<dim, dim, const Point<dim> &, double,
bool>(
hyper_ball,
141 else if (name ==
"hyper_ball_balanced")
142 parse_and_create<dim, dim, const Point<dim> &,
double>(
145 else if (name ==
"quarter_hyper_ball")
146 parse_and_create<dim, dim, const Point<dim> &,
double>(
149 else if (name ==
"half_hyper_ball")
150 parse_and_create<dim, dim, const Point<dim> &,
double>(
half_hyper_ball,
154 else if (name ==
"cylinder")
155 parse_and_create<dim, dim, double, double>(
cylinder, arguments, tria);
157 else if (name ==
"subdivided_cylinder")
158 parse_and_create<dim, dim, unsigned int, double, double>(
161 else if (name ==
"truncated_cone")
162 parse_and_create<dim, dim, double, double, double>(
truncated_cone,
166 else if (name ==
"pipe_junction")
167 parse_and_create<dim,
169 const std::vector<std::pair<Point<dim>,
double>> &,
170 const std::pair<Point<dim>,
double> &,
173 else if (name ==
"hyper_L")
174 parse_and_create<dim, dim, double, double, bool>(
hyper_L,
178 else if (name ==
"hyper_cube_slit")
183 else if (name ==
"hyper_shell")
184 parse_and_create<dim,
192 else if (name ==
"half_hyper_shell")
193 parse_and_create<dim,
201 else if (name ==
"quarter_hyper_shell")
202 parse_and_create<dim,
210 else if (name ==
"eccentric_hyper_shell")
211 parse_and_create<dim,
219 else if (name ==
"cylinder_shell")
220 parse_and_create<dim,
229 else if (name ==
"hyper_cube_with_cylindrical_hole")
230 parse_and_create<dim, dim, double, double, double, unsigned int, bool>(
233 else if (name ==
"concentric_hyper_shells")
234 parse_and_create<dim,
244 else if (name ==
"subdivided_hyper_cube_with_simplices")
245 parse_and_create<dim, dim, unsigned int, double, double, bool>(
248 else if (name ==
"subdivided_hyper_rectangle_with_simplices")
249 parse_and_create<dim,
251 const std::vector<unsigned int> &,
258 else if (name ==
"subdivided_hyper_L")
259 parse_and_create<dim,
261 const std::vector<unsigned int> &,
280 template <
int dim,
int spacedim>
281 std::enable_if_t<dim != spacedim - 1,
bool>
282 generate_codimension_one_grid(
const std::string &,
284 Triangulation<dim, spacedim> &)
296 generate_codimension_one_grid(
const std::string &name,
297 const std::string &arguments,
298 Triangulation<dim, dim + 1> &tria)
300 if (name ==
"hyper_sphere")
301 parse_and_create<dim, dim + 1, const Point<dim + 1> &,
double>(
313 template <
int dim,
int spacedim>
315 generate_special(
const std::string &,
317 Triangulation<dim, spacedim> &)
328 generate_special(
const std::string &name,
329 const std::string &arguments,
330 Triangulation<3, 3> &tria)
332 if (name ==
"moebius")
333 parse_and_create<3, 3, unsigned int, unsigned int, double, double>(
335 else if (name ==
"torus")
336 parse_and_create<3, 3, double, double, unsigned int, double>(
torus,
352 generate_special(
const std::string &name,
353 const std::string &arguments,
354 Triangulation<2, 3> &tria)
357 parse_and_create<2, 3, double, double, unsigned int, double>(
torus,
370 template <
int dim,
int spacedim>
373 const std::string &name,
374 const std::string &arguments)
378 if (name ==
"hyper_cube")
379 parse_and_create<dim, spacedim, double, double, bool>(
hyper_cube,
382 else if (name ==
"subdivided_hyper_cube")
383 parse_and_create<dim, spacedim, unsigned int, double, double, bool>(
385 else if (name ==
"hyper_rectangle")
386 parse_and_create<dim,
391 else if (name ==
"cheese")
392 parse_and_create<dim, spacedim, const std::vector<unsigned int> &>(
394 else if (name ==
"general_cell")
395 parse_and_create<dim,
397 const std::vector<Point<spacedim>> &,
399 else if (name ==
"hyper_cross")
400 parse_and_create<dim, spacedim, const std::vector<unsigned int> &,
bool>(
409 else if (generate_codimension_zero_grid(name, arguments, tria))
412 else if (generate_codimension_one_grid(name, arguments, tria))
415 else if (generate_special(name, arguments, tria))
422 ExcMessage(name +
"(" + arguments +
") not implemented"));
426#include "grid/grid_generator_from_name.inst"
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNoMatch(std::string arg1, std::string arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
void subdivided_hyper_cube_with_simplices(Triangulation< dim, spacedim > &tria, const unsigned int repetitions, const double p1=0.0, const double p2=1.0, const bool colorize=false)
void hyper_cross(Triangulation< dim, spacedim > &tria, const std::vector< unsigned int > &sizes, const bool colorize_cells=false)
A center cell with stacks of cell protruding from each surface.
void hyper_cube_with_cylindrical_hole(Triangulation< dim, spacedim > &triangulation, const double inner_radius=.25, const double outer_radius=.5, const double L=.5, const unsigned int repetitions=1, const bool colorize=false)
void hyper_ball_balanced(Triangulation< dim > &tria, const Point< dim > ¢er=Point< dim >(), const double radius=1.)
void plate_with_a_hole(Triangulation< dim > &tria, const double inner_radius=0.4, const double outer_radius=1., const double pad_bottom=2., const double pad_top=2., const double pad_left=1., const double pad_right=1., const Point< dim > ¢er=Point< dim >(), const types::manifold_id polar_manifold_id=0, const types::manifold_id tfi_manifold_id=1, const double L=1., const unsigned int n_slices=2, const bool colorize=false)
Rectangular plate with an (offset) cylindrical hole.
void generate_from_name_and_arguments(Triangulation< dim, spacedim > &tria, const std::string &grid_generator_function_name, const std::string &grid_generator_function_arguments)
void enclosed_hyper_cube(Triangulation< dim > &tria, const double left=0., const double right=1., const double thickness=1., const bool colorize=false)
void general_cell(Triangulation< dim, spacedim > &tria, const std::vector< Point< spacedim > > &vertices, const bool colorize=false)
void subdivided_hyper_cube(Triangulation< dim, spacedim > &tria, const unsigned int repetitions, const double left=0., const double right=1., const bool colorize=false)
void hyper_shell(Triangulation< dim, spacedim > &tria, const Point< spacedim > ¢er, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, bool colorize=false)
void hyper_L(Triangulation< dim > &tria, const double left=-1., const double right=1., const bool colorize=false)
void hyper_cube_slit(Triangulation< dim > &tria, const double left=0., const double right=1., const bool colorize=false)
void eccentric_hyper_shell(Triangulation< dim > &triangulation, const Point< dim > &inner_center, const Point< dim > &outer_center, const double inner_radius, const double outer_radius, const unsigned int n_cells)
void hyper_rectangle(Triangulation< dim, spacedim > &tria, const Point< dim > &p1, const Point< dim > &p2, const bool colorize=false)
void uniform_channel_with_cylinder(Triangulation< dim > &tria, const std::vector< unsigned int > &lengths_and_heights, const double depth=1, const unsigned int depth_division=1, const double shell_region_radius=0.75, const unsigned int n_shells=2, const double skewness=2.0, const bool use_transfinite_region=false, const bool colorize=false)
void cylinder(Triangulation< dim > &tria, const double radius=1., const double half_length=1.)
void moebius(Triangulation< 3, 3 > &tria, const unsigned int n_cells, const unsigned int n_rotations, const double R, const double r)
void pipe_junction(Triangulation< dim, spacedim > &tria, const std::vector< std::pair< Point< spacedim >, double > > &openings, const std::pair< Point< spacedim >, double > &bifurcation, const double aspect_ratio=0.5)
void half_hyper_shell(Triangulation< dim > &tria, const Point< dim > ¢er, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, const bool colorize=false)
void quarter_hyper_ball(Triangulation< dim > &tria, const Point< dim > ¢er=Point< dim >(), const double radius=1.)
void cheese(Triangulation< dim, spacedim > &tria, const std::vector< unsigned int > &holes)
Rectangular domain with rectangular pattern of holes.
void hyper_ball(Triangulation< dim, spacedim > &tria, const Point< spacedim > ¢er={}, const double radius=1., const bool attach_spherical_manifold_on_boundary_cells=false)
void subdivided_hyper_rectangle_with_simplices(Triangulation< dim, spacedim > &tria, const std::vector< unsigned int > &repetitions, const Point< dim > &p1, const Point< dim > &p2, const bool colorize=false)
void subdivided_cylinder(Triangulation< dim > &tria, const unsigned int x_subdivisions, const double radius=1., const double half_length=1.)
void channel_with_cylinder(Triangulation< dim > &tria, const double shell_region_width=0.03, const unsigned int n_shells=2, const double skewness=2.0, const bool colorize=false)
void subdivided_hyper_L(Triangulation< dim, spacedim > &tria, const std::vector< unsigned int > &repetitions, const Point< dim > &bottom_left, const Point< dim > &top_right, const std::vector< int > &n_cells_to_remove)
void hyper_sphere(Triangulation< spacedim - 1, spacedim > &tria, const Point< spacedim > ¢er=Point< spacedim >(), const double radius=1.)
void concentric_hyper_shells(Triangulation< dim > &triangulation, const Point< dim > ¢er, const double inner_radius=0.125, const double outer_radius=0.25, const unsigned int n_shells=1, const double skewness=0.1, const unsigned int n_cells_per_shell=0, const bool colorize=false)
void subdivided_hyper_rectangle(Triangulation< dim, spacedim > &tria, const std::vector< unsigned int > &repetitions, const Point< dim > &p1, const Point< dim > &p2, const bool colorize=false)
void quarter_hyper_shell(Triangulation< dim > &tria, const Point< dim > ¢er, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, const bool colorize=false)
void hyper_cube(Triangulation< dim, spacedim > &tria, const double left=0., const double right=1., const bool colorize=false)
void torus(Triangulation< dim, spacedim > &tria, const double centerline_radius, const double inner_radius, const unsigned int n_cells_toroidal=6, const double phi=2.0 *numbers::PI)
void simplex(Triangulation< dim, dim > &tria, const std::vector< Point< dim > > &vertices)
void truncated_cone(Triangulation< dim > &tria, const double radius_0=1.0, const double radius_1=0.5, const double half_length=1.0)
void half_hyper_ball(Triangulation< dim > &tria, const Point< dim > ¢er=Point< dim >(), const double radius=1.)
void cylinder_shell(Triangulation< dim > &tria, const double length, const double inner_radius, const double outer_radius, const unsigned int n_radial_cells=0, const unsigned int n_axial_cells=0, const bool colorize=false)
MutableBind< ReturnType, FunctionArgs... > mutable_bind(ReturnType(*function)(FunctionArgs...), std_cxx20::type_identity_t< FunctionArgs > &&...arguments)