diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/Make/files b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/Make/files index 099876ada3..ee98c2c786 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/Make/files +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/Make/files @@ -22,10 +22,13 @@ populationBalanceModel/coalescenceModels/coalescenceModel/coalescenceModel.C populationBalanceModel/coalescenceModels/constantCoalescence/constantCoalescence.C populationBalanceModel/coalescenceModels/CoulaloglouTavlaridesCoalescence/CoulaloglouTavlaridesCoalescence.C populationBalanceModel/coalescenceModels/hydrodynamic/hydrodynamic.C +populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.C +populationBalanceModel/coalescenceModels/Luo/Luo.C populationBalanceModel/coalescenceModels/PrinceBlanch/PrinceBlanch.C populationBalanceModel/binaryBreakupModels/binaryBreakupModel/binaryBreakupModel.C populationBalanceModel/binaryBreakupModels/LuoSvendsen/LuoSvendsen.C +populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.C populationBalanceModel/binaryBreakupModels/powerLawUniformBinary/powerLawUniformBinary.C populationBalanceModel/breakupModels/breakupModel/breakupModel.C diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H index 830af8e7b3..a1ad7f7f5b 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2015-2018 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015-2019 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -357,10 +357,22 @@ public: // Sub-model lookup + //- Check availability of a sub model for a given phase pair + template + bool foundSubModel(const phasePair& key) const; + //- Return a sub model between a phase pair template const modelType& lookupSubModel(const phasePair& key) const; + //- Check availability of a sub model between two phases + template + bool foundSubModel + ( + const phaseModel& dispersed, + const phaseModel& continuous + ) const; + //- Return a sub model between two phases template const modelType& lookupSubModel diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C index dc5773edd8..a94c363113 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystemTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2015-2018 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015-2019 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -370,6 +370,44 @@ void Foam::phaseSystem::fillFields } +template +bool Foam::phaseSystem::foundSubModel(const phasePair& key) const +{ + const word name(IOobject::groupName(modelType::typeName, key.name())); + + if (key.ordered()) + { + if (mesh().foundObject(name)) + { + return true; + } + else + { + return false; + } + } + else + { + if + ( + mesh().foundObject(name) + || + mesh().foundObject + ( + IOobject::groupName(modelType::typeName, key.otherName()) + ) + ) + { + return true; + } + else + { + return false; + } + } +} + + template const modelType& Foam::phaseSystem::lookupSubModel(const phasePair& key) const { @@ -390,6 +428,17 @@ const modelType& Foam::phaseSystem::lookupSubModel(const phasePair& key) const } +template +bool Foam::phaseSystem::foundSubModel +( + const phaseModel& dispersed, + const phaseModel& continuous +) const +{ + return foundSubModel(orderedPhasePair(dispersed, continuous)); +} + + template const modelType& Foam::phaseSystem::lookupSubModel ( diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.C new file mode 100644 index 0000000000..cec2189177 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.C @@ -0,0 +1,112 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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 "LehrMilliesMewes.H" +#include "addToRunTimeSelectionTable.H" +#include "phaseCompressibleTurbulenceModel.H" +#include "mathematicalConstants.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace binaryBreakupModels +{ + defineTypeNameAndDebug(LehrMilliesMewes, 0); + addToRunTimeSelectionTable + ( + binaryBreakupModel, + LehrMilliesMewes, + dictionary + ); +} +} +} + +using Foam::constant::mathematical::pi; + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::diameterModels::binaryBreakupModels::LehrMilliesMewes::LehrMilliesMewes +( + const populationBalanceModel& popBal, + const dictionary& dict +) +: + binaryBreakupModel(popBal, dict) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::diameterModels::binaryBreakupModels::LehrMilliesMewes:: +addToBinaryBreakupRate +( + volScalarField& binaryBreakupRate, + const label i, + const label j +) +{ + const phaseModel& continuousPhase = popBal_.continuousPhase(); + const sizeGroup& fi = popBal_.sizeGroups()[i]; + const sizeGroup& fj = popBal_.sizeGroups()[j]; + + volScalarField L + ( + pow + ( + popBal_.sigmaWithContinuousPhase(fj.phase())/continuousPhase.rho(), + 3.0/5.0 + ) + /pow(popBal_.continuousTurbulence().epsilon(), 2.0/5.0) + ); + + // Reset of dimension to pure length to avoid problems in transcendental + // functions due to small exponents + L.dimensions().reset(dimLength); + + const volScalarField T + ( + pow + ( + popBal_.sigmaWithContinuousPhase(fj.phase())/continuousPhase.rho(), + 2.0/5.0 + ) + /pow(popBal_.continuousTurbulence().epsilon(), 3.0/5.0) + ); + + binaryBreakupRate += + 0.5*pow(fj.d()/L, 5.0/3.0) + *exp(-sqrt(2.0)/pow3(fj.d()/L)) + *6.0/pow(pi, 1.5)/pow3(fi.d()/L) + *exp(-9.0/4.0*sqr(log(pow(2.0, 0.4)*fi.d()/L))) + /max(1.0 + erf(1.5*log(pow(2.0, 1.0/15.0)*fj.d()/L)), SMALL) + /(T*pow3(L)); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.H new file mode 100644 index 0000000000..2651ff25ae --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/binaryBreakupModels/LehrMilliesMewes/LehrMilliesMewes.H @@ -0,0 +1,149 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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::binaryBreakupModels::LehrMilliesMewes + +Description + Model of Lehr et al. (2002). The breakup rate is calculated by + + \f[ + 0.5 d_j^{*^{5/3}} \mathrm{exp}\left(-\frac{\sqrt{2}}{d_j^{*^{3}}}\right) + \frac{6}{\pi^{3/2}d_i^{*^{3}}} + \mathrm{exp} + \left( + - \frac{9}{4}\left[\mathrm{ln}\left(2^{2/5} d_i^{*}\right)\right]^{2} + \right) + \left( + 1 + + \mathrm{erf} + \left[ + \frac{3}{2}\mathrm{ln} \left(2^{1/15} d_j^{*}\right) + \right] + \right)^{-1} + \frac{1}{L^{3}T} + \f] + + with the time scale + + \f[ + T = \left(\frac{\sigma}{\rho_c}\right)^{2/5} \frac{1}{\epsilon_c^{3/5}} + \f] + + the dimensionless diameter + + \f[ + d^{*} = \frac{d}{L} + \f] + + and the length scale + + \f[ + L = \left(\frac{\sigma}{\rho_c}\right)^{3/5} \frac{1}{\epsilon_c^{2/5}} + \f] + + \vartable + \rho_c | Density of continuous phase [kg/m3] + \sigma | Surface tension [N/m] + \epsilon_c | Continuous phase turbulent dissipation rate [m2/s3] + d_i | Diameter of daughter bubble i [m] + d_j | Diameter of mother bubble j [m] + \endvartable + + References: + \verbatim + Lehr, F., Millies, M., & Mewes, D. (2002). + Bubble‐size distributions and flow fields in bubble columns. + AIChE Journal, 48(11), 2426-2443. + Eq. 12-16, p. 2429-2430. + \endverbatim + +SourceFiles + LehrMilliesMewes.C + +\*---------------------------------------------------------------------------*/ + +#ifndef LehrMilliesMewes_H +#define LehrMilliesMewes_H + +#include "binaryBreakupModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace binaryBreakupModels +{ + +/*---------------------------------------------------------------------------*\ + Class LehrMilliesMewes Declaration +\*---------------------------------------------------------------------------*/ + +class LehrMilliesMewes +: + public binaryBreakupModel +{ +public: + + //- Runtime type information + TypeName("LehrMilliesMewes"); + + // Constructor + + LehrMilliesMewes + ( + const populationBalanceModel& popBal, + const dictionary& dict + ); + + + //- Destructor + virtual ~LehrMilliesMewes() + {} + + + // Member Functions + + //- Add to binary breakupRate + virtual void addToBinaryBreakupRate + ( + volScalarField& binaryBreakupRate, + const label i, + const label j + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace binaryBreakupModels +} // End namespace diameterModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.C new file mode 100644 index 0000000000..4239ca4345 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.C @@ -0,0 +1,107 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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 "LehrMilliesMewesCoalescence.H" +#include "addToRunTimeSelectionTable.H" +#include "mathematicalConstants.H" +#include "phaseCompressibleTurbulenceModel.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace coalescenceModels +{ + defineTypeNameAndDebug(LehrMilliesMewesCoalescence, 0); + addToRunTimeSelectionTable + ( + coalescenceModel, + LehrMilliesMewesCoalescence, + dictionary + ); +} +} +} + +using Foam::constant::mathematical::pi; + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::diameterModels::coalescenceModels::LehrMilliesMewesCoalescence:: +LehrMilliesMewesCoalescence +( + const populationBalanceModel& popBal, + const dictionary& dict +) +: + coalescenceModel(popBal, dict), + uCrit_ + ( + dimensionedScalar::lookupOrDefault("uCrit", dict, dimVelocity, 0.08) + ), + alphaMax_ + ( + dimensionedScalar::lookupOrDefault("alphaMax", dict, dimless, 0.6) + ) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void +Foam::diameterModels::coalescenceModels::LehrMilliesMewesCoalescence:: +addToCoalescenceRate +( + volScalarField& coalescenceRate, + const label i, + const label j +) +{ + const sizeGroup& fi = popBal_.sizeGroups()[i]; + const sizeGroup& fj = popBal_.sizeGroups()[j]; + + volScalarField uChar + ( + max + ( + sqrt(2.0)*cbrt(popBal_.continuousTurbulence().epsilon()) + *sqrt(cbrt(sqr(fi.d())) + cbrt(sqr(fj.d()))), + mag(fi.phase().U() - fj.phase().U()) + ) + ); + + coalescenceRate += + pi/4.0*sqr(fi.d() + fj.d())*min(uChar, uCrit_) + *exp + ( + - sqr(cbrt(alphaMax_) + /cbrt(max(popBal_.alphas(), fi.phase().residualAlpha())) - 1.0) + ); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.H new file mode 100644 index 0000000000..89382aaa80 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/LehrMilliesMewesCoalescence/LehrMilliesMewesCoalescence.H @@ -0,0 +1,156 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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::LehrMilliesMewesCoalescence + +Description + Model of Lehr et al. (2002). The coalescence rate is calculated by + + \f[ + \frac{\pi}{4} (d_i + d_j)^2 \mathrm{min}(u^{\prime}, u_{\mathrm{crit}}) + \mathrm{exp} + \left[ + - \left(\frac{\alpha_{\mathrm{max}}^{1/3}}{\alpha^{1/3}} - 1\right)^2 + \right]\,, + \f] + + where + + \f[ + u^{\prime} + = + \mathrm{max} + \left( + \sqrt{2} \epsilon_c^{1/3} \sqrt{d_i^{2/3} + d_j^{2/3}}, + |\vec{u}_i - \vec{u}_j| + \right) + \f] + + is the characteristic velocity for coalescence. Note that a velocity + difference between bubble i and j is only present if the corresponding + size groups are assigned to different velocity groups. + + \vartable + d_i | Diameter of bubble i [m] + d_j | Diameter of bubble j [m] + \epsilon_c | Turbulent dissipation rate of continuous phase [m2/s3] + \alpha | Total void fraction of the bubbles [-] + \alpha_{max} | Maximum packing density of the bubbles [-] + u_{crit} | Critical velocity for coalescence [m/s] + \vec{u}_i | Velocity vector of bubble i [m/s] + \vec{u}_j | Velocity vector of bubble j [m/s] + \endvartable + + Reference: + \verbatim + Lehr, F., Millies, M., & Mewes, D. (2002). + Bubble‐size distributions and flow fields in bubble columns. + AIChE Journal, 48(11), 2426-2443. + \endverbatim + +Usage + \table + Property | Description | Required | Default value + uCrit | Crit. coalescence velocity | no | 0.08 + alphaMax | Maximum packing density | no | 0.6 + \endtable + +SourceFiles + LehrMilliesMewesCoalescence.C + +\*---------------------------------------------------------------------------*/ + +#ifndef LehrMilliesMewesCoalescence_H +#define LehrMilliesMewesCoalescence_H + +#include "coalescenceModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace coalescenceModels +{ + +/*---------------------------------------------------------------------------*\ + Class LehrMilliesMewesCoalescence Declaration +\*---------------------------------------------------------------------------*/ + +class LehrMilliesMewesCoalescence +: + public coalescenceModel +{ + // Private data + + //- Critical velocity for coalescence, defaults to 0.08 m/s + dimensionedScalar uCrit_; + + //- Maximum packing density of the bubbles, defaults to 0.6 + dimensionedScalar alphaMax_; + + +public: + + //- Runtime type information + TypeName("LehrMilliesMewes"); + + // Constructor + + LehrMilliesMewesCoalescence + ( + const populationBalanceModel& popBal, + const dictionary& dict + ); + + + //- Destructor + virtual ~LehrMilliesMewesCoalescence() + {} + + + // 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 + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/Luo/Luo.C b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/Luo/Luo.C new file mode 100644 index 0000000000..98c4aad648 --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/Luo/Luo.C @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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 "Luo.H" +#include "addToRunTimeSelectionTable.H" +#include "mathematicalConstants.H" +#include "phaseCompressibleTurbulenceModel.H" +#include "virtualMassModel.H" +#include "phaseSystem.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace coalescenceModels +{ + defineTypeNameAndDebug(Luo, 0); + addToRunTimeSelectionTable + ( + coalescenceModel, + Luo, + dictionary + ); +} +} +} + +using Foam::constant::mathematical::pi; + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::diameterModels::coalescenceModels::Luo:: +Luo +( + const populationBalanceModel& popBal, + const dictionary& dict +) +: + coalescenceModel(popBal, dict), + beta_(dimensionedScalar::lookupOrDefault("beta", dict, dimless, 2.05)), + C1_(dimensionedScalar::lookupOrDefault("C1", dict, dimless, 1.0)) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::diameterModels::coalescenceModels::Luo:: +addToCoalescenceRate +( + volScalarField& coalescenceRate, + const label i, + const label j +) +{ + const sizeGroup& fi = popBal_.sizeGroups()[i]; + const sizeGroup& fj = popBal_.sizeGroups()[j]; + const phaseModel& continuousPhase = popBal_.continuousPhase(); + + if + ( + popBal_.fluid().foundSubModel + ( + fi.phase(), + popBal_.continuousPhase() + ) + ) + { + const virtualMassModel& vm = + popBal_.fluid().lookupSubModel + ( + fi.phase(), + popBal_.continuousPhase() + ); + + dimensionedScalar xi = fi.d()/fj.d(); + + volScalarField uij + ( + sqrt(beta_) + *cbrt(popBal_.continuousTurbulence().epsilon()*fi.d()) + *sqrt(1.0 + pow(xi, -2.0/3.0)) + ); + + coalescenceRate += + pi/4.0*sqr(fi.d() + fj.d())*uij + *exp + ( + - C1_ + *sqrt(0.75*(1.0 + sqr(xi))*(1.0 + pow3(xi))) + /( + sqrt(fi.phase().rho()/continuousPhase.rho() + + vm.Cvm())*pow3(1.0 + xi) + ) + *sqrt + ( + continuousPhase.rho()*fi.d()*sqr(uij) + /popBal_.sigmaWithContinuousPhase(fi.phase()) + ) + ); + } + else + { + FatalErrorInFunction + << "A virtual mass model for " << fi.phase().name() << " in " + << popBal_.continuousPhase().name() << " is not specified. This is " + << "required by the Luo coalescence model." << exit(FatalError); + } +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/Luo/Luo.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/Luo/Luo.H new file mode 100644 index 0000000000..eafc7db02c --- /dev/null +++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/populationBalanceModel/coalescenceModels/Luo/Luo.H @@ -0,0 +1,162 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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::Luo + +Description + Model of Luo (1993). The coalescence rate is calculated by + + \f[ + &\frac{\pi}{4} (d_i + d_j)^2 u_{ij} + \mathrm{exp} + \left[ + - C_1 + \frac + {[0.75(1 + \xi_{ij}^2)(1 + \xi_{ij}^3)]^{1/2}} + {(\rho_d/\rho_c + C_{vm})^{1/2} (1 + \xi_{ij})^3} + \left(\frac{\rho_c d_i u_{ij}^2}{\sigma}\right)^{1/2} + \right]\,, + \f] + + where + + \f[ + u_{ij} = \sqrt{\beta} (\epsilon_c d_i)^{1/3} \sqrt{1 + \xi_{ij}^{-2/3}} + \f] + + is the mean approach velocity of the bubbles and + + \f[ + \xi_{ij} = d_i/d_j + \f] + + their size ratio. + + \vartable + d_i | Diameter of bubble i [m] + d_j | Diameter of bubble j [m] + u_{ij} | Mean approach velocity [m/s] + \xi_{ij} | Bubble size ratio [-] + \rho_d | Density of dispersed phase [kg/m3] + \rho_c | Density of continuous phase [kg/m3] + \sigma | Surface tension [N/m] + C_{vm} | Virtual mass coefficient [-] + C_1 | Coefficient [-] + \beta | Coefficient [-] + \epsilon_c | Continuous phase turbulent dissipation rate [m2/s3] + \endvartable + + Reference: + \verbatim + Luo, H. (1993). + Coalescence, breakup and liquid circulation in bubble column reactors. + Dr. Ing (Doctoral dissertation, Thesis, Department of Chemical + Engineering, The Norwegian Institute of Technology, Trondheim, Norway). + \endverbatim + +Usage + \table + Property | Description | Required | Default value + beta | Coefficient beta | no | 2.0 + C1 | Coefficient C1 | no | 1.0 + \endtable + +SourceFiles + Luo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef Luo_H +#define Luo_H + +#include "coalescenceModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace diameterModels +{ +namespace coalescenceModels +{ + +/*---------------------------------------------------------------------------*\ + Class Luo Declaration +\*---------------------------------------------------------------------------*/ + +class Luo +: + public coalescenceModel +{ + // Private data + + //- Coefficient beta, defaults to 2.0 + dimensionedScalar beta_; + + //- Optional coefficient C1, defaults to 1.0 + dimensionedScalar C1_; + + +public: + + //- Runtime type information + TypeName("Luo"); + + // Constructor + + Luo + ( + const populationBalanceModel& popBal, + const dictionary& dict + ); + + + //- Destructor + virtual ~Luo() + {} + + + // 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 + +// ************************************************************************* //