RUFAS.routines.field.soil.nitrogen_cycling.leaching_runoff_erosion module#
- class RUFAS.routines.field.soil.nitrogen_cycling.leaching_runoff_erosion.LeachingRunoffErosion(soil_data: SoilData | None, field_size: float | None = None)#
Bases:
object
Manages the movement and loss of nitrogen through erosion and leaching within the soil profile, aligning with SWAT sections 4:2.1, 2.
Parameters#
- soil_dataSoilData, optional
The SoilData object used by this module to track nitrogen leaching and runoff in the soil profile, creates new one if one is not provided.
- field_sizefloat, optional
Used to initialize a SoilData object for this module to work with, if a pre-configured SoilData object is not provided (ha).
Attributes#
- dataSoilData
Stores the SoilData object for tracking nitrogen movement processes.
References#
Vadas, P. A., & Powell, J. M. (2019). Nutrient mass balance and fate in dairy cattle lots with different surface materials. Transactions of the ASABE, 62(1), 131–138. https://doi.org/10.13031/trans.12901. This study’s findings are instrumental in calibrating the coefficients used in this module for accurate simulation of nitrogen loss dynamics.
Notes#
The empirical coefficients were calibrated using RuFaS with data from a study by Pete Vadas and J. Mark Powell at the USDA, focusing on nutrient mass balance and fate in dairy cattle lots with different surface materials.
- leach_runoff_and_erode_nitrogen(field_size: float) None #
This is the main routine for updating nitrogen leaching, runoff, and erosion within the soil profile.
Parameters#
- field_sizefloat
Size of the field (ha)
Notes#
This equation simply calls two helper methods, one executes runoff and erosion operations and the second executes leaching operations.
- _erode_nitrogen(field_size: float) None #
This method handles the erosion of nitrogen and updating the soil profile accordingly.
Parameters#
- field_sizefloat
Size of the field (ha).
Notes#
This method only removes nitrogen from the top soil layer. Inorganic nitrogen is removed by runoff, while organic nitrogen is removed by sediment erosion.
- _leach_nitrogen() None #
Removes leached nitrogen from each soil layer, then adds the leached nitrogen to the next layer.
Notes#
This method determines how much nitrogen will be leached out of each layer without being influenced at all by the amount of nitrogen leaching into that layer. It achieves this by calculating the amounts leached out of each layer, storing those amounts in a dictionary, appending that dictionary to a list (percolated_nitrogen), then iterating through the soil profile a second time and adding the leached nitrogen into the appropriate layer. The bottom soil layer leaches into the vadose zone.
- static _determine_erosion_nitrogen_loss_content(nitrogen_erosion_concentration: float, daily_soil_lost: float, enrichment_ratio: float) float #
This method determines nitrogen mass loss in erosion.
Parameters#
- nitrogen_erosion_concentration: float
The soil nitrogen concentrations for the Fresh, Active, and Stable pools in soil (mg / kg).
- daily_soil_lost: float
Daily soil loss (Metric Tons / ha).
- enrichment_ratio: float
Enrichment ratio (unitless).
Returns#
- float
nitrogen mass loss in erosion (kg/ha).
References#
SWAT Theoretical documentation eqn. 4:2.2.1
- static _determine_enrichment_ratio(daily_soil_lost: float) float #
This method determines the enrichment ratio.
Parameters#
- daily_soil_lost: float
Daily soil loss (Metric Tons/ha).
Returns#
- float
Enrichment ratio (unitless).
References#
pseudocode_soil S.4.C.5
- static _calculate_eroded_organic_nitrogen(nitrogen_content: float, bulk_density: float, layer_thickness: float, field_size: float, eroded_sediment: float) float #
This method calculates how much organic nitrogen is lost from the field via eroded sediment.
Parameters#
- nitrogen_contentfloat
Nitrogen content of the given pool of the top soil layer (kg / ha).
- bulk_densityfloat
The density of the top soil layer (Megagrams / cubic meter).
- layer_thicknessfloat
The thickness of the top layer of soil (mm).
- field_sizefloat
Size of the field (ha).
- eroded_sedimentfloat
Amount of sediment that was eroded from the field on the current day (metric tons).
Returns#
- float
Amount of nitrogen lost to erosion from the given organic pool in the top soil layer (kg / ha).
Notes#
Nitrogen can only be removed from the field by erosion from the top layer of soil, so this method should not be used on any other layers of soil.
- static _calculate_nitrogen_conc_in_mobile_water(nitrogen_content: float, runoff_water_amount: float, percolated_water_amount: float, soil_saturation_point: float) float #
Calculates how much nitrogen is lost from the given pool on the current day.
Parameters#
- nitrogen_contentfloat
The content of nitrogen in the given pool in the current layer of soil (kg / ha).
- runoff_water_amountfloat
Amount of surface water runoff on this day (mm). Zero for all layers other than the surface layer
- percolated_water_amountfloat
Amount of water that percolated out of the current soil layer on this day (mm).
- soil_saturation_pointfloat
Volume of water in layer when saturated (mm).
Returns#
- float
The concentration of nitrogen in the mobile water for a given layer (kg N/ mm H2O).
Notes#
This method is described for nitrate in the SWAT+ documentation Equation 4:2.1.2. Here we assume the theta_e, the fraction of porosity from which anions are excluded, to be zero