PET Calculation
Potential Evapotranspiration (PET) is a crucial component of hydrological modeling. MarrmotFlow provides multiple methods for calculating PET from meteorological data.
Overview
PET represents the amount of water that would be evaporated and transpired if there were sufficient water available. MarrmotFlow calculates PET automatically based on your forcing data and the specified method.
Available Methods
Penman-Monteith (Default)
The Penman-Monteith method is the recommended approach and is used by default:
workflow = MARRMOTWorkflow(
pet_method="penman_monteith", # Default method
# ... other parameters
)
Advantages: - Physically-based approach - Accounts for energy balance and aerodynamic components - Recommended by FAO for reference evapotranspiration
Data requirements: - Temperature (required) - Additional meteorological variables (when available):
Solar radiation
Wind speed
Relative humidity
Hamon Method
A temperature-based empirical method:
workflow = MARRMOTWorkflow(
pet_method="hamon",
# ... other parameters
)
Advantages: - Simple implementation - Requires only temperature data - Suitable when limited meteorological data is available
Limitations: - Less physically-based - May be less accurate in certain climates
Method Configuration
Basic Configuration
Specify the PET method when creating a workflow:
from marrmotflow import MARRMOTWorkflow
# Penman-Monteith (recommended)
workflow_pm = MARRMOTWorkflow(
name="PenmanMonteith_Analysis",
pet_method="penman_monteith",
# ... other parameters
)
# Hamon method
workflow_hamon = MARRMOTWorkflow(
name="Hamon_Analysis",
pet_method="hamon",
# ... other parameters
)
Data Requirements by Method
Penman-Monteith Requirements
Minimum requirements: - Temperature (mandatory)
Additional data (when available):
# Extended forcing variables for Penman-Monteith
forcing_vars = {
"precip": "precipitation",
"temp": "temperature", # Required
"rad": "solar_radiation", # Optional but recommended
"wind": "wind_speed", # Optional
"rh": "relative_humidity" # Optional
}
forcing_units = {
"precip": "mm/day",
"temp": "celsius",
"rad": "W/m2", # or "MJ/m2/day"
"wind": "m/s",
"rh": "percent" # or fraction (0-1)
}
Hamon Requirements
Minimum requirements: - Temperature (mandatory)
# Minimal configuration for Hamon
forcing_vars = {
"precip": "precipitation",
"temp": "temperature" # Only temperature required
}
Climate Considerations
Method Selection by Climate
Choose PET methods based on climate characteristics:
def select_pet_method(climate_type, data_availability):
"""Select appropriate PET method based on climate and data."""
if data_availability == "full":
return "penman_monteith"
elif data_availability == "temperature_only":
if climate_type in ["arid", "semi_arid"]:
# Hamon may overestimate in arid regions
return "penman_monteith" # Use with temperature only
else:
return "hamon"
else:
return "penman_monteith" # Default
# Usage
pet_method = select_pet_method("temperate", "full")
workflow = MARRMOTWorkflow(
pet_method=pet_method,
# ... other parameters
)
Regional Calibration
PET methods may need regional calibration:
# Regional considerations for PET calculation
regional_configs = {
"mediterranean": {
"method": "penman_monteith",
"note": "High radiation, consider crop coefficients"
},
"tropical": {
"method": "penman_monteith",
"note": "High humidity affects calculations"
},
"arctic": {
"method": "hamon",
"note": "Limited radiation, temperature-based methods suitable"
},
"continental": {
"method": "penman_monteith",
"note": "Large temperature variations, full method recommended"
}
}
PET Calculation Workflow
Internal Processing
MarrmotFlow handles PET calculation internally:
# PET is calculated automatically during workflow execution
workflow = MARRMOTWorkflow(
name="AutoPET",
cat="catchments.shp",
forcing_files="climate_data.nc",
forcing_vars={"precip": "precipitation", "temp": "temperature"},
pet_method="penman_monteith"
)
# PET values will be computed and used in model runs
# No explicit PET calculation call needed
Location-Specific Calculations
PET calculations account for geographic location:
# Geographic factors automatically considered:
# - Latitude (for solar radiation estimation)
# - Elevation (for atmospheric pressure)
# - Time zone (for solar time calculations)
workflow = MARRMOTWorkflow(
# Geographic information from catchment data
cat="catchments_with_elevation.shp", # Should include elevation
forcing_time_zone="UTC",
model_time_zone="America/Vancouver", # Local time zone
pet_method="penman_monteith",
# ... other parameters
)
Advanced PET Configuration
Custom PET Data
If you have pre-calculated PET data:
# Include PET in forcing variables (future feature)
forcing_vars = {
"precip": "precipitation",
"temp": "temperature",
"pet": "potential_evapotranspiration" # Pre-calculated PET
}
# When PET is provided, it may override method calculation
# (Check current implementation for this feature)
Quality Assessment
PET Validation
Validate calculated PET values:
import numpy as np
def validate_pet_estimates(temperature, pet_values):
"""Basic validation of PET estimates."""
# PET should be positive
negative_pet = np.sum(pet_values < 0)
if negative_pet > 0:
print(f"Warning: {negative_pet} negative PET values")
# PET should generally correlate with temperature
correlation = np.corrcoef(temperature, pet_values)[0, 1]
print(f"Temperature-PET correlation: {correlation:.3f}")
# Reasonable annual totals (varies by climate)
annual_pet = np.sum(pet_values) # Assuming daily values
print(f"Annual PET: {annual_pet:.1f} mm")
return {
"negative_values": negative_pet,
"temp_correlation": correlation,
"annual_total": annual_pet
}
Comparison Between Methods
Compare different PET methods:
# Create workflows with different methods
methods = ["penman_monteith", "hamon"]
workflows = {}
for method in methods:
workflows[method] = MARRMOTWorkflow(
name=f"PET_Comparison_{method}",
cat="catchments.shp",
forcing_files="climate_data.nc",
forcing_vars={"precip": "precipitation", "temp": "temperature"},
pet_method=method
)
# Compare results after running workflows
# (Implementation depends on output handling)
Best Practices
Use Penman-Monteith when possible - more physically-based and accurate
Consider data availability when selecting methods
Account for climate characteristics in method selection
Validate PET estimates against known values or other methods
Document method choice and rationale
Consider regional calibration for improved accuracy
Test sensitivity to different PET methods in your analysis
Common Issues and Solutions
High PET Values
If PET values seem unreasonably high:
# Check input data quality
# - Temperature units (should be Celsius)
# - Solar radiation units and values
# - Geographic coordinates accuracy
Low PET Values
If PET values seem unreasonably low:
# Check for:
# - Missing or incorrect meteorological data
# - Wrong latitude/longitude in catchment data
# - Incorrect time zone specifications
Method Comparison
When methods give very different results:
# Expected differences:
# - Penman-Monteith typically higher in arid regions
# - Hamon may be lower in high-radiation environments
# - Both should show similar seasonal patterns
Troubleshooting
Check input data units - especially temperature (must be Celsius for internal calculations)
Verify geographic coordinates - latitude affects solar radiation calculations
Confirm time zones - important for solar time calculations
Validate forcing data quality - missing or extreme values affect PET
Compare with literature values - check if results are reasonable for your region