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] BUG: Rectilinear sub-grid miscalculates coord edges

See test case below. foo.ncml defines a rectilinear, t-y-x, 4x4x4 grid named "foo". fooSubGrid is the 2x2x2 "central" subset of fooGrid.

foo.ncml:

<?xml version="1.0" encoding="UTF-8"?>
<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2";>
    <dimension name="time" length="4" />
    <dimension name="lat"  length="4"  />
    <dimension name="lon"  length="4"  />
    <dimension name="bnds" length="2"  />

    <variable name="time" shape="time" type="double">
        <attribute name="units" type="String" value="days since 1850-01-01" />
        <attribute name="calendar" type="String" value="standard" />
        <attribute name="bounds" type="String" value="time_bnds" />
        <values>15.5 45.0 74.5 105.0</values>
    </variable>

    <variable name="time_bnds" shape="time bnds" type="double">
        <values>0.0 31.0 31.0 59.0 59.0 90.0 90.0 120.0</values>
    </variable>

    <variable name="lat" shape="lat" type="double">
        <attribute name="units" type="String" value="degrees_north" />
        <attribute name="bounds" type="String" value="lat_bnds" />
        <values>-54 9 54 81</values>
    </variable>

    <variable name="lat_bnds" shape="lat bnds" type="double">
        <values>-90 -18 -18 36 36 72 72 90</values>
    </variable>

    <variable name="lon" shape="lon" type="double">
        <attribute name="units" type="String" value="degrees_east" />
        <attribute name="bounds" type="String" value="lon_bnds" />
        <values>18 72 162 288</values>
    </variable>

    <variable name="lon_bnds" shape="lon bnds" type="double">
        <values>0 36 36 108 108 216 216 360</values>
    </variable>

    <variable name="foo" shape="time lat lon" type="float">
        <values start="1.0" increment="1.0" />
    </variable>
</netcdf>


Foo.java:

    public static void main(String[] args) throws IOException, 
InvalidRangeException {
        File fooNcmlFile = new File("foo.ncml");
        NetcdfDataset fooDataset = 
NetcdfDataset.openDataset(fooNcmlFile.getAbsolutePath());

        try {
            GridDataset fooGridDataset = new GridDataset(fooDataset);
            GridDatatype fooGrid = fooGridDataset.findGridDatatype("foo");

            CoordinateAxis1D fooTimeAxis = 
fooGrid.getCoordinateSystem().getTimeAxis1D();
            CoordinateAxis1D fooLatAxis  = (CoordinateAxis1D) 
fooGrid.getCoordinateSystem().getYHorizAxis();
            CoordinateAxis1D fooLonAxis  = (CoordinateAxis1D) 
fooGrid.getCoordinateSystem().getXHorizAxis();

            // Expected: [0.0, 31.0, 59.0, 90.0, 120.0]
            // Actual:   [0.0, 31.0, 59.0, 90.0, 120.0]
            System.out.println(Arrays.toString(fooTimeAxis.getCoordEdges()));

            // Expected: [-90.0, -18.0, 36.0, 72.0, 90.0]
            // Actual:   [-90.0, -18.0, 36.0, 72.0, 90.0]
            System.out.println(Arrays.toString(fooLatAxis.getCoordEdges()));

            // Expected: [0.0, 36.0, 108.0, 216.0, 360.0]
            // Actual:   [0.0, 36.0, 108.0, 216.0, 360.0]
            System.out.println(Arrays.toString(fooLonAxis.getCoordEdges()));


            Range middleRange = new Range(1, 2);
            GridDatatype fooSubGrid = fooGrid.makeSubset(null, null, 
middleRange, null, middleRange, middleRange);

            CoordinateAxis1D fooSubTimeAxis = 
fooSubGrid.getCoordinateSystem().getTimeAxis1D();
            CoordinateAxis1D fooSubLatAxis  = (CoordinateAxis1D) 
fooSubGrid.getCoordinateSystem().getYHorizAxis();
            CoordinateAxis1D fooSubLonAxis  = (CoordinateAxis1D) 
fooSubGrid.getCoordinateSystem().getXHorizAxis();

            // Expected: [31.0, 59.0, 90.0]
            // Actual:   [30.25, 59.75, 89.25]
            System.out.println(Arrays.toString(fooSubTimeAxis.getCoordEdges()));

            // Expected: [-18.0, 36.0, 72.0]
            // Actual:   [-13.5, 31.5, 76.5]
            System.out.println(Arrays.toString(fooSubLatAxis.getCoordEdges()));

            // Expected: [36.0, 108.0, 216.0]
            // Actual:   [27.0, 117.0, 207.0]
            System.out.println(Arrays.toString(fooSubLonAxis.getCoordEdges()));
        } finally {
            fooDataset.close();
        }
    }



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