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

20031113: IDV - reading netcdf file



>From: Tom Whittaker <address@hidden>
>Organization: SSEC
>Keywords: 200311131611.hADGBiOb008272 netCDF

Tom-

>When I try to read a netcdf file (whose "ncdump -h" is attached), and then try
>  
>to display it in the omni control, I get this message:
>
>"RealType Latitude occurs more than once: ShadowType.testIndices"
>
>in the window.
>
>The issues here is that this is a new NetCDF file and they want to "get it 
>right".  This is a "latitude-longitude grid" of data derived from 
>polar-orbitting satellites.
>
>I can make the file available if that would help.
>
>I hope you have some suggestions....thanks!

The problem is that they are using the coordinate variables incorrectly.

They have:

dimensions:
        latitude = 1801 ;
        longitude = 3600 ;

variables:
        long date ;
                date:long_name = "Date, in YYYYMMDD format" ;
        long time ;
                time:long_name = "Image time, UTC, in HHMM " ;
        float lat(latitude) ;
                lat:long_name = "Latitude" ;
                lat:units = "degrees_north" ;
                lat:precision = "1E-1" ;
                lat:missing_value = "-9999.0" ;
        float lon(longitude) ;
                lon:long_name = "Longitude" ;
                lon:units = "degrees_east" ;
                lon:precision = "1E-1" ;
                lon:missing_value = "-9999.0" ;


when it should be:


dimensions:
        latitude = 1801 ;
        longitude = 3600 ;

variables:
        long date ;
                date:long_name = "Date, in YYYYMMDD format" ;
        long time ;
                time:long_name = "Image time, UTC, in HHMM " ;
        float latitude(latitude) ;
                lat:long_name = "Latitude" ;
                lat:units = "degrees_north" ;
                lat:precision = "1E-1" ;
                lat:missing_value = "-9999.0" ;
        float longitude(longitude) ;
                lon:long_name = "Longitude" ;
                lon:units = "degrees_east" ;
                lon:precision = "1E-1" ;
                lon:missing_value = "-9999.0" ;


(i.e, lat(latitude) should be latitude(latitude) and lon(longitude)
should be longitude(longitude))

I would also suggest that they combine the date and time into
one field that is:

        long time ;
                time:long_name = "Image time" ;
                time:units: "seconds since 1970-01-01 00:00:00.0" ;

However, the IDV will not use this in any way at present, so
it doesn't matter to the IDV.  

I would also suggest trying to adhere to the COARDS or CF convention
and using a Conventions global attribute.  In that case, time is
usually represented as coordinate variable, I believe.

>Here are some VisAD-type details:
>
>I get the follow while reading:
>
>The unit attribute (null) of variable "time" is incompatible with the unit (s 
>since 1970-01-01 00:00:00.000 UTC) of the RealType of the same name. 
>Attempting to create new RealType "time_0".
>Couldn't decode unit attribute (none) of variable "binnedCloudHeight": Unit 
>not in database
>Couldn't decode unit attribute (none) of variable "cloudmask": Unit not in 
>database
>Couldn't decode unit attribute (HHMMSS) of variable "timeLatency": Unit not in
>  
>database
>
>And the following for dumpTypes():
>
> >>> dumpTypes(a)
>VisAD MathType analysis
>   TupleType has 5 components:
>    0. RealType: date
>    0.   Name = date
>    1. RealType: time_0
>    1.   Name = time_0
>    2. FunctionType:
>    2. Domain has 1 components:
>    2.  0. RealType: Latitude
>    2.  0.   Name = Latitude
>    2.  0.   Unit: deg
>    2. Range:
>    2.   RealType: Latitude
>    2.     Name = Latitude
>    2.     Unit: deg
>    3. FunctionType:
>    3. Domain has 1 components:
>    3.  0. RealType: Longitude
>    3.  0.   Name = Longitude
>    3.  0.   Unit: deg
>    3. Range:
>    3.   RealType: Longitude
>    3.     Name = Longitude
>    3.     Unit: deg
>    4. FunctionType:
>    4. Domain has 2 components:
>    4.  0. RealType: Latitude
>    4.  0.   Name = Latitude
>    4.  0.   Unit: deg
>    4.  1. RealType: Longitude
>    4.  1.   Name = Longitude
    4.  1.   Unit: deg
>    4. Range:
>    4.   RealTupleType has 6 components:
>    4.    0. RealType: brightnessTemp
>    4.    0.   Name = brightnessTemp
>    4.    0.   Unit: K
>    4.    1. RealType: binnedCloudHeight
>    4.    1.   Name = binnedCloudHeight
>    4.    2. RealType: cloudmask
>    4.    2.   Name = cloudmask
>    4.    3. RealType: rawCloudHeight
>    4.    3.   Name = rawCloudHeight
>    4.    3.   Unit: international_foot
>    4.    4. RealType: timeLatency
>    4.    4.   Name = timeLatency
>    4.    5. RealType: timeLatencyUTC
>    4.    5.   Name = timeLatencyUTC
>- - - - - - - - - - - - - - - - - - - - - - -
>DataType analysis...
>   Tuple has 5 components:
>
>     0. Real: 2.003111E7
>
>     1. Real: 160127.0
>
>     2.   FlatField of length = 1801
>     2.   (Latitude -> Latitude)
>     2.     Domain has 1 components:
>     2.       Integer1DSet (Latitude) Range = 0 to 1800
>     2.     Range has 1 components:
>     2.       0. FloatSet (Latitude) Dimension = 1
>     2.       0. number missing = 1
>
>     3.   FlatField of length = 3600
>     3.   (Longitude -> Longitude)
>     3.     Domain has 1 components:
>     3.       Integer1DSet (Longitude) Range = 0 to 3599
>     3.     Range has 1 components:
>     3.       0. FloatSet (Longitude) Dimension = 1
>     3.       0. number missing = 0
>
>     4.   FlatField of length = 6483600
>     4.   ((Latitude, Longitude) -> (brightnessTemp,
>  binnedCloudHeight,
>  cloudmask,
>  rawCloudHeight,
>  timeLatency,
>  timeLatencyUTC))
>     4.     Domain has 2 components:
>     4.       Integer2DSet: Length = 6483600
>     4.         0. Integer1DSet (Latitude) Range = 0 to 1800
>     4.         1. Integer1DSet (Longitude) Range = 0 to 3599
>     4.     Range has 6 components:
>     4.       0. FloatSet (brightnessTemp) Dimension = 1
>     4.       0. number missing = 0
>     4.       1. FloatSet (binnedCloudHeight) Dimension = 1
>     4.       1. number missing = 0
>     4.       2. FloatSet (cloudmask) Dimension = 1
>     4.       2. number missing = 0
>     4.       3. FloatSet (rawCloudHeight) Dimension = 1
>     4.       3. number missing = 0
>     4.       4. FloatSet (timeLatency) Dimension = 1
>     4.       4. number missing = 0
>     4.       5. FloatSet (timeLatencyUTC) Dimension = 1
>     4.       5. number missing = 0
>
>
>
>-- 
>Tom Whittaker (address@hidden)
>University of Wisconsin-Madison
>Space Science and Engineering Center
>Cooperative Institute for Meteorological Satellite Studies
>Phone/VoiceMail: 608.262.2759
>
>
>--------------030101050807050205040609
>Content-Type: text/plain;
> name="wayne.txt"
>Content-Transfer-Encoding: 7bit
>Content-Disposition: inline;
> filename="wayne.txt"
>
>netcdf wayne {
>dimensions:
>       latitude = 1801 ;
>       longitude = 3600 ;
>
>variables:
>       long date ;
>               date:long_name = "Date, in YYYYMMDD format" ;
>       long time ;
>               time:long_name = "Image time, UTC, in HHMM " ;
>       float lat(latitude) ;
>               lat:long_name = "Latitude" ;
>               lat:units = "degrees_north" ;
>               lat:precision = "1E-1" ;
>               lat:missing_value = "-9999.0" ;
>       float lon(longitude) ;
>               lon:long_name = "Longitude" ;
>               lon:units = "degrees_east" ;
>               lon:precision = "1E-1" ;
>               lon:missing_value = "-9999.0" ;
>       float brightnessTemp(longitude, latitude) ;
>               brightnessTemp:long_name = "11um brightness temperature of clou
> d top" ;
>               brightnessTemp:units = "degrees_Kelvin" ;
>               brightnessTemp:precision = "1E-1" ;
>               brightnessTemp:missing_value = "-9999.0" ;
>       float binnedCloudHeight(longitude, latitude) ;
>               binnedCloudHeight:long_name = "Bin 0:0-10Kft, 1:10-20, 2:20-30,
>  3:30-40, 4:>40, 7:missing" ;
>               binnedCloudHeight:units = "none" ;
>               binnedCloudHeight:precision = "1E0" ;
>               binnedCloudHeight:missing_value = "-9999.0" ;
>       float cloudmask(longitude, latitude) ;
>               cloudmask:long_name = " (0: < 10kft, 1: >10kft, 2:missing cloud
>  data)" ;
>               cloudmask:units = "none" ;
>               cloudmask:precision = "1E0" ;
>               cloudmask:missing_value = "-9999.0" ;
>       float rawCloudHeight(longitude, latitude) ;
>               rawCloudHeight:long_name = "Cloud height above mean sea level" 
> ;
>               rawCloudHeight:units = "feet" ;
>               rawCloudHeight:precision = "1E0" ;
>               rawCloudHeight:missing_value = "-9999.0" ;
>       float timeLatency(longitude, latitude) ;
>               timeLatency:long_name = "Time of observation, UTC" ;
>               timeLatency:units = "HHMMSS" ;
>               timeLatency:precision = "1E0" ;
>               timeLatency:missing_value = "-9999.0" ;
>       float timeLatencyUTC(longitude, latitude) ;
>
>// global attributes:
>               :Comments = "\' \'" ;
>               :SoftwareVersion = "$Id: sat_globalclouds.f,v 1.3 2003/10/24 16
> :14:09 benh Exp $" ;
>}
>
>--------------030101050807050205040609--
>

Date:    Thu, 13 Nov 2003 10:38:03 CST
From:    Tom Whittaker <address@hidden>
Subject: Re: 20031113: IDV - reading netcdf file


Thank you - I have passed this along...

tom