ENH: Lagrangian - added particle Tomiyama drag model

Based on the reference

    Tomiyama, A., Kataoka, I., Zun, I., Sakaguchi, T. (1998)
    Drag coefficients of single bubbles under normal and micro gravity
    conditions
    JSME International Journal, 41(2), 472-479.

Example usage

    subModels
    {
        particleForces
        {
            tomiyamaDrag
            {
                sigma       0.07;
                contamination pure; // pure | slight | full
            }
        }
    }
This commit is contained in:
Andrew Heather
2024-06-03 12:12:08 +01:00
committed by Kutalmis Bercin
parent a0fea418e2
commit 8950c9b0c6
4 changed files with 387 additions and 2 deletions

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd. Copyright (C) 2023-2024 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -38,6 +38,7 @@ License
#include "PlessisMasliyahDragForce.H" #include "PlessisMasliyahDragForce.H"
#include "SaffmanMeiLiftForce.H" #include "SaffmanMeiLiftForce.H"
#include "TomiyamaDragForce.H"
#include "TomiyamaLiftForce.H" #include "TomiyamaLiftForce.H"
#include "GravityForce.H" #include "GravityForce.H"
@ -60,6 +61,7 @@ License
makeParticleForceModelType(ErgunWenYuDragForce, CloudType); \ makeParticleForceModelType(ErgunWenYuDragForce, CloudType); \
makeParticleForceModelType(PlessisMasliyahDragForce, CloudType); \ makeParticleForceModelType(PlessisMasliyahDragForce, CloudType); \
makeParticleForceModelType(SaffmanMeiLiftForce, CloudType); \ makeParticleForceModelType(SaffmanMeiLiftForce, CloudType); \
makeParticleForceModelType(TomiyamaDragForce, CloudType); \
makeParticleForceModelType(TomiyamaLiftForce, CloudType); \ makeParticleForceModelType(TomiyamaLiftForce, CloudType); \
makeParticleForceModelType(GravityForce, CloudType); \ makeParticleForceModelType(GravityForce, CloudType); \
makeParticleForceModelType(NonInertialFrameForce, CloudType); \ makeParticleForceModelType(NonInertialFrameForce, CloudType); \

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd. Copyright (C) 2023-2024 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -35,6 +35,7 @@ License
#include "NonSphereDragForce.H" #include "NonSphereDragForce.H"
#include "SaffmanMeiLiftForce.H" #include "SaffmanMeiLiftForce.H"
#include "TomiyamaDragForce.H"
#include "TomiyamaLiftForce.H" #include "TomiyamaLiftForce.H"
#include "GravityForce.H" #include "GravityForce.H"
@ -53,6 +54,7 @@ License
makeParticleForceModelType(SphereDragForce, CloudType); \ makeParticleForceModelType(SphereDragForce, CloudType); \
makeParticleForceModelType(NonSphereDragForce, CloudType); \ makeParticleForceModelType(NonSphereDragForce, CloudType); \
makeParticleForceModelType(SaffmanMeiLiftForce, CloudType); \ makeParticleForceModelType(SaffmanMeiLiftForce, CloudType); \
makeParticleForceModelType(TomiyamaDragForce, CloudType); \
makeParticleForceModelType(TomiyamaLiftForce, CloudType); \ makeParticleForceModelType(TomiyamaLiftForce, CloudType); \
makeParticleForceModelType(GravityForce, CloudType); \ makeParticleForceModelType(GravityForce, CloudType); \
makeParticleForceModelType(NonInertialFrameForce, CloudType); \ makeParticleForceModelType(NonInertialFrameForce, CloudType); \

View File

@ -0,0 +1,125 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2024 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "TomiyamaDragForce.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template<class CloudType>
const Foam::Enum<typename Foam::TomiyamaDragForce<CloudType>::contaminationType>
Foam::TomiyamaDragForce<CloudType>::contaminationTypeNames
{
{ contaminationType::PURE, "pure" },
{ contaminationType::SLIGHT, "slight" },
{ contaminationType::FULL, "full" },
};
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template<class CloudType>
Foam::scalar Foam::TomiyamaDragForce<CloudType>::CdRe(const scalar Re) const
{
const scalar f = 1 + 0.15*pow(Re, 0.687);
switch (contaminationType_)
{
case contaminationType::PURE:
{
// Eq. 31 pure system
return min(16*f, 48);
}
case contaminationType::SLIGHT:
{
// Eq. 32 slightly contaminated system
return min(24*f, 72);
}
case contaminationType::FULL:
{
// Eq. 33 fully contaminated system
return 24*f;
}
default:
{}
}
return Zero;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class CloudType>
Foam::TomiyamaDragForce<CloudType>::TomiyamaDragForce
(
CloudType& owner,
const fvMesh& mesh,
const dictionary& dict
)
:
ParticleForce<CloudType>(owner, mesh, dict, typeName, true),
sigma_(this->coeffs().getScalar("sigma")),
contaminationType_
(
contaminationTypeNames.get("contamination", this->coeffs())
)
{}
template<class CloudType>
Foam::TomiyamaDragForce<CloudType>::TomiyamaDragForce
(
const TomiyamaDragForce<CloudType>& df
)
:
ParticleForce<CloudType>(df),
sigma_(df.sigma_),
contaminationType_(df.contaminationType_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class CloudType>
Foam::forceSuSp Foam::TomiyamaDragForce<CloudType>::calcCoupled
(
const typename CloudType::parcelType& p,
const typename CloudType::parcelType::trackingData& td,
const scalar dt,
const scalar mass,
const scalar Re,
const scalar muc
) const
{
const scalar Eo = p.Eo(td, sigma_);
const scalar CdRe = max(this->CdRe(Re), Re*8/3*Eo/(Eo + 4));
return forceSuSp(Zero, mass*0.75*muc*CdRe/(p.rho()*sqr(p.d())));
}
// ************************************************************************* //

View File

@ -0,0 +1,256 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2024 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::TomiyamaDragForce
Group
grpLagrangianIntermediateForceSubModels
Description
Particle-drag model wherein drag forces (per unit carrier-fluid
velocity) are dynamically computed using empirical expressions based on
their level of contamination.
\f[
\mathrm{F}_\mathrm{D} =
\frac{3}{4}
\frac{\mu_c\,\mathrm{C}_\mathrm{D}\,\mathrm{Re}_p}{\rho_p \, d_p^2}
\f]
For pure systems:
\f[
\mathrm{C}_\mathrm{D} =
\max\left[
\min\left(\frac{16}{Re}(1+0.15Re^{0.687}), \frac{48}{Re}\right),
\frac{8}{3}\frac{Eo}{Eo+4}
\right]
\f]
For slightly contaminated systems:
\f[
\mathrm{C}_\mathrm{D} =
\max\left[
\min\left(\frac{24}{Re}(1+0.15Re^{0.687}), \frac{72}{Re}\right),
\frac{8}{3}\frac{Eo}{Eo+4}
\right]
\f]
For fully contaminated systems:
\f[
\mathrm{C}_\mathrm{D} =
\max\left[
\frac{24}{Re}(1+0.15Re^{0.687}),
\frac{8}{3}\frac{Eo}{Eo+4}
\right]
\f]
where
\vartable
\mathrm{F}_\mathrm{D} | Drag force per carrier-fluid velocity [kg/s]
\mathrm{C}_\mathrm{D} | Particle drag coefficient
\mathrm{Re}_p | Particle Reynolds number
\rho_p | Particle mass density
\mu_c | Dynamic viscosity of carrier at the cell occupying particle
d_p | Particle diameter
\rho_c | Density of carrier at the cell occupying particle
\mathbf{u}_\mathrm{rel} | Relative velocity between particle and carrier
Eo | Eotvos number
\endvartable
Constraints:
- Applicable to bubbles with a spatially homogeneous distribution.
References:
\verbatim
Tomiyama, A., Kataoka, I., Zun, I., & Sakaguchi, T. (1998).
Drag coefficients of single bubbles under normal and micro gravity
conditions.
JSME International Journal Series B
Fluids and Thermal Engineering, 41(2), 472-479.
\endverbatim
Usage
Minimal example by using \c constant/\<CloudProperties\>:
\verbatim
subModels
{
particleForces
{
tomiyamaDrag
{
// Mandatory entries
sigma <scalar>;
contamination <word>; // pure | slight | full
}
}
}
\endverbatim
where the entries mean:
\table
Property | Description | Type | Reqd | Deflt
type | Type name: tomiyamaDrag | word | yes | -
sigma | Surface tension | scalar | yes | -
contamination | Contamination type | word | yes | -
\endtable
Options for the \c contamination entry:
\verbatim
pure | Pure systems
slight | Slightly contaminated systems
full | Fully contaminated systems
\endverbatim
Note
- \f$\mathrm{F}_\mathrm{D}\f$ is weighted with the particle mass/density
at the stage of a function return, so that it can later be normalised
with the effective mass, if necessary (e.g. when using virtual-mass forces).
SourceFiles
TomiyamaDragForce.C
\*---------------------------------------------------------------------------*/
#ifndef TomiyamaDragForce_H
#define TomiyamaDragForce_H
#include "ParticleForce.H"
#include "Enum.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class TomiyamaDragForce Declaration
\*---------------------------------------------------------------------------*/
template<class CloudType>
class TomiyamaDragForce
:
public ParticleForce<CloudType>
{
public:
// Public Enumerations
//- Options for the contamination types
enum contaminationType : char
{
PURE = 0, //!< "Pure systems"
SLIGHT, //!< "Slightly contaminated systems"
FULL //!< "Fully contaminated systems"
};
//- Names for the contaminationType options
static const Enum<contaminationType> contaminationTypeNames;
private:
// Private Data
//- Surface tension
const scalar sigma_;
//- Contamination type option
const contaminationType contaminationType_;
// Private Member Functions
//- Drag coefficient multiplied by Reynolds number
scalar CdRe(const scalar Re) const;
public:
//- Runtime type information
TypeName("TomiyamaDrag");
// Constructors
//- Construct from mesh
TomiyamaDragForce
(
CloudType& owner,
const fvMesh& mesh,
const dictionary& dict
);
//- Copy construct
TomiyamaDragForce(const TomiyamaDragForce<CloudType>& df);
//- Construct and return a clone
virtual autoPtr<ParticleForce<CloudType>> clone() const
{
return autoPtr<ParticleForce<CloudType>>
(
new TomiyamaDragForce<CloudType>(*this)
);
}
//- No copy assignment
void operator=(const TomiyamaDragForce<CloudType>&) = delete;
//- Destructor
virtual ~TomiyamaDragForce() = default;
// Member Functions
// Evaluation
//- Calculate the coupled force
virtual forceSuSp calcCoupled
(
const typename CloudType::parcelType& p,
const typename CloudType::parcelType::trackingData& td,
const scalar dt,
const scalar mass,
const scalar Re,
const scalar muc
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "TomiyamaDragForce.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //