diff --git a/dumux/porousmediumflow/implicit/cellcentered/tpfa/darcyslaw.hh b/dumux/porousmediumflow/implicit/cellcentered/tpfa/darcyslaw.hh index 2667980165527797fa7c8c28a1e4aa18704e5453..75f7a891a9ecf9c904dc4152683750f5a0c0ee0a 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 646c7b6000365e08d28b5f1a230bb96700d2a460..be8a44f8a105a560f66540b1bb982c63a854a4f4 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); }