From bc98b96ec92135717c4fbadf7868f59be4b8a62f Mon Sep 17 00:00:00 2001 From: Katharina Heck <katharina.heck@iws.uni-stuttgart.de> Date: Tue, 1 Oct 2019 18:09:45 +0200 Subject: [PATCH] [cleanup][flux] add free function for decision on right density depending on reference system in the base fickslaw --- dumux/flux/box/fickslaw.hh | 5 ++--- dumux/flux/ccmpfa/fickslaw.hh | 6 +++--- dumux/flux/cctpfa/fickslaw.hh | 6 +++--- dumux/flux/fickslaw.hh | 10 ++++++++++ dumux/flux/staggered/freeflow/fickslaw.hh | 4 ++-- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/dumux/flux/box/fickslaw.hh b/dumux/flux/box/fickslaw.hh index a0abc14528..1c33623b51 100644 --- a/dumux/flux/box/fickslaw.hh +++ b/dumux/flux/box/fickslaw.hh @@ -96,7 +96,7 @@ public: Scalar rho(0.0); for (auto&& scv : scvs(fvGeometry)) { - const auto massOrMolarDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[scv].density(phaseIdx) : elemVolVars[scv].molarDensity(phaseIdx); + const Scalar massOrMolarDensity = Dumux::massOrMolarDensity(elemVolVars[scv], referenceSystem, phaseIdx); rho += massOrMolarDensity*shapeValues[scv.indexInElement()][0]; } @@ -153,8 +153,7 @@ public: const auto& shapeValues = fluxVarCache.shapeValues(); for (auto&& scv : scvs(fvGeometry)) { - const auto massOrMolarDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[scv].density(phaseIdx) : elemVolVars[scv].molarDensity(phaseIdx); - + const Scalar massOrMolarDensity = Dumux::massOrMolarDensity(elemVolVars[scv], referenceSystem, phaseIdx); rho += massOrMolarDensity*shapeValues[scv.indexInElement()][0]; } diff --git a/dumux/flux/ccmpfa/fickslaw.hh b/dumux/flux/ccmpfa/fickslaw.hh index 2d8cc2d220..f378ba5ed2 100644 --- a/dumux/flux/ccmpfa/fickslaw.hh +++ b/dumux/flux/ccmpfa/fickslaw.hh @@ -250,19 +250,19 @@ private: // use arithmetic mean of the densities around the scvf if (!scvf.boundary()) { - const auto rhoInside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[scvf.insideScvIdx()].density(phaseIdx) : elemVolVars[scvf.insideScvIdx()].molarDensity(phaseIdx); + const auto rhoInside = Dumux::massOrMolarDensity(elemVolVars[scvf.insideScvIdx()], referenceSystem, phaseIdx); Scalar rho = rhoInside; for (const auto outsideIdx : scvf.outsideScvIndices()) { - const auto rhoOutside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[outsideIdx].density(phaseIdx) : elemVolVars[outsideIdx].molarDensity(phaseIdx); + const auto rhoOutside = Dumux::massOrMolarDensity(elemVolVars[outsideIdx], referenceSystem, phaseIdx); rho += rhoOutside; } return rho/(scvf.outsideScvIndices().size()+1); } else - return (referenceSystem == ReferenceSystemFormulation::massAveraged) ?elemVolVars[scvf.outsideScvIdx()].density(phaseIdx) : elemVolVars[scvf.outsideScvIdx()].molarDensity(phaseIdx); + return Dumux::massOrMolarDensity(elemVolVars[scvf.outsideScvIdx()], referenceSystem, phaseIdx); } //! Here we want to calculate the factors with which the diffusion coefficient has to be diff --git a/dumux/flux/cctpfa/fickslaw.hh b/dumux/flux/cctpfa/fickslaw.hh index c63c21eebf..7e3b29b377 100644 --- a/dumux/flux/cctpfa/fickslaw.hh +++ b/dumux/flux/cctpfa/fickslaw.hh @@ -157,9 +157,9 @@ public: : branchingFacetX(problem, element, fvGeometry, elemVolVars, elemFluxVarsCache, scvf, xInside, tij, phaseIdx, compIdx); - const auto rhoInside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? insideVolVars.density(phaseIdx) : insideVolVars.molarDensity(phaseIdx); + const auto rhoInside = Dumux::massOrMolarDensity(insideVolVars, referenceSystem, phaseIdx); - const auto rhoOutside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? outsideVolVars.density(phaseIdx) : outsideVolVars.molarDensity(phaseIdx); + const auto rhoOutside = Dumux::massOrMolarDensity(outsideVolVars, referenceSystem, phaseIdx); const auto rho = scvf.numOutsideScvs() == 1 ? 0.5*(rhoInside + rhoOutside) : branchingFacetDensity(elemVolVars, scvf, phaseIdx, rhoInside); @@ -268,7 +268,7 @@ private: { const auto outsideScvIdx = scvf.outsideScvIdx(i); const auto& outsideVolVars = elemVolVars[outsideScvIdx]; - const auto rhoOutside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? outsideVolVars.density(phaseIdx) : outsideVolVars.molarDensity(phaseIdx); + const auto rhoOutside = Dumux::massOrMolarDensity(outsideVolVars, referenceSystem, phaseIdx); rho += rhoOutside; } return rho/(scvf.numOutsideScvs()+1); diff --git a/dumux/flux/fickslaw.hh b/dumux/flux/fickslaw.hh index ad5aa09ed9..6946998cf2 100644 --- a/dumux/flux/fickslaw.hh +++ b/dumux/flux/fickslaw.hh @@ -43,6 +43,16 @@ class FicksLawImplementation; template <class TypeTag, ReferenceSystemFormulation referenceSystem = ReferenceSystemFormulation::massAveraged> using FicksLaw = FicksLawImplementation<TypeTag, GetPropType<TypeTag, Properties::FVGridGeometry>::discMethod, referenceSystem>; +/*! + * \ingroup Flux + * \brief evaluates the density to be used in Fick's law based on the reference system + */ +template<class VolumeVariables> +auto massOrMolarDensity(const VolumeVariables& volVars, ReferenceSystemFormulation referenceSys, const int phaseIdx) +{ + return (referenceSys == ReferenceSystemFormulation::massAveraged) ? volVars.density(phaseIdx) : volVars.molarDensity(phaseIdx); +} + } // end namespace Dumux #include <dumux/flux/cctpfa/fickslaw.hh> diff --git a/dumux/flux/staggered/freeflow/fickslaw.hh b/dumux/flux/staggered/freeflow/fickslaw.hh index 68b33982fa..bfa8351a60 100644 --- a/dumux/flux/staggered/freeflow/fickslaw.hh +++ b/dumux/flux/staggered/freeflow/fickslaw.hh @@ -95,7 +95,7 @@ public: const auto& outsideVolVars = elemVolVars[scvf.outsideScvIdx()]; const Scalar insideDistance = (insideScv.dofPosition() - scvf.ipGlobal()).two_norm(); - const Scalar insideDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? insideVolVars.density() : insideVolVars.molarDensity(); + const Scalar insideDensity = Dumux::massOrMolarDensity(insideVolVars, referenceSystem, 0); for (int compIdx = 0; compIdx < numComponents; ++compIdx) { @@ -118,7 +118,7 @@ public: const auto& outsideScv = fvGeometry.scv(scvf.outsideScvIdx()); const Scalar outsideD = outsideVolVars.effectiveDiffusivity(0, compIdx) * outsideVolVars.extrusionFactor(); const Scalar outsideDistance = (outsideScv.dofPosition() - scvf.ipGlobal()).two_norm(); - const Scalar outsideDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? outsideVolVars.density() : outsideVolVars.molarDensity(); + const Scalar outsideDensity = Dumux::massOrMolarDensity(outsideVolVars, referenceSystem, 0); const Scalar avgDensity = 0.5*(insideDensity + outsideDensity); const Scalar avgD = harmonicMean(insideD, outsideD, insideDistance, outsideDistance); -- GitLab