The ObukhovLength function object computes the Obukhov length field and associated friction velocity field.
When scaled by the ground-normal height, i.e. z, the Obukhov length becomes a dimensionless stability parameter, i.e. z/L, for atmospheric boundary layer modelling, expressing the relative roles of buoyancy and shear in the production and dissipation of turbulent kinetic energy.
The model expressions ([58], Eq. 26):
\[ u^* = \sqrt{ \max \left(\nu_t \sqrt{| \grad{\u} + \grad{\u}^T |^2}, \zeta \right)} \]
\[ L_o = - \frac{(u^*)^3}{ {sign}(B) \kappa \max (|B|, \zeta)} \]
with
\[ B = \alpha_t \beta \frac{\grad{T} \cdot \vec{g}}{\rho} \]
where
| \( u^* \) | = | Friction velocity [m/s] |
| \( \nu_t \) | = | Turbulent viscosity [m2/s] |
| \( \u \) | = | Velocity [m/s] |
| \( L_o \) | = | Obukhov length [m] |
| \( B \) | = | Buoyancy production term [m2/s3] |
| \( \alpha_t \) | = | Kinematic turbulent thermal conductivity [m2/s]/[kg/m/s] |
| \( \rho \) | = | Density of fluid [-]/[kg/m3] |
| \( \beta \) | = | Thermal expansion coefficient [1/K] |
| \( T \) | = | Temperature [K] |
| \( \vec{g} \) | = | Gravitational acceleration [m/s2] |
| \( \zeta \) | = | A very small number to avoid floating point exceptions |
Required fields:
U | Velocity [m/s] T | Temperature [K] nut | Turbulent viscosity [m2/s] alphat | Kinematic turbulent thermal conductivity [m2/s]/[kg/m/s] g | Gravitational acceleration [m/s2]
| Operand | Type | Location |
|---|---|---|
| input | - | - |
| output file | - | - |
| output field 1 | volScalarField | $FOAM_CASE/\<time\>/<ObukhovLength> |
| output field 2 | volScalarField | $FOAM_CASE/\<time\>/<Ustar> |
Example of the ObukhovLength function object by using functions sub-dictionary in system/controlDict file:
ObukhovLength1
{
// Mandatory entries (unmodifiable)
type ObukhovLength;
libs (fieldFunctionObjects);
// Optional entries (runtime modifiable)
U U;
result1 ObukhovLength;
result2 Ustar;
rhoRef 1.0;
kappa 0.4;
beta 3e-3;
// Optional (inherited) entries
region region0;
enabled true;
log true;
timeStart 0;
timeEnd 1000;
executeControl timeStep;
executeInterval 1;
writeControl timeStep;
writeInterval 1;
}
where the entries mean:
| Property | Description | Type | Required | Default |
|---|---|---|---|---|
| type | Type name: ObukhovLength | word | yes | - |
| libs | Library name: fieldFunctionObjects | word | yes | - |
| U | Name of the velocity field | word | no | U |
| result1 | Name of the output field for ObukhovLength | word | no | ObukhovLength |
| result2 | Name of the output field for Ustar | word | no | Ustar |
| rhoRef | Reference density (to convert from kinematic to static pressure) | scalar | no | 1.0 |
| kappa | von Kármán constant | scalar | no | 0.40 |
| beta | Thermal expansion coefficient | scalar | no | 3e-3 |
The inherited entries are elaborated in:
Example by using the postProcess -func utility:
postProcess -func "ObukhovLength(<UField>)"
Tutorial:
Source code:
History