Configuration

Running FootNet requires spatial domain, list of receptors, and meteorological data inputs.

Spatial Domain

The spatial domain requires 1D arrays of latitudes and longitudes with units of degrees (convert longitudes from 0o - 360o to -180o - 180o scale). We used spatial_resolution=1/120 for input meteorology and footprint resolutions.

lats = np.arange(lat0, latn, spatial_resolution)
lons = np.arange(lon0, lonn, spatial_resolution)

HRRR lite files

Python doesn't support efficient data loading of the original HRRR files, it takes very large time to load those files. We recommend using HRRR lite files which are preprocessed to be more efficient for loading. The HRRR lite files are netcdf files only containing met fields required by the FootNet for efficient data loading. The data loading from lite files is 8-10 time faster than the HRRR original data.

Please use this script to convert original HRRR files to HRRR lite files.

However, if user wants to use original HRRR files, they can make the following changes in the get_met_column_data_lite of Column Meteorology or get_met_surface_data_lite functions of SurfaceMeteorology objects:

Replace: fh = nc.Dataset(h3rfile)
With: fh = xr.open_dataset(h3rfile, engine="pseudonetcdf") # This may require you to install pseudonetcdf package through pip install pseudonetcdf.

Note: You may also have to make a few more changes based on the data structure of your meteorology. For example, updating get_hrrr_file() function to correctly access meteorology files. We used different directories for different years to store meteorology files. You may have to change this function if your data files are present in a single directory instead.

The HRRR data contains x-y coordinates for each grid cell. We use HRRR_lon_lat.npz to map these coordinates to lat-lon space.

Defining Receptors

Defining a receptor requires timestamp of measurement (datetime object), and geographical coordinates (latitude and longitude).

receptor = [datetime.datetime(yyyy, mm, dd, hh), receptor_lon, receptor_lat]

FootNet requires a list of receptors compute footprints, as such multiple receptors can be provided as a list of lists

receptor1 = [datetime.datetime(yyyy, mm, dd, hh)1, receptor_lon1, receptor_lat1],
receptor2 = [datetime.datetime(yyyy, mm, dd, hh)2, receptor_lon2, receptor_lat2],
receptor3 = [datetime.datetime(yyyy, mm, dd, hh)3, receptor_lon3, receptor_lat3],

receptors_list = [receptor1, receptor2, receptor3]

FootNet post-processing

The post-processing of FootNet outputs is required since FootNet training was not done in the footprint space. The post-processing converts the FootNet output to footprint space.

epsilon = 1e-3 # Surface FootNet
epsilon = 1e-4 # Column FootNet