ErgunWenYuDragForce.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2013-2017 OpenFOAM Foundation
9  Copyright (C) 2021 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 Class
28  Foam::ErgunWenYuDragForce
29 
30 Group
31  grpLagrangianIntermediateForceSubModels
32 
33 Description
34  Particle-drag model wherein drag forces (per unit carrier-fluid
35  velocity) are dynamically computed based on the Gidaspow drag model
36  which is a switch-like combination of the Wen-Yu and Ergun drag models.
37 
38  \f[
39  \mathrm{F}_{\mathrm{D}, Wen-Yu} =
40  \frac{3}{4}
41  \frac{(1 - \alpha_c) \, \mu_c \, \alpha_c \, \mathrm{Re}_p }{d_p^2}
42  \mathrm{C}_\mathrm{D} \, \alpha_c^{-2.65}
43  \f]
44 
45  \f[
46  \mathrm{F}_{\mathrm{D}, Ergun} =
47  \left(150 \frac{1-\alpha_c}{\alpha_c} + 1.75 \mathrm{Re}_p \right)
48  \frac{(1-\alpha_c) \, \mu_c}{d_p^2}
49  \f]
50 
51  \f[
52  \mathrm{F}_\mathrm{D} = \mathrm{F}_{\mathrm{D}, Wen-Yu}
53  \quad \mathrm{if} \quad \alpha_c \geq 0.8
54  \f]
55 
56  \f[
57  \mathrm{F}_\mathrm{D} = \mathrm{F}_{\mathrm{D}, Ergun}
58  \quad \mathrm{if} \quad \alpha_c < 0.8
59  \f]
60  with
61 
62  \f[
63  \mathrm{Re}_p =
64  \frac{\rho_c \, | \mathbf{u}_\mathrm{rel} | \, d_p}{\mu_c}
65  \f]
66 
67  where
68  \vartable
69  \mathrm{F}_\mathrm{D} | Drag force per carrier-fluid velocity [kg/s]
70  \mathrm{C}_\mathrm{D} | Particle drag coefficient
71  \mathrm{Re}_p | Particle Reynolds number
72  \mu_c | Dynamic viscosity of carrier at the cell occupying particle
73  d_p | Particle diameter
74  \rho_c | Density of carrier at the cell occupying particle
75  \mathbf{u}_\mathrm{rel} | Relative velocity between particle and carrier
76  \alpha_c | Volume fraction of carrier fluid
77  \endvartable
78 
79  References:
80  \verbatim
81  Standard model (tag:G):
82  Gidaspow, D. (1994).
83  Multiphase flow and fluidization:
84  continuum and kinetic theory descriptions.
85  Academic press.
86 
87  Drag-coefficient model:
88  Schiller, L., & Naumann, A. (1935).
89  Über die grundlegenden Berechnungen bei der Schwerkraftaufbereitung.
90  Z. Ver. Dtsch. Ing., 77: 318–326.
91 
92  Expressions (tags:ZZB, GLSLR), (Eq.16-18, Table 3):
93  Zhou, L., Zhang, L., Bai, L., Shi, W.,
94  Li, W., Wang, C., & Agarwal, R. (2017).
95  Experimental study and transient CFD/DEM simulation in
96  a fluidized bed based on different drag models.
97  RSC advances, 7(21), 12764-12774.
98  DOI:10.1039/C6RA28615A
99 
100  Gao, X., Li, T., Sarkar, A., Lu, L., & Rogers, W. A. (2018).
101  Development and validation of an enhanced filtered drag model
102  for simulating gas-solid fluidization of Geldart A particles
103  in all flow regimes.
104  Chemical Engineering Science, 184, 33-51.
105  DOI:10.1016/j.ces.2018.03.038
106  \endverbatim
107 
108 Usage
109  Minimal example by using \c constant/<CloudProperties>:
110  \verbatim
111  subModels
112  {
113  particleForces
114  {
115  ErgunWenYuDrag
116  {
117  alphac <alphacName>; // e.g. alpha.air
118  }
119  }
120  }
121  \endverbatim
122 
123  where the entries mean:
124  \table
125  Property | Description | Type | Reqd | Deflt
126  type | Type name: ErgunWenYuDrag | word | yes | -
127  alphac | Name of carrier fluid | word | yes | -
128  \endtable
129 
130 Note
131  - \f$\mathrm{F}_\mathrm{D}\f$ is weighted with the particle mass/density
132  at the stage of a function return, so that it can later be normalised
133  with the effective mass, if necessary (e.g. when using virtual-mass forces).
134 
135 See also
136  - Foam::WenYuDragForce
137 
138 SourceFiles
139  ErgunWenYuDragForce.C
140 
141 \*---------------------------------------------------------------------------*/
142 
143 #ifndef ErgunWenYuDragForce_H
144 #define ErgunWenYuDragForce_H
145 
146 #include "ParticleForce.H"
147 #include "volFieldsFwd.H"
148 
149 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
150 
151 namespace Foam
152 {
153 
154 /*---------------------------------------------------------------------------*\
155  Class ErgunWenYuDragForce Declaration
156 \*---------------------------------------------------------------------------*/
157 
158 template<class CloudType>
159 class ErgunWenYuDragForce
160 :
161  public ParticleForce<CloudType>
162 {
163  // Private Data
164 
165  //- Reference to the carrier volume fraction field
166  const volScalarField& alphac_;
167 
168 
169  // Private Member Functions
170 
171  //- Drag coefficient multiplied by volume fraction and Reynolds number
172  scalar CdRe(const scalar alphacRe) const;
173 
174 
175 public:
176 
177  //- Runtime type information
178  TypeName("ErgunWenYuDrag");
179 
180 
181  // Constructors
182 
183  //- Construct from mesh
185  (
186  CloudType& owner,
187  const fvMesh& mesh,
188  const dictionary& dict
189  );
190 
191  //- Construct copy
192  ErgunWenYuDragForce(const ErgunWenYuDragForce<CloudType>& df);
193 
194  //- Construct and return a clone
195  virtual autoPtr<ParticleForce<CloudType>> clone() const
196  {
197  return autoPtr<ParticleForce<CloudType>>
198  (
199  new ErgunWenYuDragForce<CloudType>(*this)
200  );
201  }
202 
203  //- No copy assignment
205 
206 
207  //- Destructor
208  virtual ~ErgunWenYuDragForce() = default;
209 
210 
211  // Member Functions
212 
213  // Evaluation
214 
215  //- Calculate the coupled force
216  virtual forceSuSp calcCoupled
217  (
218  const typename CloudType::parcelType& p,
219  const typename CloudType::parcelType::trackingData& td,
220  const scalar dt,
221  const scalar mass,
222  const scalar Re,
223  const scalar muc
224  ) const;
225 };
226 
227 
228 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
229 
230 } // End namespace Foam
231 
232 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
233 
234 #ifdef NoRepository
235  #include "ErgunWenYuDragForce.C"
236 #endif
237 
238 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
239 
240 #endif
241 
242 // ************************************************************************* //
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
Calculate the coupled force.
dictionary dict
ErgunWenYuDragForce(CloudType &owner, const fvMesh &mesh, const dictionary &dict)
Construct from mesh.
DSMCCloud< dsmcParcel > CloudType
Forwards and collection of common volume field types.
Particle-drag model wherein drag forces (per unit carrier-fluid velocity) are dynamically computed ba...
Helper container for force Su and Sp terms.
Definition: forceSuSp.H:60
const fvMesh & mesh() const noexcept
Return the mesh database.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:81
void operator=(const ErgunWenYuDragForce< CloudType > &)=delete
No copy assignment.
ParcelType parcelType
Type of parcel the cloud was instantiated for.
Definition: DSMCCloud.H:290
virtual ~ErgunWenYuDragForce()=default
Destructor.
virtual autoPtr< ParticleForce< CloudType > > clone() const
Construct and return a clone.
scalarField Re(const UList< complex > &cmplx)
Extract real component.
Definition: complexField.C:207
const CloudType & owner() const noexcept
Return const access to the cloud owner.
TypeName("ErgunWenYuDrag")
Runtime type information.
volScalarField & p
Namespace for OpenFOAM.