SWAT - soil.surface.evapotranspiration

class mef_agri.models.soil.surface.evapotranspiration.model_swat.Evapotranspiration_V2009(**kwargs)

This evapotranspiration model uses the Penman-Monteith method to compute potential evapotranspiration.

In [R1] either soil evaporation or (crop) transpiration occurs. This approach seems to be unrealistic especially in early growing stages of the crop (much bare soil area). Here, the soil cover index will be used to split the remaining potential evapotranspiration (i.e. after evaporating the canopy water) into transpiration and soil evaporation. Snow covers will be neglected for now.

Used constants

  • SOIL_HEAT_FLUX = 0.0 - [R1] (section 2:2.2.1.1)

  • KARMAN_CONST = 0.41 - [R1] (section 2:2.2.1.2)

kwargs \(\rightarrow\) mef_agri.models.base.Model

cw()

RQ - from model with id 'zone.soil.surface.water'

\(s_{\textrm{W-c},k}\ [mm]\)

Returns:

amount of water stored in the canopy

Return type:

Requirement

evaporation_pot()

MQ - Random Output

\(s_{\textrm{W-ep},s,k}\ [\frac{mm}{day}]\)

Returns:

potential evaporation from soil

Return type:

numpy.ndarray

evapotranspiration_pot()

MQ - Random Output

\(s_{\textrm{W-etp},s,k}\ [\frac{mm}{day}]\) - [R1] (equ. 2:2.2.2)

Returns:

potential evapotranspiration

Return type:

numpy.ndarray

hc()

RQ - from model with id 'crop'

\(c_{\textrm{h},k}\ [cm]\)

Returns:

current crop height

Return type:

Requirement

hh()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{h-hum}}\ [cm]\)

Returns:

ref. height of the humidity observations

Return type:

Requirement

hw()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{h-wnd}}\ [cm]\)

Returns:

ref. height of the wind observations

Return type:

Requirement

initialize(epoch)

Initialization of evapotranspiration_pot(), evaporation_pot() and transpiration_pot() with zero arrays.

Parameters:

epoch (datetime.date) – intialization epoch

lai()

RQ - from model with id 'crop.leaves'

\(c_{\textrm{lai},k}\ [\ ]\)

Returns:

leaf area index

Return type:

Requirement

lh()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{lhv},k}\ [\frac{MJ}{kg}]\)

Returns:

latent heat of vaporization

Return type:

Requirement

nrad()

RQ - from model with id 'zone.atmosphere.radiation'

\(a_{\textrm{nrad},k}\ [\frac{MJ}{m^2\cdot day}]\)

Returns:

daily net radiation

Return type:

Requirement

psyc()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{psyc},k}\ [\frac{kPa}{^\circ C}]\)

Returns:

psychrometric constant at site elevation

Return type:

Requirement

rad()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{rad},k}\ [\frac{W}{m^2}]\)

Returns:

daily radiation sum

Return type:

Requirement

resistance_air()

MQ - Random Output

\(s_{\textrm{ra},s,k}\ [\frac{s}{m}]\) - [R1] (equ. 2:2.2.3)

Returns:

diffusion resistance of the air layer

Return type:

numpy.ndarray

resistance_crop()

MQ - Random Output

\(s_{\textrm{rc},s,k}\ [\frac{s}{m}]\)

Returns:

diffusion resistance of crop canopy

Return type:

numpy.ndarray

sci()

RQ - from model with id 'zone.soil.surface'

\(s_{\textrm{sci},s,k}\ [\ ]\)

Returns:

soil cover index

Return type:

Requirement

slp()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{ssvpc}}\ [\frac{kPa}{^\circ C}]\)

Returns:

slope of the saturated vapor pressure curve (d_vpr_sat / d_temp)

Return type:

Requirement

temp()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{temp},k}\ [^\circ C]\)

Returns:

daily mean temperature

Return type:

Requirement

transpiration_pot()

MQ - Random Output

\(s_{\textrm{W-tp},s,k}\ [\frac{mm}{day}]\)

Returns:

potential transpiration

Return type:

numpy.ndarray

update(epoch)

The following computations are performed

  • resistance_air()

    • if a crop is present

      • roughness length of momentum transfer - [R1] (equ. 2:2.2.4, 2:2.2.5)

      • roughness length of vapor transfer - [R1] (equ. 2:2.2.6)

      • zero plane displacement of the wind profile - [R1] (equ. 2:2.2.7)

      • check the \(\ln\)-arguments in the computation of resistance_air() -

        • if the min. value is lower than 1e-8, resistance_air() will be computed for a reference crop - [R1] (equ. 2:2.2.20)

        • else - [R1] (equ. 2:2.2.3)

    • if no crop is present, resistance_air() will be computed for a reference crop - [R1] (equ. 2:2.2.20)

  • resistance_crop()

    • absorbed photosynthetically active radiation (apar) - [R4] (equ. 6, section Discussion)

    • stomatal resistance with regression function - [R4] (approximate conversion value of 4.0 from fig. 1)

    • resistance_crop() - [R1] (equ. 2:2.2.8)

  • combined term of Penman-Monteith method ct = 1710.0 - 6.85 * self.temp.value

  • evapotranspiration_pot()

  • evaporation of canopy water

  • splitting remaining evapotranspiration into potential transpiration and potential evaporation from soil using sci()

Parameters:

epoch (datetime.date) – current evaluation epoch

vpr()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{vpr},k}\ [kPa]\)

Returns:

actual vapor pressure

Return type:

Requirement

vpr_sat()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{vprs},k}\ [kPa]\)

Returns:

saturated vapor pressure

Return type:

Requirement

ws()

RQ - from model with id 'zone.atmosphere.weather'

\(a_{\textrm{wsp},k}\ [\frac{m}{s}]\)

Returns:

mean daily wind speed

Return type:

Requirement