From bb3daa5dcababbf4e1d80f609d7140900e7fd151 Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Mon, 8 Aug 2016 17:56:55 +0200
Subject: [PATCH] [fick's law] Implement mass fractions

---
 .../cellcentered/tpfa/fickslaw.hh             | 25 ++++++++++++++-----
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/dumux/discretization/cellcentered/tpfa/fickslaw.hh b/dumux/discretization/cellcentered/tpfa/fickslaw.hh
index 4ebd1fad13..202c3d9002 100644
--- a/dumux/discretization/cellcentered/tpfa/fickslaw.hh
+++ b/dumux/discretization/cellcentered/tpfa/fickslaw.hh
@@ -79,7 +79,8 @@ public:
                        const ElementVolumeVariables& elemVolVars,
                        const SubControlVolumeFace& scvFace,
                        int phaseIdx, int compIdx,
-                       const FluxVarsCache& fluxVarsCache)
+                       const FluxVarsCache& fluxVarsCache,
+                       bool useMoles = true)
     {
         // diffusion tensors are always solution dependent
         Scalar tij = calculateTransmissibility_(problem, element, fvGeometry, elemVolVars, scvFace, phaseIdx, compIdx);
@@ -91,12 +92,24 @@ public:
         // and the outside volume variables
         const auto& outsideVolVars = elemVolVars[scvFace.outsideScvIdx()];
 
-        // compute the diffusive flux
-        const auto xInside = insideVolVars.moleFraction(phaseIdx, compIdx);
-        const auto xOutside = outsideVolVars.moleFraction(phaseIdx, compIdx);
-        const auto rho = 0.5*(insideVolVars.molarDensity(phaseIdx) + outsideVolVars.molarDensity(phaseIdx));
+        // compute the diffusive flux using mole fractions
+        if (useMoles)
+        {
+            const auto xInside = insideVolVars.moleFraction(phaseIdx, compIdx);
+            const auto xOutside = outsideVolVars.moleFraction(phaseIdx, compIdx);
+            const auto rho = 0.5*(insideVolVars.molarDensity(phaseIdx) + outsideVolVars.molarDensity(phaseIdx));
+
+            return rho*tij*(xInside - xOutside);
+        }
+        // compute the diffusive flux using mass fractions
+        else
+        {
+            const auto xInside = insideVolVars.massFraction(phaseIdx, compIdx);
+            const auto xOutside = outsideVolVars.massFraction(phaseIdx, compIdx);
+            const auto rho = 0.5*(insideVolVars.density(phaseIdx) + outsideVolVars.density(phaseIdx));
 
-        return rho*tij*(xInside - xOutside);
+            return rho*tij*(xInside - xOutside);
+        }
     }
 
     static Stencil stencil(const Problem& problem,
-- 
GitLab