[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[Datastream #OER-100746]: NetCDF Wind Profile Naming Convention
- Subject: [Datastream #OER-100746]: NetCDF Wind Profile Naming Convention
- Date: Wed, 18 Mar 2009 00:33:26 -0600
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