-
Notifications
You must be signed in to change notification settings - Fork 44
Proposed Weather Model Format
###Summary
WindNinja can optionally be initialized with data from coarser weather forecast models (such as WRF and MM5). Currently, the required data needed are: 10 meter U and V wind components, 2 meter air temperature, and percent cloud cover. The file and data format follow the example given by the US NCEP-NAM model output on the UCAR motherlode server found here and described below. The file format is netCDF3 or netCDF4 using the CF (climate and forecast) convention (cf-conventions.pdf). WindNinja uses the Geospatial Data Abstraction Library (GDAL) to read these files. Programmers may find the netCDF library useful. This is an example file: DRIMM5TAHOE2005030100.nc
###File Format Description
File Type
- NetCDF4(*.nc)
Dimensions
- x
- y
- time
- height_above_ground1
- height_above_ground2
Variables
- U-component_of_wind_height_above_ground(time, height_above_ground1, y, x)
- V-component_of_wind_height_above_ground(time, height_above_ground1, y, x)
- Total_cloud_cover(time, y, x)
- Temperature_height_above_ground(time, height_above_ground2, y, x)
- time_run
Standard Heights and Units
- height of wind should be 10 meters, wind speed in meters/second
- cloud cover in percent
- height of temperature should be 2 meters,temperature in Kelvin
- time in hours since a specified time (in Zulu) in this format: 2011-02-15T06:00:00Z
Grid mapping
The data must be in a projected coordinate system (not lat/lon). Also, the grid must have uniform and equal N-S and E-W cell sizes. The projection must be specified using CF-1.x conventions.
Example cdl representation of the forecast (this cdl representation can be made using the NetCDF ncdump utility)
netcdf \example {
dimensions:
time = 25 ;
height_above_ground2 = 1 ;
y = 25 ;
x = 20 ;
height_above_ground1 = 1 ;
variables:
float Temperature_height_above_ground(time, height_above_ground2, y, x) ;
Temperature_height_above_ground:units = "K" ;
Temperature_height_above_ground:long_name = "Temperature @ height_above_ground" ;
Temperature_height_above_ground:missing_value = NaNf ;
Temperature_height_above_ground:grid_mapping = "Lambert_Conformal" ;
Temperature_height_above_ground:coordinates = "time_run time height_above_ground2 y x " ;
double time_run(time) ;
time_run:long_name = "run times for coordinate = time" ;
time_run:standard_name = "forecast_reference_time" ;
time_run:units = "hours since 2011-02-15T06:00:00Z" ;
time_run:missing_value = NaN ;
time_run:_CoordinateAxisType = "RunTime" ;
double time(time) ;
time:long_name = "Forecast time for ForecastModelRunCollection" ;
time:standard_name = "time" ;
time:units = "hours since 2011-02-15T06:00:00Z" ;
time:missing_value = NaN ;
time:_CoordinateAxisType = "Time" ;
double height_above_ground2(height_above_ground2) ;
height_above_ground2:units = "m" ;
height_above_ground2:long_name = "Specified height level above ground" ;
height_above_ground2:positive = "up" ;
height_above_ground2:_CoordinateAxisType = "Height" ;
height_above_ground2:_CoordinateZisPositive = "up" ;
double y(y) ;
y:units = "km" ;
y:long_name = "y coordinate of projection" ;
y:standard_name = "projection_y_coordinate" ;
y:grid_spacing = "12.191 km" ;
y:_CoordinateAxisType = "GeoY" ;
double x(x) ;
x:units = "km" ;
x:long_name = "x coordinate of projection" ;
x:standard_name = "projection_x_coordinate" ;
x:grid_spacing = "12.191 km" ;
x:_CoordinateAxisType = "GeoX" ;
char Lambert_Conformal ;
Lambert_Conformal:long_name = ;
Lambert_Conformal:grid_mapping_name = "lambert_conformal_conic" ;
Lambert_Conformal:standard_parallel = 25. ;
Lambert_Conformal:longitude_of_central_meridian = 265. ;
Lambert_Conformal:latitude_of_projection_origin = 25. ;
Lambert_Conformal:earth_shape = "Earth spherical with radius of 6,371,229.0 m" ;
Lambert_Conformal:earth_radius = 6371229. ;
Lambert_Conformal:_CoordinateTransformType = "Projection" ;
Lambert_Conformal:_CoordinateAxisTypes = "GeoX GeoY" ;
float V-component_of_wind_height_above_ground(time, height_above_ground1, y, x) ;
V-component_of_wind_height_above_ground:units = "m s-1" ;
V-component_of_wind_height_above_ground:long_name = "V-component_of_wind @ height_above_ground" ;
V-component_of_wind_height_above_ground:missing_value = NaNf ;
V-component_of_wind_height_above_ground:grid_mapping = "Lambert_Conformal" ;
V-component_of_wind_height_above_ground:coordinates = "time_run time height_above_ground1 y x " ;
double height_above_ground1(height_above_ground1) ;
height_above_ground1:units = "m" ;
height_above_ground1:long_name = "Specified height level above ground" ;
height_above_ground1:positive = "up" ;
height_above_ground1:GRIB_level_type = "103" ;
height_above_ground1:_CoordinateAxisType = "Height" ;
height_above_ground1:_CoordinateZisPositive = "up" ;
float U-component_of_wind_height_above_ground(time, height_above_ground1, y, x) ;
U-component_of_wind_height_above_ground:units = "m s-1" ;
U-component_of_wind_height_above_ground:long_name = "U-component_of_wind @ height_above_ground" ;
U-component_of_wind_height_above_ground:missing_value = NaNf ;
U-component_of_wind_height_above_ground:grid_mapping = "Lambert_Conformal" ;
U-component_of_wind_height_above_ground:coordinates = "time_run time height_above_ground1 y x " ;
float Total_cloud_cover(time, y, x) ;
Total_cloud_cover:units = "percent" ;
Total_cloud_cover:long_name = "Total_cloud_cover @ entire_atmosphere" ;
Total_cloud_cover:missing_value = NaNf ;
Total_cloud_cover:grid_mapping = "Lambert_Conformal" ;
Total_cloud_cover:coordinates = "time_run time y x " ;
// global attributes:
:Conventions = "CF-1.0" ;
:Originating_center = "US National Weather Service - NCEP(WMC) (7)" ;
:Generating_Model = "YOUR PRODUCT" ;
:institution = "YOUR INSTITUTION" ;
:source = "YOUR SOURCE" ;
:history = "CREATED BY ... ON ..." ;
:CF\:feature_type = "GRID" ;
:location = "YOUR LOCATION" ;
:cdm_data_type = "GRID" ;
data:
Temperature_height_above_ground =
289.6201, 289.3701, 289.1201, 288.8701, 288.3701, 288.2451, 288.1201,
...
269.9626, 271.3376, 272.7126, 273.7126, 274.5876, 273.3376 ;
time_run = 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1086, 1086 ;
time = 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122,
1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158,
1161, 1164 ;
height_above_ground2 = 2 ;
y = 2105.3331573141, 2117.5241573141, 2129.7151573141, 2141.9061573141,
2154.0971573141, 2166.2881573141, 2178.4791573141, 2190.6701573141,
2202.8611573141, 2215.0521573141, 2227.2431573141, 2239.4341573141,
2251.6251573141, 2263.8161573141, 2276.0071573141, 2288.1981573141,
2300.3891573141, 2312.5801573141, 2324.7711573141, 2336.9621573141,
2349.1531573141, 2361.3441573141, 2373.5351573141, 2385.7261573141,
2397.9171573141 ;
x = -1690.38060264919, -1678.18960264919, -1665.99860264919,
-1653.80760264919, -1641.61660264919, -1629.42560264919,
-1617.23460264919, -1605.04360264919, -1592.85260264919,
-1580.66160264919, -1568.47060264919, -1556.27960264919,
-1544.08860264919, -1531.89760264919, -1519.70660264919,
-1507.51560264919, -1495.32460264919, -1483.13360264919,
-1470.94260264919, -1458.75160264919 ;
Lambert_Conformal = "d" ;
V-component_of_wind_height_above_ground =
-1.903927, -1.778927, -1.153927, -1.028927, -0.4039268, -0.1539268,
...
5.91684, 5.91684, 5.79184, 5.91684 ;
U-component_of_wind_height_above_ground =
-2.543927, -5.778927, 1.1361427, 1.045567, -0.4068, 0.1587568,
...
5.94564, 5.94564, 5.74564, 5.94564 ;
Total_cloud_cover =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
...
100, 100, 100, 100 ;
}