Soil Moisture

The soil_moisture module contains all functions related to soil moisture data components, as outlined by Yang et al.1.

wet_bulb_temperature_inst(t_air_i, t_dew_i)

Computes the instantaneous wet bulb temperature.

Parameters
  • t_air_i (float) – instantaneous air temperature, \(T_{a}\) [C]

  • t_dew_i (float) – instantaneous dew point temperature, \(Td_{a}\) [C]

Returns

t_wet_i – instantaneous wet bulb temperature, \(Tw_{a}\) [C]

Return type

float

wet_bulb_temperature_inst_new(t_air_i, qv_i, p_air_i)

Computes the instantaneous wet bulb temperature based on Stull, Roland. “Wet-bulb temperature from relative humidity and air temperature.” Journal of applied meteorology and climatology 50.11 (2011): 2267-2269.

Parameters
  • t_air_i (float) – instantaneous air temperature, \(T_{a}\) [C]

  • qv_i (float) – instantaneous specific humidity, \(q_{v,i}\) [kg/kg]

  • p_air_i (float) – instantaneous air pressure, \(P_{i}\) [mbar]

Returns

t_wet_i – instantaneous wet bulb temperature, \(Tw_{a}\) [C]

Return type

float

dew_point_temperature_inst(vp_i)

Computes the instantaneous dew point temperature.

Parameters

vp_i (float) – instantaneous vapour pressure, \(e_{a}\) [mbar]

Returns

t_dew_i – instantaneous dew point temperature, \(Td_{a}\) [K]

Return type

float

dew_point_temperature_coarse_inst(vp_i)

Computes the instantaneous dew point temperature.

Parameters

vp_i (float) – instantaneous vapour pressure, \(e_{a}\) [mbar]

Returns

t_dew_coarse_i – instantaneous dew point temperature, \(Td_{a}\) [K]

Return type

float

psi_m(y)

Computes the stability correction for momentum based on Brutsaert2.

\[\begin{split}\Psi_{M}(y) = & \ln(a+y)-3by^{\frac{1}{3}} + \\ & \frac{ba^{\frac{1}{3}}}{2}\ln[\frac{(1+x)^{2}}{(1-x+x^{2})}] + \\ & \sqrt{3}ba^{\frac{1}{3}}\arctan[\frac{(2x-1)}{\sqrt{3}}]+\Psi_{0}\end{split}\]

where the following constants are used

  • \(a\) = 0.33

  • \(b\) = 0.41

in which:

\[x = (\frac{y}{a})^{\frac{1}{3}}\]

and:

\[y = \frac{-(z-d)}{L}\]

where \(L\) is the monin obukhov length defined by ETLook.unstable.monin_obukhov_length(), \(z\) and \(d\) are the measurement height and displacement height respectively. All aforementioned parameters are different for the bare soil and full canopy solutions.

The symbol \(\Psi_{0}\) denotes a constant of integration, given by

\[\Psi_{0}=-\ln({a}) + \sqrt{3} \cdot b \cdot a^{\frac{1}{3}} \cdot \frac{\pi}{6}\]

Notes

This function should not be used as an input function for a ETLook tool. This function is used internally by aerodynamical_resistance_bare() and aerodynamical_resistance_full() and wind_speed_soil().

psi_h(y)

Computes the stability correction for momentum based on Brutsaert2.

\[\Psi_{H}(y)=[\frac{(1-d)}{n}]\ln{\frac{(c+y^n)}{c}}\]

where the following constants are used

  • \(c\) = 1.00

  • \(d\) = 0.057

  • \(n\) = 0.78

in which

\[y = \frac{-(z-d)}{L}\]

where \(L\) is the monin obukhov length defined by ETLook.unstable.monin_obukhov_length(), \(z\) and \(d\) are the measurement height and displacement height respectively. All aforementioned parameters are different for the bare soil and full canopy solutions.

Notes

This function should not be used as an input function for a tool. This function is used internally by aerodynamical_resistance_bare() and aerodynamical_resistance_full() and wind_speed_soil().

initial_friction_velocity_inst(u_b_i, z0m, disp, z_b=100)

Computes the initial instantaneous friction velocity without stability corrections.

\[u_{*}=\frac{k \cdot u_{b}}{\ln\left(\frac{z_{b}-d}{z_{0,m}}\right)}\]
Parameters
  • u_b_i (float) – instantaneous wind speed at blending height, \(u_{b}\) [m s-1]

  • z0m (float) – surface roughness, \(z_{0,m}\) [m]

  • disp (float) – displacement height, \(d\) [m]

  • z_b (float) – blending height, \(z_{b}\) [m]

Returns

u_star_i_init – initial estimate of the instantaneous friction velocity, \(u_{*,i}\) [m s-1]

Return type

float

atmospheric_emissivity_inst(vp_i, t_air_k_i)

Computes the atmospheric emissivity according to Brutsaert3.

\[\varepsilon_{a}=a\left(\frac{e_{a}}{T_{a}}\right)^{b}\]

where the following constants are used

  • \(a\) = 1.24

  • \(b\) = 1/7

Parameters
  • vp_i (float) – instantaneous vapour pressure, \(e_{a}\) [mbar]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

Returns

emiss_atm_i – instantaneous atmospheric emissivity, \(\varepsilon_{a}\) [-]

Return type

float

net_radiation_bare(ra_hor_clear_i, emiss_atm_i, t_air_k_i, lst, r0_bare=0.38)

Computes the net radiation for the bare soil with zero evaporation.

\[Q_{bare}^{*}=\left(1-\alpha_{0,bare}\right)S_{d}+\varepsilon_{s} \cdot \varepsilon_{a} \cdot \sigma \cdot T_{a}^{4}-\varepsilon_{s} \cdot \sigma \cdot T_{s}^{4}\]
Parameters
  • ra_hor_clear_i (float) – Total clear-sky irradiance on a horizontal surface, \(S_{d}\) [W/m2]

  • emiss_atm_i (float) – instantaneous atmospheric emissivity, \(\varepsilon_{a}\) [-]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

  • lst (float) – surface temperature, \(T_{0}\) [K]

  • r0_bare (float) – dry bare soil surface albedo, \(\alpha_{0, bare}\) [-]

Returns

rn_bare – net radiation bare soil, \(Q^*_{bare}\) [Wm-2]

Return type

float

net_radiation_full(ra_hor_clear_i, emiss_atm_i, t_air_k_i, lst, r0_full=0.18)

Computes the net radiation at full canopy with zero evaporation.

\[Q_{full}^{*}=\left(1-\alpha_{0,full}\right) \cdot S_{d}+\varepsilon_{c} \cdot \varepsilon_{a} \cdot \sigma \cdot T_{a}^{4}-\varepsilon_{c} \cdot \sigma \cdot T_{s}^{4}\]
Parameters
  • ra_hor_clear_i (float) – Total clear-sky irradiance on a horizontal surface, \(ra_hor_clear_i\) [W/m2]

  • emiss_atm_i (float) – instantaneous atmospheric emissivity, \(P\) [-]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

  • lst (float) – surface temperature, \(T_{0}\) [K]

  • r0_full (float) – surface albedo full vegetation, \(\alpha_{0, full}\) [-]

Returns

rn_full – net radiation full vegetation, \(Q^*_{full}\) [Wm-2]

Return type

float

sensible_heat_flux_bare(rn_bare, fraction_h_bare=0.65)

Computes the bare soil sensible heat flux.

\[H_{bare} = H_{f, bare} \cdot Q^*_{bare}\]
Parameters
  • rn_bare (float) – net radiation bare soil, \(Q^*_{bare}\) [Wm-2]

  • fraction_h_bare (float) – fraction of H of net radiation bare soil, \(H_{f, bare}\) [-]

Returns

h_bare – sensible heat flux bare soil, \(H_{bare}\) [Wm-2]

Return type

float

sensible_heat_flux_full(rn_full, fraction_h_full=0.95)

Computes the full canopy sensible heat flux.

\[H_{full} = H_{f, full} \cdot Q^*_{full}\]
Parameters
  • rn_full (float) – net radiation full vegetation, \(Q^*_{full}\) [Wm-2]

  • fraction_h_full (float) – fraction of H of net radiation full vegetation, \(H_{f, full}\) [-]

Returns

h_full – sensible heat flux full vegetation, \(H_{full}\) [Wm-2]

Return type

float

wind_speed_blending_height_bare(u_i, z0m_bare=0.001, z_obs=10, z_b=100)

Computes the wind speed at blending height \(u_{b}\) [m/s] using the logarithmic wind profile.

\[u_{b}=\frac{u_{obs} \cdot \ln\left(\frac{z_{b}}{z_{0,m}}\right)} {\ln\left(\frac{z_{obs}}{z_{0,m}}\right)}\]
Parameters
  • u_i (float) – instantaneous wind speed at observation height, \(u_{obs}\) [m/s]

  • z_obs (float) – observation height of wind speed, \(z_{obs}\) [m]

  • z_b (float) – blending height, \(z_{b}\) [m]

  • z0m_bare (float) – surface roughness bare soil, \(z_{0,m}\) m

Returns

u_b_i_bare – instantaneous wind speed at blending height for bare soil, \(u_{b,i,bare}\) [m/s]

Return type

float

wind_speed_blending_height_full_inst(u_i, z0m_full=0.1, z_obs=10, z_b=100)

Computes the wind speed at blending height \(u_{b}\) [m/s] using the logarithmic wind profile.

\[u_{b}=\frac{u_{obs} \cdot \ln\left(\frac{z_{b}}{z_{0,m}}\right)} {\ln\left(\frac{z_{obs}}{z_{0,m}}\right)}\]
Parameters
  • u_i (float) – instantaneous wind speed at observation height, \(u_{obs}\) [m/s]

  • z_obs (float) – observation height of wind speed, \(z_{obs}\) [m]

  • z_b (float) – blending height, \(z_{b}\) [m]

  • z0m_full (float) – surface roughness vegetation, \(z_{0,m}\) [m]

Returns

u_b_i_full – instantaneous wind speed at blending height for full vegetation, \(u_{b,i,full}\) [m s-1]

Return type

float

friction_velocity_full_inst(u_b_i_full, z0m_full=0.1, disp_full=0.667, z_b=100)

Like initial_friction_velocity_inst() but with full vegetation parameters.

Parameters
  • u_b_i_full (float) – instantaneous wind speed blending height for full vegetation, \(u_{b,d}\) [m s-1]

  • z0m_full (float) – surface roughness vegetation, \(z_{0,m,b}\) [m]

  • disp_full (float) – displacement height vegetation, \(d^{b}\) [m]

  • z_b (float) – blending height, \(z_b\) [m]

Returns

u_star_i_full – instantaneous friction velocity vegetation, \(u_{f}^{*}\) [m s-1]

Return type

float

friction_velocity_bare_inst(u_b_i_bare, z0m_bare=0.001, disp_bare=0.0, z_b=100)

Like initial_friction_velocity_inst() but with bare soil parameters.

Parameters
  • u_b_i_bare (float) – instantaneous wind speed blending height bare soil, \(u_{b,d}\) [W m-2]

  • z0m_bare (float) – surface roughness bare soil, \(z_{0,m,b}\) [m]

  • disp_bare (float) – displacement height bare soil, \(d^{b}\) [m]

  • z_b (float) – blending height, \(z_b\) [m]

Returns

u_star_i_bare – instantaneous friction velocity bare soil, \(u_{b}^{*}\) [m s-1]

Return type

float

monin_obukhov_length_bare(h_bare, ad_i, u_star_i_bare, t_air_k_i)

Like unstable.monin_obukhov_length() but with bare soil parameters.

Parameters
  • h_bare (float) – sensible heat flux for dry bare soil, \(H_{b,d}\) [W m-2]

  • ad_i (float) – instantaneous air density, \(\rho\) [k g m-3]

  • u_star_i_bare (float) – instantaneous friction velocity bare soil, \(u^{*}_{b}\) [m s-1]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

Returns

L_bare – monin obukhov length dry vegetation, \(L_{b,d}\) [m]

Return type

float

monin_obukhov_length_full(h_full, ad_i, u_star_i_full, t_air_k_i)

Like unstable.monin_obukhov_length() but with full canopy parameters.

Parameters
  • h_full (float) – sensible heat flux for dry full vegetation, \(H_{f,d}\) [W m-2]

  • ad_i (float) – instantaneous air density, \(\rho\) [k g m-3]

  • u_star_i_full (float) – instantaneous friction velocity vegetation, \(u^{*}_{b}\) [m s-1]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

Returns

L_full – monin obukhov length dry vegetation, \(L_{f,d}\) [m]

Return type

float

aerodynamical_resistance_forced_convection_full(u_i, L_full, z0m_full=0.1, disp_full=0.667, z_obs=10)

Computes the aerodynamical resistance for a full canopy, Eq A1 from Sanchez.

\[\begin{split}z_{1} &= \frac{z_{obs}-d}{z_{0,m}} \\ z_{2} &= \frac{z_{obs}-d}{L} \\ z_{3} &= \frac{z_{0,m}}{L} \\ z_{4} &= \frac{z_{obs}-d}{\frac{z_{0,m}}{7}} \\ z_{5} &= \frac{\frac{z_{0,m}}{7}}{L} \\ r_{a,c} &= \frac{(\ln(z_{1})-\phi_{m}(-z_{2})+\phi_{m}(-z_{3})) \cdot (\ln(z_{4})-\phi_{h}(-z_{2})+\phi_{h}(-z_{5}))}{k^{2} \cdot u}\end{split}\]
Parameters
  • u_i (float) – instantaneous wind speed at observation height, \(u_{obs}\) [m/s]

  • z_obs (float) – observation height of wind speed, \(z_{obs}\) [m]

  • disp_full (float) – displacement height, \(d\) [m]

  • z0m_full (float) – surface roughness, \(z_{0,m}\) [m]

  • L_full (float) – monin obukhov length, \(L\) [m]

Returns

rac – aerodynamical resistance canopy, \(r_{a,c}\) [sm-1]

Return type

float

aerodynamical_resistance_forced_convection_bare(u_i, L_bare, z0m_bare=0.001, disp_bare=0.0, z_obs=10)

Computes the aerodynamical resistance for a dry bare soil.

\[\begin{split}z_{1} &= \frac{z_{obs}-d}{z_{0,b,m}} \\ z_{2} &= \frac{z_{obs}-d}{L_{b}} \\ r_{a,a} &= \frac{(\ln(z_{1})-\phi_{m}(-z_{2})) \cdot (\ln(z_{1})-\phi_{h}(-z_{2}))}{k^{2} \cdot u} \\\end{split}\]
Parameters
  • u_i (float) – instantaneous wind speed at observation height, \(u_{obs}\) [m/s]

  • z_obs (float) – observation height of wind speed, \(z_{obs}\) [m]

  • disp_bare (float) – displacement height, \(d\) [m]

  • z0m_bare (float) – surface roughness, \(z_{0,b,m}\) [m]

  • L_bare (float) – monin obukhov length, \(L_{b}\) [m]

Returns

raa – aerodynamical resistance dry surface, \(r_{a,a}\) [sm-1]

Return type

float

wind_speed_soil_inst(u_i, L_bare, z_obs=10)

Computes the instantaneous wind speed at soil surface.

\[u_{i,s}=u_{obs} \cdot \frac{\ln\left(\frac{z_{obs}}{z_{0}}\right)} {\ln\left(\frac{z_{obs}}{z_{0,s}}\right)-\psi_{m}\left(\frac{-z_{0}}{L}\right)}\]
Parameters
  • u_i (float) – wind speed at observation height, \(u_{obs}\) [m/s]

  • z_obs (float) – observation height of wind speed, \(z_{obs}\) [m]

  • L_bare (float) – monin obukhov length, \(L\) [m]

Returns

u_i_soil – instantaneous wind speed just above soil surface, \(u_{i,s}\) [ms-1]

Return type

float

maximum_temperature_full(ra_hor_clear_i, emiss_atm_i, t_air_k_i, ad_i, rac, r0_full=0.18)

Computes the maximum temperature under fully vegetated conditions.

\[T_{c,max}=\frac{\left(1-\alpha_{c}\right) S_{d}+\varepsilon_{c}\varepsilon_{a}\sigma T_{a}^{4}-\varepsilon_{c}\sigma T_{a}^{4}}{4\varepsilon_{s}\sigma T_{a}^{3}+\rho C_{p}/r_{a,c}}+T_{a}\]
Parameters
  • ra_hor_clear_i (float) – Total clear-sky irradiance on a horizontal surface, \(ra_hor_clear_i\) [W/m2]

  • emiss_atm_i (float) – instantaneous atmospheric emissivity, \(P\) [-]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

  • rac (float) – aerodynamic resistance canopy, \(r_{a,c}\) [sm-1]

  • ad_i (float) – instantaneous air density, \(\rho\) [kg m-3]

  • r0_full (float) – surface albedo full vegetation cover, \(\alpha_{0, full}\) [-]

Returns

t_max_full – maximum temperature at full vegetation cover, \(T_{c,max}\) [K]

Return type

float

maximum_temperature_bare(ra_hor_clear_i, emiss_atm_i, t_air_k_i, ad_i, raa, ras, r0_bare=0.38)

Computes the maximum temperature under dry bare soil conditions.

\[T_{s,max}=\frac{\left(1-\alpha_{s}\right)S_{d}+\varepsilon_{s}\varepsilon_{a}\sigma T_{a}^{4}-\varepsilon_{s}\sigma T_{a}^{4}}{4\varepsilon_{s}\sigma T_{a}^{3}+ \rho C_{p}/\left[\left(r_{a,a}+r_{a,s}\right)\left(1-G/R_{n,s}\right)\right]}+T_{a}\]
Parameters
  • ra_hor_clear_i (float) – Total clear-sky irradiance on a horizontal surface, \(ra_hor_clear_i\) [W/m2]

  • emiss_atm_i (float) – instantaneous atmospheric emissivity, \(P\) [-]

  • t_air_k_i (float) – instantaneous air temperature, \(T_{a}\) [K]

  • ad_i (float) – instantaneous air density, \(\rho\) [kg m-3]

  • raa (float) – aerodynamical resistance, \(r_{a,a}\) [sm-1]

  • ras (float) – aerodynamical resistance, \(r_{a,s}\) [sm-1]

  • r0_bare (float) – dry bare soil surface albedo, \(\alpha_{0, bare}\) [-]

Returns

t_max_bare – maximum temperature at bare soil, \(T_{c,max}\) [K]

Return type

float

maximum_temperature(t_max_bare, t_max_full, vc)

Computes the maximum temperature at dry conditions.

\[T_{0,max} = c_{veg} \cdot (T_{c,max}-T_{s,max})+T_{s,max}\]
Parameters
  • t_max_bare (float) – maximum temperature at bare soil, \(T_{s,max}\) [K]

  • t_max_full (float) – maximum temperature at full dry vegetation, \(T_{c,max}\) [K]

  • vc (float) – vegetation cover, \(c_{veg}\) [-]

Returns

lst_max – maximum temperature at dry conditions, \(T_{0,max}\) [K]

Return type

float

minimum_temperature(t_wet_k_i, t_air_k_i, vc)

Computes the maximum temperature at dry conditions.

\[T_{0,min} = c_{veg} \cdot (T_{a,i}-T_{w})+T_{w}\]
Parameters
  • t_wet_k_i (float) – minimum temperature at bare soil, \(T_{s,max}\) [K]

  • t_air_k_i (float) – minimum temperature at full vegetation, \(T_{c,max}\) [K]

  • vc (float) – vegetation cover, \(c_{veg}\) [-]

Returns

lst_min – minimum temperature at wet conditions, \(T_{0,min}\) [K]

Return type

float

soil_moisture_from_maximum_temperature(lst_max, lst, lst_min)

Computes the relative root zone soil moisture based on estimates of maximum temperature and wet bulb temperature and measured land surface temperature.

\[\Theta = \frac{T_{0}-T_{0,min}}{T_{0,max}-T_{0,min}}\]
Parameters
  • lst (float) – land surface temperature, \(T_{0}\) [K]

  • lst_max (float) – maximum temperature at dry conditions, \(T_{0,max}\) [K]

  • lst_min (float) – minimum temperature at wet conditions, \(T_{0, min}\) [K]

Returns

se_root – relative root zone soil moisture (based on LST), \(\Theta\) [%]

Return type

float

aerodynamical_resistance_forced_convection_soil(u_i_soil)

Computes the aerodynamical resistance of the soil

Eq A7 from Sanchez.

\[r_{a,s}=\frac{1}{\left(0.0025T_{dif}^{\frac{1}{3}}+0.012u_{i,s}\right)}\]
Parameters

u_i_soil (float) – instantaneous wind speed just above soil surface \(u_{i,s}\) [m s-1]

Returns

ras_forced – forced aerodynamical resistance \(r_{a,s}\) [sm-1]

Return type

float

aerodynamical_resistance_free_convection_bare(h_bare, t_air_k_i, ad_i, z0m_bare=0.001)

Calculates the aerodynamic resistance in the case of free convection for bare soil.

Based on equation 15 from: https://journals.ametsoc.org/view/journals/apme/31/9/1520-0450_1992_031_1096_emlst_2_0_co_2.xml

Parameters
  • h_bare (float) – sensible heat flux bare soil \(H_{bare}\) [Wm-2]

  • t_air_k_i (float) – instantaneous air temperature \(T_{a}\) [K]

  • ad_i (float) – instantaneous air density \(\rho\) [k g m-3]

  • z0m_bare (float) – surface roughness bare soil \(z_{0,m}\) [m]

Returns

rah_bare_free – aerodynamic resistance soil \(r_{a,a}\) [sm-1]

Return type

float

aerodynamical_resistance_free_convection_full(h_full, t_air_k_i, ad_i, z0m_full=0.1)

Calculates the aerodynamic resistance in the case of free convection for the canopy.

Based on equation 15 from: https://journals.ametsoc.org/view/journals/apme/31/9/1520-0450_1992_031_1096_emlst_2_0_co_2.xml

Parameters
  • h_full (float) – sensible heat flux full canopy \(H_{full}\) [Wm-2]

  • t_air_k_i (float) – instantaneous air temperature \(T_{a}\) [K]

  • ad_i (float) – instantaneous air density \(\rho\) [k g m-3]

  • z0m_full (float) – surface roughness full canopy \(z_{0,m}\) [m]

Returns

rah_full_free – aerodynamic resistance canopy \(r_{a,c}\) [sm-1]

Return type

float

aerodynamical_resistance_bare(raa_forced, ras_forced, rah_bare_free=inf)

Computes the aerodynamical resistance for a dry bare soil.

This function takes the minimum of forced and free convection

Parameters
  • raa_forced (float) – forced aerodynamical resistance dry surface \(r_{a,a}\) [sm-1]

  • ras_forced (float) – forced aerodynamical resistance \(r_{a,s}\) [sm-1]

  • rah_bare_free (float) – aerodynamic resistance soil \(r_{a,a}\) [sm-1]

Returns

rah_bare – aerodynamical resistance bare soil \(r_{a,h} bare\) [sm-1]

Return type

float

aerodynamical_resistance_full(rac_forced, rah_full_free=inf)

Computes the aerodynamical resistance for a full canopy.

This function takes the minimum of forced and free convection

Parameters
  • rac_forced (float) – forced aerodynamical resistance canopy \(r_{a,c}\) [sm-1]

  • rah_full_free (float) – aerodynamic resistance soil \(r_{a,a}\) [sm-1]

Returns

rah_full – aerodynamical resistance canopy \(r_{a,h} canopy\) [sm-1]

Return type

float

1

Yuting Yang, Huade Guan, Di Long, Bing Liu, Guanghua Qin, Jun Qin, and Okke Batelaan. Estimation of surface soil moisture from thermal infrared remote sensing using an improved trapezoid method. Remote Sensing, 7(7):8250–8270, 2015. URL: https://doi.org/10.3390/rs70708250.

2(1,2)

Wilfried Brutsaert. Aspects of bulk atmospheric boundary layer similarity under free-convective conditions. Reviews of geophysics, 37(4):439–451, 1999. URL: https://doi.org/10.1029/1999RG900013.

3

Wilfried Brutsaert. On a derivable formula for long-wave radiation from clear skies. Water resources research, 11(5):742–744, 1975. URL: https://doi.org/10.1029/WR011i005p00742.