mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
committed by
Kutalmis Bercin
parent
1e715d3847
commit
f7fd9f8186
@ -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_();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user