EPIC - soil.supply

mef_agri.models.soil.supply.model_epic.py

class mef_agri.models.soil.supply.model_epic.Supply(**kwargs)

Computation of water and nitrate supply from the soil to the crop according to [R2]

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

drbm()

RQ - from model with id 'crop.roots'

\(c_{\textrm{R-}\Delta\textrm{bm},k}\ [\frac{t}{ha\cdot day}]\)

Returns:

daily increase of root biomass

Return type:

Requirement

fc()

RQ - from model with id 'zone.soil'

\(s_{\textrm{W-fc},0}\ [\ ]\)

Returns:

soil moisture at field capacity

Return type:

Requirement

initialize(epoch)

Initialization of generic zero- and one-arrays.

Parameters:

epoch (datetime.date) – initialization epoch

moisture_1m()

MQ - Random Output

\(s_{\textrm{W-m1m},k}\ [\ ]\ \rightarrow\) [R2] : part of equ. 49

Returns:

moisture of first 1.0 m of soil

Return type:

numpy.ndarray

ndem()

RQ - from model with id 'crop.demand'

\(c_{\textrm{N-dem},k}\ [\frac{kg}{ha}]\)

Returns:

nitrogen demand of the crop

Return type:

Requirement

nitrogen()

MQ - Random Output

\(s_{\textrm{N-avl},k}\ [\frac{kg}{ha\cdot day}]\ \rightarrow\) [R2] : equ 27 - 29

Returns:

amount of nitrogen which is available for the crop at current day

Return type:

numpy.ndarray

rdm()

RQ - from model with id 'zone.soil'

\(s_{\textrm{rdm},0}\ [m]\)

Returns:

maximum rootable depth of the soil

Return type:

Requirement

tb()

RQ - from model with id 'crop.development'

\(c_{\textrm{D-tb},0}\ [^\circ C]\)

Returns:

crop-specific base temperature

Return type:

Requirement

to()

RQ - from model with id 'crop.development'

\(c_{\textrm{D-to},0}\ [^\circ C]\)

Returns:

crop-specific optimum temperature

Return type:

Requirement

update(epoch)

The following computations are performed

  • check if crop is present - if not, uptake rates are set to zero

  • layer: compute temperature stress affecting the water use - [R2] : equ. 46 (using soil layer temp. instead of surface temp.)

  • layer: compute potential water use - [R2] : equ. 22

  • layer: compute actual water use - [R2] : equ. 23

  • layer: adjust water amount considering water use

  • layer: nitrate uptake due to mass flow - [R2] : equ. 27

  • ensure, that the overall nitrate uptake does not exceed the crop demand

  • increase the overall nitrate uptake due to mass flow to account for diffusion uptake - [R2] : equ. 29 (NOTE: if mass flow uptake is very small, the adjusted uptake will be set to zero to avoid numerical instabilities)

  • layer: distribute root biomass to soil layers with respect ot water use - [R2] : equ. 13

  • layer: adjust nitrate uptake amounts to account for diffusion uptake

  • compute the moisture of the first meter of soil (also if no crop is present)

Parameters:

epoch (datetime.date) – current evaluation epoch

water()

MQ - Random Output

\(s_{\textrm{W-avl},k}\ [\frac{mm}{day}]\ \rightarrow\) [R2] : equ. 23 + 24

Returns:

amount of water which is available for the crop

Return type:

numpy.ndarray

water_demand()

RQ - from model with id 'crop.demand'

\(c_{\textrm{W-dem},k} ... [\frac{mm}{day}]\)

Returns:

water demand of crop at current day

Return type:

Requirement

wp()

RQ - from model with id 'zone.soil'

\(s_{\textrm{W-wp},0}\ [\ ]\)

Returns:

soil moisture at wilting point

Return type:

Requirement

wudf()

RQ - from model with id 'zone.soil'

\(s_{\textrm{W-udf},0}\ [\ ]\)

Returns:

water use distribution factor

Return type:

Requirement