NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

[netcdf-java] GridDatatype makeSubset bug?

Hello,

I found some strange behaviour when subsetting a GridDataset:
Grib2 file used:
http://nomad3.ncep.noaa.gov/pub/gfs/rotating-0.5/gfs.t00z.pgrb2f00
netcdf-java library version: tested with both 4.2 and 4.2.18 (with the
same results)


-----------------------------code snippet
begin-----------------------------------------
GridDatatype gdt = gds.findGridDatatype(name);
int rtIndex = gdt.getRunTimeDimensionIndex();
int eIndex = gdt.getEnsembleDimensionIndex();
int zDimIndex = gdt.getZDimensionIndex();
int timeIndex = gdt.getTimeDimensionIndex();
       
Array data = gdt.readDataSlice(rtIndex, eIndex, timeIndex, zDimIndex,
-1, -1);
float[] values = (float[]) data.get1DJavaArray(float.class);

System.out.println("Length: "+values.length);
-----------------------------code snippet
end-------------------------------------------


This gives me the correct length of values: 259920
(tested with some linux-commandline-tools, so this is correct)
But when I try to make a subset like this:


-----------------------------code snippet
begin-----------------------------------------
LatLonRect bounds = new LatLonRect(new LatLonPointImpl(-90, -180), new
LatLonPointImpl(90, 180));   //(whole world)
GridDatatype gdt = gds.findGridDatatype(name);
GridDatatype gdt = gdt.makeSubset(null, null, bounds, -1, -1, -1);
int rtIndex = gdt.getRunTimeDimensionIndex();
int eIndex = gdt.getEnsembleDimensionIndex();
int zDimIndex = gdt.getZDimensionIndex();
int timeIndex = gdt.getTimeDimensionIndex();

Array data = gdt.readDataSlice(rtIndex, eIndex, timeIndex, zDimIndex,
-1, -1);
float[] values = (float[]) data.get1DJavaArray(float.class);

System.out.println("Length: "+values.length);
-----------------------------code snippet
end-------------------------------------------


This gives me the wrong length of values: 130321
As my bounds reflect the whole world, the above method
should give me the same length of values as the first mentioned or
am I missing something?

This has also effect on the point-lengths I get from the x and y axis:


-----------------------------code snippet
begin-----------------------------------------
GridCoordSystem coordSys = gdt.getCoordinateSystem();
CoordinateAxis xAxis = coordSys.getXHorizAxis();
CoordinateAxis yAxis = coordSys.getYHorizAxis();
long xSize = xAxis.getSize();
long ySize = yAxis.getSize();
System.out.println("Total size: "+xSize*ySize);
-----------------------------code snippet
end-------------------------------------------


Without subsetting I get the correct point count = 259920
With subsetting I get the same incorrect point count = 130321


This seems to be a strange issue, because it only fails with the
noaa grib files (both grib1 and grib2 version) f.e.:
grib2: http://nomad3.ncep.noaa.gov/pub/gfs/rotating-0.5/gfs.t00z.pgrb2f00
grib1: http://nomad3.ncep.noaa.gov/pub/gfs/rotating/gfs.t00z.pgrbf00

I tested other grib1 files (zygrib files, grib.us files f.e. and others)
where this doesn't fail...

Furthermore it is maybe interesting to mention, that when I display on a GUI
the subsetting method seems to only deliver points >= the 0 meridian in
England

Any help would be appreciated!

Best regards,

Alex



  • 2011 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: