Class SplitWaterUptake
- All Implemented Interfaces:
net.simplace.sim.util.FWSimFieldContainer
The water uptake per layer is split between the two crops proportionally to the given factors per layer.
Under some circumstances (e. g. when water demand is fulfilled by lower layers, where only one plant has roots), one plant would get more water than needed. In this case, the surplus can be redistributed partially (i. e. from those layers, where both plants have roots) to the other plant.
The module is designed to work with layered water models like SlimWater or Hillflow1D, that calculate water uptake per layer from mobile water and retained water fraction.
Calculation
Let \(f_{1,i}, f_{2,1}\) the allocation factors of layer \(i\) for plant 1 and 2, \(W_{i}\) the water uptake per layer due to the common demand and root distributions and \(P_1, P_2\) the potential transpiration of the two crops. Note that the potential transpiration for each crop is scaled to the fractions covered by each crop.
The actual water uptake per layer for both crops \(A_{1,i}, A_{2,i}\) are then calculated by
\[ A_{1,i} = \frac{f_{1,i}}{f_{1,i}+f_{2,i}} \cdot W_i \\ A_{2,i} = \frac{f_{2,i}}{f_{1,i}+f_{2,i}} \cdot W_i \]
and the actual transpirations are the sums over all layers
\[ A_1 = \sum_i A_{1,i} \quad \quad A_2 = \sum_i A_{2,i} \]
If the one of the uptake ratios
\[ u_1 = \frac{A_1}{P_1} \quad \quad u_2 = \frac{A_2}{P_2} \]
is bigger than 1 (i. e. the uptake would be higher than the demand),
then the actual water uptake per layer is reduced proportionally over all layers:
\[ A_{k,i} = \frac{1}{u_k} \cdot A_{k,i} \quad k=1 \quad \text{or} \quad k=2 \]
and the surplus per layer \(s_{k,i}\) is the difference of old and corrected uptake.
If cRedistributeBetweenPlants is set to true (the default), then the surplus is given to the other plant for those layers, where the allocation factor is nonzero (i. e. there are roots).
\[ A_{l,i} = A_{l,i} + s_{k,i} \quad \text{where} \quad k=1, l=2 \quad \text{or} \quad k=2, l=1 \]
If the corrected actual uptake per layer for both crops is lower than the initial uptake, then the unused water per layer is calculated. Unused water is left first in the retained fraction, and if there is still too much, the rest goest to mobile fraction of unused water.
References
- Author:
- G. Krauss
- See Also:
Component Variables
Content Type | Name | Description | Data Type | Unit | Min Value | Max Value | Default Value |
---|---|---|---|---|---|---|---|
constant | cRedistributeBetweenPlants | With different root depths one plant could get more water then actually needed. The surplus can partially be given to the other plant. | BOOLEAN | - | - | true | |
input | iFactor1PerLayer | Below ground allocation factor for crop 1 per layer | DOUBLEARRAY | 1 | 0.0 | 1.0 | - |
input | iFactor2PerLayer | Below ground allocation factor for crop 2 per layer | DOUBLEARRAY | 1 | 0.0 | 1.0 | - |
input | iMobileWaterUptakePerLayer | Crop available mobile water per layer in soil | DOUBLEARRAY | mm | 0.0 | - | - |
input | iPotentialTranspiration1 | Potential transpiration of crop 1 | DOUBLE | mm | 0.0 | - | 0.0 |
input | iPotentialTranspiration2 | Potential transpiration of crop 2 | DOUBLE | mm | 0.0 | - | 0.0 |
input | iRetainedWaterUptakePerLayer | Crop available retained water per layer in soil | DOUBLEARRAY | mm | 0.0 | - | - |
input | iWaterUptakePerLayer | Crop available water per layer in soil | DOUBLEARRAY | mm | 0.0 | - | - |
out | ActualTranspiration1 | Actual transpiration of crop 1 | DOUBLE | mm | 0.0 | 1.0 | 0.0 |
out | ActualTranspiration1PerLayer | Water actually transpired per layer of crop 1 | DOUBLEARRAY | mm | 0.0 | 1.0 | - |
out | ActualTranspiration2 | Actual transpiration of crop 2 | DOUBLE | mm | 0.0 | 1.0 | 0.0 |
out | ActualTranspiration2PerLayer | Water actually transpired per layer of crop 2 | DOUBLEARRAY | mm | 0.0 | 1.0 | - |
out | UnusedMobileWaterPerLayer | Water that is not uptaken by the plants from mobile water | DOUBLEARRAY | mm | 0.0 | 1.0 | - |
out | UnusedRetainedWaterPerLayer | Water that is not uptaken by the plants from retained water | DOUBLEARRAY | mm | 0.0 | 1.0 | - |
out | UnusedWaterPerLayer | Water that is not uptaken by the plants | DOUBLEARRAY | mm | 0.0 | 1.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
ModifierConstructorDescriptioncalled from class.forName()protected
SplitWaterUptake
(String aName, HashMap<String, net.simplace.sim.util.FWSimVariable<?>> aFieldMap, HashMap<String, String> aInputMap, org.jdom2.Element aSimComponentElement, net.simplace.sim.util.FWSimVarMap aVarMap, int aOrderNumber) -
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()
protected void
protected void
process()
Methods 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
-
SplitWaterUptake
protected SplitWaterUptake(String aName, HashMap<String, net.simplace.sim.util.FWSimVariable<?>> aFieldMap, HashMap<String, String> aInputMap, org.jdom2.Element aSimComponentElement, net.simplace.sim.util.FWSimVarMap aVarMap, int aOrderNumber) - Parameters:
aName
-aFieldMap
-aInputMap
-aSimComponentElement
-aVarMap
-aOrderNumber
-
-
SplitWaterUptake
public SplitWaterUptake()called from class.forName()
-
-
Method Details
-
createVariables
- Specified by:
createVariables
in interfacenet.simplace.sim.util.FWSimFieldContainer
- Specified by:
createVariables
in classnet.simplace.sim.model.FWSimComponent
-
init
protected void init()- Specified by:
init
in classnet.simplace.sim.model.FWSimComponent
-
initVariables
protected void initVariables() -
process
protected void process()- Specified by:
process
in classnet.simplace.sim.model.FWSimComponent
-
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)
-