[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
metar.cdl
- Subject: metar.cdl
- Date: Fri, 23 Apr 2004 09:45:17 -0600 (MDT)
Jim,
I've been working on a new cdl for the metar data. Trying to merge some
variables with different units and making the names more human readable.
Also, there is only one record per station so I have 3 slots available so
up to reports per hour can be stored. If more than 3 reports arrive per
station the appropriate slot is overwritten. Would this scheme fit in with
your work? Appended is the cdl.
Robb...
netcdf metar { // metar netCDF definition
dimensions:
station = UNLIMITED ;
station_name_len = 4;
interval = 3 ;
interval_minutes_len = 5 ;
time_len = 20 ;
vis_len = 2 ;
weather_len = 16;
report_len = 192;
variables:
// Gives the time ranges for the intervals 1-3
char interval_minutes( interval, interval_minutes_len ) ;
interval_minutes:long_name = "minutes range for interval";
interval_minutes:_FillValue = "\0";
// Station information
char station( station, station_name_len ) ;
station:long_name = "Station name";
station:_FillValue = "\0";
station:reference = "sfmetar_sa.tbl";
long wmo_id( station ) ;
wmo_id:long_name = "Numeric WMO Identifier";
wmo_id:_FillValue = -99999;
wmo_id:reference = "Air Force station bulletin";
float latitude( station ) ;
latitude:long_name = "Station latitude";
latitude:_FillValue = -99999.f;
latitude:valid_range = -90.0, 90.0;
latitude:units = "degrees";
float longitude( station ) ;
longitude:long_name = "Station longitude";
longitude:_FillValue = -99999.f;
longitude:valid_range = -180.0, 180.0;
longitude:units = "degrees";
int elevation( station ) ;
elevation:long_name = "Station elevation";
elevation:_FillValue = -99999;
elevation:units = "meters";
// Report time information
char datetime( station, interval, time_len ) ;
datetime:long_name = "Observation time";
datetime:_FillValue = "\0";
// units YYYY-MM-DD hh:mm:ssZ (ISO 8601)
long time_observation( station, interval ) ;
time_observation:long_name = "time of Observation";
time_observation:_FillValue = -99999;
time_observation:units = "seconds since 1970-01-01 00 UTC";
long time_nominal( station, interval ) ;
time_nominal:long_name = "time nominal";
time_nominal:_FillValue = -99999;
time_nominal:units = "seconds since 1970-01-01 00 UTC";
// Wind
int wind_from_direction( station, interval ) ;
wind_from_direction:long_name = "Wind From Direction";
wind_from_direction:_FillValue = -99999;
wind_from_direction:valid_range = 0, 360;
wind_from_direction:units = "degrees";
float wind_speed( station, interval ) ;
wind_speed:long_name = "Wind Speed";
wind_speed:_FillValue = -99999.f;
wind_speed:units = "m/s";
float wind_gust( station, interval ) ;
wind_gust:long_name = "Wind Gust";
wind_gust:_FillValue = -99999.f;
wind_gust:units = "m/s";
int wind_from_direction_min( station, interval ) ;
wind_from_direction_min:long_name = "wind from direction
minimum";
wind_from_direction_min:_FillValue = -99999;
wind_from_direction_min:valid_range = 0, 360;
wind_from_direction_min:units = "degrees";
int wind_from_direction_max( station, interval ) ;
wind_from_direction_max:long_name = "wind from direction
maximum";
wind_from_direction_max:_FillValue = -99999;
wind_from_direction_max:valid_range = 0, 360;
wind_from_direction_max:units = "degrees";
int wind_peak_from_direction( station, interval ) ;
wind_peak_from_direction:long_name = "Peak wind direction";
wind_peak_from_direction:_FillValue = -99999;
wind_peak_from_direction:valid_range = 0, 360;
wind_peak_from_direction:units = "degrees";
float wind_peak_speed( station, interval ) ;
wind_peak_speed:long_name = "Peak wind speed";
wind_peak_speed:_FillValue = -99999.f;
wind_peak_speed:units = "m/s";
char wind_peak_time( station, interval, time_len ) ;
wind_peak_time:long_name = "Peak wind time";
wind_peak_time:_FillValue = "\0";
// units YYYY-MM-DD hh:mm:ssZ (ISO 8601)
// Visibility
float visibility_in_air( station, interval ) ;
visibility_in_air:long_name = "visibility in air";
visibility_in_air:_FillValue = -99999.f;
visibility_in_air:units = "miles";
char visibility_in_air_direction( station, interval, vis_len ) ;
visibility_in_air_direction:long_name = "visibility in air
direction";
visibility_in_air_direction:_FillValue = "\0";
visibility_in_air_direction:units = "degrees";
float visibility_in_air_vertical( station, interval ) ;
visibility_in_air_vertical:long_name = "Vertical visibility in
air";
visibility_in_air_vertical:_FillValue = -99999.f;
visibility_in_air_vertical:units = "meters";
float visibility_in_air_surface( station, interval ) ;
visibility_in_air_surface:long_name = "Visibility in air at
surface";
visibility_in_air_surface:_FillValue = -99999.f;
visibility_in_air_surface:units = "meters";
// Clouds
float low_cloud_area_fraction( station, interval ) ;
low_cloud_area_fraction:long_name = "Low cloud area fraction";
low_cloud_area_fraction:_FillValue = -99999.f;
low_cloud_area_fraction:units = "";
float low_cloud_base_altitude( station, interval ) ;
low_cloud_base_altitude:long_name = "Low cloud base";
low_cloud_base_altitude:_FillValue = -99999.f;
low_cloud_base_altitude:units = "meters";
float middle_cloud_area_fraction( station, interval ) ;
middle_cloud_area_fraction:long_name = "Middle cloud area
fraction";
middle_cloud_area_fraction:_FillValue = -99999.f;
middle_cloud_area_fraction:units = "";
float middle_cloud_base_altitude( station, interval ) ;
middle_cloud_base_altitude:long_name = "Middle cloud base";
middle_cloud_base_altitude:_FillValue = -99999.f;
middle_cloud_base_altitude:units = "meters";
float high_cloud_area_fraction( station, interval ) ;
high_cloud_area_fraction:long_name = "High cloud area fraction";
high_cloud_area_fraction:_FillValue = -99999.f;
high_cloud_area_fraction:units = "";
float high_cloud_base_altitude( station, interval ) ;
high_cloud_base_altitude:long_name = "High cloud base";
high_cloud_base_altitude:_FillValue = -99999.f;
high_cloud_base_altitude:units = "meters";
// Temperature
float air_temperature( station, interval ) ;
air_temperature:long_name = "Air temperature at 2 meters";
air_temperature:_FillValue = -99999.f;
air_temperature:units = "Celsius";
float dew_point_temperature( station, interval ) ;
dew_point_temperature:long_name = "Dew point temperature at 2
meters";
dew_point_temperature:_FillValue = -99999.f;
dew_point_temperature:units = "Celsius";
// Pressure
float air_pressure( station, interval ) ;
air_pressure:long_name = "Air pressure at surface";
air_pressure:_FillValue = -99999.f;
air_pressure:units = "hectoPascal";
float air_pressure_at_sea_level( station, interval ) ;
air_pressure_at_sea_level:long_name = "Air pressure at sea
level";
air_pressure_at_sea_level:_FillValue = -99999.f;
air_pressure_at_sea_level:units = "hectoPascal";
// Weather
char weather( station, interval, weather_len ) ;
weather:long_name = "Weather phenomenia";
weather:_FillValue = "\0";
weather:reference = "WMO #306, code table 4658";
// Precipitation
float snowfall_amount_last_hour( station, interval ) ;
snowfall_amount_last_hour:long_name = "Snow fall amount last
hour";
snowfall_amount_last_hour:_FillValue = -99999.f;
snowfall_amount_last_hour:units = "inches";
float snowfall_amount( station, interval ) ;
snowfall_amount:long_name = "Snow fall amount on ground";
snowfall_amount:_FillValue = -99999.f;
snowfall_amount:units = "inches";
float precipitation_amount_hourly( station, interval ) ;
precipitation_amount_hourly:long_name = "Hourly precipitation
amount";
precipitation_amount_hourly:_FillValue = -99999.f;
precipitation_amount_hourly:units = ".01 inches";
float precipitation_amount_24( station, interval ) ;
precipitation_amount_24:long_name = "24 hour precipitation
amount";
precipitation_amount_24:_FillValue = -99999.f;
precipitation_amount_24:units = ".01 inches";
// Raw report with remarks
char report( station, interval, report_len ) ;
report:long_name = "Original report";
report:_FillValue = "\0";
report:reference = "max length 192";
:title = "METAR definition";
:version = 2.0;
// The metar2nc decoder is dependant on the netCDF variables names
// because it reads the cdl file to determine the variables to be
// included in the netcdf file. A user can comment out or delete
// variables not to be included in the output file with one exception,
// the variable 'station' must be included as the first or second position
data:
interval_minutes =
"45-04", // top of hour report interval
"05-24",
"25-44" ;
}
===============================================================================
Robb Kambic Unidata Program Center
Software Engineer III Univ. Corp for Atmospheric Research
address@hidden WWW: http://www.unidata.ucar.edu/
===============================================================================