Additional drag models for the twoPhaseEulerFoam solver
Contents |
1 Syamlal and O'Brien drag
1.1 Formulas
The Syamlal and O'Brien drag formula can be written as follows (according to the nomenclature used in the code):
The terminal velocity Vr can be calculated using the formula:
where A = β4.14, B = 0.8β1.28 if
and B = β2.65 if β > 0.85.
is found using the Della Valle formulation:
with
1.2 Implementation
The Syamlal and O'Brien drag model can be implemented in OpenFOAM by dividing the β' < math > bytheproductofthetwovolumefractions < math > αβ to obtain K.
N.B. Every drag formulation has to be divided by the product αβ before beeing implemented in twoPhaseEulerFoam because this product has been extracted for numerical reasons.
The code is the following.
- SyamlalOBrien.H
/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 1991-2004 OpenCFD Ltd. \\/ 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Class SyamlalOBrien Description Syamlal, M., Rogers, W. and O'Brien, T. J. (1993) MFIX documentation, Theory Guide. Technical Note DOE/METC-94/1004. Morgantown, West Virginia, USA. SourceFiles SyamlalOBrien.C \*---------------------------------------------------------------------------*/ #ifndef SyamlalOBrien_H #define SyamlalOBrien_H #include "dragModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class SyamlalOBrien Declaration \*---------------------------------------------------------------------------*/ class SyamlalOBrien : public dragModel { public: //- Runtime type information TypeName("SyamlalOBrien"); // Constructors //- Construct from components SyamlalOBrien ( const dictionary& interfaceDict, const volScalarField& alpha, const phaseModel& phasea, const phaseModel& phaseb ); // Destructor ~SyamlalOBrien(); // Member Functions tmp<volScalarField> K(const volScalarField& Ur) const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //
- SyamlalOBrien.C
/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 1991-2004 OpenCFD Ltd. \\/ 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA \*---------------------------------------------------------------------------*/ #include "SyamlalOBrien.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { defineTypeNameAndDebug(SyamlalOBrien, 0); addToRunTimeSelectionTable ( dragModel, SyamlalOBrien, dictionary ); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::SyamlalOBrien::SyamlalOBrien ( const dictionary& interfaceDict, const volScalarField& alpha, const phaseModel& phasea, const phaseModel& phaseb ) : dragModel(interfaceDict, alpha, phasea, phaseb) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::SyamlalOBrien::~SyamlalOBrien() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // Foam::tmp<Foam::volScalarField> Foam::SyamlalOBrien::K ( const volScalarField& Ur ) const { volScalarField beta = max(1.0 - alpha_, 1.0e-6); volScalarField A = pow(beta, 4.14); volScalarField B = 0.8*pow(beta, 1.28); forAll (beta, celli) { if (beta[celli] > 0.85) { B[celli] = pow(beta[celli], 2.65); } } volScalarField Re = max(Ur*phasea_.d()/phaseb_.nu(), 1.0e-3); volScalarField Vr = 0.5*(A - 0.06*Re + sqrt(pow(0.06*Re,2.0) + 0.12*Re*(2.0*B-A) + pow(A,2.0))); volScalarField Cds = pow(0.63 + 4.8*sqrt(Vr/Re),2.0); return 0.75*Cds*phaseb_.rho()*Ur/(phasea_.d()*pow(Vr,2.0)); } // ************************************************************************* //
1.3 Compile and link
In order to use this code:
- Add the files in a directory named SyamlalOBrien in /.../twoPhaseEulerFoam/interfacialModels/dragModels.
- Open the /../twoPhaseEulerFoam/interfacialModels/Make file and add to it the line
dragModels/SyamlalOBrien/SyamlalOBrien.C
- Use the wmake tool to rebuild twoPhaseEulerFoam
1.4 References
- Dalla Valle, J.M., 1948, Micromeritics, Pitman, London.
- Syamlal, M., The Particle-Particle Drag Term in a Multiparticle Model of Fluidization, Topical Report, DOE/MC/21353-2373, NTIS/DE87006500, National Technical Information Service, Springfield, VA, 1987.
- Syamlal, M., Rogers, W. and O'Brien, T. J. (1993), MFIX documentation, Theory Guide. Technical Note DOE/METC-94/1004. Morgantown, West Virginia, USA, http://www.mfix.org.
2 Gidaspow's drag (Ergun - Wen&Yu)
2.1 Formulas
The Gidaspow formulation of the drag factor uses the Ergun correlations if β < 0.8:
If
, the Wen and Yu correlation is used:
where
if
, and
elsewhere (
).
2.2 Implementation
- GidaspowErgunWenYu.H
/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 1991-2004 OpenCFD Ltd. \\/ 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Class GidaspowErgunWenYu Description D. Gidaspow, Multiphase flow and fluidization, Academic Press, New York, 1994. SourceFiles GidaspowErgunWenYu.C \*---------------------------------------------------------------------------*/ #ifndef GidaspowErgunWenYu_H #define GidaspowErgunWenYu_H #include "dragModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class GidaspowErgunWenYu Declaration \*---------------------------------------------------------------------------*/ class GidaspowErgunWenYu : public dragModel { public: //- Runtime type information TypeName("GidaspowErgunWenYu"); // Constructors //- Construct from components GidaspowErgunWenYu ( const dictionary& interfaceDict, const volScalarField& alpha, const phaseModel& phasea, const phaseModel& phaseb ); // Destructor ~GidaspowErgunWenYu(); // Member Functions tmp<volScalarField> K(const volScalarField& Ur) const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //
- GidaspowErgunWenYu.C
/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 1991-2004 OpenCFD Ltd. \\/ 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA \*---------------------------------------------------------------------------*/ #include "GidaspowErgunWenYu.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { defineTypeNameAndDebug(GidaspowErgunWenYu, 0); addToRunTimeSelectionTable ( dragModel, GidaspowErgunWenYu, dictionary ); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // Construct from components Foam::GidaspowErgunWenYu::GidaspowErgunWenYu ( const dictionary& interfaceDict, const volScalarField& alpha, const phaseModel& phasea, const phaseModel& phaseb ) : dragModel(interfaceDict, alpha, phasea, phaseb) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::GidaspowErgunWenYu::~GidaspowErgunWenYu() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // Foam::tmp<Foam::volScalarField> Foam::GidaspowErgunWenYu::K ( const volScalarField& Ur ) const { volScalarField beta = max(1.0 - alpha_, 1.0e-6); volScalarField bp = pow(beta, -2.65); volScalarField Re = max(Ur*phasea_.d()/phaseb_.nu(), 1.0e-3); volScalarField Cds = 24.0*(1.0 + 0.15*pow(Re, 0.687))/Re; forAll(Re, celli) { if(Re[celli] > 1000.0) { Cds[celli] = 0.44; } } // Wen and Yu (1966) volScalarField KWenYu = 0.75*Cds*phaseb_.rho()*Ur*bp/phasea_.d(); // Ergun volScalarField KErgun = 150.0*alpha_*phaseb_.nu()*phaseb_.rho() /(pow(beta*phasea_.d(), 2.0)) + 1.75*phaseb_.rho()*Ur/(beta*phasea_.d()); forAll (beta, cellj) { if (beta[cellj] <= 0.8) { KWenYu[cellj] = KErgun[cellj]; } } return 1.0*KWenYu; } // ************************************************************************* //
2.3 References
- D. Gidaspow, Multiphase Flow and Fluidization: Continuum and Kinetic Theory Descriptions, Academic Press, New York, 1994.
- C. Y. Wen, Y. H. Yu, Mechanics of fluidization, Chemical Engineering Progress Symposium Series, 62:100-111, 1966.
--Alberto 03:21, 29 Aug 2005 (CEST)