Reference documentation for deal.II version 8.4.2
grid_generator.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 2016 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii__grid_generator_h
17 #define dealii__grid_generator_h
18 
19 
20 #include <deal.II/base/config.h>
21 #include <deal.II/base/std_cxx11/array.h>
22 #include <deal.II/base/exceptions.h>
23 #include <deal.II/base/point.h>
24 #include <deal.II/base/table.h>
25 #include <deal.II/base/function.h>
26 #include <deal.II/grid/tria.h>
27 #include <map>
28 
29 DEAL_II_NAMESPACE_OPEN
30 
31 template <int dim, int spacedim> class Triangulation;
32 template <typename number> class Vector;
33 template <typename number> class SparseMatrix;
34 
35 
48 namespace GridGenerator
49 {
53 
79  template <int dim, int spacedim>
81  const double left = 0.,
82  const double right= 1.,
83  const bool colorize= false);
84 
109  template <int dim>
110  void simplex(Triangulation<dim, dim> &tria,
111  const std::vector<Point<dim> > &vertices);
112 
126  template <int dim, int spacedim>
128  const unsigned int repetitions,
129  const double left = 0.,
130  const double right= 1.);
131 
153  template <int dim, int spacedim>
155  const Point<dim> &p1,
156  const Point<dim> &p2,
157  const bool colorize = false);
158 
207  template <int dim, int spacedim>
208  void
210  const std::vector<unsigned int> &repetitions,
211  const Point<dim> &p1,
212  const Point<dim> &p2,
213  const bool colorize=false);
214 
230  template <int dim>
231  void
233  const std::vector<std::vector<double> > &step_sizes,
234  const Point<dim> &p_1,
235  const Point<dim> &p_2,
236  const bool colorize);
237 
248  template <int dim>
249  void
251  const std::vector< std::vector<double> > &spacing,
252  const Point<dim> &p,
253  const Table<dim,types::material_id> &material_id,
254  const bool colorize=false);
255 
282  template <int dim, int spacedim>
283  void
285  const std::vector<unsigned int> &holes);
286 
297  template <int dim>
298  void
300  const Point<dim> (&corners)[dim],
301  const bool colorize=false);
302 
317  template <int dim>
318  void
320  const Point<dim> (&corners) [dim],
321  const bool colorize = false);
322 
333  template <int dim>
334  void
336  const unsigned int n_subdivisions,
337  const Point<dim> (&corners) [dim],
338  const bool colorize = false);
339 
347  template <int dim>
348  void
350 #ifndef _MSC_VER
351  const unsigned int(&n_subdivisions)[dim],
352 #else
353  const unsigned int *n_subdivisions,
354 #endif
355  const Point<dim> (&corners) [dim],
356  const bool colorize = false);
357 
380  template <int dim, int spacedim>
381  void
383  const Point<spacedim> &origin,
384  const std_cxx11::array<Tensor<1,spacedim>,dim> &edges,
385  const std::vector<unsigned int> &subdivisions = std::vector<unsigned int>(),
386  const bool colorize = false);
387 
402  template <int dim>
404  const double left = 0.,
405  const double right= 1.,
406  const double thickness = 1.,
407  const bool colorize = false);
408 
427  template <int dim>
428  void hyper_ball (Triangulation<dim> &tria,
429  const Point<dim> &center = Point<dim>(),
430  const double radius = 1.);
431 
464  template <int dim, int spacedim>
466  const Point<spacedim> &center = Point<spacedim>(),
467  const double radius = 1.);
468 
482  template <int dim>
484  const Point<dim> &center = Point<dim>(),
485  const double radius = 1.);
486 
507  template <int dim>
508  void cylinder (Triangulation<dim> &tria,
509  const double radius = 1.,
510  const double half_length = 1.);
511 
536  template <int dim>
537  void
539  const double radius_0 = 1.0,
540  const double radius_1 = 0.5,
541  const double half_length = 1.0);
542 
571  template <int dim, int spacedim>
573  const std::vector<unsigned int> &sizes,
574  const bool colorize_cells = false);
575 
591  template <int dim>
592  void hyper_L (Triangulation<dim> &tria,
593  const double left = -1.,
594  const double right= 1.);
595 
610  template <int dim>
612  const double left = 0.,
613  const double right = 1.,
614  const bool colorize = false);
615 
680  template <int dim>
681  void hyper_shell (Triangulation<dim> &tria,
682  const Point<dim> &center,
683  const double inner_radius,
684  const double outer_radius,
685  const unsigned int n_cells = 0,
686  bool colorize = false);
687 
709  template <int dim>
711  const Point<dim> &center,
712  const double inner_radius,
713  const double outer_radius,
714  const unsigned int n_cells = 0,
715  const bool colorize = false);
716 
717 
738  template <int dim>
740  const Point<dim> &center,
741  const double inner_radius,
742  const double outer_radius,
743  const unsigned int n_cells = 0,
744  const bool colorize = false);
745 
758  template <int dim>
760  const double length,
761  const double inner_radius,
762  const double outer_radius,
763  const unsigned int n_radial_cells = 0,
764  const unsigned int n_axial_cells = 0);
765 
766 
767 
780  void torus (Triangulation<2,3> &tria,
781  const double R,
782  const double r);
783 
784 
805  template<int dim>
807  Triangulation<dim> &triangulation,
808  const double inner_radius = .25,
809  const double outer_radius = .5,
810  const double L = .5,
811  const unsigned int repetitions = 1,
812  const bool colorize = false);
813 
827  void moebius (Triangulation<3,3> &tria,
828  const unsigned int n_cells,
829  const unsigned int n_rotations,
830  const double R,
831  const double r);
832 
834 
838 
870  template <int dim, int spacedim>
871  void
872  merge_triangulations (const Triangulation<dim, spacedim> &triangulation_1,
873  const Triangulation<dim, spacedim> &triangulation_2,
875 
905  template <int dim, int spacedim>
906  void
908  const Triangulation<dim, spacedim> &triangulation_2,
910 
943  template <int dim, int spacedim>
944  void
946  const std::set<typename Triangulation<dim, spacedim>::active_cell_iterator> &cells_to_remove,
948 
949 
960  void
962  const unsigned int n_slices,
963  const double height,
964  Triangulation<3,3> &result);
965 
992  template <int dim, int spacedim1, int spacedim2>
994  Triangulation<dim,spacedim2> &out_tria);
995 
997 
1002 
1004 #ifdef _MSC_VER
1005  // Microsoft's VC++ has a bug where it doesn't want to recognize that
1006  // an implementation (definition) of the extract_boundary_mesh function
1007  // matches a declaration. This can apparently only be avoided by
1008  // doing some contortion with the return type using the following
1009  // intermediate type. This is only used when using MS VC++ and uses
1010  // the direct way of doing it otherwise
1011  template <template <int,int> class MeshType, int dim, int spacedim>
1012  struct ExtractBoundaryMesh
1013  {
1014  typedef
1015  std::map<typename MeshType<dim-1,spacedim>::cell_iterator,
1016  typename MeshType<dim,spacedim>::face_iterator>
1017  return_type;
1018  };
1019 #endif
1020 
1091  template <template <int,int> class MeshType, int dim, int spacedim>
1092 #ifndef _MSC_VER
1093  std::map<typename MeshType<dim-1,spacedim>::cell_iterator,
1094  typename MeshType<dim,spacedim>::face_iterator>
1095 #else
1096  typename ExtractBoundaryMesh<MeshType,dim,spacedim>::return_type
1097 #endif
1098  extract_boundary_mesh (const MeshType<dim,spacedim> &volume_mesh,
1099  MeshType<dim-1,spacedim> &surface_mesh,
1100  const std::set<types::boundary_id> &boundary_ids
1101  = std::set<types::boundary_id>());
1102 
1104 
1105 
1109 
1111 
1115  DeclException0 (ExcInvalidRadii);
1119  DeclException1 (ExcInvalidRepetitions,
1120  int,
1121  << "The number of repetitions " << arg1
1122  << " must be >=1.");
1126  DeclException1 (ExcInvalidRepetitionsDimension,
1127  int,
1128  << "The vector of repetitions must have "
1129  << arg1 <<" elements.");
1130 
1132 }
1133 
1134 
1135 
1136 DEAL_II_NAMESPACE_CLOSE
1137 
1138 #endif
DeclException0(ExcInvalidRadii)
void create_union_triangulation(const Triangulation< dim, spacedim > &triangulation_1, const Triangulation< dim, spacedim > &triangulation_2, Triangulation< dim, spacedim > &result)
void hyper_sphere(Triangulation< dim, spacedim > &tria, const Point< spacedim > &center=Point< spacedim >(), const double radius=1.)
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 hyper_rectangle(Triangulation< dim, spacedim > &tria, const Point< dim > &p1, const Point< dim > &p2, const bool colorize=false)
void moebius(Triangulation< 3, 3 > &tria, const unsigned int n_cells, const unsigned int n_rotations, const double R, const double r)
void flatten_triangulation(const Triangulation< dim, spacedim1 > &in_tria, Triangulation< dim, spacedim2 > &out_tria)
void quarter_hyper_shell(Triangulation< dim > &tria, const Point< dim > &center, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, const bool colorize=false)
void extrude_triangulation(const Triangulation< 2, 2 > &input, const unsigned int n_slices, const double height, Triangulation< 3, 3 > &result)
void enclosed_hyper_cube(Triangulation< dim > &tria, const double left=0., const double right=1., const double thickness=1., const bool colorize=false)
void parallelogram(Triangulation< dim > &tria, const Point< dim >(&corners)[dim], const bool colorize=false)
void hyper_shell(Triangulation< dim > &tria, const Point< dim > &center, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, bool colorize=false)
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)
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 merge_triangulations(const Triangulation< dim, spacedim > &triangulation_1, const Triangulation< dim, spacedim > &triangulation_2, Triangulation< dim, spacedim > &result)
void subdivided_parallelepiped(Triangulation< dim > &tria, const unsigned int n_subdivisions, const Point< dim >(&corners) [dim], const bool colorize=false)
void half_hyper_ball(Triangulation< dim > &tria, const Point< dim > &center=Point< dim >(), const double radius=1.)
void simplex(Triangulation< dim, dim > &tria, const std::vector< Point< dim > > &vertices)
Triangulation of a d-simplex with (d+1) vertices and mesh cells.
void cylinder(Triangulation< dim > &tria, const double radius=1., const double half_length=1.)
void subdivided_hyper_cube(Triangulation< dim, spacedim > &tria, const unsigned int repetitions, const double left=0., const double right=1.)
void create_triangulation_with_removed_cells(const Triangulation< dim, spacedim > &input_triangulation, const std::set< typename Triangulation< dim, spacedim >::active_cell_iterator > &cells_to_remove, Triangulation< dim, spacedim > &result)
std::map< typename MeshType< dim-1, spacedim >::cell_iterator, typename MeshType< dim, spacedim >::face_iterator > extract_boundary_mesh(const MeshType< dim, spacedim > &volume_mesh, MeshType< dim-1, spacedim > &surface_mesh, const std::set< types::boundary_id > &boundary_ids=std::set< types::boundary_id >())
void hyper_cube_slit(Triangulation< dim > &tria, const double left=0., const double right=1., 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)
DeclException1(ExcInvalidRepetitions, int,<< "The number of repetitions "<< arg1<< " must be >=1.")
void cheese(Triangulation< dim, spacedim > &tria, const std::vector< unsigned int > &holes)
Rectangular domain with rectangular pattern of holes.
void half_hyper_shell(Triangulation< dim > &tria, const Point< dim > &center, 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)
Definition: table.h:33
void hyper_cube_with_cylindrical_hole(Triangulation< dim > &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(Triangulation< dim > &tria, const Point< dim > &center=Point< dim >(), const double radius=1.)
void parallelepiped(Triangulation< dim > &tria, const Point< dim >(&corners) [dim], const bool colorize=false)
void hyper_L(Triangulation< dim > &tria, const double left=-1., const double right=1.)
void torus(Triangulation< 2, 3 > &tria, const double R, const double r)