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.

__init__(soil: Soil | None = None, field_size: float | None = None)#
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.