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 can be calculated using the formula:
where , if and if .
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 to obtain .
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 :
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)