From 55d850343ff0febe490a7494d2e9242cdf9334b9 Mon Sep 17 00:00:00 2001
From: Kilian Weishaupt <kilian.weishaupt@iws.uni-stuttgart.de>
Date: Tue, 15 Nov 2016 11:00:14 +0100
Subject: [PATCH] [staggeredGrid] Improve geometryHelper

* Now calculates the distance between the intersection itself
  and its opposing one
---
 .../staggered/staggeredgeometryhelper.hh              | 11 +++++++++++
 .../discretization/staggered/subcontrolvolumeface.hh  |  8 ++++++++
 test/discretization/staggered/test_staggered.cc       |  1 +
 3 files changed, 20 insertions(+)

diff --git a/dumux/discretization/staggered/staggeredgeometryhelper.hh b/dumux/discretization/staggered/staggeredgeometryhelper.hh
index 21f4623493..46baf40989 100644
--- a/dumux/discretization/staggered/staggeredgeometryhelper.hh
+++ b/dumux/discretization/staggered/staggeredgeometryhelper.hh
@@ -101,6 +101,17 @@ public:
         return gridView_.indexSet().subIndex(this->intersection_.inside(), localOppositeIdx_(inIdx), dim-1) + this->offset_;
     }
 
+     /*!
+     * \brief Returns the distance between dofSelf and dofOpposite
+     */
+    Scalar selfToOppositeDistance() const
+    {
+        const auto inIdx = intersection_.indexInInside();
+        const auto& self = element_.template subEntity <1> (inIdx);
+        const auto& opposite = element_.template subEntity <1> (localOppositeIdx_(inIdx));
+        return (self.geometry().center() - opposite.geometry().center()).two_norm();
+    }
+
      /*!
      * \brief Returns a copy of the pair data
      */
diff --git a/dumux/discretization/staggered/subcontrolvolumeface.hh b/dumux/discretization/staggered/subcontrolvolumeface.hh
index 2a65374624..9ab065a281 100644
--- a/dumux/discretization/staggered/subcontrolvolumeface.hh
+++ b/dumux/discretization/staggered/subcontrolvolumeface.hh
@@ -100,6 +100,7 @@ public:
 
           selfIdx_ = geometryHelper.dofIdxSelf();
           oppositeIdx_ = geometryHelper.dofIdxOpposite();
+          selfToOppositeDistance_ = geometryHelper.selfToOppositeDistance();
 
           pairData_ = geometryHelper.pairData();
       }
@@ -201,6 +202,12 @@ public:
         return oppositeIdx_;
     }
 
+    //! The global index of this sub control volume face
+    Scalar selfToOppositeDistance() const
+    {
+        return selfToOppositeDistance_;
+    }
+
 
     auto pairData(const int idx) const
     {
@@ -219,6 +226,7 @@ private:
 
     int selfIdx_;
     int oppositeIdx_;
+    Scalar selfToOppositeDistance_;
     std::vector<StaggeredSubFace> subfaces_;
     std::array<PairData<Scalar>, numPairs> pairData_;
 
diff --git a/test/discretization/staggered/test_staggered.cc b/test/discretization/staggered/test_staggered.cc
index 21e9f413d4..9195ad7674 100644
--- a/test/discretization/staggered/test_staggered.cc
+++ b/test/discretization/staggered/test_staggered.cc
@@ -145,6 +145,7 @@ int main (int argc, char *argv[]) try
             << "ip "<< scvf.ipGlobal()
             << "; face "  << std::setw(3)  << scvf.index()
             << "; self/oppo " << std::setw(3) << scvf.dofIndexSelf() << "/" << std::setw(3) <<scvf.dofIndexOpposite()
+            << "; dist self/oppo " << std::setw(3) << scvf.selfToOppositeDistance()
             << ", norm1 in/out " << std::setw(3) << scvf.pairData(0).normalPair.first << "/" << std::setw(3) << scvf.pairData(0).normalPair.second
             << ", norm2 in/out " << std::setw(3) << scvf.pairData(1).normalPair.first << "/" << std::setw(3) << scvf.pairData(1).normalPair.second
             << ", par1 in/out " << std::setw(3) << scvf.dofIndexSelf() << "/" << std::setw(3) << scvf.pairData(0).outerParallel
-- 
GitLab