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

metar.cdl



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/
===============================================================================