Class RunoffCurveNumberAPSIM
- All Implemented Interfaces:
net.simplace.sim.util.FWSimFieldContainer
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} & = & min \biggl( \frac{iCoverFrac}{cCNcov} \cdot cCNred, cCNred \biggl) \\ CN2 & = & 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]} & = & \frac{(iSWC_{[i]} - cWP_{[i]})}{(cFC_{[i]} - cWP_{[i]})} & \text{Where } (0 \le FC_{[i]} \le 1) \\ SF & = & \frac{1}{(1 - e^{-4.16})} \\ pWeight_{[i]} & = & SF \cdot \Biggl\{ 1 - e^{ \biggl[ -4.16 \cdot min \bigl( 1, \frac{D_{[i]}}{ED} \bigl) \biggl] } \Biggl\} \\ CNSW_{fac} & = & \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 & = & \frac{CN2}{(2.3340 - 0.013340 \cdot CN2)} \\ CN3 & = & \frac{CN2}{(0.4036 - 0.005964 \cdot CN2)} \\ CN_{final} & = & 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 & = & 254 \cdot \biggl( \frac{100}{CN_{final}} - 1 \biggl) \\ Q & = & \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 & Software 62 (December 2014): 327–350. https://doi.org/10.1016/j.envsoft.2014.07.009
- Author:
- Murilo Vianna, Gunther Krauss, gk@uni-bonn.de
Component Variables
Content Type | Name | Description | Data Type | Unit | Min Value | Max Value | Default Value |
---|---|---|---|---|---|---|---|
constant | cDepth | Depth of the bottom of each soil layer after soil layer transformation | DOUBLEARRAY | m | - | - | - |
constant | cFC | Volumetric soil water content of each layer at field capacity | DOUBLEARRAY | m3/m3 | - | - | - |
constant | cWP | Volumetric soil water content of each layer at permanent wilting point | DOUBLEARRAY | m3/m3 | - | - | - |
input | iCoverFrac | Pontential amount of water that can runoff (Rainfall for rainfed system; Rainfall+Irrigation for sprinkler irrigation) | DOUBLE | mm | 0.0 | 1000.0 | - |
input | iPotentialRunoff | Pontential amount of water that can runoff (Rainfall for rainfed system; Rainfall+Irrigation for sprinkler irrigation) | DOUBLE | mm | 0.0 | 1000.0 | - |
input | iSWC | Volumetric soil water content | DOUBLEARRAY | m3/m3 | 0.0 | - | - |
out | CN1 | CN2 at dry condition | DOUBLE | 1 | - | - | 0.0 |
out | CN2 | bare soil CN corrected by surface cover (CNcoverRed) | DOUBLE | 1 | - | - | 0.0 |
out | CN3 | CN2 at wet condition | DOUBLE | 1 | - | - | 0.0 |
out | CNSWfac | Soil water factor to correct CN | DOUBLE | 1 | - | - | 0.0 |
out | CNcoverRed | CN2 reduction due to surface cover | DOUBLE | 1 | - | - | 0.0 |
out | CNfinal | Final CN (corrected by soil cover and soil moisture) | DOUBLE | 1 | - | - | 0.0 |
out | Runoff | Runoff | DOUBLE | mm | 0.0 | 10000.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) Create the FWSimVariables as interface for this SimComponentfillTestVariables
(int aParamIndex, net.simplace.sim.model.FWSimComponent.TEST_STATE aDefineOrCheck) called for single component test to check the components algorithm.protected void
init()
Initialises 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
-
RunoffCurveNumberAPSIM
public RunoffCurveNumberAPSIM()Empty constructor used by class.forName()
-
-
Method Details
-
createVariables
Create the FWSimVariables as interface for this SimComponent- Specified by:
createVariables
in interfacenet.simplace.sim.util.FWSimFieldContainer
- Specified by:
createVariables
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
net.simplace.simulation.model.FWSimComponent#createVariables()
-
init
protected void init()Initialises the fields by getting input and output FWSimVariables from VarMap- Specified by:
init
in classnet.simplace.sim.model.FWSimComponent
- See Also:
-
net.simplace.simulation.model.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:
-
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.- 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:
-
net.simplace.simulation.model.FWSimComponent#clone(net.simplace.simulation.util.FWSimVarMap)
-