From c8363e8efb24978492b78c4cbcfb78f85642b995 Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Thu, 20 Sep 2018 18:00:32 +0200 Subject: [PATCH] Support writing grids with hexahedra --- dune/gfe/cosseratvtkwriter.hh | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/dune/gfe/cosseratvtkwriter.hh b/dune/gfe/cosseratvtkwriter.hh index 0f1a9d88..9218ed55 100644 --- a/dune/gfe/cosseratvtkwriter.hh +++ b/dune/gfe/cosseratvtkwriter.hh @@ -1,6 +1,8 @@ #ifndef COSSERAT_VTK_WRITER_HH #define COSSERAT_VTK_WRITER_HH +#include <dune/common/version.hh> + #include <dune/grid/io/file/vtk/vtkwriter.hh> #include <dune/grid/io/file/vtk/pvtuwriter.hh> @@ -169,6 +171,8 @@ public: connectivitySize += ((vtkOrder==2) ? 8 : 4) * nE.second; else if (nE.first.isTriangle()) connectivitySize += ((vtkOrder==2) ? 6 : 3) * nE.second; + else if (nE.first.isHexahedron()) + connectivitySize += ((vtkOrder==2) ? 20 : 8) * nE.second; else DUNE_THROW(Dune::IOError, "Unsupported element type '" << nE.first << "' found!"); } @@ -257,6 +261,69 @@ public: connectivity[i++] = localView.index(0); connectivity[i++] = localView.index(1); connectivity[i++] = localView.index(2); +#endif + } + } + if (element.type().isHexahedron()) + { + if (vtkOrder==2) + { +#if DUNE_VERSION_LT(DUNE_FUNCTIONS,2,7) + connectivity[i++] = localIndexSet.index(0); + connectivity[i++] = localIndexSet.index(2); + connectivity[i++] = localIndexSet.index(5); + connectivity[i++] = localIndexSet.index(1); + connectivity[i++] = localIndexSet.index(4); + connectivity[i++] = localIndexSet.index(3); +#else + // Corner dofs + connectivity[i++] = localView.index(0); + connectivity[i++] = localView.index(2); + connectivity[i++] = localView.index(8); + connectivity[i++] = localView.index(6); + + connectivity[i++] = localView.index(18); + connectivity[i++] = localView.index(20); + connectivity[i++] = localView.index(26); + connectivity[i++] = localView.index(24); + + // Edge dofs + connectivity[i++] = localView.index(1); + connectivity[i++] = localView.index(5); + connectivity[i++] = localView.index(7); + connectivity[i++] = localView.index(3); + + connectivity[i++] = localView.index(19); + connectivity[i++] = localView.index(23); + connectivity[i++] = localView.index(25); + connectivity[i++] = localView.index(21); + + connectivity[i++] = localView.index(9); + connectivity[i++] = localView.index(11); + connectivity[i++] = localView.index(17); + connectivity[i++] = localView.index(15); +#endif + } + else // first order + { +#if DUNE_VERSION_LT(DUNE_FUNCTIONS,2,7) + connectivity[i++] = localIndexSet.index(0); + connectivity[i++] = localIndexSet.index(1); + connectivity[i++] = localIndexSet.index(3); + connectivity[i++] = localIndexSet.index(2); + connectivity[i++] = localIndexSet.index(4); + connectivity[i++] = localIndexSet.index(5); + connectivity[i++] = localIndexSet.index(7); + connectivity[i++] = localIndexSet.index(6); +#else + connectivity[i++] = localView.index(0); + connectivity[i++] = localView.index(1); + connectivity[i++] = localView.index(3); + connectivity[i++] = localView.index(2); + connectivity[i++] = localView.index(4); + connectivity[i++] = localView.index(5); + connectivity[i++] = localView.index(7); + connectivity[i++] = localView.index(6); #endif } } @@ -275,6 +342,9 @@ public: if (element.type().isTriangle()) offsetCounter += (vtkOrder==2) ? 6 : 3; + if (element.type().isHexahedron()) + offsetCounter += (vtkOrder==2) ? 20 : 8; + offsets[i++] += offsetCounter; } @@ -289,6 +359,9 @@ public: if (element.type().isTriangle()) cellTypes[i++] = (vtkOrder==2) ? 22 : 5; + + if (element.type().isHexahedron()) + cellTypes[i++] = (vtkOrder==2) ? 25 : 12; } vtkFile.cellTypes_ = cellTypes; -- GitLab