-
Notifications
You must be signed in to change notification settings - Fork 1
Format Requirements for NetCDF Files
WRES is able to ingest forecast data provided in NetCDF format so long as that data follows, approximately, the same format as NWM output. Specifically:
1. The file must be NetCDF CF-compliant.
2. Gridded NetCDF data must include a project in the metadata and associated with each variable.
To serve as guidance, two examples are provided below generated using ncdump -h
: (1) a gridded NetCDF short-range precipitation forcing input file; (2) a gauge (or vector) NetCDF medium-range ensemble forecast output file. In each case, the metadata for a single file is provided, the first including the projection information expected by WRES, the second illustrating new metadata provided with the NWM v2.0 NetCDF output, such as ensemble_member_number
.
Gridded NetCDF precipitation forcings used for short-range forecasting
netcdf nwm.t08z.short_range.forcing.f001.conus {
dimensions:
time = UNLIMITED ; // (1 currently)
y = 3840 ;
x = 4608 ;
reference_time = 1 ;
nv = 2 ;
variables:
int time(time) ;
time:units = "minutes since 1970-01-01 00:00:00 UTC" ;
time:standard_name = "time" ;
time:bounds = "time_bounds" ;
time:long_name = "valid output time" ;
int reference_time(reference_time) ;
reference_time:units = "minutes since 1970-01-01 00:00:00 UTC" ;
reference_time:standard_name = "forecast_reference_time" ;
reference_time:long_name = "model initialization time" ;
int time_bounds(time, nv) ;
time_bounds:units = "minutes since 1970-01-01 00:00:00 UTC" ;
double x(x) ;
x:standard_name = "projection_x_coordinate" ;
x:long_name = "x coordinate of projection" ;
x:_CoordinateAxisType = "GeoX" ;
x:units = "m" ;
x:resolution = 1000. ;
double y(y) ;
y:standard_name = "projection_y_coordinate" ;
y:long_name = "y coordinate of projection" ;
y:_CoordinateAxisType = "GeoY" ;
y:units = "m" ;
y:resolution = 1000. ;
char ProjectionCoordinateSystem ;
ProjectionCoordinateSystem:_CoordinateTransformType = "Projection" ;
ProjectionCoordinateSystem:transform_name = "lambert_conformal_conic" ;
ProjectionCoordinateSystem:grid_mapping_name = "lambert_conformal_conic" ;
ProjectionCoordinateSystem:_CoordinateAxes = "y x" ;
ProjectionCoordinateSystem:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
ProjectionCoordinateSystem:standard_parallel = 30., 60. ;
ProjectionCoordinateSystem:longitude_of_central_meridian = -97. ;
ProjectionCoordinateSystem:latitude_of_projection_origin = 40.0000076294 ;
ProjectionCoordinateSystem:false_easting = 0. ;
ProjectionCoordinateSystem:false_northing = 0. ;
ProjectionCoordinateSystem:earth_radius = 6370000. ;
ProjectionCoordinateSystem:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
int T2D(time, y, x) ;
T2D:cell_methods = "time: point" ;
T2D:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
T2D:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
T2D:grid_mapping = "ProjectionCoordinateSystem" ;
T2D:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
T2D:missing_value = -999900 ;
T2D:valid_range = 0., 40000. ;
T2D:add_offset = 100. ;
T2D:scale_factor = 0.01 ;
T2D:standard_name = "air_temperature" ;
T2D:long_name = "2-m Air Temperature" ;
T2D:units = "K" ;
T2D:_FillValue = -999900 ;
int LWDOWN(time, y, x) ;
LWDOWN:cell_methods = "time: point" ;
LWDOWN:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
LWDOWN:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
LWDOWN:grid_mapping = "ProjectionCoordinateSystem" ;
LWDOWN:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
LWDOWN:missing_value = -9999000 ;
LWDOWN:valid_range = 0., 5000000. ;
LWDOWN:add_offset = 0. ;
LWDOWN:scale_factor = 0.001 ;
LWDOWN:standard_name = "surface_downward_longwave_flux" ;
LWDOWN:long_name = "Surface downward long-wave radiation flux" ;
LWDOWN:units = "W m-2" ;
LWDOWN:_FillValue = -9999000 ;
int Q2D(time, y, x) ;
Q2D:cell_methods = "time: point" ;
Q2D:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
Q2D:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
Q2D:grid_mapping = "ProjectionCoordinateSystem" ;
Q2D:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
Q2D:missing_value = -9999000 ;
Q2D:valid_range = 0., 1000000. ;
Q2D:add_offset = 0. ;
Q2D:scale_factor = 1.e-06 ;
Q2D:standard_name = "surface_specific_humidity" ;
Q2D:long_name = "2-m Specific humidity" ;
Q2D:units = "kg kg-1" ;
Q2D:_FillValue = -9999000 ;
int U2D(time, y, x) ;
U2D:cell_methods = "time: point" ;
U2D:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
U2D:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
U2D:grid_mapping = "ProjectionCoordinateSystem" ;
U2D:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
U2D:missing_value = -9999000 ;
U2D:valid_range = -100000., 100000. ;
U2D:add_offset = 0. ;
U2D:scale_factor = 0.001 ;
U2D:standard_name = "x_wind" ;
U2D:long_name = "10-m U-component of wind" ;
U2D:units = "m s-1" ;
U2D:_FillValue = -9999000 ;
int V2D(time, y, x) ;
V2D:cell_methods = "time: point" ;
V2D:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
V2D:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
V2D:grid_mapping = "ProjectionCoordinateSystem" ;
V2D:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
V2D:missing_value = -9999000 ;
V2D:valid_range = -100000., 100000. ;
V2D:add_offset = 0. ;
V2D:scale_factor = 0.001 ;
V2D:standard_name = "y_wind" ;
V2D:long_name = "10m V-component of wind" ;
V2D:units = "m s-1" ;
V2D:_FillValue = -9999000 ;
int PSFC(time, y, x) ;
PSFC:cell_methods = "time: point" ;
PSFC:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
PSFC:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
PSFC:grid_mapping = "ProjectionCoordinateSystem" ;
PSFC:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
PSFC:missing_value = -99990 ;
PSFC:valid_range = 0., 10000000. ;
PSFC:add_offset = 0. ;
PSFC:scale_factor = 0.1 ;
PSFC:standard_name = "air_pressure" ;
PSFC:long_name = "Surface Pressure" ;
PSFC:units = "Pa" ;
PSFC:_FillValue = -99990 ;
float RAINRATE(time, y, x) ;
RAINRATE:cell_methods = "time: mean" ;
RAINRATE:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
RAINRATE:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
RAINRATE:grid_mapping = "ProjectionCoordinateSystem" ;
RAINRATE:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
RAINRATE:missing_value = -9999.f ;
RAINRATE:valid_range = 0., 100. ;
RAINRATE:standard_name = "precipitation_flux" ;
RAINRATE:long_name = "Surface Precipitation Rate" ;
RAINRATE:units = "mm s^-1" ;
RAINRATE:_FillValue = -9999.f ;
int SWDOWN(time, y, x) ;
SWDOWN:cell_methods = "time: point" ;
SWDOWN:remap = "remapped via ESMF regrid_with_weights: Bilinear" ;
SWDOWN:esri_pe_string = "PROJCS[\"Sphere_Lambert_Conformal_Conic\",GEOGCS[\"GCS_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6370000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",-97.0],PARAMETER[\"standard_parallel_1\",30.0],PARAMETER[\"standard_parallel_2\",60.0],PARAMETER[\"latitude_of_origin\",40.0000076294],UNIT[\"Meter\",1.0]];-35691800 -29075200 126180232.640845;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision" ;
SWDOWN:grid_mapping = "ProjectionCoordinateSystem" ;
SWDOWN:proj4 = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=40 +lon_0=-97 +x_0=0 +y_0=0 +a=6370000 +b=6370000 +units=m +no_defs" ;
SWDOWN:missing_value = -9999000 ;
SWDOWN:valid_range = 0., 5000000. ;
SWDOWN:add_offset = 0. ;
SWDOWN:scale_factor = 0.001 ;
SWDOWN:standard_name = "surface_downward_shortwave_flux" ;
SWDOWN:long_name = "Surface downward short-wave radiation flux" ;
SWDOWN:units = "W m-2" ;
SWDOWN:_FillValue = -9999000 ;
// global attributes:
:model_initialization_time = "2018-05-26_08:00:00" ;
:model_output_valid_time = "2018-05-26_09:00:00" ;
}
Gauge (vector) NetCDF medium-range forecast output
netcdf nwm.t06z.medium_range.channel_rt_3.f015.conus {
dimensions:
feature_id = 2729077 ;
time = UNLIMITED ; // (1 currently)
reference_time = 1 ;
variables:
int time(time) ;
time:long_name = "valid output time" ;
time:standard_name = "time" ;
time:units = "minutes since 1970-01-01 00:00:00 UTC" ;
time:valid_min = 25589340 ;
time:valid_max = 25601400 ;
int reference_time(reference_time) ;
reference_time:long_name = "model initialization time" ;
reference_time:standard_name = "forecast_reference_time" ;
reference_time:units = "minutes since 1970-01-01 00:00:00 UTC" ;
char crs ;
crs:transform_name = "latitude longitude" ;
crs:grid_mapping_name = "latitude longitude" ;
crs:esri_pe_string = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]];-400 -400 1000000000;-100000 10000;-100000 10000;8.98315284119521E-09;0.001;0.001;IsHighPrecision" ;
crs:spatial_ref = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]];-400 -400 1000000000;-100000 10000;-100000 10000;8.98315284119521E-09;0.001;0.001;IsHighPrecision" ;
crs:long_name = "CRS definition" ;
crs:longitude_of_prime_meridian = 0.f ;
crs:_CoordinateAxes = "latitude longitude" ;
crs:semi_major_axis = 6378137.f ;
crs:semi_minor_axis = 6356752.f ;
crs:inverse_flattening = 298.2572f ;
int feature_id(feature_id) ;
feature_id:long_name = "Reach ID" ;
feature_id:comment = "Gage Points Specified by User in Routelink file" ;
feature_id:cf_role = "timeseries_id" ;
int order(feature_id) ;
order:long_name = "Streamflow Order" ;
order:standard_name = "order" ;
float elevation(feature_id) ;
elevation:long_name = "Feature Elevation" ;
elevation:standard_name = "Elevation" ;
elevation:units = "meters" ;
int streamflow(feature_id) ;
streamflow:long_name = "River Flow" ;
streamflow:units = "m3 s-1" ;
streamflow:coordinates = "latitude longitude" ;
streamflow:grid_mapping = "crs" ;
streamflow:_FillValue = -999900 ;
streamflow:missing_value = -999900 ;
streamflow:scale_factor = 0.01f ;
streamflow:add_offset = 0.f ;
streamflow:valid_range = 0, 50000000 ;
int nudge(feature_id) ;
nudge:long_name = "Amount of stream flow alteration" ;
nudge:units = "m3 s-1" ;
nudge:coordinates = "latitude longitude" ;
nudge:grid_mapping = "crs" ;
nudge:_FillValue = -999900 ;
nudge:missing_value = -999900 ;
nudge:scale_factor = 0.01f ;
nudge:add_offset = 0.f ;
nudge:valid_range = -50000000, 50000000 ;
int velocity(feature_id) ;
velocity:long_name = "River Velocity" ;
velocity:units = "ms-1" ;
velocity:coordinates = "latitude longitude" ;
velocity:grid_mapping = "crs" ;
velocity:_FillValue = -999900 ;
velocity:missing_value = -999900 ;
velocity:scale_factor = 0.01f ;
velocity:add_offset = 0.f ;
velocity:valid_range = 0, 50000000 ;
// global attributes:
:featureType = "timeSeries" ;
:proj4 = "+proj=lcc +units=m +a=6370000.0 +b=6370000.0 +lat_1=30.0 +lat_2=60.0 +lat_0=40.0 +lon_0=-97.0 +x_0=0 +y_0=0 +k_0=1.0 +nadgrids=@" ;
:model_initialization_time = "2018-08-27_06:00:00" ;
:station_dimension = "feature_id" ;
:model_output_valid_time = "2018-08-27_21:00:00" ;
:model_total_valid_times = 68 ;
:stream_order_output = 1 ;
:cdm_datatype = "Station" ;
:Conventions = "CF-1.6" ;
:code_version = "v5.1.0-alpha6" ;
:NWM_version_number = "v2.0" ;
:model_output_type = "channel_rt" ;
:model_configuration = "medium_range" ;
:dev_OVRTSWCRT = 1 ;
:dev_NOAH_TIMESTEP = 3600 ;
:dev_channel_only = 0 ;
:dev_channelBucket_only = 0 ;
:dev = "dev_ prefix indicates development/internal meta data" ;
:ensemble_member_number = "3" ;
}
The WRES Wiki
-
Options for Deploying and Operating the WRES
- Obtaining and using the WRES as a standalone application
- WRES Local Server
- WRES Web Service (under construction)
-
- Format Requirements for CSV Files
- Format Requirements for NetCDF Files
- Introductory Resources on Forecast Verification
- Instructions for Human Interaction with a WRES Web-service
- Instructions for Programmatic Interaction with a WRES Web-service
- Output Format Description for CSV2
- Posting timeseries data directly to a WRES web‐service as inputs for a WRES job
- WRES Scripts Usage Guide