Google Earth Engine implementation of the GridET model (https://github.com/claytonscottlewis/GridET) reference ET calculations.
Currently, there is only support for computing hourly grass and alfalfa reference ET from NLDAS hourly images using the "eto" and "etr" functions respectively. These functions take a single NLDAS image as input and can be mapped over the NLDAS image collection (see the example below) or called directly. Support for other meteorology image collections or reference ET calculations may be added in the future.
Example of computing NLDAS based grass reference ET (ETo) for a single day (0-23 UTC) by mapping the "gridet.nldas.eto" function over the NLDAS image collection.
import gridet.nldas
eto_img = (
ee.ImageCollection('NASA/NLDAS/FORA0125_H002')
.filterDate('2017-07-01', '2027-07-02')
.map(gridet.nldas.eto)
.sum()
.rename(['eto'])
.set({'system:time_start': ee.Date('2017-07-01').millis()})
)
The GridET code is currently hardcoded to use the precomputed ancillary assets listed below. These assets cover the Utah watershed area used in the original GridET program. These assets are in a NAD83 Lambert Conformal Conic projection with a cell size of 1760 ft (~536 m).
The NASADEM asset (NASA/NASADEM_HGT/001) was used to generate the elevation grid using the provided "ancillary/gridet_utah_ancillary_assets.py" tool. The resulting elevation grid is likely slightly different than the one that is generated by the GridET tool using the NED images, but this has not been checked yet.
Type | Asset ID |
---|---|
elevation | projects/openet/assets/reference_et/utah/gridet/ancillary/elevation |
latitude | projects/openet/assets/reference_et/utah/gridet/ancillary/latitude |
longitude | projects/openet/assets/reference_et/utah/gridet/ancillary/longitude |
slope | projects/openet/assets/reference_et/utah/gridet/ancillary/slope |
aspect | projects/openet/assets/reference_et/utah/gridet/ancillary/aspect |
The code is currently separated into four modules (model, nldas, solar, and utils), but this was mostly done to simplify testing and may be consolidated or further split in the future.
Most of the internal variables were renamed to follow the Python PEP8 convention of using all lower case for variable. Variables that used greek letter symbols were spelled out. The function names are still the original camel case, but will likely be modified in the future. The function doc strings have not been modified, but will likely be reformated in the future. As much as possible, the original comments have been left in place.
The GEE implementation has a few differences with the original VB.net version that are all some variation of not being able to mimic the exact flow of calculation at the NLDAS scale, interpolation to the GridET scale, and then additional calculation. In initial testing these code differences do not seem to significantly change the output values, but additional testing is planned.
- TranslateRs is being applied after spatially interpolating the NLDAS grid cell Ra and Rs to the GridET grid.
- Air temperature is computed directly at the GridET scale using the spatially interpolated air temperature and delta Z, instead of computed for each NLDAS grid cell and then interpolating.
- Pressure is computed directly at the GridET scale from the spatially interpolated delta Z, instead of being computed for each NLDAS grid cell and then interpolating.
Lewis, C. & Allen, L. (2017). Potential crop evapotranspiration and surface evaporation estimates via a gridded weather forcing dataset. Journal of Hydrology, 546, 450-463. https://doi.org/10.1016/j.jhydrol.2016.11.055
Lewis, C., Geli, H., Neale, C. (2014). Comparison of the NLDAS Weather Forcing Model to Agrometeorological Measurements in the western United States. Journal of Hydrology, 510 385-392. https://doi.org/10.1016/j.jhydrol.2013.12.040