atmBoundaryLayer

- 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).

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].

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:

- 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.

Tutorial:

Source code:

History

- Introduced in version 1.5