Klasse RunoffCurveNumberAPSIM

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

public class RunoffCurveNumberAPSIM extends net.simplace.sim.model.FWSimComponent

This SimComponent calculates runoff according to the SCS Runoff Curve Number method (USDA, 1972). The algorithm follows the same formulations used in the APSIM (Agricultural Production Systems sIMulator) platform, which was adapted from the PERFECT model (Littleboy et al., 1992).

The algorithm simulates runoff taking into account the potential runoff amount (iPotentialRunoff) (typically the amount of daily rainfall and irrigation), the soil moisture content (iSWC), and the soil cover fraction (iCoverFrac). The input soil water for each soil layer (iSWC) can be calculated by a soil water balance SimComponent (e.g., SlimWater), whereas soil cover fraction (iCoverFrac) (0-1) can be obtained by the SimComponent RunoffSurfaceCover.

The effect of soil moisture and surface cover is incorporated directly in the curve number value prescribed for bare soil conditions (cCNbare). Firstly, the effect of soil cover is computed by:

\[ \begin{eqnarray} CN_{CoverRed} Ungültige Eingabe: "&" = Ungültige Eingabe: "&" min \biggl( \frac{iCoverFrac}{cCNcov} \cdot cCNred, cCNred \biggl) \\ CN2 Ungültige Eingabe: "&" = Ungültige Eingabe: "&" max(0, cCN_{bare} - CN_{CoverRed}) \end{eqnarray} \]

Where iCoverFrac is the soil cover fraction (0-1); cCNcov is the fraction of surface cover at which the maximum reduction in CN occurs; cCNred is the maximum reduction in CN due to surface cover; cCNbare is the CN for the bare soil conditions; CNCoverRed is an intermediate variable and CN2 is the corrected CN due to soil surface cover. The CN2 is further corrected according to the fraction of soil moisture content by the following equations:

\[ \begin{eqnarray} FC_{frac[i]} Ungültige Eingabe: "&" = Ungültige Eingabe: "&" \frac{(iSWC_{[i]} - cWP_{[i]})}{(cFC_{[i]} - cWP_{[i]})} Ungültige Eingabe: "&" \text{Where } (0 \le FC_{[i]} \le 1) \\ SF Ungültige Eingabe: "&" = Ungültige Eingabe: "&" \frac{1}{(1 - e^{-4.16})} \\ pWeight_{[i]} Ungültige Eingabe: "&" = Ungültige Eingabe: "&" SF \cdot \Biggl\{ 1 - e^{ \biggl[ -4.16 \cdot min \bigl( 1, \frac{D_{[i]}}{ED} \bigl) \biggl] } \Biggl\} \\ CNSW_{fac} Ungültige Eingabe: "&" = Ungültige Eingabe: "&" \sum_{i=1}^N (FC_{frac[i]} \cdot pWeight_{[i]}) \end{eqnarray} \]

Where iSWC is the soil water content (m3/m3); cFC is the field capacity (m3/m3); cWP is the wilting point (m3/m3); D (cDepth) is the depth of soil layer i (m); ED (cHydrolEffectiveDepth) is the effective depth (mm) for which soil moisture exerts influence in runoff (default value as 450 mm); pWeight is a weighting factor as a function of soil depth; SF is the scaling factor used for pWeight; and CNSWfac is the integrated soil moisture factor for all soil layers (N). The procedure describing how CNSWfac is used to scale the CN2 between dry and wet conditions is described below:

\[ \begin{eqnarray} CN1 Ungültige Eingabe: "&" = Ungültige Eingabe: "&" \frac{CN2}{(2.3340 - 0.013340 \cdot CN2)} \\ CN3 Ungültige Eingabe: "&" = Ungültige Eingabe: "&" \frac{CN2}{(0.4036 - 0.005964 \cdot CN2)} \\ CN_{final} Ungültige Eingabe: "&" = Ungültige Eingabe: "&" CN1 + (CN3 - CN1) \cdot CNSW_{fac} \end{eqnarray} \]

Where CN1 and CN3 are the wet and dry CN values respectively, which are calculated as a function of CN2; CNfinal is the final CN value corrected by soil cover and moisture. The numerical coefficients of equations 7 and 8 can be modified by changing the default values of cCN1a, cCN1b, cCN3a, cCN3b. However, changing these parameters should be made with extreme caution as it would affect the stability of CNfinal calculations. The CNfinal is then used in the curve number procedure as:

\[ \begin{eqnarray} s Ungültige Eingabe: "&" = Ungültige Eingabe: "&" 254 \cdot \biggl( \frac{100}{CN_{final}} - 1 \biggl) \\ Q Ungültige Eingabe: "&" = Ungültige Eingabe: "&" \frac{(P - \alpha \cdot s)^2}{P + (1 - \alpha) \cdot s} \end{eqnarray} \]

Where Q is the runoff (mm); s is an intermediate retention parameter calculated with CNfinal; P (iPotentialRunoff) is the potential runoff amount (mm) which is typically the amount of daily rainfall and/or sprinkler irrigation; \( \alpha \) (cIABSratio) is the initial abstraction factor used to correct infiltration after the start of runoff.

References

Soil Conservation Service (1972) National Engineering Handbook Section 4: Hydrology, Soil Conservation Service, USDA, Washington.

APSIM v7.1 source code. Last time accessed: Dec-14-2022. URL: https://github.com/APSIMInitiative/APSIMClassic

APSIM – SoilWat webpage. Last time accessed: 17-Apr-2023. URL: https://www.apsim.info/documentation/model-documentation/soil-modules-documentation/soilwat/

Littleboy, M., D.M. Silburn, D.M. Freebairn, D.R. Woodruff, G.L. Hammer, and J.K. Leslie. 1992. Impact of soil erosion on production in cropping systems. I. Development and validation of a simulation model. Aust. J. Soil Res. 30, 757-774.

Holzworth, Dean P., Neil I. Huth, Peter G. deVoil, Eric J. Zurcher, Neville I. Herrmann, Greg McLean, Karine Chenu, et al. "APSIM - Evolution towards a New Generation of Agricultural Systems Simulation." Environmental Modelling <span class="invalid-tag">Ungültige Eingabe: "&"</span> Software 62 (December 2014): 327–350. https://doi.org/10.1016/j.envsoft.2014.07.009

Autor:
Murilo Vianna, Gunther Krauss, gk@uni-bonn.de

Component Variables

Content TypeNameDescriptionData TypeUnitMin ValueMax ValueDefault Value
constantcDepthDepth of the bottom of each soil layer after soil layer transformationDOUBLEARRAYm---
constantcFCVolumetric soil water content of each layer at field capacityDOUBLEARRAYm3/m3---
constantcWPVolumetric soil water content of each layer at permanent wilting pointDOUBLEARRAYm3/m3---
inputiCoverFracPontential amount of water that can runoff (Rainfall for rainfed system; Rainfall+Irrigation for sprinkler irrigation) DOUBLEmm0.01000.0-
inputiPotentialRunoffPontential amount of water that can runoff (Rainfall for rainfed system; Rainfall+Irrigation for sprinkler irrigation) DOUBLEmm0.01000.0-
inputiSWCVolumetric soil water contentDOUBLEARRAYm3/m30.0--
outCN1CN2 at dry conditionDOUBLE1--0.0
outCN2bare soil CN corrected by surface cover (CNcoverRed)DOUBLE1--0.0
outCN3CN2 at wet conditionDOUBLE1--0.0
outCNSWfacSoil water factor to correct CNDOUBLE1--0.0
outCNcoverRedCN2 reduction due to surface coverDOUBLE1--0.0
outCNfinalFinal CN (corrected by soil cover and soil moisture)DOUBLE1--0.0
outRunoffRunoffDOUBLEmm0.010000.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
    Konstruktor
    Beschreibung
    Empty constructor used by class.forName()
  • 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<?>>
    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
    Initialises the fields by getting input and output FWSimVariables from VarMap
    protected void
    Process the algorithm and write the results back to VarMap

    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

    • RunoffCurveNumberAPSIM

      public RunoffCurveNumberAPSIM()
      Empty constructor used by class.forName()
  • Methodendetails

    • createVariables

      public HashMap<String,net.simplace.sim.util.FWSimVariable<?>> createVariables()
      Create the FWSimVariables as interface for this SimComponent
      Angegeben von:
      createVariables in Schnittstelle net.simplace.sim.util.FWSimFieldContainer
      Angegeben von:
      createVariables in Klasse net.simplace.sim.model.FWSimComponent
      Siehe auch:
      • Ungültige Referenz
        net.simplace.simulation.model.FWSimComponent#createVariables()
    • init

      protected void init()
      Initialises the fields by getting input and output FWSimVariables from VarMap
      Angegeben von:
      init in Klasse net.simplace.sim.model.FWSimComponent
      Siehe auch:
      • Ungültige Referenz
        net.simplace.simulation.model.FWSimComponent#init()
    • process

      protected void process()
      Process the algorithm and write the results back to VarMap
      Angegeben von:
      process in Klasse net.simplace.sim.model.FWSimComponent
      Siehe auch:
      • Ungültige Referenz
        net.simplace.simulation.model.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.
      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:
      • Ungültige Referenz
        net.simplace.simulation.model.FWSimComponent#clone(net.simplace.simulation.util.FWSimVarMap)