Standard#
- class abcmodel.land.surface.standard.StandardSurfaceState(alpha, surf_temp, esat=<factory>, qsat=<factory>, dqsatdT=<factory>, e=<factory>, qsatsurf=<factory>, le_veg=<factory>, le_liq=<factory>, le_soil=<factory>, le=<factory>, hf=<factory>, gf=<factory>, le_pot=<factory>, le_ref=<factory>, vpd=<factory>, wtheta=<factory>, wq=<factory>)[source]#
Bases:
AbstractSurfaceStateStandard surface state.
- alpha: Array#
Surface albedo [-].
- surf_temp: Array#
Surface temperature [K].
- esat: Array#
Saturation vapor pressure [Pa].
- qsat: Array#
Saturation specific humidity [kg/kg].
- dqsatdT: Array#
Derivative of saturation specific humidity with respect to temperature [kg/kg/K].
- e: Array#
Vapor pressure [Pa].
- qsatsurf: Array#
Saturation specific humidity at surface temperature [kg/kg].
- le_veg: Array#
Latent heat flux from vegetation [W m-2].
- le_liq: Array#
Latent heat flux from liquid water [W m-2].
- le_soil: Array#
Latent heat flux from soil [W m-2].
- le: Array#
Total latent heat flux [W m-2].
- hf: Array#
Sensible heat flux [W m-2].
- gf: Array#
Ground heat flux [W m-2].
- le_pot: Array#
Potential latent heat flux [W m-2].
- le_ref: Array#
Reference latent heat flux [W m-2].
- vpd: Array#
Vapor pressure deficit [Pa].
- wtheta: Array#
Kinematic heat flux [K m/s].
- wq: Array#
Kinematic moisture flux [kg/kg m/s].
- class abcmodel.land.surface.standard.StandardSurfaceModel(lam=5.9, rsmin=110.0, lai=2.0)[source]#
Bases:
AbstractSurfaceModel[StandardSurfaceState]Standard surface model calculating skin temperature and energy fluxes.
- Parameters:
lam (
float) – thermal diffusivity of the soil/skin layer [W m-1 K-1]. Default is 5.9.rsmin (
float) – minimum stomatal resistance [s m-1]. Default is 110.0.lai (
float) – leaf area index [m2 m-2]. Default is 2.0.
- init_state(alpha=0.25, surf_temp=290.0)[source]#
Initialize the surface state.
- Parameters:
alpha (
float) – surface albedo [-]. Default is 0.25.surf_temp (
float) – surface skin temperature [K]. Default is 290.0.
- Returns:
The initialized StandardSurfaceState.
- compute_dqsatdT(esat, theta, surf_pressure)[source]#
Compute the derivative of saturation vapor pressure with respect to temperature
dqsatdT.Notes
Using
compute_esat(), the derivative of the saturated vapor pressure \(e_\text{sat}\) with respect to temperature \(T\) is given by\[\frac{\text{d}e_\text{sat}}{\text{d} T} = e_\text{sat}\frac{17.2694(T-237.16)}{(T-35.86)^2},\]which combined with
compute_qsat()can be used to get\[\frac{\text{d}q_{\text{sat}}}{\text{d} T} \approx \epsilon \frac{\frac{\text{d}e_\text{sat}}{\text{d} T}}{p}.\]
- compute_e(q, surf_pressure)[source]#
Compute the vapor pressure
e.Notes
This function uses the same formula used in
compute_esat(), but now factoring the vapor pressure \(e\) as a function of specific humidity \(q\) and surface pressure \(p\), which give us\[e = q \cdot p / 0.622.\]
- compute_skin_temperature(net_rad, theta, q, qsat, dqsatdT, ra, rs, rssoil, cliq, temp_soil, cveg)[source]#
Compute the skin temperature
surf_temp.Notes
The skin temperature is obtained by solving the surface energy balance
\[R_n = H + LE_{\text{veg}} + LE_{\text{liq}} + LE_{\text{soil}} + G\]where \(R_n\) is the net rad, \(H\) is the sensible heat flux (see
compute_hf()), \(LE_{\text{veg}}\) is the latent heat flux from vegetation (seecompute_le_veg()), \(LE_{\text{liq}}\) is the latent heat flux from dew on leaves (seecompute_le_liq()), \(LE_{\text{soil}}\) is the latent heat flux from the soil (seecompute_le_soil()) and \(G\) is the ground heat flux (seecompute_gf()).The equation is solved for the skin temperature \(T_s\) by factoring out \(T_s\) from the above, giving us
\[T_s = \frac{ R_n + \frac{\rho c_p}{r_a} \theta + c_{\text{veg}} (1-c_{\text{liq}}) \frac{\rho L_v}{r_a + r_s} (\frac{\text{d}q_{\text{sat}}}{\text{d}T} \theta - q_{\text{sat}} + q) + (1-c_{\text{veg}}) \frac{\rho L_v}{r_a + r_{s,\text{soil}}} (\frac{\text{d}q_{\text{sat}}}{\text{d}T} \theta - q_{\text{sat}} + q) + c_{\text{veg}} c_{\text{liq}} \frac{\rho L_v}{r_a} (\frac{\text{d}q_{\text{sat}}}{\text{d}T} \theta - q_{\text{sat}} + q) + \Lambda T_{\text{soil}} }{ \frac{\rho c_p}{r_a} + c_{\text{veg}} (1-c_{\text{liq}}) \frac{\rho L_v}{r_a + r_s} \frac{\text{d}q_{\text{sat}}}{\text{d}T} + (1-c_{\text{veg}}) \frac{\rho L_v}{r_a + r_{s,\text{soil}}} \frac{\text{d}q_{\text{sat}}}{\text{d}T} + c_{\text{veg}} c_{\text{liq}} \frac{\rho L_v}{r_a} \frac{\text{d}q_{\text{sat}}}{\text{d}T} + \Lambda }.\]The terms computed in the equation above in each related function energy flux related method. This approach ensures that the computed skin temperature is consistent with the partitioning of energy fluxes as calculated by the other methods in this class.
- compute_le_veg(surf_temp, theta, q, qsat, dqsatdT, ra, rs, cliq, cveg)[source]#
Compute the latent heat flux (transpiration) from vegetation
le_veg.Notes
The latent heat flux is given by
\[LE_{\text{veg}} = \frac{\rho L_v}{r_a+r_s}(q_{\text{sat}}(T_s)-⟨q⟩),\]where \(\rho\) is the density of air, \(L_v\) is the latent heat of vaporization, \(r_a\) is the aerodynamic resistance, \(r_s\) is the soil resistance, \(q_{\text{sat}}(T_s)\) is the saturation specific humidity at surface temperature, \(⟨q⟩\) is the specific humidity at the surface.
\(q_{\text{sat}}(T_s)\) has very short time-scales because of the small heat capacity (excluding vegetation) of the surface layer and is hard to measure. Consequently, we get \(q_{\text{sat}}(T_s)\) implicitly using
\[q_{\text{sat}}(T_s) = \frac{\text{d}q_{\text{sat}}}{\text{d}T}(\theta_s-\theta),\]where \(\theta_s\) and \(\theta\) are the potential temperature of the surface layer and mixed layer, respectively.
In the end, we scale the latent heat flux by the vegetation cover fraction \(c_{\text{veg}}\) and the liquid water content \(c_{\text{liq}}\) and return
\[c_{\text{veg}}(1-c_{\text{liq}})LE_{\text{veg}}.\]References
Equation 9.15 from the CLASS book.
- compute_le_liq(surf_temp, theta, q, qsat, dqsatdT, ra, cliq, cveg)[source]#
Compute the latent heat flux on the leaf (dew)
le_liq.Notes
We proceed just like in
compute_le_veg(), but omitting vegetation’s resistance \(r_s\), with the assumption that water at the leaf is ready to be evaporated, giving us\[LE_{\text{liq}} = \frac{\rho L_v}{r_a}(q_{\text{sat}}(T_s)-⟨q⟩).\]In the end, we scale the result by the fraction of liquid water content \(c_{\text{liq}}\) and the fraction of vegetation \(c_{\text{veg}}\).
References
Equation 9.18 from the CLASS book.
- compute_le_soil(surf_temp, theta, q, qsat, dqsatdT, ra, rssoil, cveg)[source]#
Compute the latent heat flux on the soil (evaporation)
le_soil.Notes
We proceed just like in
compute_le_veg(), but instead of considering resistance from the vegetation, we consider the resistance from the soil \(r_{soil}\), giving us\[LE_{\text{soil}} = \frac{\rho L_v}{r_a + r_{soil}}(q_{\text{sat}}(T_s)-⟨q⟩)\]In the end, we scale the result by the fraction of soil \(c_{\text{soil}} = 1 - c_{\text{veg}}\).
References
Equation 9.21 from the CLASS book.
- compute_le(le_soil, le_veg, le_liq)[source]#
Compute the evapotranspiration (latent heat flux)
le.Notes
The latent heat flux is the sum of transpiration from vegetation, bare soil evaporation, and wet-leaf evaporation, clipped to non-negative values
\[\text{LE} = \maxigl(\text{LE}_{\text{soil}} + \text{LE}_{\text{veg}} + \text{LE}_{\text{liq}},; 0\bigr)\]
- compute_hf(surf_temp, theta, ra)[source]#
Compute the sensible heat flux
hf.Notes
The sensible heat flux is given by
\[H = \frac{\rho c_p}{r_a} (T_s - \theta),\]where \(\rho\) is the air density, \(c_p\) is the specific heat capacity of air, \(r_a\) is the aerodynamic resistance, \(T_s\) is the surface temperature and \(\theta\) is the mixed layer air potential temperature.
References
Equation 9.13 from the CLASS book, but why are we using \(T_s\) instead of \(\theta_s\)? Probably because the variations of pressure are not significant enough.
- compute_gf(surf_temp, temp_soil)[source]#
Compute the ground heat flux
gf.Notes
The ground heat flux is given by
\[G = \Lambda (T_s - T_{soil}),\]where \(\Lambda\) is the conductivity of the skin layer, \(T_s\) is the surface temperature and \(T_{soil}\) is the soil temperature.
References
Equation 9.33 from the CLASS book.
- compute_le_pot(net_rad, gf, dqsatdT, qsat, q, ra)[source]#
Compute the potential latent heat flux
le_pot.Notes
The potential latent heat flux is given by
\[LE_{\text{pot}} = \frac{ \frac{\text{d}q_{sat}}{\text{d} T} (R_n - G) + \frac{\rho c_p}{r_a} (q_{\text{sat}} - q) }{ \frac{\text{d}q_{sat}}{\text{d} T} + \frac{\rho c_p}{L_v} },\]which is the Penman-Monteith equation assuming no soil resistance.
References
Equation 9.16 from the CLASS book.
- compute_le_ref(net_rad, gf, dqsatdT, qsat, q, ra)[source]#
Compute the reference latent heat flux
le_ref.Notes
The reference latent heat flux is given by
\[LE_{\text{ref}} = \frac{ \frac{\text{d}q_{sat}}{\text{d} T} (R_n - G) + \frac{\rho c_p}{r_a} (q_{\text{sat}} - q) }{ \frac{\text{d}q_{sat}}{\text{d} T} + \frac{\rho c_p}{L_v}( 1 + \frac{r_{s,\text{min}}}{\text{LAI} \cdot r_a} ) },\]which is the Penman-Monteith equation assuming that the soil resistance is given by \(r_{s,\text{min}} / \text{LAI}\), i.e., no correction functions are applied.
References
Equation 9.16 from the CLASS book.
- compute_wtheta(hf)[source]#
Compute the kinematic heat flux
wtheta.Notes
The kinematic heat flux \(\overline{(w'\theta')}_s\) is directly related to the sensible heat flux \(H\) through
\[\overline{(w'\theta')}_s = \frac{H}{\rho c_p},\]where \(\rho\) is the density of air and \(c_p\) is the specific heat capacity of air at constant pressure.
- compute_wq(le)[source]#
Compute the kinematic moisture flux
wq.Notes
The kinematic moisture flux \(\overline{(w'q')}_s\) is directly related to the latent heat flux \(LE\) through
\[\overline{(w'q')}_s = \frac{LE}{\rho L_v},\]where \(\rho\) is the density of air and \(L_v\) is the latent heat of vaporization.
- compute_vpd(q, qsat)[source]#
Compute the vapour pressure deficit
vpd.Notes
The vapour pressure deficit is the difference between the saturation specific humidity and the actual specific humidity
\[D_q = q_{ ext{sat}} - q\]where \(q_{ ext{sat}}\) is the saturation specific humidity and \(q\) is the actual specific humidity.