AquaSEBS is a Python implementation of the Abdelrady et al. (2016) and Fisher et al. (2023) methodology for estimating water surface evaporation and energy balance components over freshwater and saline water bodies using satellite remote sensing data and meteorological inputs. The package implements the AquaSEBS (Aquatic Surface Energy Balance System) model, which combines Abdelrady et al.'s equilibrium temperature model for water heat flux with Fisher et al.'s adaptation for complete evaporation estimation using the Priestley-Taylor approach.
Gregory H. Halverson (they/them)
[email protected]
NASA Jet Propulsion Laboratory 329G
This package implements the Abdelrady et al. (2016) and Fisher et al. (2023) combined methodology for physics-based estimation of:
- Latent heat flux (evaporation) using Priestley-Taylor equation (Fisher et al., 2023 adaptation)
- Water heat flux using equilibrium temperature model (Abdelrady et al., 2016)
- Net radiation components using Verma et al. method
The implementation follows the Abdelrady et al. (2016) formulations for water heat flux exactly, combined with Fisher et al. (2023) adaptations for complete evaporation estimation, accounting for the effects of water salinity on evaporation rates.
- Combined methodology: Integrates Abdelrady et al. (2016) water heat flux with Fisher et al. (2023) evaporation framework
- Faithful implementation: Exact reproduction of Abdelrady et al. (2016) equations and coefficients for water heat flux
- Remote sensing optimized: Follows Fisher et al. (2023) adaptations for satellite-based evaporation estimation
- Multi-source data integration: Combines satellite remote sensing data with meteorological inputs
- Salinity correction: Implements Turk (1970) salinity reduction factor as specified in original methodology
- Automated data retrieval: Integrates with GEOS-5 FP and NASADEM for meteorological and topographic data
- Flexible input handling: Supports both raster and array data formats
- Water masking: Automatically identifies water bodies using NASADEM surface water body extent
This package is a faithful Python implementation combining the Abdelrady et al. (2016) water heat flux methodology with the Fisher et al. (2023) remote sensing evaporation approach. Abdelrady et al. developed the equilibrium temperature model for water heat flux calculation, while Fisher et al. adapted and integrated this with the Priestley-Taylor equation for complete evaporation estimation from satellite data. The water heat flux equations, coefficients, and computational steps follow the original Abdelrady et al. (2016) publication exactly, while the overall evaporation framework follows Fisher et al. (2023).
The surface energy balance for water bodies follows the fundamental equation:
Rn = LE + H + W (Eq. 1, Abdelrady et al., 2016)
Where:
- Rn = Net radiation (W·m⁻²) - total energy available at the water surface
- LE = Latent heat flux (W·m⁻²) - energy used for evaporation
- H = Sensible heat flux (W·m⁻²) - energy transferred to the atmosphere via convection
- W = Water heat flux (W·m⁻²) - energy stored in or released from the water body
The water heat flux is calculated using the equilibrium temperature model (ETM) as developed by Abdelrady et al. (2016), Equations 8-13 and integrated into the complete evaporation framework by Fisher et al. (2023). This approach, originally developed by Edinger et al. (1968) and adapted for remote sensing applications by Abdelrady et al., recognizes that there exists a theoretical equilibrium temperature where net heat exchange equals zero. Fisher et al. demonstrated how to combine this water heat flux calculation with Priestley-Taylor evapotranspiration for complete energy balance estimation. The implementation follows the exact formulations from both papers.
Tn = 0.5 × (WST - Td) (Eq. 8, Abdelrady et al., 2016)
Where:
- Tn = Temperature difference parameter (°C)
- WST = Water surface temperature (°C) - measured from thermal infrared satellite data
- Td = Dew point temperature (°C) - temperature at which air becomes saturated
Scientific Reasoning: The temperature difference between water surface and dew point drives evaporation. The factor of 0.5 represents an empirical relationship that accounts for the non-linear response of evaporation to temperature gradients.
η = 0.35 + 0.015 × WST + 0.0012 × Tn² (Eq. 9, Abdelrady et al., 2016)
Where:
- η = Evaporation efficiency (dimensionless)
- 0.35 = Baseline evaporation efficiency (dimensionless) - minimum efficiency under neutral conditions
- 0.015 = Temperature dependence coefficient (°C⁻¹) - linear temperature sensitivity
- 0.0012 = Non-linear temperature effect coefficient (°C⁻²) - captures enhanced efficiency at high temperatures
Scientific Reasoning: Evaporation efficiency increases with water temperature and atmospheric stability. The baseline value represents minimum efficiency under neutral conditions, while the temperature terms account for enhanced molecular activity and vapor pressure differences at higher temperatures.
S = 3.3 × u (Eq. 10, Abdelrady et al., 2016)
Where:
- S = Scaled wind speed factor (dimensionless) - wind enhancement of evaporation
- u = Wind speed at reference height (m/s) - typically measured at 2-10m above surface
- 3.3 = Empirical scaling coefficient (s/m) - derived from field measurements over water bodies
Scientific Reasoning: Wind enhances evaporation by removing saturated air from the water surface and bringing in drier air. The scaling factor converts wind speed into an evaporation enhancement parameter based on field measurements over water bodies.
β = 4.5 + 0.05 × WST + (η + 0.47) × S (Eq. 11, Abdelrady et al., 2016)
Where:
- β = Thermal exchange coefficient (W·m⁻²·°C⁻¹) - overall heat transfer efficiency
- 4.5 = Base thermal conductance (W·m⁻²·°C⁻¹) - minimum heat transfer under calm conditions
- 0.05 = Temperature sensitivity coefficient (W·m⁻²·°C⁻²) - enhanced transfer at higher temperatures
- 0.47 = Wind enhancement baseline (dimensionless) - minimum wind effect on thermal exchange
Scientific Reasoning: The thermal exchange coefficient represents the efficiency of heat transfer between water and atmosphere. It increases with temperature (enhanced molecular motion) and wind (improved mixing), with the evaporation efficiency providing additional enhancement.
Te = Td + (SWnet / β) (Eq. 12, Abdelrady et al., 2016)
Where:
- Te = Equilibrium temperature (°C)
- SWnet = Net shortwave radiation (W·m⁻²) - solar energy absorbed by water surface
Scientific Reasoning: The equilibrium temperature represents the theoretical water surface temperature at which net heat exchange would be zero. It increases with available solar energy and decreases with thermal exchange efficiency.
W = β × (Te - WST) (Eq. 13, Abdelrady et al., 2016)
Scientific Reasoning: The water heat flux is proportional to the difference between equilibrium and actual water temperatures. Positive values indicate energy storage in the water body (warming), while negative values indicate energy release (cooling).
The latent heat flux is calculated using the Priestley-Taylor equation, which is well-suited for water surfaces where aerodynamic resistance is minimal:
LE = α × (Δ / (Δ + γ)) × (Rn - W) (Priestley and Taylor, 1972)
Where:
- α = Priestley-Taylor coefficient (1.26 for water surfaces)
- Δ = Slope of saturation vapor pressure curve (kPa/°C)
- γ = Psychrometric constant (0.066 kPa/°C)
- Δ / (Δ + γ) = Energy partitioning factor
Scientific Reasoning: The Priestley-Taylor method assumes that evaporation from water surfaces is primarily energy-limited rather than aerodynamically limited. The coefficient α=1.26 accounts for the enhanced evaporation from free water surfaces compared to land surfaces.
Net radiation is calculated using the Verma et al. method when not provided directly:
Rn = (SWin × (1 - αsurf)) + LWin - LWout
Where:
- SWin = Incoming shortwave radiation (W·m⁻²)
- αsurf = Surface albedo (dimensionless)
- LWin = Incoming longwave radiation (W·m⁻²)
- LWout = Outgoing longwave radiation (W·m⁻²)
For saline water bodies, evaporation is reduced according to Turk (1970):
σ = 1.025 - 0.0246 × exp(0.00879 × S) (Eq. 19, Abdelrady et al., 2016)
Where:
- σ = Salinity reduction factor (dimensionless)
- S = Water salinity (g/L)
Scientific Reasoning: Dissolved salts reduce vapor pressure according to Raoult's law, thereby decreasing evaporation rates. The exponential relationship captures the non-linear effect of increasing salinity concentrations.
-
Abdelrady, A.; Timmermans, J.; Vekerdy, Z.; Salama, M.S. Surface Energy Balance of Fresh and Saline Waters: AquaSEBS. Remote Sens. 2016, 8, 583. https://doi.org/10.3390/rs8070583
-
Fisher, J.B.; Dohlen, M.B.; Halverson, G.H.; Collison, J.W.; Hook, S.J.; Hulley, G.C. Remotely sensed terrestrial open water evaporation. Sci. Rep. 2023, 13, 8217. https://doi.org/10.1038/s41598-023-34921-2
-
Edinger, J.E.; Duttweiler, D.W.; Geyer, J.C. The Response of Water Temperatures to Meteorological Conditions. Water Resour. Res. 1968, 4, 1137–1143.
-
Priestley, C.H.B.; Taylor, R.J. On the Assessment of Surface Heat Flux and Evaporation Using Large-Scale Parameters. Mon. Weather Rev. 1972, 100, 81–92.
-
Turk, L.J. Evaporation of Brine: A field study on the Bonneville Salt Flats, Utah. Water Resour. Res. 1970, 6, 1209–1215.
pip install AquaSEBSgit clone https://github.com/JPL-Evapotranspiration-Algorithms/AquaSEBS.git
cd AquaSEBS
pip install -e .[dev]AquaSEBS requires Python 3.10+ and depends on several specialized packages:
numpy- Numerical computationsrasters- Raster data handlingGEOS5FP- GEOS-5 FP meteorological data accessNASADEM- NASA DEM and surface water datapriestley-taylor- Priestley-Taylor evapotranspiration calculationsECOv002-granules- ECOSTRESS data processing- Additional scientific computing libraries
import numpy as np
from datetime import datetime
from AquaSEBS import AquaSEBS
from rasters import RasterGeometry
# Define study area geometry
geometry = RasterGeometry.from_bounds(
left=-120.0, bottom=35.0, right=-119.0, top=36.0,
pixel_size=0.01 # ~1km resolution
)
# Specify observation time
time_UTC = datetime(2023, 7, 15, 18, 0) # Landsat overpass time
# Water surface temperature (required input)
WST_C = your_water_surface_temperature_data # [°C] Celsius
# Run AquaSEBS model
results = AquaSEBS(
WST_C=WST_C,
geometry=geometry,
time_UTC=time_UTC
)
# Access results
latent_heat = results["LE_Wm2"] # W⋅m⁻²
water_heat_flux = results["W_Wm2"] # W⋅m⁻²# Provide additional meteorological inputs for better accuracy
results = AquaSEBS(
WST_C=water_surface_temperature, # [°C] Water surface temperature
Ta_C=air_temperature, # [°C] Air temperature at 2m height
RH=relative_humidity, # [0-1] Relative humidity fraction
windspeed_mps=wind_speed, # [m/s] Wind speed at reference height
albedo=surface_albedo, # [0-1] Surface reflectance fraction
emissivity=surface_emissivity, # [0-1] Surface thermal emissivity
geometry=geometry,
time_UTC=time_UTC,
water=water_mask, # [boolean] Water body mask
mask_non_water_pixels=True
)from AquaSEBS import water_heat_flux
# Calculate water heat flux component
whf_results = water_heat_flux(
WST_C=water_surface_temperature, # [°C] Water surface temperature
Ta_C=air_temperature, # [°C] Air temperature
Td_C=dew_point_temperature, # [°C] Dew point temperature
windspeed_mps=wind_speed, # [m/s] Wind speed
SWnet=net_shortwave_radiation, # [W/m²] Net shortwave radiation
geometry=geometry,
time_UTC=time_UTC
)
water_heat_flux_Wm2 = whf_results["W_Wm2"] # [W/m²] Water heat flux outputAquaSEBS implements the surface energy balance equation:
Rn = LE + H + W
Where:
- Rn = Net radiation (W·m⁻²)
- LE = Latent heat flux (W·m⁻²) - calculated using Priestley-Taylor
- H = Sensible heat flux (W·m⁻²) - derived as residual
- W = Water heat flux (W·m⁻²) - calculated using equilibrium temperature model
The water heat flux is calculated using the equilibrium temperature model:
W = β (Te - WST)
Where:
- β = Thermal exchange coefficient (W·m⁻²·°C⁻¹)
- Te = Equilibrium temperature (°C)
- WST = Water surface temperature (°C)
For saline water bodies, evaporation is reduced according to:
Es = σ · Efresh
Where σ is the salinity reduction factor based on water salinity concentration.
- Water Surface Temperature (WST_C) [$\text{°C}$]: From thermal infrared satellite data (e.g., Landsat, MODIS, ECOSTRESS)
- Typical range: 0-50°C for natural water bodies
- Accuracy requirement: ±0.5°C for reliable evaporation estimates
- Air Temperature (Ta_C) [$\text{°C}$]: From GEOS-5 FP meteorological data
- Used for psychrometric calculations and dew point estimation
- Relative Humidity (RH) [dimensionless, 0-1]: From GEOS-5 FP
- Converted internally to dew point temperature for ETM calculations
- Wind Speed (windspeed_mps) [$\text{m},\text{s}^{-1}$]: From GEOS-5 FP
- Reference height: 2m above surface
- Enhanced evaporation at speeds >3 m/s
- Surface Albedo [dimensionless, 0-1]: From GEOS-5 FP
- Typical water values: 0.05-0.15 depending on solar angle and conditions
- Incoming Solar Radiation (SWin) [$\text{W},\text{m}^{-2}$]: From GEOS-5 FP
- Used to calculate net shortwave radiation with albedo
- Water Mask [boolean]: From NASADEM Surface Water Body extent
- Identifies water pixels for focused calculations
The AquaSEBS methodology has undergone extensive validation in one of the largest open water evaporation validation studies to date. Fisher et al. (2023) evaluated AquaSEBS against 19 in situ open water evaporation sites from around the world, spanning multiple climate zones and measurement techniques, using both MODIS and Landsat satellite data.
Geographic Coverage:
- 19 validation sites across 7 Köppen-Geiger climate zones
- Measurement techniques: Eddy covariance (11 sites), Bowen ratio energy balance (5 sites), bulk mass transfer (2 sites), floating evaporation pan (1 site)
- Site types: Reservoirs and lakes of varying sizes from around the world
- Climate zones: Humid subtropical, warm-summer humid continental, hot desert, cold semi-arid, hot semi-arid, cold desert, hot-summer humid continental
Data Sources:
- Great Lakes Evaporation Network (GLEN)
- US Bureau of Reclamation's Open Water Evaporation Network (OWEN)
- International research sites from multiple studies
- Data spanning 1986-2019 across various temporal resolutions
When controlling for high wind events (>7.5 m/s mean daily), AquaSEBS demonstrates strong performance:
- Correlation (r²): 0.71
- RMSE: 53.7 W/m² (38% of mean)
- Bias: -19.1 W/m² (13% of mean)
- Sample size: 686 cloud-free MODIS scenes
Daily integration significantly improves accuracy and reduces sensitivity to short-term variations:
MODIS-based estimates:
- Correlation (r²): 0.47
- RMSE: 1.5 mm/day (41% of mean)
- Bias: 0.19 mm/day (1% of mean)
Landsat-based estimates:
- Correlation (r²): 0.56
- RMSE: 1.2 mm/day (38% of mean)
- Bias: -0.8 mm/day (26% of mean)
The methodology shows particular sensitivity to high wind events when evaporation shifts from radiatively-controlled to atmospherically-controlled:
- Without wind filtering: r² = 0.47, RMSE = 84.4 W/m² (62% of mean), Bias = -49.5 W/m² (36% of mean)
- With wind filtering: r² = 0.71, RMSE = 53.7 W/m² (38% of mean), Bias = -19.1 W/m² (13% of mean)
Statistical analysis revealed key factors affecting model accuracy:
- Wind speed: Primary predictor of evaporation error (coefficient: 20.10, p < 0.001)
- Relative humidity: Secondary predictor (coefficient: -1.56, p < 0.001)
- Wind direction: Tertiary predictor (coefficient: 0.14, p = 0.02)
Historical validation results:
- Abdelrady et al. (2016): RMSE 20-35 W/m², 1.5 mm/day (original development study)
- Rodrigues & Costa (2021): RMSE 0.81-1.25 mm/day, r² 0.51-0.65
- This implementation: RMSE 1.2-1.5 mm/day, r² 0.47-0.71
Fisher et al. (2023) benchmarked AquaSEBS against 11 machine learning models to establish performance limits:
- Top ML models: Multilayer Perceptron, Elastic Net, LASSO, Ridge Regression, TensorFlow Neural Network
- Result: No machine learning model significantly outperformed AquaSEBS
- Error prediction: Neural networks achieved r² = 0.74 for predicting model errors
- Conclusion: Remaining errors likely due to measurement uncertainties, forcing data limitations, or scale mismatches rather than model formulation
Current applications:
- NASA ECOSTRESS mission: Operational production of open water evaporation over millions of water bodies
- OpenET platform: Core model for open water evaporation estimation in western United States
- Spatial resolution: Successfully validated from 30m (Landsat) to 1km (MODIS) scales
Recommended accuracy expectations:
- Instantaneous estimates: ±40-60 W/m² depending on wind conditions
- Daily estimates: ±1.2-1.5 mm/day with minimal bias
- Optimal conditions: Calm to moderate wind speeds (<7.5 m/s), clear sky conditions
- Temperature sensitivity: ±0.5°C water surface temperature accuracy required for reliable results
- Spatial considerations: Higher accuracy at 30m Landsat resolution compared to 1km MODIS
Known limitations:
- High wind sensitivity: Reduced accuracy during high wind events (>7.5 m/s daily mean)
- Scale mismatch: Point measurements vs. pixel-scale estimates introduce uncertainty
- Temporal mismatch: Instantaneous satellite vs. daily/monthly ground measurements
- Geographic gaps: Limited validation in polar and high-altitude regions
- Forcing data uncertainty: Meteorological input uncertainties propagate through model
Recommended applications:
- Water resource management: Daily to seasonal evaporation estimates
- Climate studies: Long-term evaporation trends and patterns
- Operational monitoring: Real-time to near-real-time evaporation assessment
- Scientific research: Process understanding and water balance studies
The notebooks/ directory contains Jupyter notebooks demonstrating:
Water Heat Flux.ipynb- Water heat flux calculations and validationWater Masking.ipynb- Water body identification and maskingWater Surface Latent Heat Flux.ipynb- Complete evaporation estimation workflow
Build and test the package using the provided Makefile:
# Install in development mode
make install
# Run tests
make test
# Build distribution
make build
# Clean build artifacts
make cleanMain function for complete energy balance calculation.
Parameters:
WST_C: Water surface temperature [$\text{°C}$] - from thermal infrared satellite datageometry: RasterGeometry object defining study area [spatial coordinates]time_UTC: datetime object for observation time [UTC timestamp]Ta_C: Air temperature [$\text{°C}$] - optional, auto-retrieved from GEOS-5 FP if not providedRH: Relative humidity [dimensionless, 0-1] - optional, auto-retrieved from GEOS-5 FPwindspeed_mps: Wind speed [$\text{m},\text{s}^{-1}$] - optional, auto-retrieved from GEOS-5 FPalbedo: Surface albedo [dimensionless, 0-1] - optional, auto-retrieved from GEOS-5 FPemissivity: Surface emissivity [dimensionless, 0-1] - optional, required for net radiation calculationTd_C: Dew point temperature [$\text{°C}$] - optional, calculated from Ta_C and RH if not providedRn_Wm2: Net radiation [$\text{W},\text{m}^{-2}$] - optional, calculated using Verma method if not providedSWnet: Net shortwave radiation [$\text{W},\text{m}^{-2}$] - optional, calculated from incoming SW and albedowater: Water body mask [boolean array] - optional, auto-retrieved from NASADEM if not provided- Additional parameters for model customization
Returns: Dictionary containing instantaneous energy balance components and derived products:
LE_Wm2: Latent heat flux [$\text{W},\text{m}^{-2}$] - energy used for evaporationW_Wm2: Water heat flux [$\text{W},\text{m}^{-2}$] - energy stored in water bodyRn_Wm2: Net radiation [$\text{W},\text{m}^{-2}$] - total available energyepsilon: Psychrometric parameter [dimensionless] - energy partitioning factorbeta: Thermal exchange coefficient [$\text{W},\text{m}^{-2},\text{°C}^{-1}$] - heat transfer efficiencyTe: Equilibrium temperature [$\text{°C}$] - theoretical zero net heat exchange temperatureTn: Temperature difference parameter [$\text{°C}$] - driving force for evaporationeta: Evaporation efficiency [dimensionless] - atmospheric stability factor- Additional intermediate variables from sub-calculations
Calculate water heat flux using equilibrium temperature model.
Parameters:
WST_C: Water surface temperature [$\text{°C}$] - required inputTa_C: Air temperature [$\text{°C}$] - optional, auto-retrieved from GEOS-5 FPTd_C: Dew point temperature [$\text{°C}$] - optional, calculated from Ta_C and RHwindspeed_mps: Wind speed [$\text{m},\text{s}^{-1}$] - optional, auto-retrieved from GEOS-5 FPSWnet: Net shortwave radiation [$\text{W},\text{m}^{-2}$] - optional, calculated from SWin and albedo- Other parameters similar to
AquaSEBS()function
Returns: Dictionary with water heat flux and intermediate variables:
W_Wm2: Water heat flux [$\text{W},\text{m}^{-2}$] - main outputbeta: Thermal exchange coefficient [$\text{W},\text{m}^{-2},\text{°C}^{-1}$]Te: Equilibrium temperature [$\text{°C}$]Tn: Temperature difference [$\text{°C}$]eta: Evaporation efficiency [dimensionless]S: Scaled wind speed factor [dimensionless]- All input variables passed through for reference
We welcome contributions! Please see our contributing guidelines and submit pull requests to the main repository.
# Clone repository
git clone https://github.com/JPL-Evapotranspiration-Algorithms/AquaSEBS.git
cd AquaSEBS
# Create development environment
mamba create -n AquaSEBS -c conda-forge python=3.10
mamba activate AquaSEBS
# Install in development mode
pip install -e .[dev]
# Run tests
pytestAuthors:
- Gregory H. Halverson - NASA Jet Propulsion Laboratory ([email protected])
- Joshua B. Fisher - Chapman University ([email protected])
Original AquaSEBS methodology:
- Ahmed Abdelrady, Joris Timmermans, Zoltán Vekerdy, Mhd. Suhyb Salama
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
This research was supported by:
- NASA Jet Propulsion Laboratory
- Chapman University
- European Space Agency (ESA) Alcantara project
- University of Twente (ITC)
If you use AquaSEBS in your research, please cite:
@article{abdelrady2016aquasebs,
title={Surface Energy Balance of Fresh and Saline Waters: AquaSEBS},
author={Abdelrady, Ahmed and Timmermans, Joris and Vekerdy, Zolt{\'a}n and Salama, Mhd Suhyb},
journal={Remote Sensing},
volume={8},
number={7},
pages={583},
year={2016},
publisher={MDPI},
doi={10.3390/rs8070583}
}
@article{fisher2023remotely,
title={Remotely sensed terrestrial open water evaporation},
author={Fisher, Joshua B and Dohlen, Mary B and Halverson, Gregory H and Collison, Jared W and Hook, Simon J and Hulley, Glynn C},
journal={Scientific Reports},
volume={13},
number={1},
pages={8217},
year={2023},
publisher={Nature Publishing Group},
doi={10.1038/s41598-023-34921-2}
}