NOAA-OWP / t-route

Tree based hydrologic and hydraulic routing
Other
44 stars 50 forks source link

Add `to` values into Great Lakes #414

Open jameshalgren opened 3 years ago

jameshalgren commented 3 years ago

In the NWM, the Great Lakes are represented by four synthetic segments: 4800002, 4800004, 4800006, and 4800007.

Because these are not represented in the NHD dataset as such, they do not have an explicit connectivity in the RouteLink dataset for the NWM. We need to add a process in T-route to connect these up so that there is a continuous St. Lawrence network all the way to the headwaters through the lakes.

jameshalgren commented 3 years ago

TL;DR - I think what all this means is that we discard or rename the "synthetic" segments and then go with business as usual.

After some research, it was confirmed that the 'synthetic' segments were initially to make the Great Lakes compatible with WRF-Hydro. But as of NWM v2.1, these flowlines are not used for this (or any other) purpose. The lake inflows are directly linked to the lake outflow flowline, and no 'synthetic' links are necessary. They have no upstream flowlines, nor do they have any contributing catchments. Thus, they can be ignored, or masked out, as needed.

This makes the Great Lakes topologically the same as any of the other reservoirs in the rest of the domain.

The following allows for some diagnostics:

Downloading this file: https://www.nco.ncep.noaa.gov/pmb/codes/nwprod/nwm.v2.1.6/parm/domain/RouteLink_CONUS.nc

wget https://www.nco.ncep.noaa.gov/pmb/codes/nwprod/nwm.v2.1.6/parm/domain/RouteLink_CONUS.nc

... open the file with xarray and convert to a dataset,

import xarray as xr
rld = (xr.open_dataset("RouteLink_CONUS.nc")).to_dataframe()

then running the following commands for the corresponding nodes, segments coded as Lake Superior (including the "synthetic" node):

rld.loc[rld.NHDWaterbodyComID==4800002]

segments pointing to the Lake Superior outlet node (including the "synthetic" node; the "synthetic" node points to the outlet in each case):

rld[rld.to.isin(rld.loc[rld.to==904020529].to.values)]

segments pointing to any Lake Superior node (including other lake nodes and the dummy node)

rld[rld.to.isin(rld.loc[rld.NHDWaterbodyComID==4800002].to.values)]

... The following are the inflows/segments for each Great Lake...

Lake Reservoir ID Outflow link Lake Segments Inflows to outlet segment Total pointing to
Superior 4800002 904020529 14 931 956
Michigan-Huron 4800004 13196034 30 1224 1259
Lake Nipigon 4800001 842 852
St. Claire 4800005 13190242 274 1 323
Erie 4800006 166764152 2 354 355
Ontario 4800007 15502727 4 381 385
jameshalgren commented 3 years ago

@kmsampson We should make sure we know whether these other lakes (Nipigon and St. Claire) in the same series are valid or if they need some kind of handling.