diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/Make/files b/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/Make/files index 2e50a8ecba..fa1eb1f6f8 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/Make/files +++ b/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/Make/files @@ -32,6 +32,7 @@ liftModels/noLift/noLift.C liftModels/constantLiftCoefficient/constantLiftCoefficient.C liftModels/Moraga/Moraga.C liftModels/LegendreMagnaudet/LegendreMagnaudet.C +liftModels/SaffmanMei/SaffmanMei.C liftModels/TomiyamaLift/TomiyamaLift.C liftModels/wallDampedLift/wallDampedLift.C diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/liftModels/SaffmanMei/SaffmanMei.C b/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/liftModels/SaffmanMei/SaffmanMei.C new file mode 100644 index 0000000000..f22137b777 --- /dev/null +++ b/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/liftModels/SaffmanMei/SaffmanMei.C @@ -0,0 +1,91 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +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 "SaffmanMei.H" +#include "fvcCurl.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace liftModels +{ + defineTypeNameAndDebug(SaffmanMei, 0); + addToRunTimeSelectionTable(liftModel, SaffmanMei, dictionary); +} +} + +using Foam::constant::mathematical::twoPi; + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::liftModels::SaffmanMei::SaffmanMei +( + const dictionary& dict, + const phaseInterface& interface +) +: + dispersedLiftModel(dict, interface), + residualRe_("residualRe", dimless, dict) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::liftModels::SaffmanMei::~SaffmanMei() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp Foam::liftModels::SaffmanMei::Cl() const +{ + volScalarField Re(max(interface_.Re(), residualRe_)); + volScalarField Rew + ( + mag(fvc::curl(interface_.continuous().U())) + *sqr(interface_.dispersed().d()) + /( + interface_.continuous().thermo().nu() + + dimensionedScalar(dimViscosity, rootVSmall) + ) + ); + + volScalarField Cld + ( + neg0(Re - 40)*6.46 + *( + (1 - 0.3314*sqrt(0.5*(Rew/Re)))*exp(-0.1*Re) + + 0.3314*sqrt(0.5*(Rew/Re)) + ) + + pos(Re - 40)*6.46*0.0524*sqrt(0.5*(Rew/Re)*Re) + ); + + return 3/(twoPi*sqrt(Rew + rootVSmall))*Cld; +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/liftModels/SaffmanMei/SaffmanMei.H b/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/liftModels/SaffmanMei/SaffmanMei.H new file mode 100644 index 0000000000..719180d075 --- /dev/null +++ b/applications/solvers/multiphase/multiphaseEulerFoam/interfacialModels/liftModels/SaffmanMei/SaffmanMei.H @@ -0,0 +1,110 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +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::liftModels::SaffmanMei + +Description + Lift model of Saffman (1965) as extended by Mei (1992). Applicable to + spherical particles. + + References: + \verbatim + Saffman, P. G. T. (1965). + The lift on a small sphere in a slow shear flow. + Journal of fluid mechanics, 22(2), 385-400. + + Mei, R. (1992). + An approximate expression for the shear lift force on a spherical + particle at finite Reynolds number. + International Journal of Multiphase Flow, 18(1), 145-147. + \endverbatim + +SourceFiles + SaffmanMei.C + +\*---------------------------------------------------------------------------*/ + +#ifndef SaffmanMei_H +#define SaffmanMei_H + +#include "dispersedLiftModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace liftModels +{ + +/*---------------------------------------------------------------------------*\ + Class SaffmanMei Declaration +\*---------------------------------------------------------------------------*/ + +class SaffmanMei +: + public dispersedLiftModel +{ + // Private Data + + //- Residual Reynold's number + const dimensionedScalar residualRe_; + + +public: + + //- Runtime type information + TypeName("SaffmanMei"); + + + // Constructors + + //- Construct from a dictionary and an interface + SaffmanMei + ( + const dictionary& dict, + const phaseInterface& interface + ); + + + //- Destructor + virtual ~SaffmanMei(); + + + // Member Functions + + //- Lift coefficient + virtual tmp Cl() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace liftModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/Make/files b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/Make/files index 0e025972c0..1786ef3140 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/Make/files +++ b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/Make/files @@ -55,6 +55,7 @@ populationBalanceModel/populationBalanceModel/populationBalanceModel.C coalescenceModels = populationBalanceModel/coalescenceModels $(coalescenceModels)/coalescenceModel/coalescenceModel.C +$(coalescenceModels)/AdachiStuartFokkink/AdachiStuartFokkink.C $(coalescenceModels)/ballisticCollisions/ballisticCollisions.C $(coalescenceModels)/BrownianCollisions/BrownianCollisions.C $(coalescenceModels)/constantCoalescence/constantCoalescence.C @@ -78,6 +79,7 @@ $(binaryBreakupModels)/powerLawUniformBinary/powerLawUniformBinary.C breakupModels = populationBalanceModel/breakupModels $(breakupModels)/breakupModel/breakupModel.C $(breakupModels)/exponential/exponential.C +$(breakupModels)/Kusters/Kusters.C $(breakupModels)/Laakkonen/Laakkonen.C $(breakupModels)/powerLaw/powerLaw.C diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/breakupModels/Kusters/Kusters.C b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/breakupModels/Kusters/Kusters.C new file mode 100644 index 0000000000..5375b007b6 --- /dev/null +++ b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/breakupModels/Kusters/Kusters.C @@ -0,0 +1,89 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +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 "Kusters.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace breakupModels +{ + defineTypeNameAndDebug(Kusters, 0); + addToRunTimeSelectionTable + ( + breakupModel, + Kusters, + dictionary + ); +} +} +} + +using Foam::constant::mathematical::pi; + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::diameterModels::breakupModels::Kusters::Kusters +( + const populationBalanceModel& popBal, + const dictionary& dict +) +: + breakupModel(popBal, dict), + B_("B", dimensionSet(0, 3, -3, 0, 0), dict), + dP_("dP", dimLength, dict), + kc_(dimensionedScalar::lookupOrDefault("kc", dict, dimless, 1)), + Df_("Df", dimless, dict) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::diameterModels::breakupModels::Kusters::setBreakupRate +( + volScalarField& breakupRate, + const label i +) +{ + const sizeGroup& fi = popBal_.sizeGroups()[i]; + breakupRate = + sqrt + ( + 4*popBal_.continuousTurbulence().epsilon() + /(15*pi*popBal_.continuousPhase().thermo().nu()) + ) + *exp + ( + - B_/(dP_*0.5*pow(pow(fi.d()/dP_, Df_)/kc_, 1/Df_)) + /popBal_.continuousTurbulence().epsilon() + ); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/breakupModels/Kusters/Kusters.H b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/breakupModels/Kusters/Kusters.H new file mode 100644 index 0000000000..49fb34883d --- /dev/null +++ b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/breakupModels/Kusters/Kusters.H @@ -0,0 +1,152 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +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::diameterModels::breakupModels::Kusters + +Description + Solid particle breakage model of Kusters (1991). The breakage rate is + calculated by + + \f[ + \sqrt{\frac{4}{15\pi}}\sqrt{\frac{\epsilon}{\nu}} + \exp\left(-\frac{\epsilon_{crit}}{\epsilon}\right) + \f] + + \f[ + \epsilon_{crit}=\frac{B}{R_{ci}} + \f] + + \f[ + R_{ci} = 0.5d_{p}\left(\frac{n_i}{k_c}\right)^{1/D_f} + \f] + + \f[ + n_i = \left(\frac{d_i}{d_{p}}\right)^{D_f} + \f] + + where + + \vartable + B | Critical force parameter for breakage [m3/s3] + d_i | Diameter of transported particle [m] + d_{p} | Diameter of primary particles [m] + D_f | Fractal dimension of particle [-] + k_c | Constant relative to packing density [-] + n_i | Number of primary particles in agglomerate [-] + \nu | Kinematic viscosity of continuous phase [m2/s] + \epsilon | Continuous phase turbulent dissipation rate [m2/s3] + \epsilon_{crit} | Critical turbulent dissipation rate [m2/s3] + \endvartable + + Reference: + \verbatim + Kusters, K. A. (1991). + The influence of turbulence on aggregation of small particles in + agitated vessels. + PhD Thesis + \endverbatim + +SourceFiles + Kusters.C + +\*---------------------------------------------------------------------------*/ + +#ifndef Kusters_H +#define Kusters_H + +#include "breakupModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace breakupModels +{ + +/*---------------------------------------------------------------------------*\ + Class Kusters Declaration +\*---------------------------------------------------------------------------*/ + +class Kusters +: + public breakupModel +{ + // Private Data + + //- Model coefficient + dimensionedScalar B_; + + //- Primary particle diameter + dimensionedScalar dP_; + + //- Packing density coefficient + dimensionedScalar kc_; + + //- Fractal dimension + dimensionedScalar Df_; + + +public: + + //- Runtime type information + TypeName("Kusters"); + + // Constructor + + Kusters + ( + const populationBalanceModel& popBal, + const dictionary& dict + ); + + + //- Destructor + virtual ~Kusters() + {} + + + // Member Functions + + //- Set total breakupRate + virtual void setBreakupRate + ( + volScalarField& breakupRate, + const label i + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace breakupModels +} // End namespace diameterModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/AdachiStuartFokkink/AdachiStuartFokkink.C b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/AdachiStuartFokkink/AdachiStuartFokkink.C new file mode 100644 index 0000000000..67fdd54e50 --- /dev/null +++ b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/AdachiStuartFokkink/AdachiStuartFokkink.C @@ -0,0 +1,88 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +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 "AdachiStuartFokkink.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace coalescenceModels +{ + defineTypeNameAndDebug(AdachiStuartFokkink, 0); + addToRunTimeSelectionTable + ( + coalescenceModel, + AdachiStuartFokkink, + dictionary + ); +} +} +} + +using Foam::constant::mathematical::pi; + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::diameterModels::coalescenceModels::AdachiStuartFokkink:: +AdachiStuartFokkink +( + const populationBalanceModel& popBal, + const dictionary& dict +) +: + coalescenceModel(popBal, dict) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::diameterModels::coalescenceModels::AdachiStuartFokkink:: +addToCoalescenceRate +( + volScalarField& coalescenceRate, + const label i, + const label j +) +{ + const sizeGroup& fi = popBal_.sizeGroups()[i]; + const sizeGroup& fj = popBal_.sizeGroups()[j]; + + coalescenceRate += + (4.0/3.0) + *sqrt + ( + 0.3*pi*popBal_.continuousTurbulence().epsilon() + /popBal_.continuousPhase().thermo().nu() + ) + *pow3(fi.d() + fj.d()); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/AdachiStuartFokkink/AdachiStuartFokkink.H b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/AdachiStuartFokkink/AdachiStuartFokkink.H new file mode 100644 index 0000000000..af27375f64 --- /dev/null +++ b/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/AdachiStuartFokkink/AdachiStuartFokkink.H @@ -0,0 +1,122 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +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::diameterModels::coalescenceModels::AdachiStuartFokkink + +Description + Model describing aggregation of solid particles in turbulent flows. + Applicable when particles are smaller than the Kolmogorov length scale. + The coalescence rate is calculated by + + f\[ + \frac{4}{3}\left(\frac{3\pi}{10}\right)^{0.5} + \left(\frac{\epsilon}{\nu}\right)^{0.5}(d_i+d_j)^3 + \f] + + where + + \vartable + d_i | Diameter of particle i [m] + d_j | Diameter of particle j [m] + \nu | Kinematic viscosity of continuous phase [m2/s] + \epsilon | Continuous phase turbulent dissipation rate [m2/s3] + \endtable + + Reference: + \verbatim + Adachi, Y., Stuart, M. C., & Fokkink, R. (1994). + Kinetics of turbulent coagulation studied by means of end-over-end + rotation. + Journal of colloid and interface science, 165(2), 310-317. + \endverbatim + +SourceFiles + AdachiStuartFokkink.C + +\*---------------------------------------------------------------------------*/ + +#ifndef AdachiStuartFokkink_H +#define AdachiStuartFokkink_H + +#include "coalescenceModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace coalescenceModels +{ + +/*---------------------------------------------------------------------------*\ + Class AdachiStuartFokkink Declaration +\*---------------------------------------------------------------------------*/ + +class AdachiStuartFokkink +: + public coalescenceModel +{ +public: + + //- Runtime type information + TypeName("AdachiStuartFokkink"); + + // Constructor + + AdachiStuartFokkink + ( + const populationBalanceModel& popBal, + const dictionary& dict + ); + + + //- Destructor + virtual ~AdachiStuartFokkink() + {} + + + // Member Functions + + //- Add to coalescenceRate + virtual void addToCoalescenceRate + ( + volScalarField& coalescenceRate, + const label i, + const label j + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace coalescenceModels +} // End namespace diameterModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //