Skip to content

Proposed Weather Model Format

Natalie Wagenbrenner edited this page Jun 18, 2016 · 1 revision

###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 ;
}