[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: metar.cdl



On Mon, 26 Apr 2004, Jim Cowie wrote:

>
> Some of these features would have been nice if they were in place
> earlier, but we would have to change some code to handle the new
> variable names, and we don't have a lot of resources to do that. So
> I doubt we'd be able to make use of this any time soon. Will adding
> a time dimension on the reports cause problems with IDV or other
> display apps?

Jim,

It will cause some code changes but I believe that the IDV folks are
looking at implementing it since the new format makes for better data
access.


Three times per hour is probably enough for the METARs
> on the NOAAport feed, but if you had higher time resolution (I hear
> that you can get 5-minute ASOS data), and set the CDL to a higher
> number, would the decoder handle it?

Right now it set at 3 but scanning metar the code it would not be hard to
implement a user configuration for different values.

Robb...
>
>
> Robb Kambic wrote:
> > 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/
> > ===============================================================================
>
>
> --
> Jim Cowie
> NCAR/RAP
> address@hidden
> 303-497-2831
>

===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
address@hidden             WWW: http://www.unidata.ucar.edu/
===============================================================================