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
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2020-2023 OpenCFD Ltd.
Copyright (C) 2020-2025 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -82,12 +82,53 @@ filmTurbulenceModel::filmTurbulenceModel
method_(frictionMethodTypeNames_.get("friction", dict_)),
shearMethod_(shearMethodTypeNames_.get("shearStress", dict_)),
rhoName_(dict_.getOrDefault<word>("rho", "rho")),
rhoRef_(VGREAT)
rhoRef_(VGREAT),
CwPtr_(nullptr),
dwfPtr_(nullptr)
{
if (rhoName_ == "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
{
auto tCw = areaScalarField::New
(
"tCw",
IOobject::NO_REGISTER,
film_.regionMesh(),
dimensionedScalar(dimVelocity, Zero)
);
auto& Cw = tCw.ref();
auto& Cw = CwPtr_.ref();
switch (method_)
{
@ -140,21 +173,32 @@ tmp<areaScalarField> filmTurbulenceModel::Cw() const
}
case mDarcyWeisbach:
{
const uniformDimensionedVectorField& g =
meshObjects::gravity::New(film_.primaryMesh().time());
const auto& primaryMesh = film_.primaryMesh();
const auto& g = meshObjects::gravity::New(primaryMesh.time());
const auto magG(mag(g.value()));
const vectorField& Uf = film_.Uf().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;
}
case mManningStrickler:
{
const uniformDimensionedVectorField& g =
meshObjects::gravity::New(film_.primaryMesh().time());
const auto& primaryMesh = film_.primaryMesh();
const auto& g = meshObjects::gravity::New(primaryMesh.time());
const vectorField& Uf = film_.Uf().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
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2020-2021 OpenCFD Ltd.
Copyright (C) 2020-2025 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -177,6 +177,12 @@ protected:
//- Reference density needed for incompressible calculations
scalar rhoRef_;
//- Wall film-surface friction field
mutable autoPtr<areaScalarField> CwPtr_;
//- Darcy-Weisbach model field
mutable autoPtr<areaScalarField> dwfPtr_;
public: