Source code for foxes.utils.abl.unstable
import numpy as np
from .stable import logz
[docs]
def psi(height, mol):
"""
The Psi function
Parameters
----------
height: float
The height value
mol: float
The Monin-Obukhov height
Returns
-------
psi: float
The Psi function value
:group: utils.abl.unstable
"""
x = (1.0 - 16.0 * height / mol) ** 0.25
return (
2.0 * np.log((1.0 + x) / 2.0)
+ np.log((1.0 + x**2) / 2.0)
- 2.0 * np.arctan(x)
+ np.pi / 2.0
)
[docs]
def ustar(ws_ref, h_ref, z0, mol, kappa=0.41):
"""
Calculates the friction velocity,
based on reference data.
Parameters
----------
ws_ref: float
The reference wind speed
h_ref: float
The reference height
z0: float
The roughness length
mol: float
The Monin-Obukhov height
kappa: float
The von Karman constant
Returns
-------
ustar: float
The friction velocity
:group: utils.abl.unstable
"""
return ws_ref * kappa / (logz(h_ref, z0) - psi(h_ref, mol))
[docs]
def calc_ws(height, z0, ustar, psi, kappa=0.41):
"""
Calculate wind speeds at given height
Parameters
----------
height: float
The evaluation height
z0: float
The roughness length
ustar: float
The friction velocity
psi: float
The Psi function values
kappa: float
The von Karman constant
Returns
-------
ws: float
The wind speed
:group: utils.abl.unstable
"""
return ustar / kappa * (logz(height, z0) - psi)