From c0ddac32ae0be04879320977a7fb45f0b6158fa3 Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Sat, 28 Nov 2015 19:07:42 +0000 Subject: [PATCH] turbulenceModels/RAS/kEpsilon/kEpsilon: Added experimental support for fvOptions --- .../solvers/combustion/PDRFoam/Make/options | 6 ++- .../DPMFoam/DPMTurbulenceModels/Make/options | 3 +- .../compressible/Make/options | 6 ++- .../incompressible/Make/options | 6 ++- .../turbulenceModels/RAS/kEpsilon/kEpsilon.C | 16 ++++++ src/fvOptions/fvOption/fvOptionList.H | 28 ++++++++++ .../fvOption/fvOptionListTemplates.C | 51 +++++++++++++++++++ 7 files changed, 109 insertions(+), 7 deletions(-) diff --git a/applications/solvers/combustion/PDRFoam/Make/options b/applications/solvers/combustion/PDRFoam/Make/options index 4768728619e..a415be99b6e 100644 --- a/applications/solvers/combustion/PDRFoam/Make/options +++ b/applications/solvers/combustion/PDRFoam/Make/options @@ -16,7 +16,8 @@ EXE_INC = \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/triSurface/lnInclude + -I$(LIB_SRC)/triSurface/lnInclude \ + -I$(LIB_SRC)/fvOptions/lnInclude EXE_LIBS = \ -lengine \ @@ -29,4 +30,5 @@ EXE_LIBS = \ -lspecie \ -llaminarFlameSpeedModels \ -lfiniteVolume \ - -ldynamicFvMesh + -ldynamicFvMesh \ + -lfvOptions diff --git a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/Make/options b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/Make/options index 902afe59e4f..50f1c4f124d 100644 --- a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/Make/options +++ b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/Make/options @@ -7,4 +7,5 @@ EXE_INC = \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/phaseIncompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/fvOptions/lnInclude diff --git a/src/TurbulenceModels/compressible/Make/options b/src/TurbulenceModels/compressible/Make/options index fa99ca3a58a..d0c99293d11 100644 --- a/src/TurbulenceModels/compressible/Make/options +++ b/src/TurbulenceModels/compressible/Make/options @@ -6,7 +6,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solidSpecie/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/fvOptions/lnInclude LIB_LIBS = \ -lcompressibleTransportModels \ @@ -16,4 +17,5 @@ LIB_LIBS = \ -lturbulenceModels \ -lspecie \ -lfiniteVolume \ - -lmeshTools + -lmeshTools \ + -lfvOptions diff --git a/src/TurbulenceModels/incompressible/Make/options b/src/TurbulenceModels/incompressible/Make/options index 8eceaf533f8..3d11423ccd5 100644 --- a/src/TurbulenceModels/incompressible/Make/options +++ b/src/TurbulenceModels/incompressible/Make/options @@ -2,10 +2,12 @@ EXE_INC = \ -I../turbulenceModels/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/fvOptions/lnInclude LIB_LIBS = \ -lincompressibleTransportModels \ -lturbulenceModels \ -lfiniteVolume \ - -lmeshTools + -lmeshTools \ + -lfvOptions diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C index 7cf2b1fc10d..1deb554d1cc 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "kEpsilon.H" +#include "fvOptionList.H" #include "bound.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -238,6 +239,14 @@ void kEpsilon<BasicTurbulenceModel>::correct() const volVectorField& U = this->U_; volScalarField& nut = this->nut_; + // const_cast needed because the operators and functions of fvOptions + // are currently non-const. + fv::optionList& fvOptions = const_cast<fv::optionList&> + ( + this->mesh_.objectRegistry::template + lookupObject<fv::optionList>("fvOptions") + ); + eddyViscosity<RASModel<BasicTurbulenceModel> >::correct(); volScalarField divU(fvc::div(fvc::absolute(this->phi(), U))); @@ -260,11 +269,14 @@ void kEpsilon<BasicTurbulenceModel>::correct() - fvm::SuSp(((2.0/3.0)*C1_ + C3_)*alpha*rho*divU, epsilon_) - fvm::Sp(C2_*alpha*rho*epsilon_/k_, epsilon_) + epsilonSource() + + fvOptions(alpha, rho, epsilon_) ); epsEqn().relax(); + fvOptions.constrain(epsEqn()); epsEqn().boundaryManipulate(epsilon_.boundaryField()); solve(epsEqn); + fvOptions.correct(epsilon_); bound(epsilon_, this->epsilonMin_); // Turbulent kinetic energy equation @@ -278,13 +290,17 @@ void kEpsilon<BasicTurbulenceModel>::correct() - fvm::SuSp((2.0/3.0)*alpha*rho*divU, k_) - fvm::Sp(alpha*rho*epsilon_/k_, k_) + kSource() + + fvOptions(alpha, rho, k_) ); kEqn().relax(); + fvOptions.constrain(kEqn()); solve(kEqn); + fvOptions.correct(k_); bound(k_, this->kMin_); correctNut(); + fvOptions.correct(nut); } diff --git a/src/fvOptions/fvOption/fvOptionList.H b/src/fvOptions/fvOption/fvOptionList.H index f6e36d9a41e..c881fb01b84 100644 --- a/src/fvOptions/fvOption/fvOptionList.H +++ b/src/fvOptions/fvOption/fvOptionList.H @@ -38,6 +38,7 @@ SourceFile #include "fvOption.H" #include "PtrList.H" #include "GeometricField.H" +#include "geometricOneField.H" #include "fvPatchField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -173,6 +174,33 @@ public: const word& fieldName ); + //- Return source for equation + template<class Type> + tmp<fvMatrix<Type> > operator() + ( + const volScalarField& alpha, + const geometricOneField& rho, + GeometricField<Type, fvPatchField, volMesh>& field + ); + + //- Return source for equation + template<class Type> + tmp<fvMatrix<Type> > operator() + ( + const geometricOneField& alpha, + const volScalarField& rho, + GeometricField<Type, fvPatchField, volMesh>& field + ); + + //- Return source for equation + template<class Type> + tmp<fvMatrix<Type> > operator() + ( + const geometricOneField& alpha, + const geometricOneField& rho, + GeometricField<Type, fvPatchField, volMesh>& field + ); + // Constraints diff --git a/src/fvOptions/fvOption/fvOptionListTemplates.C b/src/fvOptions/fvOption/fvOptionListTemplates.C index 21805dd9ffe..58e362df07f 100644 --- a/src/fvOptions/fvOption/fvOptionListTemplates.C +++ b/src/fvOptions/fvOption/fvOptionListTemplates.C @@ -191,6 +191,57 @@ Foam::tmp<Foam::fvMatrix<Type> > Foam::fv::optionList::operator() } +template<class Type> +Foam::tmp<Foam::fvMatrix<Type> > Foam::fv::optionList::operator() +( + const geometricOneField& alpha, + const geometricOneField& rho, + GeometricField<Type, fvPatchField, volMesh>& field +) +{ + return this->operator()(field, field.name()); +} + + +template<class Type> +Foam::tmp<Foam::fvMatrix<Type> > Foam::fv::optionList::operator() +( + const volScalarField& alpha, + const geometricOneField& rho, + GeometricField<Type, fvPatchField, volMesh>& field +) +{ + volScalarField one + ( + IOobject + ( + "one", + this->mesh_.time().timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->mesh_, + dimensionedScalar("one", dimless, 1.0) + ); + + return this->operator()(alpha, one, field, field.name()); +} + + +template<class Type> +Foam::tmp<Foam::fvMatrix<Type> > Foam::fv::optionList::operator() +( + const geometricOneField& alpha, + const volScalarField& rho, + GeometricField<Type, fvPatchField, volMesh>& field +) +{ + return this->operator()(rho, field, field.name()); +} + + template<class Type> void Foam::fv::optionList::constrain(fvMatrix<Type>& eqn) { -- GitLab