]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Support codim-1 in hyper_shell() and hyper_cube_with_cylindrical_hole() 17268/head
authorPeter Munch <peterrmuench@gmail.com>
Tue, 16 Jul 2024 17:31:50 +0000 (19:31 +0200)
committerPeter Munch <peterrmuench@gmail.com>
Tue, 16 Jul 2024 17:31:50 +0000 (19:31 +0200)
doc/news/changes/minor/20240716Munch [new file with mode: 0644]
include/deal.II/grid/grid_generator.h
source/grid/grid_generator.cc
tests/grid/grid_generator_04.cc
tests/grid/grid_generator_04.output

diff --git a/doc/news/changes/minor/20240716Munch b/doc/news/changes/minor/20240716Munch
new file mode 100644 (file)
index 0000000..7d90eca
--- /dev/null
@@ -0,0 +1,5 @@
+New: The functions GridGenerator::hyper_shell() and
+GridGenerator::hyper_cube_with_cylindrical_hole() now support
+dim=2 and spacedim=3.
+<br>
+(Peter Munch, 2024/07/16)
index e083008c66351b26f11a4b1c9123de75a11602e1..29d8fe4928a2854fff4735aa7f9a7398f3d6037b 100644 (file)
@@ -1451,14 +1451,14 @@ namespace GridGenerator
    * `triangulation.generate_hyper_shell(center, inner_radius, outer_radius,
    * n_cells = 0, colorize = false)`.
    */
-  template <int dim>
+  template <int dim, int spacedim>
   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);
+  hyper_shell(Triangulation<dim, spacedim> &tria,
+              const Point<spacedim>        &center,
+              const double                  inner_radius,
+              const double                  outer_radius,
+              const unsigned int            n_cells  = 0,
+              bool                          colorize = false);
 
   /**
    * Produce an eccentric hyper-shell, the region between two spheres centered
@@ -1708,14 +1708,14 @@ namespace GridGenerator
    * `triangulation.generate_hyper_cube_with_cylindrical_hole(inner_radius =
    * 0.25, outer_radius = 0.5, L = 0.5, repetitions = 1, colorize = false)`.
    */
-  template <int dim>
+  template <int dim, int spacedim>
   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);
+  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);
 
   /**
    * Produce a grid consisting of concentric shells. The primary difference
index 3ef230e19a93fe3f5c37e4aba51673c81b6d3e10..76229e99a54ffdd89515797207e82f559727752a 100644 (file)
@@ -1341,9 +1341,10 @@ namespace GridGenerator
      * Assign boundary number zero to the inner shell boundary and 1 to the
      * outer.
      */
+    template <int spacdim>
     void
-    colorize_hyper_shell(Triangulation<2> &tria,
-                         const Point<2> &,
+    colorize_hyper_shell(Triangulation<2, spacdim> &tria,
+                         const Point<spacdim> &,
                          const double,
                          const double)
     {
@@ -1353,9 +1354,7 @@ namespace GridGenerator
 
       // For the mesh based on cube,
       // this is highly irregular
-      for (Triangulation<2>::cell_iterator cell = tria.begin();
-           cell != tria.end();
-           ++cell)
+      for (auto cell = tria.begin(); cell != tria.end(); ++cell)
         {
           Assert(cell->face(2)->at_boundary(), ExcInternalError());
           cell->face(2)->set_all_boundary_ids(1);
@@ -4340,14 +4339,14 @@ namespace GridGenerator
 
 
 
-  template <>
+  template <int spacedim>
   void
-  hyper_shell(Triangulation<2>  &tria,
-              const Point<2>    &center,
-              const double       inner_radius,
-              const double       outer_radius,
-              const unsigned int n_cells,
-              const bool         colorize)
+  hyper_shell_2D(Triangulation<2, spacedim> &tria,
+                 const Point<spacedim>      &center,
+                 const double                inner_radius,
+                 const double                outer_radius,
+                 const unsigned int          n_cells,
+                 const bool                  colorize)
   {
     Assert((inner_radius > 0) && (inner_radius < outer_radius),
            ExcInvalidRadii());
@@ -4375,12 +4374,14 @@ namespace GridGenerator
     // first N ones are on the
     // outer one, and all are
     // numbered counter-clockwise
-    std::vector<Point<2>> vertices(2 * N);
+    std::vector<Point<spacedim>> vertices(2 * N);
     for (unsigned int i = 0; i < N; ++i)
       {
-        vertices[i] =
-          Point<2>(std::cos(2 * pi * i / N), std::sin(2 * pi * i / N)) *
-          outer_radius;
+        Point<spacedim> point;
+        point[0] = std::cos(2 * pi * i / N);
+        point[1] = std::sin(2 * pi * i / N);
+
+        vertices[i]     = point * outer_radius;
         vertices[i + N] = vertices[i] * (inner_radius / outer_radius);
 
         vertices[i] += center;
@@ -4405,7 +4406,35 @@ namespace GridGenerator
       colorize_hyper_shell(tria, center, inner_radius, outer_radius);
 
     tria.set_all_manifold_ids(0);
-    tria.set_manifold(0, SphericalManifold<2>(center));
+    tria.set_manifold(0, SphericalManifold<2, spacedim>(center));
+  }
+
+
+
+  template <>
+  void
+  hyper_shell(Triangulation<2>  &tria,
+              const Point<2>    &center,
+              const double       inner_radius,
+              const double       outer_radius,
+              const unsigned int n_cells,
+              const bool         colorize)
+  {
+    hyper_shell_2D(tria, center, inner_radius, outer_radius, n_cells, colorize);
+  }
+
+
+
+  template <>
+  void
+  hyper_shell(Triangulation<2, 3> &tria,
+              const Point<3>      &center,
+              const double         inner_radius,
+              const double         outer_radius,
+              const unsigned int   n_cells,
+              const bool           colorize)
+  {
+    hyper_shell_2D(tria, center, inner_radius, outer_radius, n_cells, colorize);
   }
 
 
@@ -7350,21 +7379,21 @@ namespace GridGenerator
 
 
 
-  template <>
+  template <int spacedim>
   void
-  hyper_cube_with_cylindrical_hole(Triangulation<2> &triangulation,
-                                   const double      inner_radius,
-                                   const double      outer_radius,
-                                   const double,       // width,
-                                   const unsigned int, // width_repetition,
-                                   const bool colorize)
+  hyper_cube_with_cylindrical_hole_2D(Triangulation<2, spacedim> &triangulation,
+                                      const double                inner_radius,
+                                      const double                outer_radius,
+                                      const double,       // width,
+                                      const unsigned int, // width_repetition,
+                                      const bool colorize)
   {
     const int dim = 2;
 
     Assert(inner_radius < outer_radius,
            ExcMessage("outer_radius has to be bigger than inner_radius."));
 
-    const Point<dim> center;
+    const Point<spacedim> center;
 
     // We create a hyper_shell (i.e., an annulus) in two dimensions, and then we
     // modify it by pulling the vertices on the diagonals out to where the
@@ -7425,7 +7454,45 @@ namespace GridGenerator
                 }
             }
       }
-    triangulation.set_manifold(0, PolarManifold<2>(center));
+    triangulation.set_manifold(0, PolarManifold<2, spacedim>(center));
+  }
+
+
+
+  template <>
+  void
+  hyper_cube_with_cylindrical_hole(Triangulation<2, 2> &triangulation,
+                                   const double         inner_radius,
+                                   const double         outer_radius,
+                                   const double         width,
+                                   const unsigned int   width_repetition,
+                                   const bool           colorize)
+  {
+    hyper_cube_with_cylindrical_hole_2D(triangulation,
+                                        inner_radius,
+                                        outer_radius,
+                                        width,
+                                        width_repetition,
+                                        colorize);
+  }
+
+
+
+  template <>
+  void
+  hyper_cube_with_cylindrical_hole(Triangulation<2, 3> &triangulation,
+                                   const double         inner_radius,
+                                   const double         outer_radius,
+                                   const double         width,
+                                   const unsigned int   width_repetition,
+                                   const bool           colorize)
+  {
+    hyper_cube_with_cylindrical_hole_2D(triangulation,
+                                        inner_radius,
+                                        outer_radius,
+                                        width,
+                                        width_repetition,
+                                        colorize);
   }
 
 
index 07548761be66b093d9cc01cea9a9e8594df95ee3..c8089765de7eb9304e6d842356b2b044f216ac7a 100644 (file)
 
 
 
-template <int dim>
+template <int dim, int spacdim = dim>
 void
 test(std::ostream &out)
 {
   GridOut go;
   go.set_flags(GridOutFlags::Ucd(false, true));
-  Triangulation<dim> tr;
+  Triangulation<dim, spacdim> tr;
 
   std::vector<double> radii;
   radii.push_back(.2);
@@ -106,6 +106,9 @@ main()
   deallog.push("2d");
   test<2>(deallog.get_file_stream());
   deallog.pop();
+  deallog.push("2d-3d");
+  test<2, 3>(deallog.get_file_stream());
+  deallog.pop();
   deallog.push("3d");
   test<3>(deallog.get_file_stream());
   deallog.pop();
index c67ec7930ba46fc08b963ad744ef2187ff30d74f..8afae007f4f6e9f8e62c4503f73e7ce8f3e62d62 100644 (file)
@@ -245,6 +245,246 @@ Outer radius = 0.300000
 Depth        = 0.100000
 Nzs          = 2
 No colorize    ====================
+16 16 0 0 0
+1  0.300000 0.00000 0.00000
+2  0.300000 0.300000 0.00000
+3  1.83697e-17 0.300000 0.00000
+4  -0.300000 0.300000 0.00000
+5  -0.300000 3.67394e-17 0.00000
+6  -0.300000 -0.300000 0.00000
+7  -5.51091e-17 -0.300000 0.00000
+8  0.300000 -0.300000 0.00000
+9  0.200000 0.00000 0.00000
+10  0.141421 0.141421 0.00000
+11  1.22465e-17 0.200000 0.00000
+12  -0.141421 0.141421 0.00000
+13  -0.200000 2.44929e-17 0.00000
+14  -0.141421 -0.141421 0.00000
+15  -3.67394e-17 -0.200000 0.00000
+16  0.141421 -0.141421 0.00000
+1 0 quad    1 2 10 9 
+2 0 quad    2 3 11 10 
+3 0 quad    3 4 12 11 
+4 0 quad    4 5 13 12 
+5 0 quad    5 6 14 13 
+6 0 quad    6 7 15 14 
+7 0 quad    7 8 16 15 
+8 0 quad    8 1 9 16 
+9  1  line    9 10 
+10  1  line    10 11 
+11  1  line    11 12 
+12  1  line    12 13 
+13  1  line    13 14 
+14  1  line    14 15 
+15  1  line    15 16 
+16  1  line    16 9 
+Colorize       ====================
+16 22 0 0 0
+1  0.300000 0.00000 0.00000
+2  0.300000 0.300000 0.00000
+3  1.83697e-17 0.300000 0.00000
+4  -0.300000 0.300000 0.00000
+5  -0.300000 3.67394e-17 0.00000
+6  -0.300000 -0.300000 0.00000
+7  -5.51091e-17 -0.300000 0.00000
+8  0.300000 -0.300000 0.00000
+9  0.200000 0.00000 0.00000
+10  0.141421 0.141421 0.00000
+11  1.22465e-17 0.200000 0.00000
+12  -0.141421 0.141421 0.00000
+13  -0.200000 2.44929e-17 0.00000
+14  -0.141421 -0.141421 0.00000
+15  -3.67394e-17 -0.200000 0.00000
+16  0.141421 -0.141421 0.00000
+1 0 quad    1 2 10 9 
+2 0 quad    2 3 11 10 
+3 0 quad    3 4 12 11 
+4 0 quad    4 5 13 12 
+5 0 quad    5 6 14 13 
+6 0 quad    6 7 15 14 
+7 0 quad    7 8 16 15 
+8 0 quad    8 1 9 16 
+9  1  line    1 2 
+10  3  line    2 3 
+11  3  line    3 4 
+12  2  line    6 7 
+13  2  line    7 8 
+14  1  line    8 1 
+15  4  line    9 10 
+16  4  line    10 11 
+17  4  line    11 12 
+18  4  line    12 13 
+19  4  line    13 14 
+20  4  line    14 15 
+21  4  line    15 16 
+22  4  line    16 9 
+               ====================
+               ====================
+Inner radius = 0.300000
+Outer radius = 0.400000
+Depth        = 0.100000
+Nzs          = 2
+No colorize    ====================
+16 16 0 0 0
+1  0.400000 0.00000 0.00000
+2  0.400000 0.400000 0.00000
+3  2.44929e-17 0.400000 0.00000
+4  -0.400000 0.400000 0.00000
+5  -0.400000 4.89859e-17 0.00000
+6  -0.400000 -0.400000 0.00000
+7  -7.34788e-17 -0.400000 0.00000
+8  0.400000 -0.400000 0.00000
+9  0.300000 0.00000 0.00000
+10  0.212132 0.212132 0.00000
+11  1.83697e-17 0.300000 0.00000
+12  -0.212132 0.212132 0.00000
+13  -0.300000 3.67394e-17 0.00000
+14  -0.212132 -0.212132 0.00000
+15  -5.51091e-17 -0.300000 0.00000
+16  0.212132 -0.212132 0.00000
+1 0 quad    1 2 10 9 
+2 0 quad    2 3 11 10 
+3 0 quad    3 4 12 11 
+4 0 quad    4 5 13 12 
+5 0 quad    5 6 14 13 
+6 0 quad    6 7 15 14 
+7 0 quad    7 8 16 15 
+8 0 quad    8 1 9 16 
+9  1  line    9 10 
+10  1  line    10 11 
+11  1  line    11 12 
+12  1  line    12 13 
+13  1  line    13 14 
+14  1  line    14 15 
+15  1  line    15 16 
+16  1  line    16 9 
+Colorize       ====================
+16 22 0 0 0
+1  0.400000 0.00000 0.00000
+2  0.400000 0.400000 0.00000
+3  2.44929e-17 0.400000 0.00000
+4  -0.400000 0.400000 0.00000
+5  -0.400000 4.89859e-17 0.00000
+6  -0.400000 -0.400000 0.00000
+7  -7.34788e-17 -0.400000 0.00000
+8  0.400000 -0.400000 0.00000
+9  0.300000 0.00000 0.00000
+10  0.212132 0.212132 0.00000
+11  1.83697e-17 0.300000 0.00000
+12  -0.212132 0.212132 0.00000
+13  -0.300000 3.67394e-17 0.00000
+14  -0.212132 -0.212132 0.00000
+15  -5.51091e-17 -0.300000 0.00000
+16  0.212132 -0.212132 0.00000
+1 0 quad    1 2 10 9 
+2 0 quad    2 3 11 10 
+3 0 quad    3 4 12 11 
+4 0 quad    4 5 13 12 
+5 0 quad    5 6 14 13 
+6 0 quad    6 7 15 14 
+7 0 quad    7 8 16 15 
+8 0 quad    8 1 9 16 
+9  1  line    1 2 
+10  3  line    2 3 
+11  3  line    3 4 
+12  2  line    6 7 
+13  2  line    7 8 
+14  1  line    8 1 
+15  4  line    9 10 
+16  4  line    10 11 
+17  4  line    11 12 
+18  4  line    12 13 
+19  4  line    13 14 
+20  4  line    14 15 
+21  4  line    15 16 
+22  4  line    16 9 
+               ====================
+               ====================
+Inner radius = 0.400000
+Outer radius = 0.500000
+Depth        = 0.100000
+Nzs          = 2
+No colorize    ====================
+16 16 0 0 0
+1  0.500000 0.00000 0.00000
+2  0.500000 0.500000 0.00000
+3  3.06162e-17 0.500000 0.00000
+4  -0.500000 0.500000 0.00000
+5  -0.500000 6.12323e-17 0.00000
+6  -0.500000 -0.500000 0.00000
+7  -9.18485e-17 -0.500000 0.00000
+8  0.500000 -0.500000 0.00000
+9  0.400000 0.00000 0.00000
+10  0.282843 0.282843 0.00000
+11  2.44929e-17 0.400000 0.00000
+12  -0.282843 0.282843 0.00000
+13  -0.400000 4.89859e-17 0.00000
+14  -0.282843 -0.282843 0.00000
+15  -7.34788e-17 -0.400000 0.00000
+16  0.282843 -0.282843 0.00000
+1 0 quad    1 2 10 9 
+2 0 quad    2 3 11 10 
+3 0 quad    3 4 12 11 
+4 0 quad    4 5 13 12 
+5 0 quad    5 6 14 13 
+6 0 quad    6 7 15 14 
+7 0 quad    7 8 16 15 
+8 0 quad    8 1 9 16 
+9  1  line    9 10 
+10  1  line    10 11 
+11  1  line    11 12 
+12  1  line    12 13 
+13  1  line    13 14 
+14  1  line    14 15 
+15  1  line    15 16 
+16  1  line    16 9 
+Colorize       ====================
+16 22 0 0 0
+1  0.500000 0.00000 0.00000
+2  0.500000 0.500000 0.00000
+3  3.06162e-17 0.500000 0.00000
+4  -0.500000 0.500000 0.00000
+5  -0.500000 6.12323e-17 0.00000
+6  -0.500000 -0.500000 0.00000
+7  -9.18485e-17 -0.500000 0.00000
+8  0.500000 -0.500000 0.00000
+9  0.400000 0.00000 0.00000
+10  0.282843 0.282843 0.00000
+11  2.44929e-17 0.400000 0.00000
+12  -0.282843 0.282843 0.00000
+13  -0.400000 4.89859e-17 0.00000
+14  -0.282843 -0.282843 0.00000
+15  -7.34788e-17 -0.400000 0.00000
+16  0.282843 -0.282843 0.00000
+1 0 quad    1 2 10 9 
+2 0 quad    2 3 11 10 
+3 0 quad    3 4 12 11 
+4 0 quad    4 5 13 12 
+5 0 quad    5 6 14 13 
+6 0 quad    6 7 15 14 
+7 0 quad    7 8 16 15 
+8 0 quad    8 1 9 16 
+9  1  line    1 2 
+10  3  line    2 3 
+11  3  line    3 4 
+12  2  line    6 7 
+13  2  line    7 8 
+14  1  line    8 1 
+15  4  line    9 10 
+16  4  line    10 11 
+17  4  line    11 12 
+18  4  line    12 13 
+19  4  line    13 14 
+20  4  line    14 15 
+21  4  line    15 16 
+22  4  line    16 9 
+               ====================
+               ====================
+Inner radius = 0.200000
+Outer radius = 0.300000
+Depth        = 0.100000
+Nzs          = 2
+No colorize    ====================
 48 32 0 0 0
 1  0.300000 0.00000 0.00000
 2  0.300000 0.300000 0.00000

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.