Source code for bakaano.pet

"""Potential evapotranspiration helper functions.

Role: Compute daily PET parameters for VegET.
"""

import numpy as np
from bakaano.utils import Utils

[docs] class PotentialEvapotranspiration: def __init__(self, project_name, study_area, start_date, end_date): """Initialize PET helper for a study area and period. Role: Compute daily PET based on temperature inputs. Args: project_name (str): Working directory for outputs. study_area (str): Path to the basin/watershed shapefile. start_date (str): Start date (YYYY-MM-DD). end_date (str): End date (YYYY-MM-DD). """ self.study_area = study_area self.start_date = start_date self.end_date = end_date self.uw = Utils(project_name, self.study_area) self.uw.get_bbox('EPSG:4326')
[docs] def compute_PET(self, day_pet_params, tan_lat, cos_lat, sin_lat, doy): """Compute daily potential evapotranspiration (Hargreaves-style). Args: day_pet_params (np.ndarray): Daily PET parameters array. tan_lat (np.ndarray): Tangent of latitude grid (radians). cos_lat (np.ndarray): Cosine of latitude grid (radians). sin_lat (np.ndarray): Sine of latitude grid (radians). doy (int): Day of year (1-366). Returns: np.ndarray: PET array for the day. """ p2 = 1 + 0.033 * np.cos((2 * np.pi * doy) / 365) p3 = 0.409 * np.sin(((2 * np.pi * doy) / 365) - 1.39) # grid-based radiation terms (only 1 heavy operation) p4 = np.arccos(-tan_lat * np.tan(p3)) # only heavy grid-operation per day p5 = sin_lat * np.sin(p3) p6 = cos_lat * np.cos(p3) Ra = ((24 * 60) / np.pi) * 0.0820 * p2 * ((p4 * p5) + p6 * np.sin(p4)) this_et = day_pet_params * Ra return this_et