multiphaseEulerFoam: Updated the internal energy pressure work term

The pressure work term for total internal energy is div(U p) which can be
discretised is various ways, given a mass flux field phi it seems logical to
implement it in the form div(phi/interpolate(rho), p) but this is not exactly
consistent with the relationship between enthalpy and internal energy (h = e +
p/rho) and the transport of enthalpy, it would be more consistent to implement
it in the form div(phi, p/rho).  A further improvement in consistency can be
gained by using the same convection scheme for this work term and the convection
term div(phi, e) and for reacting solvers this is easily achieved by using the
multi-variate limiter mvConvection provided for energy and specie convection.

This more consistent total internal energy work term has now been implemented in
all the compressible and reacting flow solvers and provides more accurate
solutions when running with internal energy, particularly for variable density
mixing cases with small pressure variation.

For non-reacting compressible solvers this improvement requires a change to the
corresponding divScheme in fvSchemes:

    "div\(alphaPhi.*,p\)" -> "div\(alphaRhoPhi.*,\(p\|thermo:rho.*\)\)"

and all the tutorials have been updated accordingly.
This commit is contained in:
Henry Weller
2021-06-11 19:36:33 +01:00
parent 62c782367d
commit 6c0087d005
31 changed files with 75 additions and 32 deletions

View File

@ -106,9 +106,6 @@ Foam::AnisothermalPhaseModel<BasePhaseModel>::heEqn()
const tmp<volVectorField> tU(this->U());
const volVectorField& U(tU());
const tmp<surfaceScalarField> talphaPhi(this->alphaPhi());
const surfaceScalarField& alphaPhi(talphaPhi());
const tmp<surfaceScalarField> talphaRhoPhi(this->alphaRhoPhi());
const surfaceScalarField& alphaRhoPhi(talphaRhoPhi());
@ -139,7 +136,11 @@ Foam::AnisothermalPhaseModel<BasePhaseModel>::heEqn()
{
tEEqn.ref() += filterPressureWork
(
fvc::div(fvc::absolute(alphaPhi, alpha, U), this->thermo().p())
fvc::div
(
fvc::absolute(alphaRhoPhi, alpha, rho, U),
this->thermo().p()/rho
)
+ (fvc::ddt(alpha) - contErr/rho)*this->thermo().p()
);
}

View File

@ -56,6 +56,9 @@ makeRASLESThermophysicalTransportModel(RAS, eddyDiffusivity);
#include "unityLewisEddyDiffusivity.H"
makeRASLESThermophysicalTransportModel(RAS, unityLewisEddyDiffusivity);
#include "nonUnityLewisEddyDiffusivity.H"
makeRASLESThermophysicalTransportModel(RAS, nonUnityLewisEddyDiffusivity);
// -------------------------------------------------------------------------- //
// LES models
@ -67,5 +70,8 @@ makeRASLESThermophysicalTransportModel(LES, eddyDiffusivity);
#include "unityLewisEddyDiffusivity.H"
makeRASLESThermophysicalTransportModel(LES, unityLewisEddyDiffusivity);
#include "nonUnityLewisEddyDiffusivity.H"
makeRASLESThermophysicalTransportModel(LES, nonUnityLewisEddyDiffusivity);
// ************************************************************************* //

View File

@ -231,6 +231,32 @@ Foam::tmp<Foam::surfaceScalarField> Foam::fvc::absolute
}
Foam::tmp<Foam::surfaceScalarField> Foam::fvc::absolute
(
const tmp<surfaceScalarField>& tphi,
const volScalarField& alpha,
const volScalarField& rho,
const volVectorField& U
)
{
if (tphi().mesh().moving())
{
const word phiName(tphi().name());
return surfaceScalarField::New
(
phiName,
tphi
+ fvc::interpolate(alpha)*fvc::interpolate(rho)*fvc::meshPhi(rho, U)
);
}
else
{
return tmp<surfaceScalarField>(tphi, true);
}
}
void Foam::fvc::correctUf
(
autoPtr<surfaceVectorField>& Uf,

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -148,6 +148,15 @@ namespace fvc
const volVectorField& U
);
//- Return the given relative flux in absolute form
tmp<surfaceScalarField> absolute
(
const tmp<surfaceScalarField>& tphi,
const volScalarField& alpha,
const volScalarField& rho,
const volVectorField& U
);
void correctUf
(
autoPtr<surfaceVectorField>& Uf,

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,k.*\)" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)\*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;

View File

@ -40,7 +40,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,f.*\)" Gauss upwind;
"div\(alphaRhoPhi.*,K.*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,p\)" Gauss linearUpwind limited;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss linearUpwind limited;
"div\(phi.*,kappai.*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(k|epsilon|omega).*\)" Gauss upwind;
"div\(phim,(k|epsilon)m\)" Gauss upwind;

View File

@ -37,7 +37,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
div(alphaRhoPhi.solids,Theta.solids) Gauss limitedLinear 1;

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(k|epsilon).*\)" Gauss limitedLinear 1;
"div\(phim,(k|epsilon)m\)" Gauss limitedLinear 1;

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(k|epsilon).*\)" Gauss limitedLinear 1;
"div\(phim,(k|epsilon)m\)" Gauss limitedLinear 1;

View File

@ -37,7 +37,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
div(alphaRhoPhi.particles,Theta.particles) Gauss limitedLinear 1;

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,K.*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,p\)" Gauss linearUpwind limited;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(k|epsilon|omega).*\)" Gauss linearUpwind limited;
"div\(phim,(k|epsilon)m\)" Gauss linearUpwind limited;

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,K.*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,p\)" Gauss linearUpwind limited;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss linearUpwind limited;
"div\(phi.*,kappai.*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(k|epsilon|omega).*\)" Gauss linearUpwind limited;
"div\(phim,(k|epsilon)m\)" Gauss linearUpwind limited;

View File

@ -40,7 +40,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,f.*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,K.*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,p\)" Gauss linearUpwind limited;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(k|epsilon|omega).*\)" Gauss linearUpwind limited;
"div\(phim,(k|epsilon)m\)" Gauss linearUpwind limited;

View File

@ -40,7 +40,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,f.*\)" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,K.*\)" Gauss linearUpwind limited;
"div\(alphaPhi.*,p\)" Gauss linearUpwind limited;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss linearUpwind limited;
"div\(alphaRhoPhi.*,(k|epsilon|omega).*\)" Gauss linearUpwind limited;
"div\(phim,(k|epsilon)m\)" Gauss linearUpwind limited;

View File

@ -37,7 +37,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -39,7 +39,8 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,\(p\|thermo:rho.*\)\)" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -41,7 +41,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -35,7 +35,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -37,7 +37,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
div((((alpha.air*thermo:rho.air)*nuEff.air)*dev2(T(grad(U.air))))) Gauss linear;
}

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)\*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -35,7 +35,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -35,7 +35,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}

View File

@ -38,7 +38,7 @@ divSchemes
"div\(alphaRhoPhi.*,Yi\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,(k|epsilon).*\)" Gauss limitedLinear 1;
"div\(phim,(k|epsilon)m\)" Gauss limitedLinear 1;

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,(k|epsilon|h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,Y.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaPhi.*,f.*\)" Gauss upwind;
"div\(fAlphaPhi.*,kappa.*\)" Gauss linearUpwind limited;

View File

@ -39,7 +39,7 @@ divSchemes
"div\(alphaRhoPhi.*,(k|epsilon|h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,Y.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(alphaPhi.*,f.*\)" Gauss upwind;
"div\(fAlphaPhi.*,kappa.*\)" Gauss linearUpwind limited;

View File

@ -37,7 +37,7 @@ divSchemes
"div\(alphaRhoPhi.*,(h|e).*\)" Gauss limitedLinear 1;
"div\(alphaRhoPhi.*,K.*\)" Gauss limitedLinear 1;
"div\(alphaPhi.*,p\)" Gauss limitedLinear 1;
"div(alphaRhoPhi.*,(p|thermo:rho.*))" Gauss limitedLinear 1;
"div\(\(\(\(alpha.*\*thermo:rho.*\)*nuEff.*\)\*dev2\(T\(grad\(U.*\)\)\)\)\)" Gauss linear;
}