Spaces:
Runtime error
Runtime error
File size: 2,405 Bytes
542edf7 e8721da ec9d9e0 e8721da ec9d9e0 e8721da 542edf7 ec9d9e0 542edf7 ec9d9e0 e8721da 542edf7 e8721da 542edf7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
from forecast import get_forecast_data
from utils.soil_utils import get_soil_properties
def calculate_ETx(Kc, ETo):
"""
Calculate the maximum evapotranspiration (ETx) using the crop coefficient (Kc) and reference evapotranspiration (ETo).
Parameters:
Kc (float): Crop coefficient
ETo (float): Reference evapotranspiration (mm)
Returns:
float: Maximum evapotranspiration (ETx) in mm
"""
ETx = Kc * ETo
return ETx
def calculate_ETa(ETx, soil_moisture, field_capacity, wilting_point):
"""
Calculate the actual evapotranspiration (ETa) using the maximum evapotranspiration (ETx), soil moisture, field capacity, and wilting point.
Parameters:
ETx (float): Maximum evapotranspiration (mm)
soil_moisture (float): Current soil moisture content (%)
field_capacity (float): Field capacity of the soil (%)
wilting_point (float): Wilting point of the soil (%)
Returns:
float: Actual evapotranspiration (ETa) in mm
"""
if soil_moisture > field_capacity:
ETa = ETx
elif soil_moisture < wilting_point:
ETa = 0
else:
ETa = ETx * ((soil_moisture - wilting_point) / (field_capacity - wilting_point))
return ETa
def calculate_yield_projection(Yx, ETx, ETa, Ky):
"""
Calculate the agricultural yield projection using the FAO water production function.
Parameters:
Yx (float): Maximum yield (quintal/ha)
ETx (float): Maximum evapotranspiration (mm)
ETa (float): Actual evapotranspiration (mm)
Ky (float): Yield response factor
Returns:
float: Projected yield (quintal/ha)
"""
Ya = Yx * (1 - Ky * (1 - ETa / ETx))
return round(Ya, 2)
def get_yield_forecast(latitude: float, longitude: float, scenario: str = "pessimist", shading_coef: float = 0.):
monthly_forecast = get_forecast_data(latitude, longitude, scenario=scenario, shading_coef=shading_coef)
Kc, Ky = get_cultural_coefficients()
Yx = get_maximum_theoretical_yield()
soil_properties = get_soil_properties(latitude, longitude)
ETo = monthly_forecast["et0"]
ETx = calculate_ETx(Kc, ETo)
ETa = calculate_ETa(
ETx,
soil_properties["soil_moisture"],
soil_properties["field_capacity"],
soil_properties["wilting_point"],
)
projected_yield = calculate_yield_projection(Yx, ETx, ETa, Ky)
return projected_yield
|