NonSphereDragForce.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) 2011-2017 OpenFOAM Foundation
9 Copyright (C) 2021 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
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
27Class
28 Foam::NonSphereDragForce
29
30Group
31 grpLagrangianIntermediateForceSubModels
32
33Description
34 Particle-drag model wherein drag forces (per unit carrier-fluid
35 velocity) are dynamically computed based on empirical expressions using
36 a four-parameter general drag correlation for non-spherical particles.
37
38 \f[
39 \mathrm{F}_\mathrm{D} =
40 \frac{3}{4}
41 \frac{\mu_c\,\mathrm{C}_\mathrm{D}\,\mathrm{Re}_p}{\rho_p \, d_p^2}
42 \f]
43 with
44
45 \f[
46 \mathrm{C}_\mathrm{D} =
47 \frac{24}{\mathrm{Re}_p} \left( 1 + A \, \mathrm{Re}_p^B \right)
48 + \frac{C \, \mathrm{Re}_p}{D + \mathrm{Re}_p}
49 \f]
50 where
51
52 \f[
53 A = \exp(2.3288 - 6.4581\phi + 2.4486 \phi^2)
54 \f]
55
56 \f[
57 B = 0.0964 + 0.5565\phi
58 \f]
59
60 \f[
61 C = \exp(4.9050 - 13.8944\phi + 18.4222\phi^2 - 10.2599 \phi^3)
62 \f]
63
64 \f[
65 D = \exp(1.4681 + 12.2584\phi - 20.7322\phi^2 + 15.8855\phi^3)
66 \f]
67
68 \f[
69 \phi = \frac{A_p}{A_a}
70 \f]
71
72 \f[
73 \mathrm{Re}_p =
74 \frac{\rho_c \, | \mathbf{u}_\mathrm{rel} | \, d_p}{\mu_c}
75 \f]
76
77 where
78 \vartable
79 \mathrm{F}_\mathrm{D} | Drag force per carrier-fluid velocity [kg/s]
80 \mathrm{C}_\mathrm{D} | Particle drag coefficient
81 \mathrm{Re}_p | Particle Reynolds number
82 \rho_p | Particle mass density
83 \mu_c | Dynamic viscosity of carrier at the cell occupying particle
84 d_p | Particle diameter
85 \rho_c | Density of carrier at the cell occupying particle
86 \mathbf{u}_\mathrm{rel} | Relative velocity between particle and carrier
87 A_p | Surface area of sphere with the same volume as the particle
88 A_a | Actual surface area of the particle
89 \phi | Ratio of surface areas
90 \endvartable
91
92 Constraints:
93 - Applicable to particles with a spatially homogeneous distribution.
94 - \f$ 1 \geq \phi > 0 \f$
95
96 References:
97 \verbatim
98 Standard model (tag:HL), (Eq. 4,10-11):
99 Haider, A., & Levenspiel, O. (1989).
100 Drag coefficient and terminal velocity of
101 spherical and nonspherical particles.
102 Powder technology, 58(1), 63-70.
103 DOI:10.1016/0032-5910(89)80008-7
104 \endverbatim
105
106Usage
107 Minimal example by using \c constant/<CloudProperties>:
108 \verbatim
109 subModels
110 {
111 particleForces
112 {
113 nonSphereDrag
114 {
115 phi <phi>;
116 }
117 }
118 }
119 \endverbatim
120
121 where the entries mean:
122 \table
123 Property | Description | Type | Reqd | Deflt
124 type | Type name: nonSphereDrag | word | yes | -
125 phi | Ratio of surface area of sphere having same <!--
126 --> volume as particle to actual surface area of <!--
127 --> particle | scalar | yes | -
128 \endtable
129
130Note
131 - The drag coefficient model in (HL:Eq. 11) is good to within
132 2 to 4 \% of RMS values from the corresponding experiment.
133 - (HL:Eq. 12) also give a simplified model with greater error
134 compared to results from the experiment, but since \c phi is
135 presumed constant, Eq. 12 offers little benefit.
136 - \f$\mathrm{F}_\mathrm{D}\f$ is weighted with the particle mass
137 at the stage of a function return, so that it can later be normalised
138 with the effective mass, if necessary (e.g. when using virtual-mass forces).
139
140SourceFiles
141 NonSphereDragForce.C
142
143\*---------------------------------------------------------------------------*/
144
145#ifndef NonSphereDragForce_H
146#define NonSphereDragForce_H
147
148#include "ParticleForce.H"
149
150// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
151
152namespace Foam
153{
154/*---------------------------------------------------------------------------*\
155 Class NonSphereDragForce Declaration
156\*---------------------------------------------------------------------------*/
157
158template<class CloudType>
159class NonSphereDragForce
160:
161 public ParticleForce<CloudType>
162{
163protected:
164
165 // Protected Data
166
167 //- Ratio of surface of sphere having same volume as particle to
168 //- actual surface area of particle (0 < phi <= 1)
169 scalar phi_;
170
171
172 // Model coefficients
173
174 scalar a_;
175
176 scalar b_;
177
178 scalar c_;
179
180 scalar d_;
181
182
183 // Private Member Functions
184
185 //- Drag coefficient multiplied by Reynolds number
186 scalar CdRe(const scalar Re) const;
187
188
189public:
190
191 //- Runtime type information
192 TypeName("nonSphereDrag");
193
194
195 // Constructors
196
197 //- Construct from mesh
199 (
201 const fvMesh& mesh,
202 const dictionary& dict
203 );
204
205 //- Construct copy
206 NonSphereDragForce(const NonSphereDragForce<CloudType>& df);
207
208 //- Construct and return a clone
209 virtual autoPtr<ParticleForce<CloudType>> clone() const
210 {
211 return autoPtr<ParticleForce<CloudType>>
212 (
213 new NonSphereDragForce<CloudType>(*this)
214 );
215 }
216
217 //- No copy assignment
218 void operator=(const NonSphereDragForce<CloudType>&) = delete;
219
220
221 //- Destructor
222 virtual ~NonSphereDragForce() = default;
223
225 // Member Functions
226
227 // Evaluation
228
229 //- Calculate the non-coupled force
230 virtual forceSuSp calcCoupled
231 (
232 const typename CloudType::parcelType& p,
233 const typename CloudType::parcelType::trackingData& td,
234 const scalar dt,
235 const scalar mass,
236 const scalar Re,
237 const scalar muc
238 ) const;
240
242// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
244} // End namespace Foam
246// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
247
248#ifdef NoRepository
249 #include "NonSphereDragForce.C"
250#endif
251
252// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
253
254#endif
255
256// ************************************************************************* //
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:75
ParcelType parcelType
Type of parcel the cloud was instantiated for.
Definition: DSMCCloud.H:220
Particle-drag model wherein drag forces (per unit carrier-fluid velocity) are dynamically computed ba...
void operator=(const NonSphereDragForce< CloudType > &)=delete
No copy assignment.
virtual autoPtr< ParticleForce< CloudType > > clone() const
Construct and return a clone.
NonSphereDragForce(CloudType &owner, const fvMesh &mesh, const dictionary &dict)
Construct from mesh.
TypeName("nonSphereDrag")
Runtime type information.
scalar CdRe(const scalar Re) const
Drag coefficient multiplied by Reynolds number.
virtual ~NonSphereDragForce()=default
Destructor.
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 non-coupled force.
Abstract base class for particle forces.
Definition: ParticleForce.H:60
const CloudType & owner() const
Return const access to the cloud owner.
const fvMesh & mesh() const
Return the mesh database.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
Class used to pass data into container.
Helper container for force Su and Sp terms.
Definition: forceSuSp.H:67
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:91
volScalarField & p
Namespace for OpenFOAM.
DSMCCloud< dsmcParcel > CloudType
scalarField Re(const UList< complex > &cf)
Extract real component.
Definition: complexField.C:159
dictionary dict
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73