ENH: FA film models - added zonal Cf specification for Darcy model

Co-authored-by: Kutalmis Bercin <kutalmis.bercin@esi-group.com>
This commit is contained in:
Andrew Heather
2025-09-12 14:30:13 +01:00
committed by Kutalmis Bercin
parent 1e715d3847
commit f7fd9f8186
2 changed files with 69 additions and 19 deletions

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2020-2023 OpenCFD Ltd. Copyright (C) 2020-2025 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -82,12 +82,53 @@ filmTurbulenceModel::filmTurbulenceModel
method_(frictionMethodTypeNames_.get("friction", dict_)), method_(frictionMethodTypeNames_.get("friction", dict_)),
shearMethod_(shearMethodTypeNames_.get("shearStress", dict_)), shearMethod_(shearMethodTypeNames_.get("shearStress", dict_)),
rhoName_(dict_.getOrDefault<word>("rho", "rho")), rhoName_(dict_.getOrDefault<word>("rho", "rho")),
rhoRef_(VGREAT) rhoRef_(VGREAT),
CwPtr_(nullptr),
dwfPtr_(nullptr)
{ {
if (rhoName_ == "rhoInf") if (rhoName_ == "rhoInf")
{ {
rhoRef_ = dict_.get<scalar>("rhoInf"); rhoRef_ = dict_.get<scalar>("rhoInf");
} }
const auto& regionMesh = film_.regionMesh();
CwPtr_.reset
(
new areaScalarField
(
IOobject
(
IOobject::scopedName(typeName, "Cw"),
regionMesh.time().timeName(),
regionMesh.thisDb(),
IOobject::NO_READ,
IOobject::NO_WRITE,
IOobject::NO_REGISTER
),
regionMesh,
dimensionedScalar(dimVelocity, Zero)
)
);
auto* dwfNamePtr = dict_.findEntry("DarcyWeisbachField");
if (dwfNamePtr)
{
dwfPtr_.reset
(
new areaScalarField
(
IOobject
(
word(dwfNamePtr->stream()),
regionMesh.time().timeName(),
regionMesh.thisDb(),
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
regionMesh
)
);
}
} }
@ -101,15 +142,7 @@ const liquidFilmBase& filmTurbulenceModel::film() const
tmp<areaScalarField> filmTurbulenceModel::Cw() const tmp<areaScalarField> filmTurbulenceModel::Cw() const
{ {
auto tCw = areaScalarField::New auto& Cw = CwPtr_.ref();
(
"tCw",
IOobject::NO_REGISTER,
film_.regionMesh(),
dimensionedScalar(dimVelocity, Zero)
);
auto& Cw = tCw.ref();
switch (method_) switch (method_)
{ {
@ -140,21 +173,32 @@ tmp<areaScalarField> filmTurbulenceModel::Cw() const
} }
case mDarcyWeisbach: case mDarcyWeisbach:
{ {
const uniformDimensionedVectorField& g = const auto& primaryMesh = film_.primaryMesh();
meshObjects::gravity::New(film_.primaryMesh().time()); const auto& g = meshObjects::gravity::New(primaryMesh.time());
const auto magG(mag(g.value()));
const vectorField& Uf = film_.Uf().primitiveField(); const vectorField& Uf = film_.Uf().primitiveField();
const scalarField& rho = film_.rho().primitiveField(); const scalarField& rho = film_.rho().primitiveField();
const scalar Cf = dict_.get<scalar>("DarcyWeisbach"); auto& Cwp = Cw.primitiveFieldRef();
Cw.primitiveFieldRef() = Cf*mag(g.value())*mag(Uf)/rho; auto* dwfNamePtr = dict_.findEntry("DarcyWeisbachField");
if (dwfNamePtr)
{
Cwp = dwfPtr_.ref().primitiveField()*magG*mag(Uf)/rho;
}
else
{
const scalar Cf = dict_.get<scalar>("DarcyWeisbach");
Cwp = Cf*magG*mag(Uf)/rho;
}
break; break;
} }
case mManningStrickler: case mManningStrickler:
{ {
const uniformDimensionedVectorField& g = const auto& primaryMesh = film_.primaryMesh();
meshObjects::gravity::New(film_.primaryMesh().time()); const auto& g = meshObjects::gravity::New(primaryMesh.time());
const vectorField& Uf = film_.Uf().primitiveField(); const vectorField& Uf = film_.Uf().primitiveField();
const scalarField& h = film_.h().primitiveField(); const scalarField& h = film_.h().primitiveField();
@ -180,7 +224,7 @@ tmp<areaScalarField> filmTurbulenceModel::Cw() const
} }
} }
return tCw; return CwPtr_();
} }

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2020-2021 OpenCFD Ltd. Copyright (C) 2020-2025 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -177,6 +177,12 @@ protected:
//- Reference density needed for incompressible calculations //- Reference density needed for incompressible calculations
scalar rhoRef_; scalar rhoRef_;
//- Wall film-surface friction field
mutable autoPtr<areaScalarField> CwPtr_;
//- Darcy-Weisbach model field
mutable autoPtr<areaScalarField> dwfPtr_;
public: public: