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