From 2b14bf6de9b99b974b79eed5833d750d2793eb6c Mon Sep 17 00:00:00 2001
From: DennisGlaeser <dennis.glaeser@iws.uni-stuttgart.de>
Date: Fri, 11 Mar 2016 10:07:21 +0100
Subject: [PATCH] [2pdfm][volvars] remove unused/unnecessary variables

Many of the private variables were not necessary for the performed
calculations.
---
 .../2pdfm/implicit/volumevariables.hh         | 154 +++++-------------
 1 file changed, 43 insertions(+), 111 deletions(-)

diff --git a/dumux/porousmediumflow/2pdfm/implicit/volumevariables.hh b/dumux/porousmediumflow/2pdfm/implicit/volumevariables.hh
index c1fb6127a7..6f35b5e47e 100644
--- a/dumux/porousmediumflow/2pdfm/implicit/volumevariables.hh
+++ b/dumux/porousmediumflow/2pdfm/implicit/volumevariables.hh
@@ -94,22 +94,15 @@ public:
                            scvIdx,
                            isOldSol);
 
+        // calculate the matrix mobilities
         this->completeFluidState(priVars, problem, element, fvGeometry, scvIdx, fluidState_);
+        const MaterialLawParams &materialParams = problem.spatialParams().materialLawParams(element, fvGeometry, scvIdx);
+        mobilityMatrix_[wPhaseIdx] = MaterialLaw::krw(materialParams, fluidState_.saturation(wPhaseIdx)) / fluidState_.viscosity(wPhaseIdx);
+        mobilityMatrix_[nPhaseIdx] = MaterialLaw::krn(materialParams, fluidState_.saturation(wPhaseIdx)) / fluidState_.viscosity(nPhaseIdx);
 
-        const MaterialLawParams &materialParams =
-            problem.spatialParams().materialLawParams(element, fvGeometry, scvIdx);
-
-        mobilityMatrix_[wPhaseIdx] =
-            MaterialLaw::krw(materialParams, fluidState_.saturation(wPhaseIdx))
-            / fluidState_.viscosity(wPhaseIdx);
-
-        mobilityMatrix_[nPhaseIdx] =
-            MaterialLaw::krn(materialParams, fluidState_.saturation(wPhaseIdx))
-            / fluidState_.viscosity(nPhaseIdx);
-
-        // energy related quantities not belonging to the fluid state
-        asImp_().updateEnergy_(priVars, problem, element, fvGeometry, scvIdx, isOldSol);
-        asImp_().updateFracture(priVars, problem, element, fvGeometry, scvIdx, isOldSol);
+        // update the fracture if we are on a fracture vertex
+        if (problem.spatialParams().isVertexFracture(element, scvIdx))
+            asImp_().updateFracture(priVars, problem, element, fvGeometry, scvIdx, isOldSol);
     }
 
     /*!
@@ -129,101 +122,45 @@ public:
                         int scvIdx,
                         bool isOldSol)
     {
-        PrimaryVariables varsFracture;
         const MaterialLawParams &materialParamsMatrix =
                     problem.spatialParams().materialLawParams(element, fvGeometry, scvIdx);
-        Scalar pressure[numPhases];
-        Scalar pMatrix[numPhases];
-        Scalar pFract[numPhases];
 
+        // initially we set the matrix saturations equal to the fracture saturations
         satNMatrix_  = priVars[saturationIdx];
         satWMatrix_  = 1.0 - satNMatrix_;
-        satN_ = satNMatrix_;
-        satW_ = satWMatrix_;
-
-        pcMatrix_ = MaterialLaw::pc(materialParamsMatrix, satWMatrix_);
-        pc_ = pcMatrix_;
-        //pressures
-        pMatrix[wPhaseIdx] = priVars[pressureIdx];
-        pMatrix[nPhaseIdx] = pMatrix[wPhaseIdx] + pcMatrix_;
-        //Initialize pFract with the same values as the ones in the matrix
-        pFract[wPhaseIdx] = pMatrix[wPhaseIdx];
-        pFract[nPhaseIdx] = satNMatrix_;
-
-        varsFracture[pressureIdx] = pFract[wPhaseIdx];
-        varsFracture[saturationIdx] = pFract[wPhaseIdx];
 
+        // the fluid state of the fracture
         this->completeFluidState(priVars, problem, element, fvGeometry, scvIdx, fluidStateFracture_);
 
-        //Checks if the node is on a fracture
-        isNodeOnFracture_ = problem.spatialParams().isVertexFracture(element, scvIdx);
+        const MaterialLawParams &materialParamsFracture = problem.spatialParams().materialLawParamsFracture(element, fvGeometry, scvIdx);
 
-        ///////////////////////////////////////////////////////////////////////////////
-        if (isNodeOnFracture_)
-        {
-            const MaterialLawParams &materialParamsFracture =
-                    problem.spatialParams().materialLawParamsFracture(element, fvGeometry, scvIdx);
-
-            satNFracture_ = priVars[saturationIdx];
-            satWFracture_ = 1 - satNFracture_;
-            pcFracture_ = MaterialLaw::pc(materialParamsFracture, satWFracture_);
-            pFract[wPhaseIdx] = priVars[pressureIdx];
-            pFract[nPhaseIdx] = pFract[wPhaseIdx] + pcFracture_;
-            pEntryMatrix_ = MaterialLaw::pc(materialParamsMatrix, 1);
-
-            //use interface condition - extended capillary pressure inteface condition
-            if (problem.useInterfaceCondition())
-            {
-                interfaceCondition(materialParamsMatrix);
-            }
-            pc_ = pcFracture_;
-            satW_ = satWFracture_; //for plotting we are interested in the saturations of the fracture
-            satN_ = satNFracture_;
-            mobilityFracture_[wPhaseIdx] =
-                    MaterialLaw::krw(materialParamsFracture, fluidStateFracture_.saturation(wPhaseIdx))
-                    / fluidStateFracture_.viscosity(wPhaseIdx);
-
-            mobilityFracture_[nPhaseIdx] =
-                    MaterialLaw::krn(materialParamsFracture, fluidStateFracture_.saturation(wPhaseIdx))
-                        / fluidStateFracture_.viscosity(nPhaseIdx);
-        }// end if (node)
-        ///////////////////////////////////////////////////////////////////////////////
-        else
+        // use interface condition - extended capillary pressure inteface condition
+        if (problem.useInterfaceCondition())
         {
-            /* the values of pressure and saturation of the fractures in the volumes where
-                there are no fracture are set unphysical*/
-            satNFracture_ = -1;
-            satWFracture_ = -1;
-            pcFracture_ = -1e100;
-            pFract[wPhaseIdx] = -1e100;
-            pFract[nPhaseIdx] = -1e100;
-            pEntryMatrix_ = -1e100;
-            mobilityFracture_[wPhaseIdx] = 0.0;
-            mobilityFracture_[nPhaseIdx] = 0.0;
-        }
-        ///////////////////////////////////////////////////////////////////////////////
-        pressure[wPhaseIdx] = priVars[pressureIdx];
-        pressure[nPhaseIdx] = pressure[wPhaseIdx] + pc_;
+            // priVars correspond to the solution in the fracture and are used for the interface condition
+            interfaceCondition(priVars, materialParamsMatrix, materialParamsFracture);
 
-        porosityFracture_ = problem.spatialParams().porosityFracture(element,
-                                                                  fvGeometry,
-                                                                  scvIdx);
+            // After modifying the matrix saturations we have to update the fluid state and the matrix mobilities
+            PrimaryVariables updatedMatrixPriVars(priVars);
+            updatedMatrixPriVars[saturationIdx] = satNMatrix_;
+            this->completeFluidState(updatedMatrixPriVars, problem, element, fvGeometry, scvIdx, fluidState_);
 
-        permeabilityFracture_ = problem.spatialParams().intrinsicPermeabilityFracture(element, fvGeometry, scvIdx);
+            mobilityMatrix_[wPhaseIdx] = MaterialLaw::krw(materialParamsMatrix, satWMatrix_) / fluidState_.viscosity(wPhaseIdx);
+            mobilityMatrix_[nPhaseIdx] = MaterialLaw::krn(materialParamsMatrix, satWMatrix_) / fluidState_.viscosity(nPhaseIdx);
+        }
 
-        // After modifying the Matrix saturations we have to update the fluid state and the matrix mobilities
-        PrimaryVariables updatedMatrixPV;
-        updatedMatrixPV[pressureIdx] = priVars[pressureIdx];
-        updatedMatrixPV[saturationIdx] = satWMatrix_;
-        this->completeFluidState(updatedMatrixPV, problem, element, fvGeometry, scvIdx, fluidState_);
+        // calculate the mobilities in the fracture using the material parameters in the fracture
+        mobilityFracture_[wPhaseIdx] =
+                MaterialLaw::krw(materialParamsFracture, fluidStateFracture_.saturation(wPhaseIdx))
+                / fluidStateFracture_.viscosity(wPhaseIdx);
 
-        mobilityMatrix_[wPhaseIdx] =
-            MaterialLaw::krw(materialParamsMatrix, satWMatrix_)
-            / fluidState_.viscosity(wPhaseIdx);
+        mobilityFracture_[nPhaseIdx] =
+                MaterialLaw::krn(materialParamsFracture, fluidStateFracture_.saturation(wPhaseIdx))
+                    / fluidStateFracture_.viscosity(nPhaseIdx);
 
-        mobilityMatrix_[nPhaseIdx] =
-            MaterialLaw::krn(materialParamsMatrix, satWMatrix_)
-            / fluidState_.viscosity(nPhaseIdx);
+        // set the porosity and permeability
+        porosityFracture_ = problem.spatialParams().porosityFracture(element, fvGeometry, scvIdx);
+        permeabilityFracture_ = problem.spatialParams().intrinsicPermeabilityFracture(element, fvGeometry, scvIdx);
     }
 
     /*!
@@ -233,13 +170,18 @@ public:
      *
      * This method is called by updateFracture
      */
-    void interfaceCondition(const MaterialLawParams &materialParamsMatrix)
+    void interfaceCondition(const PrimaryVariables &priVars, const MaterialLawParams &materialParamsMatrix, const MaterialLawParams &materialParamsFracture)
     {
+        // calculate the capillary pressure in the fracture and the entry pressure in the matrix
+        // the wetting saturation in the fracture is 1 - Sn
+        Scalar pcFracture = MaterialLaw::pc(materialParamsFracture, 1 - priVars[saturationIdx]);
+        Scalar pEntryMatrix = MaterialLaw::pc(materialParamsMatrix, 1.0);
+
         /*2nd condition Niessner, J., R. Helmig, H. Jakobs, and J.E. Roberts. 2005, eq.10
         * if the capillary pressure in the fracture is smaller than the entry pressure
         * in the matrix than in the matrix
         * */
-        if (pcFracture_ <= pEntryMatrix_)
+        if (pcFracture <= pEntryMatrix)
         {
             satWMatrix_ = 1.0;
             satNMatrix_ = 1 - satWMatrix_;
@@ -250,7 +192,7 @@ public:
             /*
              * Inverse capillary pressure function SwM = pcM^(-1)(pcF(SwF))
              */
-            satWMatrix_ = MaterialLaw::sw(materialParamsMatrix, pcFracture_);
+            satWMatrix_ = MaterialLaw::sw(materialParamsMatrix, pcFracture);
             satNMatrix_ = 1 - satWMatrix_;
         }
     }
@@ -301,9 +243,9 @@ public:
     Scalar saturationFracture(int phaseIdx) const
     {
         if (phaseIdx == wPhaseIdx)
-            return satWFracture_;
+            return 1.0 - this->priVar(saturationIdx);
         else
-            return satNFracture_;
+            return this->priVar(saturationIdx);
     }
     Scalar saturationMatrix(int phaseIdx) const
     {
@@ -346,26 +288,16 @@ public:
 protected:
     FluidState fluidState_;
     FluidState fluidStateFracture_;
+
     Scalar porosityFracture_;
-    Scalar permeability_;
     Scalar permeabilityFracture_;
+
     Scalar mobilityMatrix_[numPhases];
     Scalar mobilityFracture_[numPhases];
 
-    Scalar satW_;
-    Scalar satWFracture_;
     Scalar satWMatrix_;
-    Scalar satN_;
-    Scalar satNFracture_;
     Scalar satNMatrix_;
 
-    Scalar pc_;
-    Scalar pcFracture_;
-    Scalar pcMatrix_;
-    Scalar pEntryMatrix_;
-
-    bool isNodeOnFracture_;
-
 private:
     Implementation &asImp_()
     { return *static_cast<Implementation*>(this); }
-- 
GitLab