RUFAS.routines.field.crop.water_uptake module#

class RUFAS.routines.field.crop.water_uptake.WaterUptake(crop_data: CropData | None = None, water_distro_parameter: float = 10, potential_water_uptakes: List[float] | None = None, water_compensation_factor: float = 0.01, unmet_water_demands: List[float] | None = None, actual_water_uptakes: List[float] | None = None)#

Bases: NutrientUptake

This module is responsible for all water uptake routines for a crop in a day.

Parameters#

crop_dataCropData, optional

An instance of CropData containing specific crop parameters and states. If not provided, a default instance with generic crop parameters is created.

water_distro_parameterfloat, default 10

Water-use distribution parameter governing water-uptake from the soil (unitless).

potential_water_uptakesOptional[List[float]], default None

The maximum amount of water to be potentially taken up by a crop, from each soil layer (mm).

water_compensation_factorfloat, default 0.01

Factor that determines the ability of a plant to draw water from deeper layers when demands are not met (unitless). 0 indicates no water can be drawn from deeper than expected and 1 indicates that any and all water can be drawn from deeper layers.

unmet_water_demandsOptional[List[float]], default None

Cumulative water demands not met by all previous layers (mm).

actual_water_uptakesOptional[List[float]], default None

The actual amount of water to be removed from the soil (mm).

Attributes#

crop_dataCropData

Stores and provides access to crop-related data influencing root development, including parameters like root depth, growth rates, and environmental conditions affecting root expansion.

water_distro_parameterfloat

Water-use distribution parameter governing water-uptake from the soil (unitless).

potential_water_uptakesOptional[List[float]]

The maximum amount of water to be potentially taken up by a crop, from each soil layer (mm).

water_compensation_factorfloat

Factor that determines the ability of a plant to draw water from deeper layers when demands are not met (unitless). 0 indicates no water can be drawn from deeper than expected and 1 indicates that any and all water can be drawn from deeper layers.

unmet_water_demandsOptional[List[float]]

Cumulative water demands not met by all previous layers (mm).

actual_water_uptakesOptional[List[float]]

The actual amount of water to be removed from the soil (mm).

References#

“Water Uptake By Plants” section of SWAT (5:2.2.1)

__init__(crop_data: CropData | None = None, water_distro_parameter: float = 10, potential_water_uptakes: List[float] | None = None, water_compensation_factor: float = 0.01, unmet_water_demands: List[float] | None = None, actual_water_uptakes: List[float] | None = None)#
uptake(soil_data: SoilData) None#

Main method that conducts all water uptake routines for a crop in a day.

Parameters#

soil_dataSoilData

object tracking soil, from which water will be extracted.

extract_water_from_soil(soil_data: SoilData) None#

Transfers the current day’s water uptake from soil layers to the crop.

Parameters#

soil_dataSoilData

the object that tracks soil properties, from which to extract water.

Raises#

Exception

If the lengths of soil_data.soil_layers and self.actual_water_uptakes aren’t equal.

Notes#

The module removes the smaller of the previously calculated “actual uptake” and the available water in each layer. The actual uptake is updated, if relevant, and the equivalent amount is removed from the layers in the SoilData object.

classmethod _take_up_water(potential_uptakes: List[float], water_availabilities: List[float], wilting_points: List[float]) List[float]#

Calculates the actual water taken up by the plant for each soil layer.

Returns#

uptakes: list[float]

the actual water uptake from each layer of soil (mm)

Raises#

Exception

If the lengths of potential_uptakes, water_availabilities, and wilting_points are not all equal.

Notes#

This method is a wrapper that applies _determine_actual_layer_uptake() to each layer.

static _determine_actual_layer_uptake(potential: float, available_water: float, wilting_point_water: float) float#

Calculates the actual water taken up by the plant for a soil layer.

Parameters#

potentialfloat

the (adjusted and corrected) potential water uptake for a soil layer on the current day (mm)

available_waterfloat

the water available in a soil layer (mm)

wilting_point_waterfloat

the water content of the layer at the wilting point (mm)

Returns#

uptakefloat

the actual water that the plant will uptake from the layer (mm)

static _reduce_efficiency_of_uptake(potential_uptakes: List[float], water_availabilities: List[float], available_capacities: List[float]) List[float]#

Returns the potential water uptake for each layer after correcting for availability-dependent uptake efficiency.

Parameters#

potential_uptakeslist[float]

The unadjusted potential water uptakes for each soil layer (mm).

water_availabilitieslist[float]

The crop’s water availabilities for each soil layer (mm).

available_capacitiesfloat

Available water capacity for each soil layer (mm).

Returns#

corrected_potentialslist[float]

A list of corrected potential water that can be taken up from each layer by the crop on the current day.

Raises#

Exception

If potential_uptakes, water_availabilities, and available_capacities are not all equal lengths.

Notes#

This method is a wrapper that applies _correct_layer_for_efficiency() to each layer.

static _correct_layer_for_efficiency(potential_uptake: float, available_water: float, available_capacity: float) float#

Adjusts the potential water uptake from a layer by the uptake efficiency that is concentration-dependent.

Parameters#

potential_uptakefloat

The (adjusted) potential water uptake from this layer by the crop on the current day (mm).

available_waterfloat

The amount of water actual available for uptake in this layer on the current day (mm).

available_capacityfloat

Available water capacity (not already holding water) for this layer on the current day (mm).

Returns#

corrected_potential: float

The maximum water able to be taken up from this layer, based on the initial concentration of water in the soil layer (mm).

References#

SWAT 5:2.2.4, 5:2.2.5

static _adjust_water_uptakes(potential_uptakes: List[float], unmet_demands: List[float], uptake_compensation: float) List[float]#

Adjusts the potential water uptakes for each layer based on drawing from deeper layers when possible.

Parameters#

potential_uptakeslist[float]

The unadjusted potential water uptakes for each soil layer (mm).

unmet_demandslist[float]

The crop’s water demands for each soil layer (mm).

uptake_compensationfloat

Water uptake compensation factor: the proportion of a crop’s water demand from a given layer that can be drawn from the underlying layer when insufficient water exists in the desired layer.

Returns#

adjustedlist[float]

The adjusted potential water to be taken up from each layer (mm).

Raises#

Exception

If the lengths of potential_uptakes and unmet_demands are not equal.

References#

SWAT 5:2.2.3

static _find_stratified_max_water_uptakes(root_depth: float, max_transpiration: float, water_distro_parameter: float, upper_depths: List[float], lower_depths: List[float]) List[float]#

Calculates the crop’s maximum water uptake from each soil layer during the current day.

Parameters#

root_depthfloat

The current depth of the crop root development (mm).

max_transpirationfloat

The maximum potential water lost to crop transpiration for the current day (mm).

water_distro_parameterfloat

The water-use distribution parameter of the crop (unitless).

upper_depthslist[float]

Depths to the top of each soil layer (mm).

lower_depthslist[float]

Depths to the bottom of each soil layer (mm).

Returns#

potential_uptakeslist[float]

The crop’s maximum potential water uptake for each soil layer (mm) during the current day.

Raises#

Exception

If the lengths of upper_depths and lower_depths are not equal.

References#

SWAT 5:2.2.2

static _determine_max_water_uptake_to_depth(root_depth: float, depth: float, max_transpiration: float, water_distro_parameter: float) float#

Calculate the amount of maximum amount water that can possibly be taken up by the plant under ideal conditions.

Parameters#

root_depthfloat

Current depth of root roots (mm).

depthfloat

Depth from the soil surface (mm).

max_transpirationfloat

Maximum transpiration possible for the plant during the current day (mm).

water_distro_parameterfloat

Water use distribution parameter (unitless).

Returns#

waterfloat

Maximum amount of water potentially taken up by the plant (mm).

References#

SWAT 5:2.2.1

_abc_impl = <_abc._abc_data object>#