RUFAS.biophysical.field.soil.phosphorus_cycling.manure module#

class RUFAS.biophysical.field.soil.phosphorus_cycling.manure.Manure(soil_data: SoilData | None, field_size: float | None = None)#

Bases: object

This module adds and tracks manure phosphorus dynamics based on the SurPhos model.

Parameters#

soil_dataSoilData, optional

The SoilData object used by this module to track manure phosphorus activity, 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 the dynamics of manure phosphorus, including its distribution,

transformation, and potential loss mechanisms.

__init__(soil_data: SoilData | None, field_size: float | None = None)#
daily_manure_update(rainfall: float, runoff: float, field_size: float, mean_air_temperature: float) None#

This method conducts daily operations on manure including decomposition, assimilation into soil, etc.

Parameters#

rainfallfloat

The amount of rainfall on the current day (mm).

runofffloat

The amount of runoff from rainfall on the current day (mm).

field_sizefloat

The size of the field (ha).

mean_air_temperaturefloat

Mean air temperature on the current day (degrees C).

Notes#

This method orchestrates the three major processes (and one more minor process) that act on manure on the manure on the surface of the field. The three major processes are leaching, decomposition, and assimilation. The minor process is the adjustment of the manure’s moisture factor. Leaching is conducted first, then the adjustment of the moisture factors. Decomposition and assimilation occur simultaneously.

_leach_and_update_phosphorus_pools(rainfall: float, runoff: float, field_size: float) None#

This method handles all calls to the methods that determine how much phosphorus is leached from manure, how that leached phosphorus is distributed, and updates the phosphorus pools based on those values.

Parameters#

rainfallfloat

The amount of rainfall on the current day (mm).

runofffloat

The amount of runoff from rainfall on the current day (mm).

field_sizefloat

The size of the field (ha).

_add_infiltrated_phosphorus_to_soil(infiltrated_phosphorus_amount: float, field_size: float) None#

This method adds phosphorus that was dissolved in rainfall to the soil profile as outlined in SurPhos.

Parameters#

infiltrated_phosphorus_amountfloat

The amount of phosphorus to be added to the soil profile (kg).

field_sizefloat

The size of the field (ha).

References#

SurPhos Theoretical, page 8, paragraph below [13]

Notes#

This method follows what is outlined in SurPhos (theoretical documentation, page 8, paragraph just below eqn. [13]), which is that 80% of infiltrated phosphorus stays in the top 20 mm of soil, and the rest infiltrates deeper.