From bdb7b01cd8f395d0f0a94d12633fcc5374eacb58 Mon Sep 17 00:00:00 2001 From: Timo Koch <timo.koch@iws.uni-stuttgart.de> Date: Tue, 15 Mar 2016 02:21:41 +0100 Subject: [PATCH] [fluxes] Use average density as face density approximation --- .../implicit/cellcentered/tpfa/darcyslaw.hh | 20 +++++++++++-------- .../implicit/cellcentered/tpfa/fickslaw.hh | 6 +++--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/dumux/porousmediumflow/implicit/cellcentered/tpfa/darcyslaw.hh b/dumux/porousmediumflow/implicit/cellcentered/tpfa/darcyslaw.hh index 2667980165..75f7a891a9 100644 --- a/dumux/porousmediumflow/implicit/cellcentered/tpfa/darcyslaw.hh +++ b/dumux/porousmediumflow/implicit/cellcentered/tpfa/darcyslaw.hh @@ -124,20 +124,24 @@ public: if (enableGravity_) { + // do averaging for the density + const auto rhoInside = insideVolVars->density(phaseIdx); + const auto rhoOutide = outsideVolVars->density(phaseIdx); + const auto rho = (rhoInside + rhoOutide)*0.5; + + // ask for the gravitational acceleration in the inside neighbor const auto xInside = insideScv.center(); const auto gInside = problem_().gravityAtPos(xInside); - const auto rhoInside = insideVolVars->density(phaseIdx); - hInside -= rhoInside*(gInside*xInside); + hInside -= rho*(gInside*xInside); // and the outside neighbor - auto rhoOutside = outsideVolVars->density(phaseIdx); if (scvFace_().boundary()) { const auto xOutside = scvFace_().center(); const auto gOutside = problem_().gravityAtPos(xOutside); - hOutside -= rhoOutside*(gOutside*xOutside); + hOutside -= rho*(gOutside*xOutside); } else { @@ -145,7 +149,7 @@ public: const auto& outsideScv = problem_().model().fvGeometries().subControlVolume(outsideScvIdx); const auto xOutside = outsideScv.center(); const auto gOutside = problem_().gravityAtPos(xOutside); - hOutside -= rhoOutside*(gOutside*xOutside); + hOutside -= rho*(gOutside*xOutside); } } @@ -180,7 +184,7 @@ public: return kGradPNormal_[phaseIdx]*upwindFunction(upVolVars(phaseIdx), dnVolVars(phaseIdx)); } - std::set<IndexType> stencil() const + const std::set<IndexType>& stencil() const { return stencil_; } @@ -234,10 +238,10 @@ private: { // fill the stencil if (!scvFace_().boundary()) - stencil_= {scvFace_().insideScvIdx(), scvFace_().outsideScvIdx()}; + stencil_.insert({scvFace_().insideScvIdx(), scvFace_().outsideScvIdx()}); else // fill the stencil - stencil_ = {scvFace_().insideScvIdx()}; + stencil_.insert(scvFace_().insideScvIdx()); } Scalar calculateOmega_(const DimWorldMatrix &K, const SubControlVolume &scv) const diff --git a/dumux/porousmediumflow/implicit/cellcentered/tpfa/fickslaw.hh b/dumux/porousmediumflow/implicit/cellcentered/tpfa/fickslaw.hh index 646c7b6000..be8a44f8a1 100644 --- a/dumux/porousmediumflow/implicit/cellcentered/tpfa/fickslaw.hh +++ b/dumux/porousmediumflow/implicit/cellcentered/tpfa/fickslaw.hh @@ -119,9 +119,9 @@ public: } // compute the diffusive flux - auto xInside = insideVolVars->moleFraction(phaseIdx_, compIdx_); - auto xOutside = outsideVolVars->moleFraction(phaseIdx_, compIdx_); - auto rho = 0.5*(insideVolVars->molarDensity(phaseIdx_) + outsideVolVars->molarDensity(phaseIdx_)); + 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_)); rhoDGradXNormal_ = rho*tij_*(xInside - xOutside); } -- GitLab