atmBoundaryLayer.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2014-2023 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::atmBoundaryLayer
26 
27 Description
28  This class provides functions to evaluate the velocity and turbulence
29  distributions appropriate for atmospheric boundary layers (ABL).
30 
31  The profile is derived from the friction velocity, flow direction and
32  "vertical" direction:
33 
34  \f[
35  U = \frac{U^*}{\kappa} ln\left(\frac{z - z_g + z_0}{z_0}\right)
36  \f]
37 
38  \f[
39  k = \frac{(U^*)^2}{\sqrt{C_mu}}
40  \f]
41 
42  \f[
43  \epsilon = \frac{(U^*)^3}{\kappa(z - z_g + z_0)}
44  \f]
45 
46  where
47  \vartable
48  U^* | Friction velocity
49  \kappa | von Karman's constant
50  C_mu | Turbulence viscosity coefficient
51  z | Vertical coordinate
52  z_0 | Surface roughness height [m]
53  z_g | Minimum z-coordinate [m]
54  \endvartable
55  and
56  \f[
57  U^* = \kappa\frac{U_{ref}}{ln\left(\frac{Z_{ref} + z_0}{z_0}\right)}
58  \f]
59  where
60  \vartable
61  U_{ref} | Reference velocity at \f$Z_{ref}\f$ [m/s]
62  Z_{ref} | Reference height [m]
63  \endvartable
64 
65  Use in the atmBoundaryLayerInletVelocity, atmBoundaryLayerInletK and
66  atmBoundaryLayerInletEpsilon boundary conditions.
67 
68  Reference:
69  D.M. Hargreaves and N.G. Wright, "On the use of the k-epsilon model
70  in commercial CFD software to model the neutral atmospheric boundary
71  layer", Journal of Wind Engineering and Industrial Aerodynamics
72  95(2007), pp 355-369.
73 
74 Usage
75  \table
76  Property | Description | Required | Default
77  flowDir | Flow direction | yes |
78  zDir | Vertical direction | yes |
79  kappa | von Karman's constant | no | 0.41
80  Cmu | Turbulence viscosity coefficient | no | 0.09
81  Uref | Reference velocity [m/s] | yes |
82  Zref | Reference height [m] | yes |
83  z0 | Surface roughness height [m] | yes |
84  zGround | Minimum z-coordinate [m] | yes |
85  Ulower | Velocity below the BL | no |
86  kLower | Turbulence k below the BL | no |
87  epsilonLower | Turbulence epsilon below the BL | no |
88  \endtable
89 
90  Example of the boundary condition specification:
91  \verbatim
92  ground
93  {
94  type atmBoundaryLayerInletVelocity;
95  flowDir (1 0 0);
96  zDir (0 0 1);
97  Uref 10.0;
98  Zref 20.0;
99  z0 uniform 0.1;
100  zGround uniform 0.0;
101  }
102  \endverbatim
103 
104  Note:
105  D.M. Hargreaves and N.G. Wright recommend Gamma epsilon in the
106  k-epsilon model should be changed from 1.3 to 1.11 for consistency.
107  The roughness height (Er) is given by Er = 20 z0 following the same
108  reference.
109 
110 SourceFiles
111  atmBoundaryLayer.C
112 
113 \*---------------------------------------------------------------------------*/
114 
115 #ifndef atmBoundaryLayer_H
116 #define atmBoundaryLayer_H
117 
118 #include "fvPatchFields.H"
119 
120 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
121 
122 namespace Foam
123 {
124 
125 /*---------------------------------------------------------------------------*\
126  Class atmBoundaryLayer Declaration
127 \*---------------------------------------------------------------------------*/
128 
129 class atmBoundaryLayer
130 {
131  // Private static data
132 
133  //- Default value of the Von Karman constant
134  static const scalar kappaDefault_;
135 
136  //- Default value of the turbulent viscosity coefficient
137  static const scalar CmuDefault_;
138 
139 
140  // Private Data
141 
142  //- Flow direction
143  vector flowDir_;
144 
145  //- Direction of the z-coordinate
146  vector zDir_;
147 
148  //- Von Karman constant
149  const scalar kappa_;
150 
151  //- Turbulent viscosity coefficient
152  const scalar Cmu_;
153 
154  //- Reference velocity
155  const scalar Uref_;
156 
157  //- Reference height
158  const scalar Zref_;
159 
160  //- Surface roughness height
161  scalarField z0_;
162 
163  //- Minimum coordinate value in z direction
164  scalarField zGround_;
165 
166  //- Friction velocity
167  scalarField Ustar_;
168 
169  //- True if the boundary layer is offset within the domain
170  bool offset_;
171 
172  //- Velocity of the flow below the boundary layer
173  const scalar Ulower_;
174 
175  //- Turbulence kinetic energy of the flow below the boundary layer
176  const scalar kLower_;
177 
178  //- Turbulence kinetic energy dissipation rate of the flow below the
179  // boundary layer
180  const scalar epsilonLower_;
181 
182 
183  // Private Member Functions
184 
185  //- Initialisation shared by multiple constructors
186  void init();
187 
188 
189 public:
190 
191  // Constructors
192 
193  //- Construct null
195 
196  //- Construct from components
198  (
199  const vector& flowDir,
200  const vector& zDir,
201  const scalar Uref,
202  const scalar Zref,
203  const scalarField& z0,
204  const scalarField& zGround,
205  const scalar kappa = kappaDefault_,
206  const scalar Cmu = CmuDefault_,
207  const scalar ULower = 0,
208  const scalar kLower = 0,
209  const scalar epsilonLower = 0
210  );
211 
212  //- Construct from the coordinates field and dictionary
214 
215  //- Construct by mapping given
216  // atmBoundaryLayer onto a new patch
218  (
219  const atmBoundaryLayer&,
220  const fieldMapper&
221  );
222 
223  //- Copy constructor
225 
226 
227  // Member Functions
228 
229  // Access
230 
231  //- Return flow direction
232  const vector& flowDir() const
233  {
234  return flowDir_;
235  }
236 
237  //- Return z-direction
238  const vector& zDir() const
239  {
240  return zDir_;
241  }
242 
243  //- Return friction velocity
244  const scalarField& Ustar() const
245  {
246  return Ustar_;
247  }
248 
249 
250  // Mapping functions
251 
252  //- Map the given atmBoundaryLayer onto this atmBoundaryLayer
253  void map(const atmBoundaryLayer&, const fieldMapper&);
254 
255  //- Reset the atmBoundaryLayer to the given atmBoundaryLayer
256  // Used for mesh to mesh mapping
257  void reset(const atmBoundaryLayer&);
258 
259 
260  // Evaluate functions
261 
262  //- Return the velocity distribution for the ATM
263  tmp<vectorField> U(const vectorField& p) const;
264 
265  //- Return the turbulent kinetic energy distribution for the ATM
266  tmp<scalarField> k(const vectorField& p) const;
267 
268  //- Return the turbulent dissipation rate distribution for the ATM
269  tmp<scalarField> epsilon(const vectorField& p) const;
270 
271 
272  //- Write
273  void write(Ostream&) const;
274 };
275 
276 
277 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
278 
279 } // End namespace Foam
280 
281 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
282 
283 #endif
284 
285 // ************************************************************************* //
This class provides functions to evaluate the velocity and turbulence distributions appropriate for a...
void map(const atmBoundaryLayer &, const fieldMapper &)
Map the given atmBoundaryLayer onto this atmBoundaryLayer.
void reset(const atmBoundaryLayer &)
Reset the atmBoundaryLayer to the given atmBoundaryLayer.
const scalarField & Ustar() const
Return friction velocity.
void write(Ostream &) const
Write.
const vector & flowDir() const
Return flow direction.
const vector & zDir() const
Return z-direction.
tmp< vectorField > U(const vectorField &p) const
Return the velocity distribution for the ATM.
atmBoundaryLayer()
Construct null.
tmp< scalarField > k(const vectorField &p) const
Return the turbulent kinetic energy distribution for the ATM.
tmp< scalarField > epsilon(const vectorField &p) const
Return the turbulent dissipation rate distribution for the ATM.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:162
Abstract base class for field mapping.
Definition: fieldMapper.H:48
const dimensionedScalar kappa
Coulomb constant: default SI units: [N.m2/C2].
Namespace for OpenFOAM.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Vector< scalar > vector
A scalar version of the templated Vector.
Definition: vector.H:49
Field< vector > vectorField
Specialisation of Field<T> for vector.
volScalarField & p