From 7654880afe7d040c36fc9b4a9128bd0b00406c80 Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Mon, 5 Oct 2020 15:12:58 +0200
Subject: [PATCH] Remove homegrown VTKReader, use dune-vtk instead

Simon Praetorius' dune-vtk module has much better support for reading
and writing than my old hacks in dune-gfe.  Let's start adopting
dune-vtk for VTK I/O.

In this initial step, dune-vtk becomes a dependency of dune-gfe,
but only an optional one.  This may change.
---
 .gitlab-ci.yml            |  6 +++--
 dune.module               |  2 +-
 dune/gfe/vtkreader.hh     | 51 ---------------------------------------
 src/cosserat-continuum.cc | 11 +++++++--
 4 files changed, 14 insertions(+), 56 deletions(-)
 delete mode 100644 dune/gfe/vtkreader.hh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5da3b93e..f2a796a0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,18 +55,20 @@ dune:git clang:
   - *before
   script: duneci-standard-test
 
-dune:git parmg gcc:
+dune:git parmg dune-vtk gcc:
   image: registry.dune-project.org/docker/ci/dune:git-debian-10-gcc-8-17
   before_script:
   - *patch-dune-common
   - *before
   - duneci-install-module https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.mn.tu-dresden.de/paraphase/dune-parmg.git
+  - duneci-install-module https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.mn.tu-dresden.de/spraetor/dune-vtk.git
   script: duneci-standard-test
 
-dune:git parmg clang:
+dune:git parmg dune-vtk clang:
   image: registry.dune-project.org/docker/ci/dune:git-ubuntu-20.04-clang-10-20
   before_script:
   - *patch-dune-common
   - *before
   - duneci-install-module https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.mn.tu-dresden.de/paraphase/dune-parmg.git
+  - duneci-install-module https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.mn.tu-dresden.de/spraetor/dune-vtk.git
   script: duneci-standard-test
diff --git a/dune.module b/dune.module
index e22cda06..56463f44 100644
--- a/dune.module
+++ b/dune.module
@@ -8,4 +8,4 @@ Version: svn
 Maintainer: oliver.sander@tu-dresden.de
 #depending on
 Depends: dune-grid dune-uggrid dune-istl dune-localfunctions dune-functions dune-solvers dune-fufem dune-elasticity
-Suggests: dune-foamgrid dune-parmg
+Suggests: dune-foamgrid dune-parmg dune-vtk
diff --git a/dune/gfe/vtkreader.hh b/dune/gfe/vtkreader.hh
deleted file mode 100644
index 1279a655..00000000
--- a/dune/gfe/vtkreader.hh
+++ /dev/null
@@ -1,51 +0,0 @@
-// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-// vi: set et ts=4 sw=2 sts=2:
-#ifndef DUNE_GFE_VTKREADER_HH
-#define DUNE_GFE_VTKREADER_HH
-
-#include <memory>
-
-#include <dune/gfe/vtkfile.hh>
-
-/** \brief Read a grid from a VTK file
- */
-template <class GridType>
-class VTKReader
-{
-public:
-
-  /** \brief Read a grid from a VTK file */
-  static std::unique_ptr<GridType> read(std::string filename)
-  {
-    constexpr auto dimworld = GridType::dimensionworld;
-
-    Dune::GFE::VTKFile vtkFile;
-
-    // Read test file from disk
-    vtkFile.read(filename);
-
-    Dune::GridFactory<GridType> factory;
-
-    for (const auto& v : vtkFile.points_)
-    {
-      // use the first dimworld components as vertex coordinate; discard the rest
-      Dune::FieldVector<typename GridType::ctype, dimworld> pos;
-      for (int i=0; i<dimworld; i++)
-        pos[i] = v[i];
-      factory.insertVertex(pos);
-    }
-
-    for (size_t i=0; i<vtkFile.cellConnectivity_.size(); i+=3)
-    {
-      factory.insertElement(Dune::GeometryTypes::triangle, {vtkFile.cellConnectivity_[i],
-                                       vtkFile.cellConnectivity_[i+1],
-                                       vtkFile.cellConnectivity_[i+2]});
-
-    }
-
-    return std::unique_ptr<GridType>(factory.createGrid());
-  }
-
-};
-
-#endif
diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc
index 1bd4144a..bd0be171 100644
--- a/src/cosserat-continuum.cc
+++ b/src/cosserat-continuum.cc
@@ -46,7 +46,6 @@
 #include <dune/gfe/nonplanarcosseratshellenergy.hh>
 #include <dune/gfe/cosseratvtkwriter.hh>
 #include <dune/gfe/cosseratvtkreader.hh>
-#include <dune/gfe/vtkreader.hh>
 #include <dune/gfe/geodesicfeassembler.hh>
 #include <dune/gfe/riemanniantrsolver.hh>
 #include <dune/gfe/vertexnormals.hh>
@@ -54,6 +53,10 @@
 #include <dune/gfe/mixedgfeassembler.hh>
 #include <dune/gfe/mixedriemanniantrsolver.hh>
 
+#if HAVE_DUNE_VTK
+#include <dune/vtk/vtkreader.hh>
+#endif
+
 // grid dimension
 const int dim = 2;
 const int dimworld = 2;
@@ -203,7 +206,11 @@ int main (int argc, char *argv[]) try
         if (suffix == ".msh")
             grid = std::shared_ptr<GridType>(GmshReader<GridType>::read(path + "/" + gridFile));
         else if (suffix == ".vtu" or suffix == ".vtp")
-            grid = VTKReader<GridType>::read(path + "/" + gridFile);
+#if HAVE_DUNE_VTK
+            grid = VtkReader<GridType>::createGridFromFile(path + "/" + gridFile);
+#else
+            DUNE_THROW(NotImplemented, "Please install dune-vtk for VTK reading support!");
+#endif
     }
 
     grid->globalRefine(numLevels-1);
-- 
GitLab