From 6c3f0706c3b426e3a6896e272f123380a18c34a7 Mon Sep 17 00:00:00 2001
From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de>
Date: Wed, 31 Aug 2016 17:06:18 +0200
Subject: [PATCH] [adaptive] Definition of AdaptionHelper property

For a mass conservative adaption process, model dependent
adaption helper are needed.
---
 dumux/implicit/adaptive/adaptionhelper.hh     | 33 ++++++++++---------
 dumux/implicit/adaptive/gridadapt.hh          | 10 +++---
 .../implicit/adaptive/gridadaptproperties.hh  |  3 ++
 .../adaptive/gridadaptpropertydefaults.hh     |  3 ++
 4 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/dumux/implicit/adaptive/adaptionhelper.hh b/dumux/implicit/adaptive/adaptionhelper.hh
index c4462861e8..e88021c201 100644
--- a/dumux/implicit/adaptive/adaptionhelper.hh
+++ b/dumux/implicit/adaptive/adaptionhelper.hh
@@ -16,8 +16,8 @@
  *   You should have received a copy of the GNU General Public License       *
  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
  *****************************************************************************/
-#ifndef DUMUX_ADAPTIONHELPER_HH
-#define DUMUX_ADAPTIONHELPER_HH
+#ifndef DUMUX_IMPLICIT_ADAPTIONHELPER_HH
+#define DUMUX_IMPLICIT_ADAPTIONHELPER_HH
 
 #include <dune/grid/common/gridenums.hh>
 #include <dune/grid/common/rangegenerators.hh>
@@ -46,7 +46,7 @@ NEW_PROP_TAG(Scalar);
  * \brief Base class holding the variables for implicit models.
  */
 template<class TypeTag>
-class AdaptionHelper
+class ImplicitAdaptionHelper
 {
 private:
     typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem;
@@ -54,16 +54,6 @@ private:
     typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables;
     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
 
-    struct AdaptedValues
-    {
-        PrimaryVariables u;
-        int count;
-        AdaptedValues()
-        {
-            count = 0;
-        }
-    };
-
     enum {
         // Grid and world dimension
         dim = GridView::dimension,
@@ -77,7 +67,6 @@ private:
     typedef typename Grid::LevelGridView LevelGridView;
     typedef typename GridView::Traits::template Codim<0>::Entity Element;
     typedef typename GridView::Traits::template Codim<dofCodim>::Entity DofEntity;
-    typedef Dune::PersistentContainer<Grid, AdaptedValues> PersistentContainer;
 
     typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
     typedef typename GridView::ctype CoordScalar;
@@ -86,9 +75,21 @@ private:
     typedef Dune::PQkLocalFiniteElementCache<CoordScalar, Scalar, dim, 1> LocalFiniteElementCache;
     typedef typename LocalFiniteElementCache::FiniteElementType LocalFiniteElement;
 
-private:
+protected:
     const GridView gridView_;
     const Grid& grid_;
+
+    struct AdaptedValues
+    {
+        PrimaryVariables u;
+        int count;
+        AdaptedValues()
+        {
+            count = 0;
+        }
+    };
+
+    typedef Dune::PersistentContainer<Grid, AdaptedValues> PersistentContainer;
     PersistentContainer adaptionMap_;
 
 public:
@@ -99,7 +100,7 @@ public:
      *
      *  @param gridView a DUNE gridview object corresponding to diffusion and transport equation
      */
-    AdaptionHelper(const GridView& gridView) :
+    ImplicitAdaptionHelper(const GridView& gridView) :
         gridView_(gridView), grid_(gridView.grid()), adaptionMap_(grid_, dofCodim)
     {}
 
diff --git a/dumux/implicit/adaptive/gridadapt.hh b/dumux/implicit/adaptive/gridadapt.hh
index 351adbf29e..ccc221d660 100644
--- a/dumux/implicit/adaptive/gridadapt.hh
+++ b/dumux/implicit/adaptive/gridadapt.hh
@@ -24,7 +24,6 @@
 #define DUMUX_IMPLICIT_GRIDADAPT_HH
 
 #include "gridadaptproperties.hh"
-#include "adaptionhelper.hh"
 #include <unordered_map>
 
 #include <dune/common/exceptions.hh>
@@ -62,6 +61,7 @@ class ImplicitGridAdapt
 
     typedef typename GET_PROP_TYPE(TypeTag, AdaptionIndicator) AdaptionIndicator;
     typedef typename GET_PROP_TYPE(TypeTag, AdaptionInitializationIndicator) AdaptionInitializationIndicator;
+    typedef typename GET_PROP_TYPE(TypeTag, AdaptionHelper) AdaptionHelper;
 
     enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) };
 
@@ -71,8 +71,8 @@ public:
      * @param problem The problem
      */
     ImplicitGridAdapt (Problem& problem)
-        : adaptionHelper_(problem.gridView()),
-          problem_(problem),
+        : problem_(problem),
+          adaptionHelper_(problem.gridView()),
           adaptionIndicator_(problem),
           marked_(0),
           coarsened_(0)
@@ -324,9 +324,6 @@ public:
     }
 
 private:
-    AdaptionHelper<TypeTag> adaptionHelper_;
-
-
     /*!
      * @brief Method ensuring the refinement ratio of 2:1
      *
@@ -418,6 +415,7 @@ private:
 
     // private Variables
     Problem& problem_;
+    AdaptionHelper adaptionHelper_;
     AdaptionIndicator adaptionIndicator_;
 
     int marked_;
diff --git a/dumux/implicit/adaptive/gridadaptproperties.hh b/dumux/implicit/adaptive/gridadaptproperties.hh
index fb3928b944..dfa71287d0 100644
--- a/dumux/implicit/adaptive/gridadaptproperties.hh
+++ b/dumux/implicit/adaptive/gridadaptproperties.hh
@@ -39,6 +39,9 @@ NEW_TYPE_TAG(GridAdapt);
 //! Defines if the grid is h-adaptive
 NEW_PROP_TAG(AdaptiveGrid);
 
+//! Class which stores data and reconstructs primary variables for adapted grid
+NEW_PROP_TAG(AdaptionHelper);
+
 //! Class defining the refinement/coarsening indicator
 NEW_PROP_TAG(AdaptionIndicator);
 
diff --git a/dumux/implicit/adaptive/gridadaptpropertydefaults.hh b/dumux/implicit/adaptive/gridadaptpropertydefaults.hh
index 1d6ed742a0..20f52eb7fe 100644
--- a/dumux/implicit/adaptive/gridadaptpropertydefaults.hh
+++ b/dumux/implicit/adaptive/gridadaptpropertydefaults.hh
@@ -31,6 +31,7 @@
 #include "gridadaptproperties.hh"
 #include "gridadaptindicatordefault.hh"
 #include "gridadaptinitializationindicator.hh"
+#include "adaptionhelper.hh"
 
 namespace Dumux
 {
@@ -60,6 +61,8 @@ SET_BOOL_PROP(GridAdapt, GridAdaptRefineAtSource, false);
 SET_TYPE_PROP(GridAdapt, AdaptionIndicator, ImplicitGridAdaptIndicatorDefault<TypeTag>);
 //!Set default class for adaption initialization indicator
 SET_TYPE_PROP(GridAdapt,  AdaptionInitializationIndicator, ImplicitGridAdaptInitializationIndicatorDefault<TypeTag>);
+//!Set default class for adaption helper
+SET_TYPE_PROP(GridAdapt, AdaptionHelper, ImplicitAdaptionHelper<TypeTag>);
 
 } // namespace Properties
 } // namespace Dumux
-- 
GitLab