This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
mark, john pointed out that the units values were not compatiable with the udunits package in the metar.cdl. so i corrected the vars units in the metar.cdl. attached is a modified cdl. now i have to check all the other cdls in the decoders package to make sure those units are compatiable before making a decoders release. robb... On Tue, 1 Mar 2005, John Caron wrote: > Robb Kambic wrote: > > >>>To: Unidata Support <address@hidden> > >>>From: "Mark J. Laufersweiler" <address@hidden> > >>>Subject: decoders and IDV > >>>Organization: UCAR/Unidata > >>>Keywords: 200502282237.j1SMb2v2020244 > >>> > >>> > >>Hello > >> > >>I am tryin to set up my DODS/ADDE/THREDDS server and have started > >>with something simple to server up and so I figured I would start > >>with the metars. But now I not sure what I doing wrong. When I run > >>the idv on the created metart netcdf file I get: > >> > >>java -Xmx512m -jar idv.jar (wd: ~/idv) > >> > >>Couldn't decode unit attribute (0|1|2|3|4|5|6|7|8 Table 12-5) of > >>variable "char_Ptend": Lexical error at line 1, column 2. > >>Encountered: "|" (124), after : "" > >> > >> > >> > >> > >hey mark, > > > >hope things are well with you. good support question, has all the facts. > >i downloaded and tested your metar netcdf example file. it's in the > >correct format so that's not the problem. i speculate that the problem is > >in the netCDF API that the IDV is using to read the file, so i'm including > >others in this response to get their opinions. > > > >the downloaded file is at: > > > >/upc/share/testdata/station/ldm-old/markMetar.nc > > > >robb... > > > > > > > the variable does not have legal udunits: > > int char_Ptend(recNum); > :long_name = "Character Pressure tendency"; > :_FillValue = -99999; // int > :units = "0|1|2|3|4|5|6|7|8 Table 12-5"; > > > =============================================================================== Robb Kambic Unidata Program Center Software Engineer III Univ. Corp for Atmospheric Research address@hidden WWW: http://www.unidata.ucar.edu/ ===============================================================================
netcdf metar { // metar netCDF definition dimensions: recNum = UNLIMITED ; r_len = 128; rep_type_len = 5; stn_name_len = 4; UNITS_len = 3; VIS_len = 5; VIS_dir_len = 2; rv_len = 4; rv_d_len = 3; WX_number = 3; WX_len = 32; rWX_len = 8; TornadicType_len = 15; TornadicDIR_len = 2; TornadicLOC_len = 10; auto_len = 4; Site2_len = 10; Obscur_len = 12; Vrb_len = 3; Aloft_len = 3; Sgn_len = 10; cloud_layers = 6; cloud_len = 4 ; cloud_type = 1 ; LTG_DIR_len = 2; VIRGA_dir_len = 2; variables: // Report char rep_type( recNum, rep_type_len ) ; rep_type:long_name = "Report type"; rep_type:reference = "WMO #306, FM 15-IX & FM 16-IX"; rep_type:units = "" ; // dimensionless char stn_name( recNum, stn_name_len ) ; stn_name:long_name = "Station name"; stn_name:reference = "sfmetar-sa.tbl"; stn_name:units = "" ; // dimensionless int wmo_id( recNum ) ; wmo_id:long_name = "Numeric WMO Identifier"; wmo_id:_FillValue = -99999; wmo_id:reference = "Air Force station bulletin plus others"; wmo_id:units = "" ; // dimensionless float lat( recNum ) ; lat:long_name = "Station latitude"; lat:_FillValue = -99999.f; lat:valid_range = -90.0, 90.0; lat:units = "degrees"; float lon( recNum ) ; lon:long_name = "Station longitude"; lon:_FillValue = -99999.f; lon:valid_range = -180.0, 180.0; lon:units = "degrees"; int elev( recNum ) ; elev:long_name = "Station elevation"; elev:_FillValue = -99999; elev:units = "meters"; //int ob_hour( recNum ) ; //ob_hour:long_name = "Observation hour"; //ob_hour:_FillValue = -99999; //ob_hour:units = "" ; // dimensionless //int ob_min( recNum ) ; //ob_min:long_name = "Observation minute"; //ob_min:_FillValue = -99999; //ob_min:units = "" ; // dimensionless //int ob_day( recNum ) ; //ob_day:long_name = "Observation day"; //ob_day:_FillValue = -99999; //ob_day:units = "" ; // dimensionless int time_obs( recNum ) ; time_obs:long_name = "time of Observation"; time_obs:_FillValue = -99999; time_obs:units = "seconds since 1970-01-01 00 UTC"; int time_nominal( recNum ) ; time_nominal:long_name = "time nominal"; time_nominal:_FillValue = -99999; time_nominal:units = "seconds since 1970-01-01 00 UTC"; //int AUTO( recNum ) ; //AUTO:long_name = "Fully automated report"; //AUTO:_FillValue = -99999; //AUTO:valid_range = 0, 1; //AUTO:units = "" ; // dimensionless //WindStruct ; char UNITS( recNum, UNITS_len ) ; UNITS:long_name = "Wind Speed Units"; UNITS:reference = "KMH|KT|MPS|MPH"; UNITS:units = "" ; // dimensionless int DIR( recNum ) ; DIR:long_name = "Wind Direction"; DIR:_FillValue = -99999; DIR:valid_range = 0, 360; DIR:units = "degrees"; int SPD( recNum ) ; SPD:long_name = "Wind Speed"; SPD:_FillValue = -99999; SPD:units = ""; //UNITS variable int GUST( recNum ) ; GUST:long_name = "Wind Gust"; GUST:_FillValue = -99999; GUST:units = ""; //UNITS variable //int VRB( recNum ) ; //VRB:long_name = "Variable wind direction"; //VRB:_FillValue = -99999; //VRB:valid_range = 0, 1; //VRB:units = "" ; // dimensionless //int DIRmin( recNum ) ; //DIRmin:long_name = "min wind direction"; //DIRmin:_FillValue = -99999; //DIRmin:valid_range = 0, 360; //DIRmin:units = "degrees"; //int DIRmax( recNum ) ; //DIRmax:long_name = "max wind direction"; //DIRmax:_FillValue = -99999; //DIRmax:valid_range = 0, 360; //DIRmax:units = "degrees"; float prevail_VIS_SM( recNum ) ; prevail_VIS_SM:long_name = "prevailing visibility"; prevail_VIS_SM:_FillValue = -99999.f; prevail_VIS_SM:units = "US_statute_mile"; float prevail_VIS_KM( recNum ) ; prevail_VIS_KM:long_name = "prevailing visibility"; prevail_VIS_KM:_FillValue = -99999.f; prevail_VIS_KM:units = "kilometers"; int plus_VIS_SM( recNum ) ; plus_VIS_SM:long_name = "greater than prevailing visibility"; plus_VIS_SM:_FillValue = -99999; plus_VIS_SM:valid_range = 0, 1; plus_VIS_SM:units = "US_statute_mile"; int plus_VIS_KM( recNum ) ; plus_VIS_KM:long_name = "greater than prevailing visibility"; plus_VIS_KM:_FillValue = -99999; plus_VIS_KM:valid_range = 0, 1; plus_VIS_KM:units = "kilometers"; float prevail_VIS_M( recNum ) ; prevail_VIS_M:long_name = "horizontal visibility"; prevail_VIS_M:_FillValue = -99999.f; prevail_VIS_M:units = "meters"; char VIS_dir( recNum, VIS_dir_len ) ; VIS_dir:long_name = "horizontal visibility direction"; VIS_dir:reference = "NE|NW|SE|SW|N|S|E|W"; VIS_dir:units = "" ; // dimensionless int CAVOK( recNum ) ; CAVOK:long_name = "Ceiling And Visibility OK"; CAVOK:_FillValue = -99999; CAVOK:valid_range = 0, 1; CAVOK:units = "" ; // dimensionless //Runway_VisRange ; //int RVRNO( recNum ) ; //RVRNO:long_name = "No runway report"; //RVRNO:_FillValue = -99999; //RVRNO:valid_range = 0, 1; //RVRNO:units = "" ; // dimensionless //char RV_designator( recNum, rv_len, rv_d_len ) ; //RV_designator:long_name = "Runway designator"; //RV_designator:reference = "2 digit plus Right, Left, Center"; //RV_designator:units = "" ; // dimensionless //int RV_above_max( recNum, rv_len ) ; //RV_above_max:long_name = "Runway visibillity is above max"; //RV_above_max:_FillValue = -99999; //RV_above_max:valid_range = 0, 1; //RV_above_max:units = "P"; //int RV_below_min( recNum, rv_len ) ; //RV_below_min:long_name = "Runway visibillity is below min"; //RV_below_min:_FillValue = -99999; //RV_below_min:valid_range = 0, 1; //RV_below_min:units = ""; //int RV_vrbl( recNum, rv_len ) ; //RV_vrbl:long_name = "Runway visibillity is variable"; //RV_vrbl:_FillValue = -99999; //RV_vrbl:valid_range = 0, 1; //RV_vrbl:units = "" ; // dimensionless //int RV_min( recNum, rv_len ) ; //RV_min:long_name = "Runway visibillity min"; //RV_min:_FillValue = -99999; //RV_min:units = "meters"; //int RV_max( recNum, rv_len ) ; //RV_max:long_name = "Runway visibillity max"; //RV_max:_FillValue = -99999; //RV_max:units = "meters"; //int RV_visRange( recNum, rv_len ) ; //RV_visRange:long_name = "Runway Visibility Range"; //RV_visRange:_FillValue = -99999; //RV_visRange:units = "meters"; char WX( recNum, WX_len ) ; WX:long_name = "Weather phenomenia"; WX:reference = "WMO #306, code table 4658"; WX:units = "" ; // dimensionless //int vert_VIS( recNum ) ; //vert_VIS:long_name = "Vertical visibility"; //vert_VIS:_FillValue = -99999; //vert_VIS:units = "meters"; //Cloud_Conditions ; char cloud_type( recNum, cloud_layers, cloud_len ) ; cloud_type:long_name = "cloud type"; cloud_type:reference = "CLR|SKC or +- OVC|SCT|FEW|BKN"; cloud_type:units = "" ; // dimensionless int cloud_hgt( recNum, cloud_layers ) ; cloud_hgt:long_name = "cloud height"; cloud_hgt:_FillValue = -99999; cloud_hgt:units = "feet"; int cloud_meters( recNum, cloud_layers ) ; cloud_meters:long_name = "cloud height in meters"; cloud_meters:_FillValue = -99999; cloud_meters:units = "meters"; char cloud_phenom( recNum, cloud_layers, cloud_len ) ; cloud_phenom:long_name = "cloud phenomenia"; cloud_phenom:reference = "CB|TCU"; cloud_phenom:units = "" ; // dimensionless //int T( recNum ) ; //T:long_name = "Temperature"; //T:_FillValue = -99999; //T:units = "Celsius"; //int TD( recNum ) ; //TD:long_name = "Dew-point temperature"; //TD:_FillValue = -99999; //TD:units = "Celsius"; float hectoPasc_ALTIM( recNum ) ; hectoPasc_ALTIM:long_name = "Altimeter setting"; hectoPasc_ALTIM:_FillValue = -99999.f; hectoPasc_ALTIM:units = "hectopascals"; float inches_ALTIM( recNum ) ; inches_ALTIM:long_name = "Altimeter setting"; inches_ALTIM:_FillValue = -99999.f; inches_ALTIM:units = "inches"; //int NOSIG( recNum ) ; //NOSIG:long_name = "No significant change"; //NOSIG:_FillValue = -99999; //NOSIG:valid_range = 0, 1; //NOSIG:units = "" ; // dimensionless // Remarks //char TornadicType( recNum, TornadicType_len ) ; //TornadicType:long_name = "Tornadic type"; //TornadicType:reference = "TORNADO|WATERSPOUTS|FUNNEL CLOUDS"; //TornadicType:units = "" ; // dimensionless //char TornadicLOC( recNum, TornadicLOC_len ) ; //TornadicLOC:long_name = "Tornadic location"; //TornadicLOC:reference = "DSNT|VCY STN|VC STN|VCY|VC"; //TornadicLOC:units = "" ; // dimensionless //char TornadicDIR( recNum, TornadicDIR_len ) ; //TornadicDIR:long_name = "Tornadic direction"; //TornadicDIR:reference = "NE|NW|SE|SW|N|S|E|W"; //TornadicDIR:units = "" ; // dimensionless //int BTornadic_hh( recNum ) ; //BTornadic_hh:long_name = "Beginning Hour Tornadic"; //BTornadic_hh:_FillValue = -99999; //BTornadic_hh:units = "" ; // dimensionless //int BTornadic_mm( recNum ) ; //BTornadic_mm:long_name = "Beginning Minute Tornadic"; //BTornadic_mm:_FillValue = -99999; //BTornadic_mm:units = "" ; // dimensionless //int ETornadic_hh( recNum ) ; //ETornadic_hh:long_name = "Ending Hour Tornadic"; //ETornadic_hh:_FillValue = -99999; //ETornadic_hh:units = "" ; // dimensionless //int ETornadic_mm( recNum ) ; //ETornadic_mm:long_name = "Ending Minute Tornadic"; //ETornadic_mm:_FillValue = -99999; //ETornadic_mm:units = "" ; // dimensionless //char AUTOindicator( recNum, auto_len ) ; //AUTOindicator:long_name = "Type of automated station"; //AUTOindicator:reference = "AO1|AO1A|AO2|AO2A|AOA"; //AUTOindicator:units = "" ; // dimensionless //int PKWND_dir( recNum ) ; //PKWND_dir:long_name = "Peak wind direction"; //PKWND_dir:_FillValue = -99999; //PKWND_dir:valid_range = 0, 360; //PKWND_dir:units = "degrees"; //int PKWND_spd( recNum ) ; //PKWND_spd:long_name = "Peak wind speed"; //PKWND_spd:_FillValue = -99999; //PKWND_spd:units = "knots"; //int PKWND_hh( recNum ) ; //PKWND_hh:long_name = "Hour of Peak wind"; //PKWND_hh:_FillValue = -99999; //PKWND_hh:units = "" ; // dimensionless //int PKWND_mm( recNum ) ; //PKWND_mm:long_name = "Minute of Peak wind"; //PKWND_mm:_FillValue = -99999; //PKWND_mm:units = "" ; // dimensionless //int WshfTime_hh( recNum ) ; //WshfTime_hh:long_name = "Hour of Wind shift"; //WshfTime_hh:_FillValue = -99999; //WshfTime_hh:units = "" ; // dimensionless //int WshfTime_mm( recNum ) ; //WshfTime_mm:long_name = "Minute of Wind shift"; //WshfTime_mm:_FillValue = -99999; //WshfTime_mm:units = "" ; // dimensionless //int Wshft_FROPA( recNum ) ; //Wshft_FROPA:long_name = "Wind shift frontal passage"; //Wshft_FROPA:_FillValue = -99999; //Wshft_FROPA:valid_range = 0, 1; //Wshft_FROPA:units = "" ; // dimensionless //float VIS_TWR( recNum ) ; //VIS_TWR:long_name = "Tower visibility"; //VIS_TWR:_FillValue = -99999.f; //VIS_TWR:units = "US_statute_mile"; //float VIS_SFC( recNum ) ; //VIS_SFC:long_name = "Surface visibility"; //VIS_SFC:_FillValue = -99999.f; //VIS_SFC:units = "US_statute_mile"; //float VISmin( recNum ) ; //VISmin:long_name = "min Visibility"; //VISmin:_FillValue = -99999.f; //VISmin:units = "US_statute_mile"; //float VISmax( recNum ) ; //VISmax:long_name = "max Visibility"; //VISmax:_FillValue = -99999.f; //VISmax:units = "US_statute_mile"; //float VIS_2ndSite( recNum ) ; //VIS_2ndSite:long_name = "Visibility at 2nd Site"; //VIS_2ndSite:_FillValue = -99999.f; //VIS_2ndSite:units = "US_statute_mile"; //char VIS_2ndSite_LOC( recNum, Site2_len ) ; //VIS_2ndSite_LOC:long_name = "2nd Site location"; //VIS_2ndSite_LOC:reference = "2 digit runway"; //VIS_2ndSite:units = "" ; // dimensionless //int LTG_OCNL( recNum ) ; //LTG_OCNL:long_name = "Occasional lightning"; //LTG_OCNL:_FillValue = -99999; //LTG_OCNL:valid_range = 0, 1; //LTG_OCNL:units = "" ; // dimensionless //int LTG_FRQ( recNum ) ; //LTG_FRQ:long_name = "Frequent lightning"; //LTG_FRQ:_FillValue = -99999; //LTG_FRQ:valid_range = 0, 1; //LTG_FRQ:units = "" ; // dimensionless //int LTG_CNS( recNum ) ; //LTG_CNS:long_name = "Continuous lightning"; //LTG_CNS:_FillValue = -99999; //LTG_CNS:valid_range = 0, 1; //LTG_CNS:units = "" ; // dimensionless //int LTG_CG( recNum ) ; //LTG_CG:long_name = "Cloud-ground lightning"; //LTG_CG:_FillValue = -99999; //LTG_CG:valid_range = 0, 1; //LTG_CG:units = "" ; // dimensionless //int LTG_IC( recNum ) ; //LTG_IC:long_name = "In-cloud lightning"; //LTG_IC:_FillValue = -99999; //LTG_IC:valid_range = 0, 1; //int LTG_CC( recNum ) ; //LTG_CC:long_name = "Cloud-cloud lightning"; //LTG_CC:_FillValue = -99999; //LTG_CC:valid_range = 0, 1; //LTG_CC:units = "" ; // dimensionless //int LTG_CA( recNum ) ; //LTG_CA:long_name = "Cloud-air lightning"; //LTG_CA:_FillValue = -99999; //LTG_CA:valid_range = 0, 1; //LTG_CA:units = "" ; // dimensionless //int LTG_DSNT( recNum ) ; //LTG_DSNT:long_name = "Distant lightning, beyond 30 SM"; //LTG_DSNT:_FillValue = -99999; //LTG_DSNT:valid_range = 0, 1; //LTG_DSNT:units = "" ; // dimensionless //int LTG_AP( recNum ) ; //LTG_AP:long_name = "Lightning at airport"; //LTG_AP:_FillValue = -99999; //LTG_AP:valid_range = 0, 1; //LTG_AP:units = "" ; // dimensionless //int LTG_VcyStn( recNum ) ; //LTG_VcyStn:long_name = "Lightning in vicinity, less than 5 SM"; //LTG_VcyStn:_FillValue = -99999; //LTG_VcyStn:valid_range = 0, 1; //LTG_VcyStn:units = "" ; // dimensionless //char LTG_DIR( recNum, LTG_DIR_len ) ; //LTG_DIR:long_name = "Lightning direction"; //LTG_DIR:reference = "NE|NW|SE|SW|N|S|E|W"; //LTG_DIR:units = "" ; // dimensionless //Recent_WX ReWX[3]; //char Recent_WX( recNum, WX_number, rWX_len ) ; //Recent_WX:long_name = "Recent weather"; //Recent_WX:reference = "WMO #306, code table 4658"; //Recent_WX:units = "" ; // dimensionless //int Recent_WX_Bhh( recNum, WX_number ) ; //Recent_WX_Bhh:long_name = "Recent weather beginning hour"; //Recent_WX_Bhh:_FillValue = -99999; //Recent_WX_Bhh:units = "" ; // dimensionless //int Recent_WX_Bmm( recNum, WX_number ) ; //Recent_WX_Bmm:long_name = "Recent weather beginning minute"; //Recent_WX_Bmm:_FillValue = -99999; //Recent_WX_Bmm:units = "" ; // dimensionless //int Recent_WX_Ehh( recNum, WX_number ) ; //Recent_WX_Ehh:long_name = "Recent weather ending hour"; //Recent_WX_Ehh:_FillValue = -99999; //Recent_WX_Ehh:units = "" ; // dimensionless //int Recent_WX_Emm( recNum, WX_number ) ; //Recent_WX_Emm:long_name = "Recent weather ending minute"; //Recent_WX_Emm:_FillValue = -99999; //Recent_WX_Emm:units = "" ; // dimensionless //int Ceiling_min( recNum ) ; //Ceiling_min:long_name = "Ceiling min"; //Ceiling_min:_FillValue = -99999; //Ceiling_min:units = "feet"; //int Ceiling_max( recNum ) ; //Ceiling_max:long_name = "Ceiling max"; //Ceiling_max:_FillValue = -99999; //Ceiling_max:units = "feet"; //int CIG_2ndSite_meters( recNum ) ; //CIG_2ndSite_meters:long_name = "Sky condition at 2nd Site"; //CIG_2ndSite_meters:_FillValue = -99999; //CIG_2ndSite_meters:units = "meters"; //int CIG_2ndSite_LOC( recNum ) ; //CIG_2ndSite_LOC:long_name = "2nd Site location, runway"; //CIG_2ndSite_LOC:_FillValue = -99999; //CIG_2ndSite_LOC:reference = "2 digit runway"; //CIG_2ndSite_LOC:units = "" ; // dimensionless //int PRESFR( recNum ) ; //PRESFR:long_name = "Pressure falling rapidly"; //PRESFR:_FillValue = -99999; //PRESFR:valid_range = 0, 1; //PRESFR:units = "" ; // dimensionless //int PRESRR( recNum ) ; //PRESRR:long_name = "Pressure rising rapidly"; //PRESRR:_FillValue = -99999; //PRESRR:valid_range = 0, 1; //PRESRR:units = "" ; // dimensionless //int SLPNO( recNum ) ; //SLPNO:long_name = "Sea level pressure not available"; //SLPNO:_FillValue = -99999; //SLPNO:valid_range = 0, 1; //SLPNO:units = "" ; // dimensionless float SLP( recNum ) ; SLP:long_name = "Sea level pressure"; SLP:_FillValue = -99999.f; SLP:units = "hectopascals"; //char SectorVIS_DIR( recNum, VIS_dir_len ) ; //SectorVIS_DIR:long_name = "Sector visibility direction"; //SectorVIS_DIR:reference = "NE|NW|SE|SW|N|S|E|W"; //SectorVIS_DIR:units = "" ; // dimensionless //float SectorVIS( recNum ) ; //SectorVIS:long_name = "Sector visibility"; //SectorVIS:_FillValue = -99999.f; //SectorVIS:units = "US_statute_mile"; //int GR( recNum ) ; //GR:long_name = "Hailstone"; //GR:_FillValue = -99999; //GR:valid_range = 0, 1; //GR:units = "" ; // dimensionless //float GRsize( recNum ) ; //GRsize:long_name = "Hailstone size"; //GRsize:_FillValue = -99999.f; //GRsize:units = "inches"; //int VIRGA( recNum ) ; //VIRGA:long_name = "Virga"; //VIRGA:_FillValue = -99999; //VIRGA:valid_range = 0, 1; //VIRGA:units = "" ; // dimensionless //char VIRGAdir( recNum, VIS_dir_len ) ; //VIRGAdir:long_name = "Virga direction"; //VIRGAdir:reference = "NE|NW|SE|SW|N|S|E|W"; //VIRGAdir:units = "" ; // dimensionless char SfcObscuration( recNum, rWX_len ) ; SfcObscuration:long_name = "Surface Obscuration"; SfcObscuration:reference = "WMO #306, code table 4658"; SfcObscuration:units = "" ; // dimensionless int OctsSkyObscured( recNum ) ; OctsSkyObscured:long_name = "Octets of Sky Obscured"; OctsSkyObscured:_FillValue = -99999; OctsSkyObscured:reference = "8 bit octets"; OctsSkyObscured:units = "" ; // dimensionless //int CIGNO( recNum ) ; //CIGNO:long_name = "Ceiling height not available"; //CIGNO:_FillValue = -99999; //CIGNO:valid_range = 0, 1; //CIGNO:units = "" ; // dimensionless int Ceiling_est( recNum ) ; Ceiling_est:long_name = "Ceiling height estimate"; Ceiling_est:_FillValue = -99999; Ceiling_est:units = "feet"; int Ceiling( recNum ) ; Ceiling:long_name = "Ceiling height"; Ceiling:_FillValue = -99999; Ceiling:units = "feet"; //char VrbSkyBelow( recNum, Vrb_len ) ; //VrbSkyBelow:long_name = "Variable Sky Below"; //VrbSkyBelow:reference = "FEW|SCT|BKN|OVC"; //VrbSkyBelow:units = "" ; // dimensionless //int VrbSkyLayerHgt( recNum ) ; //VrbSkyLayerHgt:long_name = "Variable Sky Layer Height"; //VrbSkyLayerHgt:_FillValue = -99999; //VrbSkyLayerHgt:units = "feet"; //char VrbSkyAbove( recNum, Vrb_len ) ; //VrbSkyAbove:long_name = "Variable Sky Above"; //VrbSkyAbove:reference = "FEW|SCT|BKN|OVC"; //VrbSkyAbove:units = "" ; // dimensionless //char Sign_cloud( recNum, Sgn_len ) ; //Sign_cloud:long_name = "Significant cloud types"; //Sign_cloud:reference = "CB|CBMAM|TCU|ACC|SCSL|ACSL|ROTOR CLD"; //Sign_cloud:units = "" ; // dimensionless //char Sign_dist( recNum, Sgn_len ) ; //Sign_dist:long_name = "Significant distance"; //Sign_dist:reference = "VCNTY STN|VCY STN|VC STN|VCY|VC|DSNT|OMT"; //Sign_dist:units = "" ; // dimensionless //char Sign_dir( recNum, Sgn_len ) ; //Sign_dir:long_name = "Significant direction"; //Sign_dir:reference = "NE|NW|SE|SW|N|S|E|W"; //Sign_dir:units = "" ; // dimensionless //char ObscurAloft( recNum, rWX_len ) ; //ObscurAloft:long_name = "Obscuring phenomenia Aloft"; //ObscurAloft:reference = "WMO #306, code table 4658"; //ObscurAloft:units = "" ; // dimensionless char ObscurAloftSkyCond( recNum, Aloft_len ) ; ObscurAloftSkyCond:long_name = "Obscuring Aloft Sky Condition"; ObscurAloftSkyCond:reference = "FEW|SCT|BKN|OVC"; ObscurAloftSkyCond:units = "" ; // dimensionless int ObscurAloftHgt( recNum ) ; ObscurAloftHgt:long_name = "Obscuring Aloft Height"; ObscurAloftHgt:_FillValue = -99999; ObscurAloftHgt:units = "feet"; //int ACFTMSHP( recNum ) ; //ACFTMSHP:long_name = "Aircraft mishap"; //ACFTMSHP:_FillValue = -99999; //ACFTMSHP:valid_range = 0, 1; //ACFTMSHP:units = "" ; // dimensionless //int NOSPECI( recNum ) ; //NOSPECI:long_name = "No changes in weather conditions"; //NOSPECI:_FillValue = -99999; //NOSPECI:valid_range = 0, 1; //NOSPECI:units = "" ; // dimensionless //int FIRST( recNum ) ; //FIRST:long_name = "First report of the day"; //FIRST:_FillValue = -99999; //FIRST:valid_range = 0, 1; //FIRST:units = "" ; // dimensionless //int LAST( recNum ) ; //LAST:long_name = "Last report in observation coverage"; //LAST:_FillValue = -99999; //LAST:valid_range = 0, 1; //LAST:units = "" ; // dimensionless char Cloud_low( recNum, cloud_type ) ; Cloud_low:long_name = "Low Cloud type"; Cloud_low:reference = "WMO Abridged Internation Cloud Atlas"; Cloud_low:units = "" ; // dimensionless char Cloud_medium( recNum, cloud_type ) ; Cloud_medium:long_name = "Medium Cloud type"; Cloud_medium:reference = "WMO Abridged Internation Cloud Atlas"; Cloud_medium:units = "" ; // dimensionless char Cloud_high( recNum, cloud_type ) ; Cloud_high:long_name = "High Cloud type"; Cloud_high:reference = "WMO Abridged Internation Cloud Atlas"; Cloud_high:units = "" ; // dimensionless int SNINCR( recNum ) ; SNINCR:long_name = "Snow increasing rapidly, amount past hour"; SNINCR:_FillValue = -99999; SNINCR:units = "inches"; int SNINCR_TotalDepth( recNum ) ; SNINCR_TotalDepth:long_name = "Snow Total Depth on ground"; SNINCR_TotalDepth:_FillValue = -99999; SNINCR_TotalDepth:units = "inches"; int SN_depth( recNum ) ; SN_depth:long_name = "Snow depth on ground"; SN_depth:_FillValue = -99999; SN_depth:units = "inches"; float SN_waterequiv( recNum ) ; SN_waterequiv:long_name = "Water equivalent of snow on ground"; SN_waterequiv:_FillValue = -99999.f; SN_waterequiv:units = "inches"; //int SunSensorOut( recNum ) ; //SunSensorOut:long_name = "Sun Sensor Out"; //SunSensorOut:_FillValue = -99999; //SunSensorOut:valid_range = 0, 1; //SunSensorOut:units = "" ; // dimensionless int SunShineDur( recNum ) ; SunShineDur:long_name = "Sun Shine Duration"; SunShineDur:_FillValue = -99999; SunShineDur:units = "minutes"; float PRECIP_hourly( recNum ) ; PRECIP_hourly:long_name = "Hourly precipitation amount"; PRECIP_hourly:_FillValue = -99999.f; PRECIP_hourly:units = "inches"; float PRECIP_amt( recNum ) ; PRECIP_amt:long_name = "Last 3 or 6 hour precipitation amount"; PRECIP_amt:_FillValue = -99999.f; PRECIP_amt:units = "inches"; float PRECIP_24_amt( recNum ) ; PRECIP_24_amt:long_name = "24 hour precipitation amount"; PRECIP_24_amt:_FillValue = -99999.f; PRECIP_24_amt:units = "inches"; float T_tenths( recNum ) ; T_tenths:long_name = "Temperature to tenths"; T_tenths:_FillValue = -99999.f; T_tenths:units = "Celsius"; float TD_tenths( recNum ) ; TD_tenths:long_name = "Dew-point temperature to tenths"; TD_tenths:_FillValue = -99999.f; TD_tenths:units = "Celsius"; float Tmax( recNum ) ; Tmax:long_name = "Temperature max for 6-hourly reports"; Tmax:_FillValue = -99999.f; Tmax:units = "Celsius"; float Tmin( recNum ) ; Tmin:long_name = "Temperature min for 6-hourly reports"; Tmin:_FillValue = -99999.f; Tmin:units = "Celsius"; float Tmax24( recNum ) ; Tmax24:long_name = "Temperature max for 24 period at midnight"; Tmax24:_FillValue = -99999.f; Tmax24:units = "Celsius"; float Tmin24( recNum ) ; Tmin24:long_name = "Temperature min for 24 period at midnight"; Tmin24:_FillValue = -99999.f; Tmin24:units = "Celsius"; int char_Ptend( recNum ) ; char_Ptend:long_name = "Character Pressure tendency"; char_Ptend:_FillValue = -99999; char_Ptend:reference = "0|1|2|3|4|5|6|7|8 Table 12-5"; char_Ptend:valid_range = 0, 8; char_Ptend:units = "" ; // dimensionless float Ptend( recNum ) ; Ptend:long_name = "Change in Pressure in past 3 hours"; Ptend:_FillValue = -99999.f; Ptend:units = "hectopascals"; //int PWINO( recNum ) ; //PWINO:long_name = "Precipitation sensor not working"; //PWINO:_FillValue = -99999; //PWINO:valid_range = 0, 1; //PWINO:units = "" ; // dimensionless //int FZRANO( recNum ) ; //FZRANO:long_name = "Freezing Rain sensor not working"; //FZRANO:_FillValue = -99999; //FZRANO:valid_range = 0, 1; //FZRANO:units = "" ; // dimensionless //int TSNO( recNum ) ; //TSNO:long_name = "Lightning detection system not working"; //TSNO:_FillValue = -99999; //TSNO:valid_range = 0, 1; //TSNO:units = "" ; // dimensionless //int PNO( recNum ) ; //PNO:long_name = "Tipping bucket rain gauge is inoperative"; //PNO:_FillValue = -99999; //PNO:valid_range = 0, 1; //PNO:units = "" ; // dimensionless //int maintIndicator( recNum ) ; //maintIndicator:long_name = "Maintenance needed at system"; //maintIndicator:_FillValue = -99999; //maintIndicator:valid_range = 0, 1; //maintIndicator:units = "" ; // dimensionless //char PlainText( recNum, r_len ) ; //PlainText:long_name = "Plain language remarks"; //PlainText:_FillValue = "\0"; //PlainText:reference = "max length 128"; //PlainText:units = "" ; // dimensionless // Original report and remarks char report( recNum, r_len ) ; report:long_name = "Main body of report"; report:reference = "max length 128"; report:units = "" ; // dimensionless char remarks( recNum, r_len ) ; remarks:long_name = "Remarks section seperated by RMK"; remarks:reference = "max length 128"; remarks:units = "" ; // dimensionless :title = "METAR definition"; :version = 1.1; // In general: // // 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 'stn_name' must be included as the first or second position // There are 140 variables in the cdl with the last two variables are // the original report and remarks. // The actual names chosen for the netCDF variables are still up to the // data supplier. The agreement amongst this group is that all the // code that reads in the data will NOT be variable name dependent. Code // will be written generically using the netCDF inquire functions or // will employ some sort of table look-up algorithm. The names I've // included for illustration purposes were mainly borrowed from the // conventions document to offer somewhat "generic" names for these // fields. Long names are data supplier defined, but should be included // and descriptive for self-documentation purposes. // // Units must be compatible with UDUNITS and consistent for a given // variable (ie. all temperatures written out in degrees C, even though // they are reported in C or F). That's why the "units" attribute is // critical for numeric variables that may be used in calculations. // // Again, these will be the MINIMUM variables required in files used // for surface observation data exchange. Any data supplier can add extra // variables needed to further identify a station and/or its observations. }