From 8950c9b0c68d66b0b4c60a9817769047c8d15d1d Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Mon, 3 Jun 2024 12:12:08 +0100 Subject: [PATCH] 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 } } } --- .../parcels/include/makeParcelForces.H | 4 +- .../parcels/include/makeThermoParcelForces.H | 4 +- .../TomiyamaDrag/TomiyamaDragForce.C | 125 +++++++++ .../TomiyamaDrag/TomiyamaDragForce.H | 256 ++++++++++++++++++ 4 files changed, 387 insertions(+), 2 deletions(-) create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.C create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.H diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelForces.H b/src/lagrangian/intermediate/parcels/include/makeParcelForces.H index 3f5fc61506..c4b6a01616 100644 --- a/src/lagrangian/intermediate/parcels/include/makeParcelForces.H +++ b/src/lagrangian/intermediate/parcels/include/makeParcelForces.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2023 OpenCFD Ltd. + Copyright (C) 2023-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -38,6 +38,7 @@ License #include "PlessisMasliyahDragForce.H" #include "SaffmanMeiLiftForce.H" +#include "TomiyamaDragForce.H" #include "TomiyamaLiftForce.H" #include "GravityForce.H" @@ -60,6 +61,7 @@ License makeParticleForceModelType(ErgunWenYuDragForce, CloudType); \ makeParticleForceModelType(PlessisMasliyahDragForce, CloudType); \ makeParticleForceModelType(SaffmanMeiLiftForce, CloudType); \ + makeParticleForceModelType(TomiyamaDragForce, CloudType); \ makeParticleForceModelType(TomiyamaLiftForce, CloudType); \ makeParticleForceModelType(GravityForce, CloudType); \ makeParticleForceModelType(NonInertialFrameForce, CloudType); \ diff --git a/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H b/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H index 2efc413d19..682c8a3d84 100644 --- a/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H +++ b/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2023 OpenCFD Ltd. + Copyright (C) 2023-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -35,6 +35,7 @@ License #include "NonSphereDragForce.H" #include "SaffmanMeiLiftForce.H" +#include "TomiyamaDragForce.H" #include "TomiyamaLiftForce.H" #include "GravityForce.H" @@ -53,6 +54,7 @@ License makeParticleForceModelType(SphereDragForce, CloudType); \ makeParticleForceModelType(NonSphereDragForce, CloudType); \ makeParticleForceModelType(SaffmanMeiLiftForce, CloudType); \ + makeParticleForceModelType(TomiyamaDragForce, CloudType); \ makeParticleForceModelType(TomiyamaLiftForce, CloudType); \ makeParticleForceModelType(GravityForce, CloudType); \ makeParticleForceModelType(NonInertialFrameForce, CloudType); \ diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.C b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.C new file mode 100644 index 0000000000..09e953e4a8 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.C @@ -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 . + +\*---------------------------------------------------------------------------*/ + +#include "TomiyamaDragForce.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template +const Foam::Enum::contaminationType> +Foam::TomiyamaDragForce::contaminationTypeNames +{ + { contaminationType::PURE, "pure" }, + { contaminationType::SLIGHT, "slight" }, + { contaminationType::FULL, "full" }, +}; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template +Foam::scalar Foam::TomiyamaDragForce::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 +Foam::TomiyamaDragForce::TomiyamaDragForce +( + CloudType& owner, + const fvMesh& mesh, + const dictionary& dict +) +: + ParticleForce(owner, mesh, dict, typeName, true), + sigma_(this->coeffs().getScalar("sigma")), + contaminationType_ + ( + contaminationTypeNames.get("contamination", this->coeffs()) + ) +{} + + +template +Foam::TomiyamaDragForce::TomiyamaDragForce +( + const TomiyamaDragForce& df +) +: + ParticleForce(df), + sigma_(df.sigma_), + contaminationType_(df.contaminationType_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +Foam::forceSuSp Foam::TomiyamaDragForce::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()))); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.H b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.H new file mode 100644 index 0000000000..1ed29e7b03 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/TomiyamaDrag/TomiyamaDragForce.H @@ -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 . + +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/\: + \verbatim + subModels + { + particleForces + { + tomiyamaDrag + { + // Mandatory entries + sigma ; + contamination ; // 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 TomiyamaDragForce +: + public ParticleForce +{ +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 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& df); + + //- Construct and return a clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new TomiyamaDragForce(*this) + ); + } + + //- No copy assignment + void operator=(const TomiyamaDragForce&) = 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 + +// ************************************************************************* //