From 2a3e68e3d14a83aa7a081c3611f9d77d67117e17 Mon Sep 17 00:00:00 2001
From: Andreas Lauser <and@poware.org>
Date: Tue, 3 Aug 2010 17:11:33 +0000
Subject: [PATCH] decoupled: convert to new structure

git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@3963 2fb0f335-1f38-0410-981e-8018bf24f1b0
---
 .../diffusion/fvmpfa/fvmpfaopressure2p_new.hh |   3 +-
 .../2p/diffusion/mimetic/croperator.hh        |  10 +-
 .../diffusion/mimetic/mimeticgroundwater.hh   |   1 -
 dumux/decoupled/common/impesproblem.hh        | 111 +++++-------------
 dumux/decoupled/common/onemodelproblem.hh     |  13 +-
 test/decoupled/1p/benchmarkresult.hh          |  10 +-
 test/decoupled/2p/test_2p.cc                  |   6 +-
 7 files changed, 45 insertions(+), 109 deletions(-)

diff --git a/dumux/decoupled/2p/diffusion/fvmpfa/fvmpfaopressure2p_new.hh b/dumux/decoupled/2p/diffusion/fvmpfa/fvmpfaopressure2p_new.hh
index 75343363bb..615ab156b4 100644
--- a/dumux/decoupled/2p/diffusion/fvmpfa/fvmpfaopressure2p_new.hh
+++ b/dumux/decoupled/2p/diffusion/fvmpfa/fvmpfaopressure2p_new.hh
@@ -598,7 +598,8 @@ void FVMPFAOPressure2P<TypeTag>::storeInteractionVolumeInfo()
             }
 
             //store pointer 1
-            interactionVolumes_[globalVertIdx1234].setSubVolumeElement(eIt, 0);
+            ElementPointer ePtr(*eIt);
+            interactionVolumes_[globalVertIdx1234].setSubVolumeElement(ePtr, 0);
             interactionVolumes_[globalVertIdx1234].setIndexOnElement(isIt12->indexInInside(), 0, 0);
             interactionVolumes_[globalVertIdx1234].setIndexOnElement(isIt14->indexInInside(), 0, 1);
 
diff --git a/dumux/decoupled/2p/diffusion/mimetic/croperator.hh b/dumux/decoupled/2p/diffusion/mimetic/croperator.hh
index 6b81d17784..3b02552576 100644
--- a/dumux/decoupled/2p/diffusion/mimetic/croperator.hh
+++ b/dumux/decoupled/2p/diffusion/mimetic/croperator.hh
@@ -31,7 +31,6 @@
 #include<dune/common/geometrytype.hh>
 #include<dune/grid/common/grid.hh>
 #include<dune/grid/common/mcmgmapper.hh>
-#include<dune/grid/common/referenceelements.hh>
 
 #include<dune/istl/bvector.hh>
 #include<dune/istl/operators.hh>
@@ -111,7 +110,6 @@ class CROperatorAssembler
     typedef typename Grid::template Codim<0>::Entity Entity;
     typedef typename GridView::template Codim<0>::Iterator Iterator;
     typedef typename GridView::IndexSet IS;
-    typedef typename Grid::template Codim<0>::HierarchicIterator HierarchicIterator;
     typedef typename Grid::template Codim<0>::EntityPointer EEntityPointer;
     typedef Dune::FieldMatrix<Scalar,1,1> BlockType;
     typedef Dune::BCRSMatrix<BlockType> MatrixType;
@@ -158,8 +156,8 @@ public:
         for (Iterator it = gridView_.template begin<0>(); it != eendit; ++it)
         {
             Dune::GeometryType gt = it->geometry().type();
-            const typename Dune::ReferenceElementContainer<Scalar,dim>::value_type&
-                refelem = Dune::ReferenceElements<Scalar,dim>::general(gt);
+            const typename Dune::GenericReferenceElementContainer<Scalar,dim>::value_type&
+                refelem = Dune::GenericReferenceElements<Scalar,dim>::general(gt);
 
             // faces, c=1
             for (int i = 0; i < refelem.size(1); i++)
@@ -193,8 +191,8 @@ public:
         for (Iterator it = gridView_.template begin<0>(); it!=eendit; ++it)
         {
             Dune::GeometryType gt = it->geometry().type();
-            const typename Dune::ReferenceElementContainer<Scalar,dim>::value_type&
-                refelem = Dune::ReferenceElements<Scalar,dim>::general(gt);
+            const typename Dune::GenericReferenceElementContainer<Scalar,dim>::value_type&
+                refelem = Dune::GenericReferenceElements<Scalar,dim>::general(gt);
             //           std::cout << "ELEM " << GeometryName(gt) << std::endl;
 
             // faces, c=1
diff --git a/dumux/decoupled/2p/diffusion/mimetic/mimeticgroundwater.hh b/dumux/decoupled/2p/diffusion/mimetic/mimeticgroundwater.hh
index 8431774f0f..a040ec8701 100644
--- a/dumux/decoupled/2p/diffusion/mimetic/mimeticgroundwater.hh
+++ b/dumux/decoupled/2p/diffusion/mimetic/mimeticgroundwater.hh
@@ -26,7 +26,6 @@
 
 #include<dune/common/exceptions.hh>
 #include<dune/grid/common/grid.hh>
-#include<dune/grid/common/referenceelements.hh>
 #include<dune/common/geometrytype.hh>
 #include<dune/grid/common/quadraturerules.hh>
 
diff --git a/dumux/decoupled/common/impesproblem.hh b/dumux/decoupled/common/impesproblem.hh
index a4035250d5..238f6bacc2 100644
--- a/dumux/decoupled/common/impesproblem.hh
+++ b/dumux/decoupled/common/impesproblem.hh
@@ -13,7 +13,6 @@
  *                                                                           *
  *   This program is distributed WITHOUT ANY WARRANTY.                       *
  *****************************************************************************/
-
 #ifndef DUMUX_IMPESPROBLEM_HH
 #define DUMUX_IMPESPROBLEM_HH
 
@@ -55,9 +54,7 @@ class IMPESProblem
 {
 private:
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
-
-    enum Episode {}; // the type of an episode of the simulation
-    typedef Dumux::TimeManager<Episode>      TimeManager;
+    typedef Dumux::TimeManager<TypeTag>  TimeManager;
 
     typedef Dumux::VtkMultiWriter<GridView>  VtkMultiWriter;
 
@@ -96,13 +93,10 @@ public:
         : gridView_(gridView),
           bboxMin_(std::numeric_limits<double>::max()),
           bboxMax_(-std::numeric_limits<double>::max()),
-          timeManager_(0.0, verbose),
+          timeManager_(verbose),
           variables_(gridView),
-          dt_(0),
-          resultWriter_(asImp_()->name())
+          dt_(0)
     {
-        wasRestarted_ = false;
-
 //        // calculate the bounding box of the grid view
 //        VertexIterator vIt = gridView.template begin<dim>();
 //        const VertexIterator vEndIt = gridView.template end<dim>();
@@ -131,23 +125,6 @@ public:
      */
     // \{
 
-    /*!
-     * \brief Start the simulation procedure.
-     *
-     * This method is usually called by the main() function and simply
-     * uses Dumux::TimeManager::runSimulation() to do the actual
-     * work.
-     */
-    bool simulate(Scalar dtInitial, Scalar tEnd)
-    {
-        // set the initial time step and the time where the simulation ends
-        timeManager_.setEndTime(tEnd);
-        timeManager_.setTimeStepSize(dtInitial);
-        timeManager_.runSimulation(*asImp_());
-        return true;
-    };
-
-
     /*!
      * \brief Called by the Dumux::TimeManager in order to
      *        initialize the problem.
@@ -156,15 +133,12 @@ public:
     {
         // set the initial condition of the model
         model().initial();
-
-        // write the inital solution to disk
-        writeCurrentResult_();
     }
 
     /*!
      * \brief Called by the time manager before the time integration.
      */
-    void timeStepBegin()
+    void preProcess()
     {}
 
     /*!
@@ -206,10 +180,8 @@ public:
      * This is used to do some janitorial tasks like writing the
      * current solution to disk.
      */
-    void timeStepEnd()
+    void postProcess()
     {
-        asImp_()->writeCurrentResult_();
-        wasRestarted_ = false;
     };
 
     /*!
@@ -240,11 +212,11 @@ public:
      * steps. This file is intented to be overwritten by the
      * implementation.
      */
-    bool shouldWriteRestartFile() const
+    bool doSerialize() const
     {
-        return !restarted() &&
-            timeManager().stepNum() > 0 &&
-            (timeManager().stepNum() % 5 == 0);
+        return 
+            timeManager().timeStepIndex() > 0 &&
+            (timeManager().timeStepIndex() % 5 == 0);
     }
 
     /*!
@@ -255,8 +227,8 @@ public:
      * very time step. This file is intented to be overwritten by the
      * implementation.
      */
-    bool shouldWriteOutputFile() const
-    { return !restarted(); }
+    bool doOutput() const
+    { return true; }
 
     // \}
 
@@ -366,19 +338,6 @@ public:
      */
     // \{
 
-    /*!
-     * \brief Returns true, if the current state of the problem was
-     *        loaded from a restart file.
-     */
-    bool restarted() const
-    { return wasRestarted_; }
-
-    void restarted(bool setRestarted)
-    {
-        wasRestarted_ = setRestarted;
-        return ;
-    }
-
     /*!
      * \brief This method writes the complete state of the problem
      *        to the harddisk.
@@ -390,12 +349,10 @@ public:
      */
     void serialize()
     {
-        typedef Dumux::Restart<GridView> Restarter;
+        typedef Dumux::Restart Restarter;
 
         Restarter res;
-        res.serializeBegin(gridView(),
-                           asImp_()->name(),
-                           timeManager_.time());
+        res.serializeBegin(*asImp_());
         std::cerr << "Serialize to file " << res.fileName() << "\n";
 
         timeManager_.serialize(res);
@@ -413,12 +370,10 @@ public:
      */
     void deserialize(double t)
     {
-        typedef Dumux::Restart<GridView> Restarter;
+        typedef Dumux::Restart Restarter;
 
         Restarter res;
-        res.deserializeBegin(gridView(),
-                             asImp_()->name(),
-                             t);
+        res.deserializeBegin(*asImp_(), t);
         std::cerr << "Deserialize from file " << res.fileName() << "\n";
 
         timeManager_.deserialize(res);
@@ -426,10 +381,20 @@ public:
         model().deserialize(res);
 
         res.deserializeEnd();
-
-        wasRestarted_ = true;
     };
 
+    //! Write the fields current solution into an VTK output file.
+    void writeOutput()
+    {
+        if (gridView().comm().rank() == 0)
+            std::cout << "Writing result file for current time step\n";
+        
+        resultWriter_.beginTimestep(timeManager_.time() + timeManager_.timeStepSize(),
+                                    gridView());
+        model().addOutputVtkFields(resultWriter_);
+        resultWriter_.endTimestep();
+    }
+
     // \}
 
 protected:
@@ -441,26 +406,6 @@ protected:
     const Implementation *asImp_() const
     { return static_cast<const Implementation *>(this); }
 
-    //! Write the fields current solution into an VTK output file.
-    void writeCurrentResult_()
-    {
-        // write the current result to disk
-        if (asImp_()->shouldWriteOutputFile()) {
-            if (gridView().comm().rank() == 0)
-                std::cout << "Writing result file for current time step\n";
-
-            resultWriter_.beginTimestep(timeManager_.time(),
-                                        gridView());
-
-            model().addOutputVtkFields(resultWriter_);
-            resultWriter_.endTimestep();
-        }
-
-        // write restart file if necessary
-        if (asImp_()->shouldWriteRestartFile())
-            serialize();
-    }
-
     VtkMultiWriter& resultWriter()
     {
         return resultWriter_;
@@ -491,8 +436,6 @@ private:
     IMPESModel* model_;
 
     VtkMultiWriter  resultWriter_;
-
-    bool wasRestarted_;
 };
 // definition of the static class member simname_,
 // which is necessary because it is of type string.
diff --git a/dumux/decoupled/common/onemodelproblem.hh b/dumux/decoupled/common/onemodelproblem.hh
index 104ba89ff3..2b681e802f 100644
--- a/dumux/decoupled/common/onemodelproblem.hh
+++ b/dumux/decoupled/common/onemodelproblem.hh
@@ -57,8 +57,7 @@ class OneModelProblem
 private:
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
 
-    enum Episode {}; // the type of an episode of the simulation
-    typedef Dumux::TimeManager<Episode>      TimeManager;
+    typedef Dumux::TimeManager<TypeTag>      TimeManager;
 
     typedef Dumux::VtkMultiWriter<GridView>  VtkMultiWriter;
 
@@ -95,7 +94,7 @@ public:
         : gridView_(gridView),
           bboxMin_(std::numeric_limits<double>::max()),
           bboxMax_(-std::numeric_limits<double>::max()),
-          timeManager_(0.0, verbose),
+          timeManager_(verbose),
           variables_(gridView),
           dt_(0),
           resultWriter_(asImp_()->name())
@@ -360,12 +359,10 @@ public:
      */
     void serialize()
     {
-        typedef Dumux::Restart<GridView> Restarter;
+        typedef Dumux::Restart Restarter;
 
         Restarter res;
-        res.serializeBegin(gridView(),
-                           asImp_()->name(),
-                           timeManager_.time());
+        res.serializeBegin(*asImp_());
         std::cerr << "Serialize to file " << res.fileName() << "\n";
 
         timeManager_.serialize(res);
@@ -383,7 +380,7 @@ public:
      */
     void deserialize(double t)
     {
-        typedef Dumux::Restart<GridView> Restarter;
+        typedef Dumux::Restart Restarter;
 
         Restarter res;
         res.deserializeBegin(gridView(),
diff --git a/test/decoupled/1p/benchmarkresult.hh b/test/decoupled/1p/benchmarkresult.hh
index 04e1204524..dd0476f9d5 100644
--- a/test/decoupled/1p/benchmarkresult.hh
+++ b/test/decoupled/1p/benchmarkresult.hh
@@ -132,7 +132,7 @@ struct BenchmarkResult
 
             // cell center in reference element
             const Dune::FieldVector<ct,dim>&
-                local = Dune::ReferenceElements<ct,dim>::general(gt).position(0,0);
+                local = Dune::GenericReferenceElements<ct,dim>::general(gt).position(0,0);
 
             // get global coordinate of cell center
             Dune::FieldVector<ct,dim> global = geometry.global(local);
@@ -360,7 +360,7 @@ struct ResultEvaluation
 
             Dune::GeometryType geomType = geometry.type();
 
-            const Dune::FieldVector<Scalar,dim>& local = Dune::ReferenceElements<Scalar,dim>::general(geomType).position(0, 0);
+            const Dune::FieldVector<Scalar,dim>& local = Dune::GenericReferenceElements<Scalar,dim>::general(geomType).position(0, 0);
             Dune::FieldVector<Scalar,dim> global = geometry.global(local);
 
             Scalar volume = geometry.volume();
@@ -537,11 +537,11 @@ struct ResultEvaluation
 
             Dune::GeometryType geomType = geometry.type();
 
-            const Dune::FieldVector<Scalar,dim>& local = Dune::ReferenceElements<Scalar,dim>::general(geomType).position(0, 0);
+            const Dune::FieldVector<Scalar,dim>& local = Dune::GenericReferenceElements<Scalar,dim>::general(geomType).position(0, 0);
             Dune::FieldVector<Scalar,dim> global = geometry.global(local);
 
             Scalar volume = geometry.integrationElement(local)
-                    *Dune::ReferenceElements<Scalar,dim>::general(geomType).volume();
+                    *Dune::GenericReferenceElements<Scalar,dim>::general(geomType).volume();
 
             int eIdx = elementMapper.map(element);
 
@@ -572,7 +572,7 @@ struct ResultEvaluation
                 i++;
 
                 // center in face's reference element
-                const Dune::FieldVector<Scalar,dim-1>& faceLocalNm1 = Dune::ReferenceElements<Scalar,dim-1>::general(gtf).position(0,0);
+                const Dune::FieldVector<Scalar,dim-1>& faceLocalNm1 = Dune::GenericReferenceElements<Scalar,dim-1>::general(gtf).position(0,0);
 
                 // center of face in global coordinates
                 Dune::FieldVector<Scalar,dim> faceGlobal = is->geometry().global(faceLocalNm1);
diff --git a/test/decoupled/2p/test_2p.cc b/test/decoupled/2p/test_2p.cc
index 070a70f509..14ca61e8fe 100644
--- a/test/decoupled/2p/test_2p.cc
+++ b/test/decoupled/2p/test_2p.cc
@@ -95,10 +95,8 @@ int main(int argc, char** argv)
         if (restart)
             problem.deserialize(restartTime);
 
-        // run the simulation
-        if (!problem.simulate(dt, tEnd))
-            return 2;
-
+        problem.timeManager().init(problem, 0, dt, tEnd, !restart);
+        problem.timeManager().run();
         return 0;
     }
     catch (Dune::Exception &e) {
-- 
GitLab