java.lang.Object
net.simplace.sim.model.FWSimComponent
net.simplace.sim.components.experimental.intercropping.SplitWaterUptake
Alle implementierten Schnittstellen:
net.simplace.sim.util.FWSimFieldContainer

public class SplitWaterUptake extends net.simplace.sim.model.FWSimComponent
Splits water uptake between two crops

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

Autor:
G. Krauss
Siehe auch:

Component Variables

Content TypeNameDescriptionData TypeUnitMin ValueMax ValueDefault Value
constantcRedistributeBetweenPlantsWith different root depths one plant could get more water then actually needed. The surplus can partially be given to the other plant.BOOLEAN--true
inputiFactor1PerLayerBelow ground allocation factor for crop 1 per layerDOUBLEARRAY10.01.0-
inputiFactor2PerLayerBelow ground allocation factor for crop 2 per layerDOUBLEARRAY10.01.0-
inputiMobileWaterUptakePerLayerCrop available mobile water per layer in soilDOUBLEARRAYmm0.0--
inputiPotentialTranspiration1Potential transpiration of crop 1DOUBLEmm0.0-0.0
inputiPotentialTranspiration2Potential transpiration of crop 2DOUBLEmm0.0-0.0
inputiRetainedWaterUptakePerLayerCrop available retained water per layer in soilDOUBLEARRAYmm0.0--
inputiWaterUptakePerLayerCrop available water per layer in soilDOUBLEARRAYmm0.0--
outActualTranspiration1Actual transpiration of crop 1DOUBLEmm0.01.00.0
outActualTranspiration1PerLayerWater actually transpired per layer of crop 1DOUBLEARRAYmm0.01.0-
outActualTranspiration2Actual transpiration of crop 2DOUBLEmm0.01.00.0
outActualTranspiration2PerLayerWater actually transpired per layer of crop 2DOUBLEARRAYmm0.01.0-
outUnusedMobileWaterPerLayerWater that is not uptaken by the plants from mobile waterDOUBLEARRAYmm0.01.0-
outUnusedRetainedWaterPerLayerWater that is not uptaken by the plants from retained waterDOUBLEARRAYmm0.01.0-
outUnusedWaterPerLayerWater that is not uptaken by the plantsDOUBLEARRAYmm0.01.0-
  • Verschachtelte Klassen - Übersicht

    Von Klasse geerbte verschachtelte Klassen/Schnittstellen net.simplace.sim.model.FWSimComponent

    net.simplace.sim.model.FWSimComponent.TEST_STATE
  • Feldübersicht

    Von Klasse geerbte Felder net.simplace.sim.model.FWSimComponent

    iFieldMap, iFrequence, iInputMap, iJexlRule, iMasterComponentGroup, iName, iOrderNumber, isComponentGroup, iSimComponentElement, iSimModel, iVarMap
  • Konstruktorübersicht

    Konstruktoren
    Modifizierer
    Konstruktor
    Beschreibung
     
    called 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)
     
  • Methodenübersicht

    Modifizierer und Typ
    Methode
    Beschreibung
    protected net.simplace.sim.model.FWSimComponent
    clone(net.simplace.sim.util.FWSimVarMap aVarMap)
     
    HashMap<String,net.simplace.sim.util.FWSimVariable<?>>
     
    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.
    protected void
     
    protected void
     
    protected void
     

    Von Klasse geerbte Methoden 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

    Von Klasse geerbte Methoden java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Konstruktordetails

    • 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)
      Parameter:
      aName -
      aFieldMap -
      aInputMap -
      aSimComponentElement -
      aVarMap -
      aOrderNumber -
    • SplitWaterUptake

      public SplitWaterUptake()
      called from class.forName()
  • Methodendetails

    • createVariables

      public HashMap<String,net.simplace.sim.util.FWSimVariable<?>> createVariables()
      Angegeben von:
      createVariables in Schnittstelle net.simplace.sim.util.FWSimFieldContainer
      Angegeben von:
      createVariables in Klasse net.simplace.sim.model.FWSimComponent
    • init

      protected void init()
      Angegeben von:
      init in Klasse net.simplace.sim.model.FWSimComponent
    • initVariables

      protected void initVariables()
    • process

      protected void process()
      Angegeben von:
      process in Klasse net.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.
      Angegeben von:
      fillTestVariables in Klasse net.simplace.sim.model.FWSimComponent
      Siehe auch:
      • Ungültige Referenz
        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)
      Angegeben von:
      clone in Klasse net.simplace.sim.model.FWSimComponent
      Siehe auch:
      • FWSimComponent.clone(net.simplace.sim.util.FWSimVarMap)