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

[Datastream #OER-100746]: NetCDF Wind Profile Naming Convention



Hi Coy,

re:
> I am working on a new NetCDF file to hold Wind Profiler data (Time
> Series, Spectra, Moments and Winds). Can you point me to a naming
> convention guide line or an example file so that I can standardize my
> field names as much as possible? The closest I have found so far is the
> following but it has not been updated since 1995.
> 
> http://www.unidata.ucar.edu/software/netcdf/NUWG/

You may want to fashion your netCDF file after the data being provided
by NOAA/GSD as folks in the Unidata community have been using those
data for well over a decade.  Below is the output of 'ncdump -h' for
one of the hourly NOAA/GSD netCDF files:

/local/ldm/data% ncdump -h windprofiler_20090770600.nc
netcdf windprofiler_20090770600 {
dimensions:
        recNum = UNLIMITED ; // (28 currently)
        beam = 3 ;
        beamNameLen = 8 ;
        level = 72 ;
        staNamLen = 6 ;
variables:
        int wmoStaNum(recNum) ;
                wmoStaNum:long_name = "WMO numeric station ID" ;
                wmoStaNum:_FillValue = 1000000000 ;
        char staName(recNum, staNamLen) ;
                staName:long_name = "Alphanumeric station name" ;
        float staLat(recNum) ;
                staLat:long_name = "Station latitude" ;
                staLat:units = "degree_N" ;
                staLat:_FillValue = 1.e+38f ;
                staLat:valid_range = -90.f, 90.f ;
        float staLon(recNum) ;
                staLon:long_name = "Station longitude" ;
                staLon:units = "degree_E" ;
                staLon:_FillValue = 1.e+38f ;
                staLon:valid_range = -180.f, 180.f ;
        float staElev(recNum) ;
                staElev:long_name = "Elevation above MSL" ;
                staElev:units = "meter" ;
                staElev:_FillValue = 1.e+38f ;
                staElev:valid_range = 0.f, 8000.f ;
        double timeObs(recNum) ;
                timeObs:long_name = "Time of observation" ;
                timeObs:units = "seconds since 1970-1-1 00:00:00.0" ;
                timeObs:_FillValue = 1.e+38 ;
        float pressure(recNum) ;
                pressure:long_name = "Pressure reduced to MSL" ;
                pressure:units = "hectopascal" ;
                pressure:_FillValue = 1.e+38f ;
        float temperature(recNum) ;
                temperature:long_name = "Surface temperature" ;
                temperature:units = "kelvin" ;
                temperature:_FillValue = 1.e+38f ;
        float relHumidity(recNum) ;
                relHumidity:long_name = "Surface relative humidity" ;
                relHumidity:units = "percent" ;
                relHumidity:_FillValue = 1.e+38f ;
        float windSpeedSfc(recNum) ;
                windSpeedSfc:long_name = "Surface wind speed" ;
                windSpeedSfc:units = "meter/sec" ;
                windSpeedSfc:_FillValue = 1.e+38f ;
                windSpeedSfc:valid_range = -150.f, 150.f ;
        float windDirSfc(recNum) ;
                windDirSfc:long_name = "Surface wind direction" ;
                windDirSfc:units = "degree" ;
                windDirSfc:_FillValue = 1.e+38f ;
                windDirSfc:valid_range = 0.f, 360.f ;
        float rainRate(recNum) ;
                rainRate:long_name = "Rainfall rate - surface" ;
                rainRate:units = "kg/meter2/sec" ;
                rainRate:_FillValue = 1.e+38f ;
        char submode(recNum) ;
                submode:long_name = "NOAA wind profiler submode information" ;
                submode:valueA = "Wind profiler operating in submode A" ;
                submode:valueB = "Wind profiler operating in submode B" ;
        float levels(level) ;
                levels:long_name = "Height above station" ;
                levels:units = "meter" ;
                levels:_FillValue = 1.e+38f ;
                levels:valid_range = 0.f, 16250.f ;
        short levelMode(level) ;
                levelMode:long_name = "Wind profiler mode information" ;
                levelMode:value1 = "Data from low mode" ;
                levelMode:value2 = "Data from high mode" ;
                levelMode:value3 = "Missing" ;
                levelMode:level = "levels" ;
                levelMode:_FillValue = 3s ;
        float uComponent(recNum, level) ;
                uComponent:long_name = "u (eastward) component" ;
                uComponent:level = "levels" ;
                uComponent:_FillValue = 1.e+38f ;
        float vComponent(recNum, level) ;
                vComponent:long_name = "v (northward) component" ;
                vComponent:level = "levels" ;
                vComponent:_FillValue = 1.e+38f ;
        float wComponent(recNum, level) ;
                wComponent:long_name = "w (upward) component" ;
                wComponent:level = "levels" ;
                wComponent:_FillValue = 1.e+38f ;
        byte uvQualityCode(recNum, level) ;
                uvQualityCode:long_name = "NOAA wind profiler quality control 
test results for U and V" ;
                uvQualityCode:level = "levels" ;
                uvQualityCode:_FillValue = -1b ;
                uvQualityCode:reference = "Quality code bit table in global 
attributes section" ;
        byte wQualityCode(recNum, level) ;
                wQualityCode:long_name = "NOAA wind profiler quality control 
test results for W" ;
                wQualityCode:level = "levels" ;
                wQualityCode:_FillValue = -1b ;
                wQualityCode:reference = "Quality code bit table in global 
attributes section" ;
        float windSpeedStdDev(recNum, level) ;
                windSpeedStdDev:long_name = "Wind speed standard deviation" ;
                windSpeedStdDev:units = "meter/sec" ;
                windSpeedStdDev:level = "levels" ;
                windSpeedStdDev:_FillValue = 1.e+38f ;
        float wStdDev(recNum, level) ;
                wStdDev:long_name = "W standard deviation" ;
                wStdDev:units = "meter/sec" ;
                wStdDev:level = "levels" ;
                wStdDev:_FillValue = 1.e+38f ;
        char beamNames(beam, beamNameLen) ;
                beamNames:long_name = "Beam direction names" ;
        float azimBeam(recNum, beam) ;
                azimBeam:long_name = "Azimuth of beam" ;
                azimBeam:units = "degree" ;
                azimBeam:beam = "beamNames" ;
                azimBeam:_FillValue = 1.e+38f ;
                azimBeam:valid_range = 0.f, 360.f ;
        float elevBeam(recNum, beam) ;
                elevBeam:long_name = "Elevation of beam" ;
                elevBeam:units = "degree" ;
                elevBeam:beam = "beamNames" ;
                elevBeam:_FillValue = 1.e+38f ;
                elevBeam:valid_range = 0.f, 90.f ;
        byte momentsQualityCode(recNum, level, beam) ;
                momentsQualityCode:long_name = "NOAA wind profiler data quality 
control test results for moments" ;
                momentsQualityCode:level = "levels" ;
                momentsQualityCode:beam = "beamNames" ;
                momentsQualityCode:_FillValue = -1b ;
                momentsQualityCode:reference = "Quality code bit table in 
global attributes section" ;
        float consensusNum(recNum, level, beam) ;
                consensusNum:long_name = "Consensus number" ;
                consensusNum:level = "levels" ;
                consensusNum:beam = "beamNames" ;
                consensusNum:_FillValue = 1.e+38f ;
        float peakPower(recNum, level, beam) ;
                peakPower:long_name = "Spectral peak power" ;
                peakPower:units = "dB" ;
                peakPower:level = "levels" ;
                peakPower:beam = "beamNames" ;
                peakPower:_FillValue = 1.e+38f ;
        float radVelocity(recNum, level, beam) ;
                radVelocity:long_name = "Radial velocity" ;
                radVelocity:units = "meter/sec" ;
                radVelocity:level = "levels" ;
                radVelocity:beam = "beamNames" ;
                radVelocity:_FillValue = 1.e+38f ;
        float specWidth(recNum, level, beam) ;
                specWidth:long_name = "Spectral width" ;
                specWidth:units = "meter2/sec2" ;
                specWidth:level = "levels" ;
                specWidth:beam = "beamNames" ;
                specWidth:_FillValue = 1.e+38f ;

// global attributes:
                :avgTimePeriod = "60 minutes" ;
                :qualityCodeNoBitsSet = "Good" ;
                :qualityCodeBit1Set = "Reserved" ;
                :qualityCodeBit2Set = "Test results inconclusive" ;
                :qualityCodeBit3Set = "Test B performed and failed" ;
                :qualityCodeBit4Set = "Test A performed and failed" ;
                :qualityCodeBit5Set = "Reserved" ;
                :qualityCodeBit6Set = "Reserved" ;
                :qualityCodeBit7Set = "Reserved" ;
                :qualityCodeBit8Set = "Reserved" ;
                :qualityCodeBits1To8Set = "Missing" ;
                :qualityCodeLeastSignificantBit = "bit1" ;
                :title = "WPDN data : selected by ob time : time range from 
1237352400 to 1237356000" ;

The scheme for the 6-minute profiler data is much the same:

/local/ldm/data% ncdump -h windprofiler_06min_20090770612.nc
netcdf windprofiler_06min_20090770612 {
dimensions:
        recNum = UNLIMITED ; // (25 currently)
        beam = 3 ;
        beamNameLen = 8 ;
        level = 72 ;
        staNamLen = 6 ;
variables:
        int wmoStaNum(recNum) ;
                wmoStaNum:long_name = "WMO numeric station ID" ;
        char staName(recNum, staNamLen) ;
                staName:long_name = "Alphanumeric station name" ;
        float staLat(recNum) ;
                staLat:long_name = "Station latitude" ;
                staLat:units = "degree_N" ;
                staLat:_FillValue = 1.e+38f ;
                staLat:valid_range = -90.f, 90.f ;
        float staLon(recNum) ;
                staLon:long_name = "Station longitude" ;
                staLon:units = "degree_E" ;
                staLon:_FillValue = 1.e+38f ;
                staLon:valid_range = -180.f, 180.f ;
        float staElev(recNum) ;
                staElev:long_name = "Elevation above MSL" ;
                staElev:units = "meter" ;
                staElev:_FillValue = 1.e+38f ;
                staElev:valid_range = 0.f, 8000.f ;
        double timeObs(recNum) ;
                timeObs:long_name = "Time of observation" ;
                timeObs:units = "seconds since 1970-1-1 00:00:00.0" ;
                timeObs:_FillValue = 1.e+38 ;
        float pressure(recNum) ;
                pressure:long_name = "Pressure reduced to MSL" ;
                pressure:units = "hectopascal" ;
                pressure:_FillValue = 1.e+38f ;
        float temperature(recNum) ;
                temperature:long_name = "Surface temperature" ;
                temperature:units = "kelvin" ;
                temperature:_FillValue = 1.e+38f ;
        float relHumidity(recNum) ;
                relHumidity:long_name = "Surface relative humidity" ;
                relHumidity:units = "percent" ;
                relHumidity:_FillValue = 1.e+38f ;
        float windSpeedSfc(recNum) ;
                windSpeedSfc:long_name = "Surface wind speed" ;
                windSpeedSfc:units = "meter/sec" ;
                windSpeedSfc:_FillValue = 1.e+38f ;
                windSpeedSfc:valid_range = -150.f, 150.f ;
        float windDirSfc(recNum) ;
                windDirSfc:long_name = "Surface wind direction" ;
                windDirSfc:units = "degree" ;
                windDirSfc:_FillValue = 1.e+38f ;
                windDirSfc:valid_range = 0.f, 360.f ;
        float rainRate(recNum) ;
                rainRate:long_name = "Rainfall rate - surface" ;
                rainRate:units = "kg/meter2/sec" ;
                rainRate:_FillValue = 1.e+38f ;
        char submode(recNum) ;
                submode:long_name = "NOAA wind profiler submode information" ;
                submode:valueA = "Wind profiler operating in submode A" ;
                submode:valueB = "Wind profiler operating in submode B" ;
        float levels(level) ;
                levels:long_name = "Height above station" ;
                levels:units = "meter" ;
                levels:_FillValue = 1.e+38f ;
                levels:valid_range = 0.f, 16250.f ;
        short levelMode(level) ;
                levelMode:long_name = "Wind profiler mode information" ;
                levelMode:value1 = "Data from low mode" ;
                levelMode:value2 = "Data from high mode" ;
                levelMode:value3 = "Missing" ;
                levelMode:level = "levels" ;
                levelMode:_FillValue = 3s ;
        float uComponent(recNum, level) ;
                uComponent:long_name = "u (eastward) component" ;
                uComponent:level = "levels" ;
                uComponent:_FillValue = 1.e+38f ;
        float vComponent(recNum, level) ;
                vComponent:long_name = "v (northward) component" ;
                vComponent:level = "levels" ;
                vComponent:_FillValue = 1.e+38f ;
        float wComponent(recNum, level) ;
                wComponent:long_name = "w (upward) component" ;
                wComponent:level = "levels" ;
                wComponent:_FillValue = 1.e+38f ;
        byte uvQualityCode(recNum, level) ;
                uvQualityCode:long_name = "NOAA wind profiler quality control 
test results for U and V" ;
                uvQualityCode:level = "levels" ;
                uvQualityCode:_FillValue = -1b ;
                uvQualityCode:reference = "Quality code bit table in global 
attributes section" ;
        byte wQualityCode(recNum, level) ;
                wQualityCode:long_name = "NOAA wind profiler quality control 
test results for W" ;
                wQualityCode:level = "levels" ;
                wQualityCode:_FillValue = -1b ;
                wQualityCode:reference = "Quality code bit table in global 
attributes section" ;
        float windSpeedStdDev(recNum, level) ;
                windSpeedStdDev:long_name = "Wind speed standard deviation" ;
                windSpeedStdDev:units = "meter/sec" ;
                windSpeedStdDev:level = "levels" ;
                windSpeedStdDev:_FillValue = 1.e+38f ;
        float wStdDev(recNum, level) ;
                wStdDev:long_name = "W standard deviation" ;
                wStdDev:units = "meter/sec" ;
                wStdDev:level = "levels" ;
                wStdDev:_FillValue = 1.e+38f ;
        char beamNames(beam, beamNameLen) ;
                beamNames:long_name = "Beam direction names" ;
        float azimBeam(recNum, beam) ;
                azimBeam:long_name = "Azimuth of beam" ;
                azimBeam:units = "degree" ;
                azimBeam:beam = "beamNames" ;
                azimBeam:_FillValue = 1.e+38f ;
                azimBeam:valid_range = 0.f, 360.f ;
        float elevBeam(recNum, beam) ;
                elevBeam:long_name = "Elevation of beam" ;
                elevBeam:units = "degree" ;
                elevBeam:beam = "beamNames" ;
                elevBeam:_FillValue = 1.e+38f ;
                elevBeam:valid_range = 0.f, 90.f ;
        byte momentsQualityCode(recNum, level, beam) ;
                momentsQualityCode:long_name = "NOAA wind profiler data quality 
control test results for moments" ;
                momentsQualityCode:level = "levels" ;
                momentsQualityCode:beam = "beamNames" ;
                momentsQualityCode:_FillValue = -1b ;
                momentsQualityCode:reference = "Quality code bit table in 
global attributes section" ;
        float consensusNum(recNum, level, beam) ;
                consensusNum:long_name = "Consensus number" ;
                consensusNum:level = "levels" ;
                consensusNum:beam = "beamNames" ;
                consensusNum:_FillValue = 1.e+38f ;
        float peakPower(recNum, level, beam) ;
                peakPower:long_name = "Spectral peak power" ;
                peakPower:units = "dB" ;
                peakPower:level = "levels" ;
                peakPower:beam = "beamNames" ;
                peakPower:_FillValue = 1.e+38f ;
        float radVelocity(recNum, level, beam) ;
                radVelocity:long_name = "Radial velocity" ;
                radVelocity:units = "meter/sec" ;
                radVelocity:level = "levels" ;
                radVelocity:beam = "beamNames" ;
                radVelocity:_FillValue = 1.e+38f ;
        float specWidth(recNum, level, beam) ;
                specWidth:long_name = "Spectral width" ;
                specWidth:units = "meter2/sec2" ;
                specWidth:level = "levels" ;
                specWidth:beam = "beamNames" ;
                specWidth:_FillValue = 1.e+38f ;

// global attributes:
                :avgTimePeriod = "6 minutes" ;
                :qualityCodeNoBitsSet = "Good" ;
                :qualityCodeBit1Set = "Reserved" ;
                :qualityCodeBit2Set = "Test results inconclusive" ;
                :qualityCodeBit3Set = "Test B performed and failed" ;
                :qualityCodeBit4Set = "Test A performed and failed" ;
                :qualityCodeBit5Set = "Reserved" ;
                :qualityCodeBit6Set = "Reserved" ;
                :qualityCodeBit7Set = "Reserved" ;
                :qualityCodeBit8Set = "Reserved" ;
                :qualityCodeBits1To8Set = "Missing" ;
                :qualityCodeLeastSignificantBit = "bit1" ;
                :title = "WPDN data : selected by ob time : time range from 
1237356360 to 1237356720" ;



Cheers,

Tom
--
****************************************************************************
Unidata User Support                                    UCAR Unidata Program
(303) 497-8642                                                 P.O. Box 3000
address@hidden                                   Boulder, CO 80307
----------------------------------------------------------------------------
Unidata HomePage                       http://www.unidata.ucar.edu
****************************************************************************


Ticket Details
===================
Ticket ID: OER-100746
Department: Support Datastream
Priority: Normal
Status: Closed