-
Notifications
You must be signed in to change notification settings - Fork 22
ADCIRC OWI NetCDF File Format
Oceanweather Inc. (OWI) NetCDF Meteorological Input Files
A major source of error in ADCIRC can come from the accuracy and representation of the wind and pressure fields. In order to allow ADCIRC access to high quality and efficiently stored inputs the following features were added to the existing NWS12 functionality for the newer NetCDF version (NWS13).
Example of grid domains for multiple independent wind/pressure overlays, including storm-following.
- Moving storm-centered grids
- Grids that can change size
- Curvilinear grids
- Arbitrary # of grid overlays
- New ADCIRC moving interpolation code
- Arbitrary & irregular timesteps
- Multi-resolution representation of tropical cyclone wind fields
- Be able to introduce additional meteorological parameters using the same format/NWS input
- Possibility to include wind stresses?
- Alternative reference heights?
- Ice information?
- Rainfall?
This description assumes some familiarity with NetCDF, HDF or other similar self-describing binary file formats, and in particular features like "groups" available in HDF5 and NetCDF4. Understanding of NetCDF conventions like Climate Forecast (CF) may also be helpful. For more information about NetCDF please visit the links below.
- https://www.unidata.ucar.edu/software/netcdf/
- https://www.hdfgroup.org/
- https://cfconventions.org/
- https://github.com/Unidata/netcdf4-python
- https://github.com/pydata/xarray
NetCDF4 File contents:
- Group(s) – 1 group per grid or overlay
- Variables – U10/V10, PSFC
- Dimensions – time, yi, xi
- Attributes – grid rank/priority
- group_order: space separated list of group names reflecting their appropriate rank/order
- conventions: should include “OWI-NWS13“ (Climate Forecast conventions (CF) seemingly don’t support NC groups)
- rank: integer representing the order of overlay/precedence in application to nodes
- time – length of time dimension
- yi – number of rows in spatial grid description
- xi – number of columns in spatial grid description
- U10 (time, yi, xi), U-component of 10m WS (m/s)
- V10 (time, yi, xi), V-component of 10m WS (m/s)
- PSFC (time, yi, xi), Surface Pressure (mb)
- lon (yi, xi) or (time, yi, xi), Longitude in Decimal Degrees
- lat (yi, xi) or (time, yi, xi), Latitude in Decimal Degrees
- time (time), Datetime-number with units of “minutes from YYYY-mm-dd HH:MM:SS”
- clon and clat (time), optional storm center coordinates for Powell drag
// global attributes: :group_order = "Main JPM0135" ; :institution = "Oceanweather Inc. (OWI)" ; :conventions = "CF-1.6 OWI-NWS13" ;
group: Main { dimensions: yi = 211 ; xi = 221 ; time = 133 ; variables: float lon(yi, xi) ; lon:_FillValue = NaNf ; lon:units = "degrees_east" ; lon:standard_name = "longitude" ; lon:axis = "X" ; lon:coordinates = "time lat lon" ; float lat(yi, xi) ; lat:_FillValue = NaNf ; lat:units = "degrees_north" ; lat:standard_name = "latitude" ; lat:axis = "Y" ; lat:coordinates = "time lat lon" ; int64 time(time) ; time:units = "minutes since 1990-01-01T01:00:00" ; time:calendar = "proleptic_gregorian" ; float U10(time, yi, xi) ; U10:_FillValue = NaNf ; U10:units = "m s-1" ; U10:coordinates = "time lat lon" ; float V10(time, yi, xi) ; V10:_FillValue = NaNf ; V10:units = "m s-1" ; V10:coordinates = "time lat lon" ; float PSFC(time, yi, xi) ; PSFC:_FillValue = NaNf ; PSFC:units = "mb" ; PSFC:coordinates = "time lat lon" ; // group attributes: :rank = 1 ; } // group Main
group: JPM0135 { dimensions: time = 133 ; yi = 501 ; xi = 501 ; variables: int64 time(time) ; time:units = "minutes since 1990-01-01T01:00:00" ; time:calendar = "proleptic_gregorian" ; float lat(time, yi, xi) ; lat:_FillValue = NaNf ; lat:units = "degrees_north" ; lat:standard_name = "latitude" ; lat:axis = "Y" ; lat:coordinates = "time lat lon" ; float lon(time, yi, xi) ; lon:_FillValue = NaNf ; lon:units = "degrees_east" ; lon:standard_name = "longitude" ; lon:axis = "X" ; lon:coordinates = "time lat lon" ; float U10(time, yi, xi) ; U10:_FillValue = NaNf ; U10:units = "m s-1" ; U10:coordinates = "time lat lon" ; float V10(time, yi, xi) ; V10:_FillValue = NaNf ; V10:units = "m s-1" ; V10:coordinates = "time lat lon" ; float PSFC(time, yi, xi) ; PSFC:_FillValue = NaNf ; PSFC:units = "mb" ; PSFC:coordinates = "time lat lon" ; // group attributes: :rank = 2 ; } // group JPM0135 }
- Decoupling the yi/xi dimensions from lat/lon allows lat and lon to be 2-d arrays by depending on both dimensions
- Regular grids and Curvilinear grids
- Non-evenly spaced grids as long as they can be expressed in a 2-d "mesh-grid"
- Grids that change spatial resolution or position in time (but have consistent yi/xi array size)
- Each group/sub-grid can define the timesteps independently, including start and stop times
- Fill Value (and NetCDF packing/compression), and ieee nan floats supported
WTIMINC: configurable grid-to-mesh interpolation timestep in seconds, separate from the input data timesteps. If the file contains storm-following grids, there may be some utility in setting this finer than the input timestep(s).
&owiWindNetcdf fort.15 namelist with all inputs quoted as strings
- NWS13ColdStartString: required cold start time of simulation formatted as 'YYYYMMDD.HHMMSS'
- NWS13WindMultiplier: optional wind speed multiplier (DWM from NWS12)
- NWS13File: optional file name for netCDF file ( fort.22.nc default )
- NWS13GroupForPowell: optional group # to use for Powell drag
&owiWindNetcdf NWS13File='fort.22.nc' NWS13ColdStartString='20000706.000000' /
- Keep the spatial and temporal resolutions to only what is required
- Add sub-grids, more complex time dimensions, and complex lat/lon grid definitions only as necessary by sub-grid/group
- In most cases 1-hourly specified--if you have a moving-grid overlay and can rely on the built-in moving-aware interpolation
- Avoid discontinuities between overlays/grids
- Best case: the lowest rank grid should just be a less resolved version of exact same higher resolution fields that will be overlaid
- Lowest rank grid should probably cover the entire domain/mesh, and the entire model run time period
Aliasing of peak storm conditions in time.
Spatial aliasing of peak wind speeds.
The NWS13 met module implements a multi-step interpolation procedure, primarily to minimize aliasing of the wind and pressure fields in time and space.
The process occurs as follows:
Input fields are interpolated on the input grid (in time, and space if necessary) to the intermediate timesteps specified in the fort.15 parameter WTIMINC.
The gridded intermediate timesteps are interpolated in space on to the ADCIRC mesh, appropriately overlaying multiple input grids by rank as supplied. At this point the inputs are represented on the mesh at WTIMINC timesteps.
NB: For the lowest ranked overlay, the grid-to-mesh interpolation weights are pre-computed, which means that this grid cannot be a storm-following moving grid. For all additional overlays, the weights are dynamically updated.
At each model computational timestep (DTDP) the inputs at intermediate timesteps as represented on the mesh are interpolated in time to the appropriate model timestep node-by-node.