RUFAS.routines.field.soil.infiltration module#

class RUFAS.routines.field.soil.infiltration.Infiltration(soil_data: SoilData | None, field_size: float | None = None)#

Bases: object

Simulates the infiltration of water into the soil profile using the ‘Runoff Volume: SCS Curve Number Procedure’ as described in section 2:1.1 of the SWAT (Soil and Water Assessment Tool) model documentation.

Parameters#

soil_dataSoilData, optional

An instance of SoilData for tracking the water infiltration in the soil profile. If not provided, a new instance will be created with the specified field size.

field_sizefloat, optional

The size of the field (ha).

Attributes#

dataSoilData

The SoilData object that stores and manages the water infiltration data within the soil profile.

__init__(soil_data: SoilData | None, field_size: float | None = None)#
infiltrate(rainfall: float) None#

Main routine for determining runoff and infiltration of soil for a given day.

Parameters#

rainfallfloat

Rainfall depth of current day (mm).

Notes#

The amount of water that is allowed to infiltrate the soil profile on any given day is limited by the available capacity of the total soil profile. This means that on some days more water will infiltrate the surface soil layer than there is capacity in said layer. This works fine as long as water is allowed to percolate out of the surface layer after this.

The methodology in SWAT automatically adjusts the Second Moisture Condition Parameter. This behavior was removed from RuFaS after consulting with SMEs who determined it was inappropriate to change user input in this way. See PR #772 for more discussion.

static _determine_first_moisture_condition_parameter(second_moisture_condition: float)#

Determine the curve number for dry (wilting point) conditions.

Parameters#

second_moisture_conditionfloat

Curve number for average moisture conditions (unitless).

Returns#

float

Curve number 1 (dry/wilting point conditions) (unitless).

References#

SWAT Theoretical documentation eqn. 2:1.1.4

static _determine_third_moisture_condition_parameter(second_moisture_condition: float)#

Determine the curve number for wet (field capacity) conditions.

Parameters#

second_moisture_conditionfloat

Curve number for average moisture conditions (unitless).

Returns#

float

Curve number 3 (wet/field capacity conditions) (unitless).

References#

SWAT Theoretical documentation eqn. 2:1.1.5

static _determine_retention_parameter_for_moisture_condition(moisture_condition_parameter: float) float#

Calculate the retention parameter used to determine runoff.

Parameters#

moisture_condition_parameterfloat

Curve number for the day (from SCS runoff equations (SWAT 2:1.1)) (unitless).

Returns#

float

Retention parameter (mm).

References#

SWAT Theoretical documentation eqn. 2:1.1.2

static _determine_second_shape_coefficient(field_capacity: float, saturation: float, max_retention_parameter: float, third_moisture_condition_retention_parameter: float) float#

Determine the second shape coefficient for use in calculating the first shape coefficient and retention parameter for a given day.

Parameters#

field_capacityfloat

Amount of water in soil profile at field capacity (mm).

saturationfloat

Amount of water in soil profile when saturated (mm).

max_retention_parameterfloat

Retention parameter calculated from curve number 1 (the driest conditions) (unitless).

third_moisture_condition_retention_parameterfloat

Retention parameter calculated from curve number 3 (the wettest conditions) (unitless).

Returns#

float

The second shape coefficient (unitless).

References#

SWAT Theoretical documentation eqn. 2:1.1.8

static _determine_first_shape_coefficient(field_capacity: float, max_retention_parameter: float, third_moisture_condition_retention_parameter: float, second_shape_coefficient: float) float#

Calculate the first shape coefficient for use in calculating the retention parameter.

Parameters#

field_capacityfloat

Amount of water in soil profile at field capacity (mm).

max_retention_parameterfloat

Retention parameter calculated from curve number 1 (the driest conditions) (unitless).

third_moisture_condition_retention_parameterfloat

Retention parameter calculated from curve number 3 (the wettest conditions) (unitless).

second_shape_coefficientfloat

The second shape coefficient (unitless).

Returns#

float

The first shape coefficient (unitless).

References#

SWAT Theoretical documentation eqn. 2:1.1.7

static _determine_retention_parameter(soil_water_content: float, max_retention_parameter: float, first_shape_coefficient: float, second_shape_coefficient: float) float#

Return the retention parameter for a given day.

Parameters#

soil_water_contentfloat

Amount of water held in the soil profile excluding the amount of water held in the profile at the wilting point (mm).

max_retention_parameterfloat

Maximum retention parameter, calculated from curve number 1 (the driest conditions) (mm).

first_shape_coefficientfloat

First shape coefficient (unitless).

second_shape_coefficientfloat

Second shape coefficient (unitless).

Returns#

float

Retention parameter for a given day (mm).

References#

SWAT Theoretical documentation eqn. 2:1.1.6

static _determine_frozen_retention_parameter(max_retention_parameter: float, retention_parameter: float) float#

Determine the adjusted retention parameter if the top layer of soil is frozen.

Parameters#

max_retention_parameterfloat

Maximum retention parameter, calculated from curve number 1. (the driest conditions) (mm).

retention_parameterfloat

Retention parameter for a given day (mm).

Returns#

float

Retention parameter for a given day adjusted for frozen soil (mm).

References#

SWAT Theoretical documentation eqn. 2:1.1.10

static _determine_accumulated_runoff(rainfall: float, retention_parameter: float) float#

Calculate accumulated runoff or rainfall excess.

Parameters#

rainfallfloat

Rainfall depth of the given day (mm).

retention_parameterfloat

Retention parameter based on curve number (mm).

Returns#

float

Accumulated runoff or rainfall excess (mm).

Notes#

Runoff only occurs when rainfall is greater than initial abstractions (about surface storage, interception, etc.) which are approximated as 0.2 times the retention parameter in SWAT 2:1.1 and here.

References#

SWAT Theoretical documentation eqn. 2:1.1.1, 3