NWS13

Flexible (NetCDF) Metocean Inputs for ADCIRC

  ·   5 min read

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 in order to develop the newer NetCDF version (NWS13).

  • Moving storm-centered grids
  • Grids that can change size
  • Curvilinear grids
  • Arbitrary # of grid overlays
  • New ADCIRC moving interpolation code
  • Arbitrary & irregular timesteps

Some future-proofing attempts:

  • 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?

Example of grid domains for multiple independent wind/pressure overlays, including storm-following

Notes regarding the format #

  • Decoupling the yi/xi dimensions from lat/lon allows lat and lon to be 2-d “mesh-grid” arrays
  • Regular grids and Curvilinear array encoding supported
  • Support for non-evenly spaced grids as long as they can be expressed in a 2-d “mesh-grid”
  • Support for grids that change spatial resolution and/or position in time
    • as long as yi/xi array dimensions are consistent
  • Each group (sub-grid/overlay) independently define timesteps including start and stop times
  • NetCDF-CF Encoding supported fill value (and NetCDF packing/compression by scale/offset), and IEEE NaN floats supported

NetCDF File Schema #

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.

Conventions for NWS13 #

Overview of a file’s contents

  • Group(s) – 1 group per grid or overlay
  • Variables – U10/V10, PSFC
  • Dimensions – time, yi, xi
  • Attributes – grid rank/priority

Global Attributes #

  • 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)

Group Attributes #

  • rank : integer representing the order of overlay/precedence in application to nodes

Group Dimensions #

  • time – length of time dimension
  • yi – number of rows in spatial grid description
  • xi – number of columns in spatial grid description

Group Variables #

  • 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

These parameters are specified above as required name (array dimensions), description including required units if applicable.

Example ncdump -h output CDM #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
netcdf fort.22 {

    // 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
}