SphereDragForce.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 -------------------------------------------------------------------------------
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::SphereDragForce
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 empirical expressions.
36 
37  \f[
38  \mathrm{F}_\mathrm{D} =
39  \frac{3}{4}
40  \frac{\mu_c\,\mathrm{C}_\mathrm{D}\,\mathrm{Re}_p}{\rho_p \, d_p^2}
41  \f]
42  with
43 
44  \f[
45  \mathrm{C}_\mathrm{D} =
46  \frac{24}{\mathrm{Re}_p}
47  \left(1 + \frac{1}{6}\mathrm{Re}_p^{2/3} \right)
48  \quad \mathrm{if} \quad \mathrm{Re}_p \leq 1000
49  \f]
50  \f[
51  \mathrm{C}_\mathrm{D} =
52  0.424 \quad \mathrm{if} \quad \mathrm{Re}_p > 1000
53  \f]
54  and
55  \f[
56  \mathrm{Re}_p =
57  \frac{\rho_c \, | \mathbf{u}_\mathrm{rel} | \, d_p}{\mu_c}
58  \f]
59 
60  where
61  \vartable
62  \mathrm{F}_\mathrm{D} | Drag force per carrier-fluid velocity [kg/s]
63  \mathrm{C}_\mathrm{D} | Particle drag coefficient
64  \mathrm{Re}_p | Particle Reynolds number
65  \rho_p | Particle mass density
66  \mu_c | Dynamic viscosity of carrier at the cell occupying particle
67  d_p | Particle diameter
68  \rho_c | Density of carrier at the cell occupying particle
69  \mathbf{u}_\mathrm{rel} | Relative velocity between particle and carrier
70  \endvartable
71 
72  Constraints:
73  - Particles remain spherical throughout the force
74  computation, hence no particle distortion.
75  - Applicable to particles with a spatially homogeneous distribution.
76 
77  References:
78  \verbatim
79  Standard model:
80  Putnam, A. (1961).
81  Integratable form of droplet drag coefficient.
82  ARS Journal, 31(10), 1467-1468.
83 
84  Expressions (tag:AOB), (Eq. 34-35):
85  Amsden, A. A., O'Rourke, P. J., & Butler, T. D. (1989).
86  KIVA-II: A computer program for chemically
87  reactive flows with sprays (No. LA-11560-MS).
88  Los Alamos National Lab.(LANL), Los Alamos, NM (United States).
89  DOI:10.2172/6228444
90  \endverbatim
91 
92 Usage
93  Minimal example by using \c constant/<CloudProperties>:
94  \verbatim
95  subModels
96  {
97  particleForces
98  {
99  sphereDrag;
100  }
101  }
102  \endverbatim
103 
104  where the entries mean:
105  \table
106  Property | Description | Type | Reqd | Deflt
107  type | Type name: sphereDrag | word | yes | -
108  \endtable
109 
110 Note
111  - \f$\mathrm{F}_\mathrm{D}\f$ is weighted with the particle mass/density
112  at the stage of a function return, so that it can later be normalised
113  with the effective mass, if necessary (e.g. when using virtual-mass forces).
114 
115 SourceFiles
116  SphereDragForce.C
117 
118 \*---------------------------------------------------------------------------*/
119 
120 #ifndef SphereDragForce_H
121 #define SphereDragForce_H
122 
123 #include "ParticleForce.H"
124 
125 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
126 
127 namespace Foam
128 {
129 /*---------------------------------------------------------------------------*\
130  Class SphereDragForce Declaration
131 \*---------------------------------------------------------------------------*/
132 
133 template<class CloudType>
134 class SphereDragForce
135 :
136  public ParticleForce<CloudType>
137 {
138  // Private Member Functions
139 
140  //- Drag coefficient multiplied by Reynolds number
141  scalar CdRe(const scalar Re) const;
142 
143 
144 public:
145 
146  //- Runtime type information
147  TypeName("sphereDrag");
148 
149 
150  // Constructors
151 
152  //- Construct from mesh
154  (
155  CloudType& owner,
156  const fvMesh& mesh,
157  const dictionary& dict
158  );
159 
160  //- Construct copy
161  SphereDragForce(const SphereDragForce<CloudType>& df);
162 
163  //- Construct and return a clone
164  virtual autoPtr<ParticleForce<CloudType>> clone() const
165  {
166  return autoPtr<ParticleForce<CloudType>>
167  (
168  new SphereDragForce<CloudType>(*this)
169  );
170  }
171 
172  //- No copy assignment
173  void operator=(const SphereDragForce<CloudType>&) = delete;
174 
175 
176  //- Destructor
177  virtual ~SphereDragForce() = default;
178 
179 
180  // Member Functions
181 
182  // Evaluation
183 
184  //- Calculate the coupled force
185  virtual forceSuSp calcCoupled
186  (
187  const typename CloudType::parcelType& p,
188  const typename CloudType::parcelType::trackingData& td,
189  const scalar dt,
190  const scalar mass,
191  const scalar Re,
192  const scalar muc
193  ) const;
194 };
195 
196 
197 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
198 
199 } // End namespace Foam
200 
201 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
202 
203 #ifdef NoRepository
204  #include "SphereDragForce.C"
205 #endif
206 
207 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
208 
209 #endif
210 
211 // ************************************************************************* //
void operator=(const SphereDragForce< CloudType > &)=delete
No copy assignment.
dictionary dict
DSMCCloud< dsmcParcel > CloudType
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.
Helper container for force Su and Sp terms.
Definition: forceSuSp.H:60
const fvMesh & mesh() const noexcept
Return the mesh database.
virtual autoPtr< ParticleForce< CloudType > > clone() const
Construct and return a clone.
TypeName("sphereDrag")
Runtime type information.
ParcelType parcelType
Type of parcel the cloud was instantiated for.
Definition: DSMCCloud.H:290
virtual ~SphereDragForce()=default
Destructor.
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.
Particle-drag model wherein drag forces (per unit carrier-fluid velocity) are dynamically computed ba...
volScalarField & p
SphereDragForce(CloudType &owner, const fvMesh &mesh, const dictionary &dict)
Construct from mesh.
Namespace for OpenFOAM.