RUFAS.routines.field.field.fertilizer_application module#
- class RUFAS.routines.field.field.fertilizer_application.FertilizerApplication(soil: Soil | None = None, field_size: float | None = None)#
Bases:
object
This module provides a way for Field to apply fertilizer, based on SWAT Theoretical documentation section (6:1.7) This class can be initialized with a Soil object or create one if none is provided
Parameters#
- soilSoil, default=None
Soil object to which fertilizer should be applied.
- field_sizefloat, default=None
Size of the field. Used to initialize a Soil object for this module to work with, if a pre-configured SoilData object is not provided (ha)
Attributes#
- soil: Soil
Reference to the Soil object to be fertilized.
Methods#
- apply_fertilizer(phosphorus_applied: float, fertilizer_mass: float, inorganic_nitrogen_fraction: float,
ammonium_fraction: float, organic_nitrogen_fraction: float, application_depth: float, surface_remainder_fraction: float, field_size: float) -> None
Applies nutrients to the soil through fertilizer.
- generate_depth_factors(application_depth: float, soil_layer_bottom_depths: list[float]) -> list[float]
Generates a list of fractions that partitions sub-surface nutrients between the different soil layers.
- apply_fertilizer(phosphorus_applied: float, nitrogen_applied: float, ammonium_fraction: float, application_depth: float, surface_remainder_fraction: float, field_size: float) None #
Applies nutrients to the soil through fertilizer.
Parameters#
- phosphorus_appliedfloat
Mass of phosphorus applied to the soil (kg).
- nitrogen_appliedfloat
Mass of nitrogen applied to the soil (kg).
- ammonium_fractionfloat
Fraction of inorganic nitrogen mass applied that is ammonium (unitless).
- application_depthfloat
Depth at which fertilizer is injected into the soil (mm).
- surface_remainder_fractionfloat
Fraction of fertilizer applied that remains on the soil surface after application (unitless).
- field_sizefloat
Size of the field (ha).
References#
SWAT Theoretical documentation section 6:1.7.
Notes#
This method follows the SWAT model for applying nitrogen to the soil via fertilizer, but uses the fertilizer phosphorus application method from SurPhos to apply phosphorus.
- _apply_subsurface_fertilizer(phosphorus: float, nitrates: float, ammonium: float, application_depth: float, subsurface_fraction: float) None #
Applies subsurface nutrients to the soil profile.
Parameters#
- phosphorusfloat
Amount of phosphorus applied in this application of fertilizer (kg / ha).
- nitratesfloat
Amount of nitrates applied in this application of fertilizer (kg / ha).
- ammoniumfloat
Amount of ammonium applied in this application of fertilizer (kg / ha).
- application_depthfloat
Bottom depth of this fertilizer application (mm).
- subsurface_fractionfloat
Fraction of total fertilizer application that is applied below the soil surface (unitless).
Notes#
This implementation applies all nutrients from the fertilizer application to subsurface soil layers in the same manner. In previous implementations of RuFaS, only phosphorus was added to layers below the surface when injection applications occurred.
- static generate_depth_factors(application_depth: float, soil_layer_bottom_depths: list[float]) list[float] #
Generates a list of fractions that partitions sub-surface nutrients between the different soil layers.
Parameters#
- application_depthfloat
Bottom depth of nutrient application (mm).
- soil_layer_bottom_depthslist[float]
List of bottom depths of soil layers in the soil profile (mm).
Returns#
- list[float]
List of fractions that determine the distribution of nutrients between different soil layers when subsurface nutrients are applied (unitless).
References#
pseudocode_field_management [FM.3.B.3 - 5]
Notes#
This method of distributing nutrients between soil layers originates with Pete Vadas’ SurPhos model. Its purpose is to proportionally distribute nutrients to layers within the soil profile.