FriedrichModel.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) 2024 OpenCFD Ltd.
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 Class
27  Foam::filmSeparationModels::FriedrichModel
28 
29 Description
30  Computes film-separation properties from sharp edges for full separation
31  (Friedrich et al., 2008) and partial separation (Zhang et al., 2018).
32 
33  The governing equations for full separation (Friedrich et al., 2008):
34 
35  \f[
36  F_{ratio} =
37  \frac{\rho \, |\vec{u}|^2 \, h \, sin(\theta)}
38  {\sigma (1 + sin(\theta)) + \rho \, \mathbf{g}\, h\,L_b cos(\theta)}
39  \f]
40 
41  with:
42 
43  \f[
44  L_b = 0.0388 h^{0.5} \mathrm{Re}^{0.6} \mathrm{We}^{-0.5}
45  \f]
46 
47  \f[
48  \mathrm{Re} = \frac{h \, |\vec{u}| \, \rho}{\mu}
49  \f]
50 
51  \f[
52  \mathrm{We} = \frac{h \, \rho_p (\vec{u}_p - \vec{u})^2}{2 \sigma}
53  \f]
54 
55  where:
56 
57  \vartable
58  F_{ratio} | Force ratio
59  h | Film thickness
60  \rho | Film density
61  \rho_p | Primary-phase (gas) density
62  \sigma | Film surface tension
63  \mu | Film dynamic viscosity
64  \mathbf{u} | Film velocity
65  \mathbf{g} | Gravitational acceleration
66  \theta | Sharp-corner angle
67  L_b | Characteristic breakup length
68  \endvartable
69 
70  The onset of film separation is triggered and the film is assumed
71  fully separated when \f$F_{ratio}>1\f$; otherwise, it remains attached.
72 
73 
74  The governing equations for partial separation (Zhang et al., 2018):
75 
76  \f[
77  m_{ratio} = C_0 + C_1 \, exp\left(-\frac{F_{ratio}}{C_2}\right)
78  \f]
79 
80  where:
81 
82  \vartable
83  m_{ratio} | Mass fraction of separated film mass
84  C_0 | Empirical constant (0.882)
85  C_1 | Empirical constant (-1.908)
86  C_2 | Empirical constant (1.264)
87  \endvartable
88 
89  With the above model modification, the film separation begins when
90  \f$F_{ratio}>1\f$; however, only the portion with \f$m_{ratio}\f$
91  separates while the rest stays attached.
92 
93 
94  Reference:
95  \verbatim
96  Governing equations for the full film-separation model (tag:FLW):
97  Friedrich, M. A., Lan, H., Wegener, J. L.,
98  Drallmeier, J. A., & Armaly, B. F. (2008).
99  A separation criterion with experimental
100  validation for shear-driven films in separated flows.
101  J. Fluids Eng. May 2008, 130(5): 051301.
102  DOI:10.1115/1.2907405
103 
104  Governing equations for the partial film-separation model (tag:ZJD):
105  Zhang, Y., Jia, M., Duan, H., Wang, P.,
106  Wang, J., Liu, H., & Xie, M. (2018).
107  Numerical and experimental study of spray impingement and liquid
108  film separation during the spray/wall interaction at expanding corners.
109  International Journal of Multiphase Flow, 107, 67-81.
110  DOI:10.1016/j.ijmultiphaseflow.2018.05.016
111  \endverbatim
112 
113 Usage
114  Minimal example in boundary-condition files:
115  \verbatim
116  filmSeparationCoeffs
117  {
118  // Mandatory entries
119  model Friedrich;
120  rhop <scalar>;
121 
122  // Optional entries
123  separationType <word>;
124  }
125  \endverbatim
126 
127  where the entries mean:
128  \table
129  Property | Description | Type | Reqd | Deflt
130  model | Model name: Friedrich | word | yes | -
131  rhop | Primary-phase density | scalar | yes | -
132  separationType | Film separation type | word | no | full
133  \endtable
134 
135  Options for the \c separationType entry:
136  \verbatim
137  full | Full film separation (Friedrich et al., 2008)
138  partial | Partial film separation (Zhang et al., 2018)
139  \endverbatim
140 
141 SourceFiles
142  FriedrichModel.C
143 
144 \*---------------------------------------------------------------------------*/
145 
146 #ifndef Foam_filmSeparationModels_FriedrichModel_H
147 #define Foam_filmSeparationModels_FriedrichModel_H
148 
149 #include "filmSeparationModel.H"
150 
151 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
152 
153 namespace Foam
154 {
155 namespace filmSeparationModels
156 {
157 
158 /*---------------------------------------------------------------------------*\
159  Class FriedrichModel Declaration
160 \*---------------------------------------------------------------------------*/
161 
162 class FriedrichModel
163 :
164  public filmSeparationModel
165 {
166  // Private Enumerations
167 
168  //- Options for the film separation type
169  enum separationType : char
170  {
171  FULL = 0,
172  PARTIAL
173  };
174 
175  //- Names for separationType
176  static const Enum<separationType> separationTypeNames;
177 
178 
179  // Private Data
180 
181  //- Film separation type
182  enum separationType separation_;
183 
184  //- Approximate uniform mass density of primary phase
185  scalar rhop_;
186 
187  //- Magnitude of the gravitational acceleration
188  scalar magG_;
189 
190  //- Empirical constant for the partial separation model
191  scalar C0_;
192 
193  //- Empirical constant for the partial separation model
194  scalar C1_;
195 
196  //- Empirical constant for the partial separation model
197  scalar C2_;
198 
199  //- List of flags identifying sharp-corner edges where separation
200  //- may occur
201  bitSet cornerEdges_;
202 
203  //- Corner angles of sharp-corner edges where separation may occur
204  scalarList cornerAngles_;
205 
206 
207  // Private Member Functions
208 
209  //- Return Boolean list of identified sharp-corner edges
210  bitSet calcCornerEdges() const;
211 
212  //- Return true if the given edge is identified as sharp
213  bool isCornerEdgeSharp
214  (
215  const vector& faceCentreO,
216  const vector& faceCentreN,
217  const vector& faceNormalO,
218  const vector& faceNormalN
219  ) const;
220 
221  //- Return the list of sharp-corner angles for each edge
222  scalarList calcCornerAngles() const;
223 
224  //- Return the sharp-corner angle for a given edge
225  scalar calcCornerAngle
226  (
227  const vector& faceNormalO,
228  const vector& faceNormalN
229  ) const;
230 
231  //- Return Boolean list of identified separation faces
232  bitSet calcSeparationFaces() const;
233 
234  //- Return true if the given face is identified as a separation face
235  void isSeparationFace
236  (
237  bitSet& separationFaces,
238  const scalar phiEdge,
239  const label faceO,
240  const label faceN = -1
241  ) const;
242 
243  //- Return the list of sharp-corner angles for each face
244  scalarList calcSeparationAngles(const bitSet& separationFaces) const;
245 
246  //- Return the film-separation force ratio per face
247  tmp<scalarField> Fratio() const;
248 
249 
250 public:
251 
252  //- Runtime type information
253  TypeName("Friedrich");
254 
255 
256  // Constructors
257 
258  //- Construct from the base film model and dictionary
260  (
262  const dictionary& dict
263  );
264 
265 
266  // Destructor
267  virtual ~FriedrichModel() = default;
268 
269 
270  // Member Functions
271 
272  // Evaluation
273 
274  //- Calculate the mass ratio of film separation
275  virtual tmp<scalarField> separatedMassRatio() const;
276 };
277 
278 
279 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
280 
281 } // End namespace filmSeparationModels
282 } // End namespace Foam
283 
284 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
285 
286 #endif
287 
288 // ************************************************************************* //
dictionary dict
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
TypeName("Friedrich")
Runtime type information.
virtual tmp< scalarField > separatedMassRatio() const
Calculate the mass ratio of film separation.
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
A base class for filmSeparation models.
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
Definition: bitSet.H:59
const regionModels::areaSurfaceFilmModels::liquidFilmBase & film() const
Return const access to the film properties.
A class for managing temporary objects.
Definition: HashPtrTable.H:50
FriedrichModel(const regionModels::areaSurfaceFilmModels::liquidFilmBase &film, const dictionary &dict)
Construct from the base film model and dictionary.
Namespace for OpenFOAM.