Class LintulDRUNIR
- All Implemented Interfaces:
net.simplace.sim.util.FWSimFieldContainer
Soil water balance calculation during crop growth for a one layer soil profile including canopy interception, Drainage, RUNoff and IRrigation routines from LINTUL. The SimComponent LintulDRUNIR estimates the daily change in soil water content based on the volumes of crop water uptake, drainage water and surface run-off from a one layer soil profile. In addition, it allows the estimation of the amount of irrigation water needed for optimal crop water supply compared to rainfed conditions.
CAUTION: It is important to note that the SimComponent is only functional during the growing season of the crop. In multi-year simulations, the soil water content is reset to the user-defined initial value at sowing. In addition, this SimComponent assumes that the water content in the subsoil explored by the seminal roots is always at field capacity. This assumptions is not valid in all climate zones and soil types. Before using the SimComponent, the user should check whether it fits to the specific environmental and management conditions to be simulated. It is recommended to use this SimComponent only in humid climate zones and for single year simulations.
Soil water storage, canopy interception, drainage and surface run-off are calculated within the SimComponent, whereas crop water uptake is an input from the SimComponent EvapTran.java.
The calculation of the daily change in soil water content (WA in mm) requires the definition of the properties of the single soil layer related to water retention characteristics. The following soil hydraulic properties are required as input parameters averaged over the whole rootable soil profile (in m3 m-3) : WCWP = Soil water content (m3 m-3) at wilting point defined at a soil matric potential of -15 bar WCFC = Soil water content at field capacity (m3 m-3) defined at a soil matric potential of -0.33 bar WCST = Soil water content at saturation (m3 m-3) of the soil with water WCI =Initial soil water content (in m3 m-3 at the start of the simulation run). The amount of soil water stored for the crop at each of the soil matric potentials is calculated by multiplying the volumetric water contents with the root depth. Thus, the amount of soil water stored in the one layer soil profile at saturation, field capacity and wilting point depends directly on the rooting depth. In the case of multiple year runs, this initial volumetric soil water content is re-initialized each year on the day of sowing/planting (see explanation above)
The daily actual soil water content (WA in mm) is calculated each day depending on the root depth, the amount of water input into the soil (rainfall or irrigation minus canopy interception and surface runoff) and the amount of water lost from the soil profile (evporation, transpiration, drainage).
Canpopy interception (RNINTC)
The SimComponent assumes that canopy interception of the incoming rain depends linearly on the leaf area index of the crop with a factor of 0.25. If the daily amount of rainfall is lower than interception capacity, then rainfall is completely absorbed by the canopy and interception (RNINTC) is calculated by the following equation:
\[ \begin{eqnarray} RNINTC &=& Min(RAIN, 0.25 * LAI); \end{eqnarray} \]If the daily amount of rainfall exceeds the interception capacity then RNINTC is equal to the interception capacity (0.25*LAI) and the excess water is reduced by surface-runoff and then it is added to the soil storage.
Surface-runoff (RUNOFF)
In LintulDRUNIR surface-runoff occurs when the sum of available soil pore space (actual soil water content (WA) - soil water content at saturation (WAST) and rainfall (RAIN in mm) exceeds the sum of canopy interception (RNINTC), soil evaporation (EVAP), crop transpiration (TRAN) and drainage (DRAIN):
\[ \begin{eqnarray} RUNOFF &=& MAX(0.0, (WA - WAST) + RAIN - (RNINTC + EVAP + TRAN + DRAIN); \end{eqnarray} \]Deep Drainage (DRAIN)
Deep drainage (water percolating beyond the root zone) occurs when sum of rainfall and soil water content exceeds the sum of soil water content at field capacity, canopy interception, soil evaporation and crop transpiration.
\[ \begin{eqnarray} if & & DRAIN < DRATE: DRAIN = MAX(0.0, WA + RAIN - WAFC - RNINTC - EVAP- TRAN); \end{eqnarray} \] \[ \begin{eqnarray} if & & DRAIN >= DRATE: DRAIN &=& DRATE; \end{eqnarray} \]However, if the deep drainage is greater than a maximum soil specific drainage rate (DRATE), then the deep drainage is reduced to DRATE. Thus, deep drainage is limited by the maximum drainage rate of the subsoil (DRATE, mm d-1). A high value of DRATE implies complete drainage. A low value implies restricted drainage and waterlogged conditions may occur during wet periods. A zero value means no drainage at all (impermeable layer below the root zone).
Estimation of irrigation requirements for optimum crop water supply
LintulDRUNIR contains a facility for easy comparison of crop growth under drought with growth under optimal water supply. When the irrigation-factor is set at unity (IRRIGF = 1), the model will simulate daily rates of irrigation (IRRIG, mm d-1) that exactly keep the soil at field capacity (WC = WCFC). The default setting of the irrigation-factor is zero, implying rain-fed conditions.
Calculation of daily change in soil water content (WA)
Due to the fact that the explorable soil volume increases daily during root expansion, the calculation of daily change in the amount of soil water has to take into account the additional amount of soil water gained by the daily root growth rate (RROOT in mm d-1). It is assumed that the water content of the additional proportion of subsoil explored by the vertical expansion of the roots is always at field capacity. This assumption depends on climate, soil and management conditions and the user therefore should carefully check their validity. Based on the water fluxes calculated above and the additional soil water volume (EXPLOR in mm) gained by the daily root growth rate (RateRootDepth in m d-1), LintulDRUNIR calculates the daily change in soil water content (RWA in mm) as
\[ \begin{eqnarray} RWA &=& (RAIN + IRRIG + EXPLOR) - (RNINTC + RUNOFF + TRAN + EVAP + DRAIN); \end{eqnarray} \]Daily increase of root depth (RROTD in m d-1) is provided by the SimComponent LintulRoot.java.
Changes
Modifications compared to the FAST-Version
- added input variables iDoSow and iDoHarvest to initialize at sowing and resetting at harvest.
- added switch cNoSowHarvest. When true, then water content is initialized at first simulation day, not only on sowing.
- added switch cLegacyMode. When true, the actual day's CropAvailWater is calculated from previous day's water content. The purpose is to compensate the differences that resulted by splitting the Linutul2-FAST algorithm into different modules. If one combines the component with non-Lintul2 components one can set the cLegacyMode to false.
References:
van Oijen, M. and P. Lefelaar. 2008. Lintul-2: water limited crop growth: A simple general crop growth model for water-limited growing conditions. Waageningen University, The Netherlands.
- Author:
- Gunther Krauss, Andreas Enders, Roelof Oomen, Thomas Gaiser
Component Variables
Content Type | Name | Description | Data Type | Unit | Min Value | Max Value | Default Value |
---|---|---|---|---|---|---|---|
constant | cDRATE | Maximum drainage rate (soil characteristic) | DOUBLE | mm/d | 0.0 | - | 50.0 |
constant | cIRRIGF | Irrigation rate relative to the rate needed to keep the soil water status at field capacity (WC=WCFC) | DOUBLE | 1 | 0.0 | 1.0 | 0.0 |
constant | cLegacyMode | If true, CropAvailWaterContent is calculated from previous day's GlobalWaterContent, else from actual day's GlobalWaterContent | BOOLEAN | 1 | - | - | true |
constant | cNoSowHarvest | If true, actual water content is set to initial value on first simulation day | BOOLEAN | 1 | - | - | false |
constant | cWCFC | Soil water content at field capacity | DOUBLE | m3/m3 | 0.0 | 1.0 | 0.23 |
constant | cWCST | Soil water content at full saturation | DOUBLE | m3/m3 | 0.0 | 1.0 | 0.4 |
constant | cWCWP | Soil water content at wilting point | DOUBLE | m3/m3 | 0.0 | 1.0 | 0.075 |
constant | cWaterContentInitial | Initial soil water content (at start of the simulation run) | DOUBLE | m3/m3 | 0.0 | 1.0 | 0.23 |
input | iActualSoilEvaporation | evaporation (EVAP) | DOUBLE | mm/d | 0.0 | 20.0 | - |
input | iActualTranspiration | transpiration (TRAN) | DOUBLE | mm/d | 0.0 | 20.0 | - |
input | iDoHarvest | If plant is harvested on this day | BOOLEAN | 1 | - | - | false |
input | iDoSow | If plant is sown on this day | BOOLEAN | 1 | - | - | false |
input | iLAI | leaf area index | DOUBLE | m2/m2 | 0.0 | 11.0 | - |
input | iRAIN | Water input through rainfall | DOUBLE | mm/d | 0.0 | 100.0 | - |
input | iRateRootDepth | Rate of increase in rooting depth | DOUBLE | m/d | 0.0 | 3.0 | - |
input | iRootDepth | Rooting depth | DOUBLE | m | 0.0 | 5.0 | - |
state | sGlobalWaterContent | Actual amount of water in the soil (WA) | DOUBLE | mm | 0.0 | 1000.0 | 0.0 |
out | CropAvailWaterContent | Water available for crop (above wilting point) | DOUBLE | m3/m3 | 0.0 | 20.0 | 0.0 |
out | DRAIN | Drainage rate below the root zone | DOUBLE | mm/d | 0.0 | 200.0 | 0.0 |
out | IRRIG | Irrigation rate | DOUBLE | mm/d | 0.0 | 200.0 | 0.0 |
out | RNINTC | Interception of rain by the canopy | DOUBLE | mm/d | 0.0 | 20.0 | 0.0 |
out | RUNOFF | Loss of water by runoff | DOUBLE | mm/d | 0.0 | 2000.0 | 0.0 |
-
Nested Class Summary
Nested classes/interfaces inherited from class net.simplace.sim.model.FWSimComponent
net.simplace.sim.model.FWSimComponent.TEST_STATE
-
Field Summary
Fields inherited from class net.simplace.sim.model.FWSimComponent
iFieldMap, iFrequence, iInputMap, iJexlRule, iMasterComponentGroup, iName, iOrderNumber, isComponentGroup, iSimComponentElement, iSimModel, iVarMap
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected net.simplace.sim.model.FWSimComponent
clone
(net.simplace.sim.util.FWSimVarMap aVarMap) fillTestVariables
(int aParamIndex, net.simplace.sim.model.FWSimComponent.TEST_STATE aDefineOrCheck) called for single component test to check the components algorithm.protected void
init()
initializes the fields by getting input and output FWSimVariables from VarMapprotected void
process()
process the algorithm and write the results back to VarMapMethods inherited from class net.simplace.sim.model.FWSimComponent
addVariable, bind, checkCondition, createSimComponent, createSimComponent, createSimComponent, createSimComponent, doProcess, getConstantVariables, getContentType, getCreateFormXML, getDescription, getEditFormXML, getFieldMap, getFrequence, getFrequenceRuleScript, getInputs, getInputVariables, getMasterComponentGroup, getName, getOrderNumber, getOutputVariables, getVariable, getVariableField, getVarMap, initialize, isConditionCheck, isVariableAvailable, performLinks, performLinks, readInputs, removeVariable, reset, runComponentTest, setVariablesDefault, toComponentLinkingXML, toDocXML, toGroupXML, toOutputDefinitionXML, toResourcesDataXML, toResourcesDefinitionXML, toString, toXML, writeVarInfos
-
Constructor Details
-
LintulDRUNIR
public LintulDRUNIR()Empty constructor used by class.forName()
-
-
Method Details
-
createVariables
- Specified by:
createVariables
in interfacenet.simplace.sim.util.FWSimFieldContainer
- Specified by:
createVariables
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
FWSimComponent.createVariables()
-
init
protected void init()initializes the fields by getting input and output FWSimVariables from VarMap- Specified by:
init
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
FWSimComponent.init()
-
process
protected void process()process the algorithm and write the results back to VarMap- Specified by:
process
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
FWSimComponent.process()
-
fillTestVariables
public HashMap<String,net.simplace.sim.util.FWSimVariable<?>> fillTestVariables(int aParamIndex, net.simplace.sim.model.FWSimComponent.TEST_STATE aDefineOrCheck) called for single component test to check the components algorithm.- Specified by:
fillTestVariables
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
net.simplace.sim.util.FWSimFieldContainer#fillTestVariables(int aParamIndex, TEST_STATE aDefineOrCheck)
-
clone
protected net.simplace.sim.model.FWSimComponent clone(net.simplace.sim.util.FWSimVarMap aVarMap) - Specified by:
clone
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
FWSimComponent.clone(net.simplace.sim.util.FWSimVarMap)
-