The open source CFD toolbox
atmBoundaryLayer

# Properties

• The atmBoundaryLayer class is a base class for handling the inlet boundary conditions providing log-law type ground-normal inflow boundary conditions for wind velocity and turbulence quantities for homogeneous, two-dimensional, dry-air, equilibrium and neutral atmospheric boundary layer (ABL) modelling.
• Therefore, this class is not an executable boundary condition itself, yet a provider for common entries to its derived conditions.
• The atmBoundaryLayer inherits the traits of the inletOutlet boundary condition, so that a given inlet condition can be supplied from all sides of the domain, e.g. a ground-normal cylinder domain having a single inlet/outlet boundary where the changes between inlet and outlet depend on the wind direction and patch normals, so that any change in inflow orientation can be handled with the same mesh (i.e. without creating a new mesh).

# Model equations

The ground-normal profile expressions are due to [99] and [24] whereat the expressions due to [63] are special cases of those when C1=0 and C2=1:

The ground-normal streamwise flow speed profile expression (([99], Table 1), ([63], Eq. 6), ([24], Eq. 5)):

$u = \frac{u^*}{\kappa} \ln \left( \frac{z - d + z_0}{z_0} \right)$

$v = w = 0$

The ground-normal turbulent kinetic energy profile expression, i.e. k (([99], Eq. 21), ([63], Eq. 7), ([24], Eq. 6 when C1=0 and C2=1)):

$k = \frac{(u^*)^2}{\sqrt{C_\mu}} \sqrt{C_1 \ln \left( \frac{z - d + z_0}{z_0} \right) + C_2}$

The ground-normal turbulent kinetic energy dissipation rate profile expression, i.e. epsilon (([99], Eq. 22), ([63], Eq. 8), ([24], Eq. 7 when C1=0 and C2=1)):

$\epsilon = \frac{(u^*)^3}{\kappa (z - d + z_0)} \sqrt{C_1 \ln \left( \frac{z - d + z_0}{z_0} \right) + C_2}$

The ground-normal specific dissipation rate profile expression, i.e. omega ([98], Eq. 13):

$\omega = \frac{u^*}{\kappa \sqrt{C_\mu}} \frac{1}{z - d + z_0}$

The ground-normal friction velocity profile expression, i.e. $$u^*$$ (derived from ([63], Eq. 6), ([24], Eq. 5)):

$u^* = \frac{u_{ref} \kappa}{\ln\left(\frac{z_{ref} + z_0}{z_0}\right)}$

where

 $$u$$ = Ground-normal streamwise flow speed profile [m/s] $$v$$ = Spanwise flow speed [m/s] $$w$$ = Ground-normal flow speed [m/s] $$k$$ = Ground-normal turbulent kinetic energy (TKE) profile [m2/s2] $$\epsilon$$ = Ground-normal TKE dissipation rate profile [m2/s3] $$\omega$$ = Ground-normal specific dissipation rate profile [m2/s3] $$u^*$$ = Friction velocity [m/s] $$\kappa$$ = von Kármán constant [-] $$C_\mu$$ = Empirical model constant [-] $$z$$ = Ground-normal coordinate component [m] $$d$$ = Ground-normal displacement height [m] $$z_0$$ = Aerodynamic roughness length [m] $$u_{ref}$$ = Reference mean streamwise wind speed at $$z_{ref}$$ [m/s] $$z_{ref}$$ = Reference height being used in $$u^*$$ estimations [m] $$C_1$$ = Curve-fitting coefficient for [99] profiles [-] $$C_2$$ = Curve-fitting coefficient for [99] profiles [-]

The curve-fitting coefficients, i.e. C1 and C2, can be determined by nonlinear fitting of ([99], Eq. 19-20) with respect to an experimental dataset for k:

$k = \sqrt{D_1 \ln \left( \frac{z + z_0}{z_0} + D_2 \right)}$

where $$D_1$$ and $$D_2$$ involve C1 and C2 as follows:

$D_1 = \left( \frac{u^2_*}{\sqrt{C_\mu}} \right)^2 C_1$

$D_2 = \left( \frac{u^2_*}{\sqrt{C_\mu}} \right)^2 C_2$

By default, atmBoundaryLayer boundary conditions compute the expressions due to [63].

# Usage

Example of the entries provided for the inherited boundary conditions:

inlet
{
// Mandatory and other optional entries
...

// Mandatory (inherited) entries (runtime modifiable)
flowDir         (1 0 0);
zDir            (0 0 1);
Uref            10.0;
Zref            0.0;
z0              uniform 0.1;
d               uniform 0.0;

// Optional (inherited) entries (unmodifiable)
kappa           0.41;
Cmu             0.09;
initABL         true;
phi             phi;
C1              0.0;
C2              1.0;

// Conditional mandatory (inherited) entries (runtime modifiable)
value           uniform 0;    // when initABL=false
}


where the entries mean:

Property Description Type Required Default
flowDir Flow direction TimeFunction1<vector> yes -
zDir Ground-normal direction TimeFunction1<vector> yes -
Uref Reference mean streamwise flow speed being used in u* estimations [m/s] TimeFunction1<scalar> yes -
Zref Reference height being used in u* estimations [m] TimeFunction1<scalar> yes -
z0 Surface roughness length [m] PatchFunction1<scalar> yes -
d Displacement height [m] - see Notes PatchFunction1<scalar> yes -
kappa von Kármán constant scalar no 0.41
Cmu Empirical model constant scalar no 0.09
initABL Flag to initialise profiles with the theoretical ABL expressions, otherwise use "value" list bool no true
value ABL profile content when initABL=false scalarList conditional -
phi Name of the flux field word no phi
C1 Curve-fitting coefficient scalar no 0.0
C2 Curve-fitting coefficient scalar no 1.0

The inherited entries are elaborated in:

## Notes on entries

• The derived ABL expressions automatically satisfy the simplified transport equation for k. Yet the same expressions only satisfy the simplified transport equation for epsilon when the model constants sigmaEpsilon is 1.11 with kappa=0.4 ([63], p. 358).
• d is the displacement height, and "is relevant for flows over forests and cities" ([17], p. 28). "The displacement height gives the vertical displacement of the entire flow regime over areas which are densely covered with obstacles such as trees or buildings" ([17], p. 28).
• z is the ground-normal height relative to the global minimum height of the inlet patch; therefore, the minimum of z is always zero irrespective of the absolute z-coordinate of the computational patch.

# Further information

Tutorial:

Source code:

History

• Introduced in version 1.5