Class SimpleRootResidues

java.lang.Object
net.simplace.sim.model.FWSimComponent
net.simplace.sim.components.soil.soilcn.SimpleRootResidues
All Implemented Interfaces:
net.simplace.sim.util.FWSimFieldContainer

public class SimpleRootResidues extends net.simplace.sim.model.FWSimComponent
Distributes NPK of dead roots to layers, include living roots on harvest.

The component takes daily dead root biomass per layer and adds living roots per layer on harvest.

NPK content of dead and living roots is distributed proportionally to the layers.

Calculation

Total dead root TDR and total living root biomass TLR are calculated from the inputs iDeadRootsRatePerLayer \(DR_i\) and iLivingRootsPerLayer \(LR_i\) \[ TDR = \sum_{i=1}^n DR_i \\ TLR = \sum_{i=1}^n LR_i \]

DeadRootsRatePerLayer \(R_i\) is calculated as:

\[ R_i = \begin{cases} DR_i + LR_i & \text{if } DoHarvest \\ DR_i & \text{else} \end{cases} \]

DeadRootsCRatePerLayer \(RC_i\) is calculated as:

\[ RC_i = \begin{cases} 0.5 \cdot DR_i + 0.5 \cdot LR_i & \text{if } DoHarvest \\ 0.5 \cdot DR_i & \text{else} \end{cases} \]

DeadRootsNRatePerLayer \(RN_i\) is calculated using iDeadRootsNRate \(DRN\) and iLivingRootsN \(LRN\):

\[ RN_i = \begin{cases} DR_i\cdot \frac{DRN}{TDR} + LR_i \cdot \frac{LRN}{TLR} & \text{if } DoHarvest \\ DR_i\cdot \frac{DRN}{TDR} & \text{else} \end{cases} \]

For P and K the P and K dead root rates are calculated accordingly:

\[ RP_i = \begin{cases} DR_i\cdot \frac{DRP}{TDR} + LR_i \cdot \frac{LRK}{TLR} & \text{if } DoHarvest \\ DR_i\cdot \frac{DRP}{TDR} & \text{else} \end{cases} \]

\[ RK_i = \begin{cases} DR_i\cdot \frac{DRK}{TDR} + LR_i \cdot \frac{LRK}{TLR} & \text{if } DoHarvest \\ DR_i\cdot \frac{DRK}{TDR} & \text{else} \end{cases} \]

Notice

The component is sensitive to the order. It has to run after root and plant NPK components, as it takes root biomass and NPK content as inputs.

On the other hand it uses the values also on harvest - when root and NPK components may have reset their states already.

A possible solution to this problem is to use following relative order

  1. root and plant NPK components
  2. harvest managmenet
  3. SimpleRootResidues
Author:
Gunther Krauss, guntherkrauss@uni-bonn.de

Component Variables

Content TypeNameDescriptionData TypeUnitMin ValueMax ValueDefault Value
inputiDeadRootsKRateDaily rate of dead roots KDOUBLEg/(m2 d)--0.0
inputiDeadRootsNRateDaily rate of dead roots NDOUBLEg/(m2 d)--0.0
inputiDeadRootsPRateDaily rate of dead roots PDOUBLEg/(m2 d)--0.0
inputiDeadRootsRatePerLayerDaily rate of dead roots per layerDOUBLEARRAYg/(m2 d)---
inputiDoHarvestIf true, living biomass that is not removed is added to the dead biomass rateBOOLEAN--false
inputiLivingRootsKWeight of roots KDOUBLEg/m2--0.0
inputiLivingRootsNWeight of roots NDOUBLEg/m2--0.0
inputiLivingRootsPWeight of roots PDOUBLEg/m2--0.0
inputiLivingRootsPerLayerWeight of roots per layerDOUBLEARRAYg/m2---
outDeadRootsCRatePerLayerDaily dead roots C rate per layer, possibly incremented by roots when plant harvestedDOUBLEARRAYg/(m2 d)---
outDeadRootsKRatePerLayerDaily dead roots K rate per layer, possibly incremented by roots when plant harvestedDOUBLEARRAYg/(m2 d)---
outDeadRootsNRatePerLayerDaily dead roots N rate per layer, possibly incremented by roots when plant harvestedDOUBLEARRAYg/(m2 d)---
outDeadRootsPRatePerLayerDaily dead roots P rate per layer, possibly incremented by roots when plant harvestedDOUBLEARRAYg/(m2 d)---
outDeadRootsRatePerLayerDaily dead roots rate per layer, possibly incremented by roots when plant harvestedDOUBLEARRAYg/(m2 d)---
  • 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

    Constructors
    Constructor
    Description
    Empty constructor used by class.forName()
  • Method Summary

    Modifier and Type
    Method
    Description
    protected net.simplace.sim.model.FWSimComponent
    clone(net.simplace.sim.util.FWSimVarMap aVarMap)
     
    HashMap<String,net.simplace.sim.util.FWSimVariable<?>>
    Create the FWSimVariables as interface for this SimComponent
    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
    Initializes the fields by getting input and output FWSimVariables from VarMap
    protected void
    Process the algorithm and write the results back to VarMap

    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

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • SimpleRootResidues

      public SimpleRootResidues()
      Empty constructor used by class.forName()
  • Method Details

    • createVariables

      public HashMap<String,net.simplace.sim.util.FWSimVariable<?>> createVariables()
      Create the FWSimVariables as interface for this SimComponent
      Specified by:
      createVariables in interface net.simplace.sim.util.FWSimFieldContainer
      Specified by:
      createVariables in class net.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 class net.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 class net.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 class net.simplace.sim.model.FWSimComponent
    • clone

      protected net.simplace.sim.model.FWSimComponent clone(net.simplace.sim.util.FWSimVarMap aVarMap)
      Specified by:
      clone in class net.simplace.sim.model.FWSimComponent
      See Also:
      • FWSimComponent.clone(net.simplace.sim.util.FWSimVarMap)