-
Notifications
You must be signed in to change notification settings - Fork 30
4. Synthetic Rating Curve Enhancements
To derive spatially-explicit inundation outputs, Inundation Mapping uses synthetically derived rating curves to relate an input flow value to its corresponding HAND stage value for a given reach. Synthetic rating curves (SRC) are calculated using the HAND terrain data to compute channel/floodplain geometry including reach-averaged variables for wetted perimeter, hydraulic radius, and cross-section area. Next, Manning's equation is calculated at 0.5ft intervals to derive a reach-averaged SRC for every unique flowline.
There are numerous known biases and shortcomings with the baseline SRC generation in Inundation Mapping including unaccounted for bathymetry volume, simplified Manning's roughness application, and terrain hydroconditioning artifacts. The following Inundation Mapping SRC post-processing modules attempt to correct or compensate for some of these known issues.
Many complex problems arise when attempting to implement the HAND FIM Inundation Process against real world data. The inundation mapping process is not a hydrologic model, rather it is a data driven real time forecast dialed to previous flood events. This means that while the inundation process uses geo-morphological and flow data, it is not the goal of the inundation team to develop a hydrologic model that incorporates real values for Manning's Roughness Coefficient. The Manning's Roughness Coefficient is used rather as a dial to calibrate the HAND FIM predicted stage against truth data. Though the Manning's Roughness Coefficient does not represent real world friction in the FIM model, it has been shown that assigning different Manning's Roughness Coefficient to both flow through a river channel and flow "out of banks" enhances HAND FIM performance.
Two difficulties arise when attempting to apply variable roughness coefficients to in-bank and out-of-bank flow. Those two problems are as such:
-
The first problem is where to assign the break point between in-bank and out-of-bank.
- Keep in mind the only river channel data available to the model is 10-m surface elevation data, which does not elucidate the river bed geometry (bathymetry).
- A method for correct "bankfull identification" is ongoing and underway.
-
The second problem is the actual assignment of variable roughness values, and how to incorporate that into the workflow.
- The goal of this process is to adjust the Manning's N per stage such that SRC discharge-stage pairs more closely align with the input observations, thus yielding more accurate interpolations of the stage with a given discharge value and ultimately more accurate inundation mapping
- Several techniques have been tried, and while good, currently none are release-ready.
- Development of Variable Roughness Coefficient is ongoing and underway.
Figure 1: Synthetic cross-section subdivision with variable roughness coefficients and corresponding SRC.
The United States Geological Survey maintains a database of rating curves (stage vs. discharge) for 9,000+ gage locations across the country. These site-specific rating curves, based on measurements and observations, can be used to improve the accuracy of the default HAND synthetic rating curves. We have developed a workflow to link the database of USGS rating curves with the Inundation Mapping
HAND attributes (i.e. crosswalk USGS gage locations to the corresponding FIM HydroID catchment and HAND value). The following steps summarize the workflow applied in src/src_adjust_usgs_rating.py
:
- Read in USGS rating curve dataset from csv (created by
tools/rating_curve_get_usgs_curves.py
) and convert water surface elevation (NAVD88 elevation) from feet to meters - Read in the aggregate USGS elevation crosswalk table from the HUC fim directory (csv files produced in
src/usgs_gage_crosswalk.py
) - this contains the DEM elevation for the thalweg pixel nearest to the USGS gage location - Calculate the HAND value at each USGS gage location using the USGS WSE values (USGS HAND = USGS water surface elevation - DEM elevation at the channel thalweg)
- Ingest the NWM recurrence flows csv file (2yr, 5yr, 10yr, 25yr, 50yr and 100yr intervals) and convert discharge from cms to cfs
- Perform a lookup to find the closest matching SRC discharge value to each NWM recurrence flow values
- Create a pandas dataframe with crosswalked USGS flow and NWM recurrence flow and assign metadata attributes
- Log any significant anomalies (e.g. large variances or negative HAND values) between the NWM flow value and closest USGS rating flow
After generating the crosswalked rating curve dataframe, the SRC adjustments (optimized roughness coefficient and discharge) are computed - see Adjusting the Synthetic Rating Curves section below.
- Inputs: USGS rating curve dataset (csv), NWM flow recurrence interval dataset (csv), and FIM output directory/files
- Outputs: dataframe containing
location_id
,hydroid
,feature_id
,huc
,hand
,discharge_cms
,nwm_recur_flow_cms
,nwm_recur
,layer
Figure 2: Conceptual figure showing a USGS gage rating curve and adjusted HAND synthetic rating curve (SRC).
Detailed hydrologic and hydraulic modeling studies provide another source of “truth” data that can be used to inform the Inundation Mapping
SRCs. The NWS AHPS Inundation Mapping Program and the USGS Flood Inundation Mapping Program both provide highly detailed flood inundation map libraries for ~200 locations across the country. These datasets provide a flood inundation spatial boundary associated with a specific discharge. We processed the inundation polygons into a boundary node point layer for each location and each unique discharge value (typically the NWS action, minor, moderate, and major flood thresholds). The point dataset provides a means to sample the corresponding HAND elevation to reproduce the desired water surface elevation using each catchment’s SRC. The following steps summarize this database creation workflow applied in src/src_adjust_spatial_obs.py
:
- Ingest the user provided points layer and define the coordinate reference system
- Perform a spatial join between the point layer and HUC watershed boundary polygons
- Define the relevant HUC file paths to hydroTable.csv, HAND raster, catchments raster, and synthetic rating curve JSON.
- Clip the points dataframe to the huc catchments polygons
- Use the point geometry to perform point raster value attribution (i.e. compute the HAND catchment raster pixel values associated with each point)
- Check that there are valid observations for each HUC/catchment and output a pandas dataframe to pass to update_rating_curve
- Log any data anomalies or discrepancies
Upon generating the crosswalked rating curve dataframe, the SRC adjustments (modified roughness coefficient and discharge) are computed via Manning’s equation - see Adjusting the Synthetic Rating Curves section below. Note that this spatial dataset aims to provide the framework for additional “observation” data streams in the future (e.g. field reports of FIM extent reported during/after an event).
- Inputs: .gpkg layer containing observed/truth FIM extent points and associated flow value, HUC polygon boundaries, and FIM output directory/files
- Outputs: dataframe containing
hydroid
,flow
,submitter
,coll_time
,flow_unit
,layer
, andmedian HAND value
Figure 3: Conceptual example of converting a flood extent boundary polygon (left) into a point database with attribute data (right).
After creating the dataframe of benchmark water surface elevation and associated discharge, the SRCs are recomputed using the workflow below. The current approach to adjusting SRCs relies on a newly calculated roughness coefficient. Note that the adjusted roughness value is a constant value (constant for all stage values within a given hydroID SRC), and the adjusted value replaces any previous roughness values stored in the hydroTable.csv
.
src_roughness_optimization.py
workflow:
- Read in each HUC
hydroTable.csv
- Loop through the user provided benchmark database (HAND value and discharge) and locate the corresponding SRC geometry variables (i.e. cross-section area, slope, wetted perimeter) for the closest matching stage value
- Calculate a new
hydroid_ManningN
variable for each unique input observation using Manning's equation - Create a dataframe to check for erroneous/anomalous roughness coefficient values and log results
- Calculate a median
hydroid_ManningN
to address cases with multiple benchmark entries for a single HydroID catchment - Calculate a median
featureid_ManningN
value per NWM feature_id (propagates the new roughness coefficient to adjoining HydroIDs that share a feature_id) - Create HydroID flowline attributes to traverse the flow network and account for tributaries and water body junctions
- Calculate a
group_ManningN
(average roughness coefficient for adjoining hydroids) and apply values downstream to non-calibrated hydroids (constrained to the first 10km of downstream flowline distance - user can set this distance as an input arg) - Create a variable
adjust_ManningN
by combining the hydroid_ManningN,featid_ManningN
, andgroup_ManningN
variables (prioritize in that order) - Rename the original hydroTable variables (e.g.
ManningN
→default_ManningN
) to allow new calculations to use the primary variable name - Merge in previous SRC adjustments (where available) for HydroIDs that do not have a new
adjust_ManningN
value - Calculate a modified
discharge_cms
(Manning’s equation) for locations with a validadjust_ManningN
- Export a new hydroTable.csv and overwrite the previous version
- Update the catchments polygon .gpkg with a joined attribute -
src_calibrated
to identify locations with new roughness coefficient calculations
- Inputs: FIM output directory/files, dataframe containing pre-processed benchmark/truth data
- Outputs: catchments polygon layer (.gpkg) with appended attributes for SRC adjustments field and updated hydroTable.csv with new/modified attributes
Figure 4: Example of pre-calibration (left) and post-calibration (right) agreement rasters using benchmark FIM boundary points to adjust the HAND-derived SRCs.