]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fixed GridGenerator::merge_triangulations, Issue 197
authorDaniel Arndt <d.arndt@math.uni-goettingen.de>
Mon, 30 Jun 2014 23:49:21 +0000 (23:49 +0000)
committerDaniel Arndt <d.arndt@math.uni-goettingen.de>
Mon, 30 Jun 2014 23:49:21 +0000 (23:49 +0000)
git-svn-id: https://svn.dealii.org/trunk@33104 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/doc/news/changes.h
deal.II/source/grid/grid_generator.cc
tests/deal.II/merge_triangulations_02.cc [moved from tests/fail/merge_triangulations_02.cc with 100% similarity]
tests/deal.II/merge_triangulations_02.output [new file with mode: 0644]
tests/deal.II/merge_triangulations_03.cc [moved from tests/fail/merge_triangulations_03.cc with 100% similarity]
tests/deal.II/merge_triangulations_03.output [new file with mode: 0644]

index 95df70da1b7e22d28ca64ed4ebade26dd296130c..806f960395239dc5c49de1626f776703afc5e283 100644 (file)
@@ -148,6 +148,12 @@ inconvenience this causes.
 <h3>Specific improvements</h3>
 
 <ol>
+  <li> Fixed: GridGenerator::merge_triangulations produced sometimes invalid
+  orientations of faces. This is now fixed.
+  <br>
+  (Daniel Arndt, 2014/06/30)
+  </li>
+
   <li> Fixed: TrilinosWrappers::PreconditionAMG did not read user-provided
   constant modes (aka null space) when the null space dimension is one but not
   just the trivial one vector. This is now fixed.
index 7595d5612caad3f60b81f3233a0dea9139a7a7d8..5233e55acfc4718a37378c8f0aac8837f3f922ab 100644 (file)
 
 DEAL_II_NAMESPACE_OPEN
 
+// anonymous namespace for internal helper functions
+namespace
+{
+  /**
+   * A set of three functions that
+   * reorder the data from the
+   * "current" to the "classic"
+   * format of vertex numbering of 
+   * cells and faces. These functions 
+   * do the reordering of their 
+   * arguments in-place.
+   */
+  void
+  reorder_compatibility (const std::vector<CellData<1> > &,
+                         const SubCellData &)
+  {
+    // nothing to do here: the format
+    // hasn't changed for 1d
+  }
+
+
+  void
+  reorder_compatibility (std::vector<CellData<2> > &cells,
+                         const SubCellData &)
+  {
+    for (unsigned int cell=0; cell<cells.size(); ++cell)
+      std::swap(cells[cell].vertices[2],cells[cell].vertices[3]);
+  }
+
 
+  void
+  reorder_compatibility (std::vector<CellData<3> > &cells,
+                         SubCellData               &subcelldata)
+  {
+    unsigned int tmp[GeometryInfo<3>::vertices_per_cell];
+    for (unsigned int cell=0; cell<cells.size(); ++cell)
+      {
+        for (unsigned int i=0; i<GeometryInfo<3>::vertices_per_cell; ++i)
+          tmp[i] = cells[cell].vertices[i];
+        for (unsigned int i=0; i<GeometryInfo<3>::vertices_per_cell; ++i)
+          cells[cell].vertices[i] = tmp[GeometryInfo<3>::ucd_to_deal[i]];
+      }
+
+    // now points in boundary quads
+    std::vector<CellData<2> >::iterator boundary_quad
+      = subcelldata.boundary_quads.begin();
+    std::vector<CellData<2> >::iterator end_quad
+      = subcelldata.boundary_quads.end();
+    for (unsigned int quad_no=0; boundary_quad!=end_quad; ++boundary_quad, ++quad_no)
+      std::swap(boundary_quad->vertices[2], boundary_quad->vertices[3]);
+  }
+}
 
 namespace GridGenerator
 {
@@ -3429,8 +3480,12 @@ namespace GridGenerator
     GridTools::delete_duplicated_vertices (vertices, cells,
                                           subcell_data,
                                           considered_vertices);
+    // reorder_cells expects data in the "classic" format, transform
+    // the cell data before and after the call to that function 
+    reorder_compatibility(cells, subcell_data);
+    GridReordering<dim, spacedim>::reorder_cells(cells);
     result.clear ();
-    result.create_triangulation (vertices, cells, subcell_data);
+    result.create_triangulation_compatibility (vertices, cells, subcell_data);
   }
 
 
diff --git a/tests/deal.II/merge_triangulations_02.output b/tests/deal.II/merge_triangulations_02.output
new file mode 100644 (file)
index 0000000..2cd7f2c
--- /dev/null
@@ -0,0 +1,239 @@
+
+DEAL::Mesh info:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 8
+DEAL:: boundary indicators: 0(8 times) 1(8 times) 
+1.0 0.0 0 0
+1.0 1.0 0 0
+0.18 0.18 0 0
+0.25 0.0 0 0
+1.0 0.0 0 0
+
+
+1.0 1.0 0 0
+6.1e-17 1.0 0 0
+1.5e-17 0.25 0 0
+0.18 0.18 0 0
+1.0 1.0 0 0
+
+
+6.1e-17 1.0 0 0
+-1.0 1.0 0 0
+-0.18 0.18 0 0
+1.5e-17 0.25 0 0
+6.1e-17 1.0 0 0
+
+
+-1.0 1.0 0 0
+-1.0 1.2e-16 0 0
+-0.25 3.1e-17 0 0
+-0.18 0.18 0 0
+-1.0 1.0 0 0
+
+
+-1.0 1.2e-16 0 0
+-1.0 -1.0 0 0
+-0.18 -0.18 0 0
+-0.25 3.1e-17 0 0
+-1.0 1.2e-16 0 0
+
+
+-1.0 -1.0 0 0
+-1.8e-16 -1.0 0 0
+-4.6e-17 -0.25 0 0
+-0.18 -0.18 0 0
+-1.0 -1.0 0 0
+
+
+-1.8e-16 -1.0 0 0
+1.0 -1.0 0 0
+0.18 -0.18 0 0
+-4.6e-17 -0.25 0 0
+-1.8e-16 -1.0 0 0
+
+
+1.0 -1.0 0 0
+1.0 0.0 0 0
+0.25 0.0 0 0
+0.18 -0.18 0 0
+1.0 -1.0 0 0
+
+
+DEAL::Mesh info:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 8
+DEAL:: boundary indicators: 0(8 times) 1(8 times) 
+1.0 -2.0 0 0
+1.0 -1.0 0 0
+0.18 -1.8 0 0
+0.25 -2.0 0 0
+1.0 -2.0 0 0
+
+
+1.0 -1.0 0 0
+6.1e-17 -1.0 0 0
+1.5e-17 -1.8 0 0
+0.18 -1.8 0 0
+1.0 -1.0 0 0
+
+
+6.1e-17 -1.0 0 0
+-1.0 -1.0 0 0
+-0.18 -1.8 0 0
+1.5e-17 -1.8 0 0
+6.1e-17 -1.0 0 0
+
+
+-1.0 -1.0 0 0
+-1.0 -2.0 0 0
+-0.25 -2.0 0 0
+-0.18 -1.8 0 0
+-1.0 -1.0 0 0
+
+
+-1.0 -2.0 0 0
+-1.0 -3.0 0 0
+-0.18 -2.2 0 0
+-0.25 -2.0 0 0
+-1.0 -2.0 0 0
+
+
+-1.0 -3.0 0 0
+-1.8e-16 -3.0 0 0
+-4.6e-17 -2.2 0 0
+-0.18 -2.2 0 0
+-1.0 -3.0 0 0
+
+
+-1.8e-16 -3.0 0 0
+1.0 -3.0 0 0
+0.18 -2.2 0 0
+-4.6e-17 -2.2 0 0
+-1.8e-16 -3.0 0 0
+
+
+1.0 -3.0 0 0
+1.0 -2.0 0 0
+0.25 -2.0 0 0
+0.18 -2.2 0 0
+1.0 -3.0 0 0
+
+
+DEAL::Mesh info:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 16
+DEAL:: boundary indicators: 0(28 times) 
+0.18 0.18 0 0
+0.25 0.0 0 0
+1.0 0.0 0 0
+1.0 1.0 0 0
+0.18 0.18 0 0
+
+
+1.5e-17 0.25 0 0
+0.18 0.18 0 0
+1.0 1.0 0 0
+6.1e-17 1.0 0 0
+1.5e-17 0.25 0 0
+
+
+-0.18 0.18 0 0
+1.5e-17 0.25 0 0
+6.1e-17 1.0 0 0
+-1.0 1.0 0 0
+-0.18 0.18 0 0
+
+
+-0.25 3.1e-17 0 0
+-0.18 0.18 0 0
+-1.0 1.0 0 0
+-1.0 1.2e-16 0 0
+-0.25 3.1e-17 0 0
+
+
+-0.18 -0.18 0 0
+-0.25 3.1e-17 0 0
+-1.0 1.2e-16 0 0
+-1.0 -1.0 0 0
+-0.18 -0.18 0 0
+
+
+-4.6e-17 -0.25 0 0
+-0.18 -0.18 0 0
+-1.0 -1.0 0 0
+-1.8e-16 -1.0 0 0
+-4.6e-17 -0.25 0 0
+
+
+0.18 -0.18 0 0
+-4.6e-17 -0.25 0 0
+-1.8e-16 -1.0 0 0
+1.0 -1.0 0 0
+0.18 -0.18 0 0
+
+
+0.25 0.0 0 0
+0.18 -0.18 0 0
+1.0 -1.0 0 0
+1.0 0.0 0 0
+0.25 0.0 0 0
+
+
+0.18 -1.8 0 0
+0.25 -2.0 0 0
+1.0 -2.0 0 0
+1.0 -1.0 0 0
+0.18 -1.8 0 0
+
+
+0.18 -1.8 0 0
+1.0 -1.0 0 0
+-1.8e-16 -1.0 0 0
+1.5e-17 -1.8 0 0
+0.18 -1.8 0 0
+
+
+1.5e-17 -1.8 0 0
+-1.8e-16 -1.0 0 0
+-1.0 -1.0 0 0
+-0.18 -1.8 0 0
+1.5e-17 -1.8 0 0
+
+
+-0.25 -2.0 0 0
+-0.18 -1.8 0 0
+-1.0 -1.0 0 0
+-1.0 -2.0 0 0
+-0.25 -2.0 0 0
+
+
+-0.18 -2.2 0 0
+-0.25 -2.0 0 0
+-1.0 -2.0 0 0
+-1.0 -3.0 0 0
+-0.18 -2.2 0 0
+
+
+-4.6e-17 -2.2 0 0
+-0.18 -2.2 0 0
+-1.0 -3.0 0 0
+-1.8e-16 -3.0 0 0
+-4.6e-17 -2.2 0 0
+
+
+0.18 -2.2 0 0
+-4.6e-17 -2.2 0 0
+-1.8e-16 -3.0 0 0
+1.0 -3.0 0 0
+0.18 -2.2 0 0
+
+
+0.25 -2.0 0 0
+0.18 -2.2 0 0
+1.0 -3.0 0 0
+1.0 -2.0 0 0
+0.25 -2.0 0 0
+
+
+DEAL::Number of active cells: 16
+DEAL::Total number of cells: 16
diff --git a/tests/deal.II/merge_triangulations_03.output b/tests/deal.II/merge_triangulations_03.output
new file mode 100644 (file)
index 0000000..bac9476
--- /dev/null
@@ -0,0 +1,17 @@
+
+DEAL::Mesh info for shell.eps:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 8
+DEAL:: boundary indicators: 0(8 times) 1(8 times) 
+DEAL::Mesh info for ball.eps:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 20
+DEAL:: boundary indicators: 0(8 times) 
+DEAL::Mesh info for flat_ball.eps:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 20
+DEAL:: boundary indicators: 0(8 times) 
+DEAL::Mesh info for tria_out.eps:
+DEAL:: dimension: 2
+DEAL:: no. of cells: 28
+DEAL:: boundary indicators: 0(8 times) 

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.