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.

Re: [netcdf-java] ArrayIndexOutOfBoundException when generating a large file

Hi Jean-Michel:

ok, finally found it - an overflow of an int variable in some obscure place. i 
will get a new release out on monday that will fix.

BTW, you can cut your time approx in half by using:

   NetcdfFileWriteable.setFill(false);


thanks for debugging!

Jean-Michel.Perraud@xxxxxxxx wrote:
Hi John,

I was not using setLargeFile(true) indeed. I still get the same exception with 
it added. I attach the test program I use. I ran it both from a WinXP 32 bit 
workstation and a Windows Server 2003 R2 x64 with the same behavior. The JVM is:
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)

Thanks for your help.

Cheers,
Jean-Michel
-----Original Message-----
From: John Caron [mailto:caron@xxxxxxxxxxxxxxxx] Sent: Thursday, 30 April 2009 9:37 PM
To: Perraud, Jean-Michel (CLW, Black Mountain)
Cc: netcdf-java@xxxxxxxxxxxxxxxx
Subject: Re: [netcdf-java] ArrayIndexOutOfBoundException when generating a 
large file

Hi Jean-Michel:

Are you setting NetcdfFileWriteable.setLargeFile(true) ?
Can i see your createLatLonTimeDataCube() method?

Jean-Michel.Perraud@xxxxxxxx wrote:
Hi,

I want to generate a lat*lon*time data file which I estimate will be ~16GB. I 
am using the latitude as an unlimited dimension to (1) lay out the file for 
efficient reading of time series and (2) as I understand, overcome the 4GB size 
limit. Things work fine with small data. Testing with lat=300, lon=300 and 
time=40000 the file fails to grow beyond 8GB. This is only my second 
significant use of netcdf and I am probably missing something obvious to 
seasoned netCDF users.

I am using netcdfAll-4.0.jar. The stack trace in Eclipse is from the close() 
method, but things must go pear-shaped before as only half the records are 
output (179 out of 300 latitudes).

Any advice would be appreciated. Sample code/netcdf structure follows.
Cheers
-------------------------------------------
Jean-Michel Perraud
Prediction and Reporting Technologies, CSIRO Land and Water


Thread [main] (Suspended (exception ArrayIndexOutOfBoundsException))    
        RandomAccessFile.write(int) line: 747    // 
ArrayIndexOutOfBoundsException: -2013020
        RandomAccessFile.writeInt(int) line: 1438       
        N3header.writeNumrecs() line: 900       
        N3raf(N3iosp).flush() line: 869 
        NetcdfFileWriteable.flush() line: 731   
        NetcdfFileWriteable.close() line: 741   
        TestLargeGeneration.main(String[]) line: 55     

netcdf file://XXXX/tmp/test.nc {
 dimensions:
   time = 40000;
   lat = UNLIMITED;   // (179 currently)
   lon = 300;
 variables:
   float testVar(lat=179, lon=300, time=40000);
     :long_name = "testVar";
     :units = "mm";
     :missing_value = -9999.0f; // float
     :_FillValue = -9999.0f; // float
   char cellId(lat=179, lon=300);
     :long_name = "Cell ID";
   float lat(lat=179);
     :units = "degrees_north";
     :axis = "Y";
     :standard_name = "latitude";
     :_CoordinateAxisType = "Lat";
   float lon(lon=300);
     :units = "degrees_east";
     :axis = "X";
     :standard_name = "longitude";
     :_CoordinateAxisType = "Lon";
   int time(time=40000);
     :units = "days since 1889-01-01";
     :axis = "T";
     :standard_name = "time";
     :long_name = "time";
     :_CoordinateAxisType = "Time";
}
#################################
                try {
                        writeableFile = createLatLonTimeDataCube(filename);
                        // The outer dimension has shape 1, since we will write 
one record
                        // at a time, and one
                        // record corresponds to one latitude ordinate
                        ArrayFloat.D3 variableData = new ArrayFloat.D3(1, 
LON_LEN, TIME_LEN);
                        // ArrayObject.D2 cellIdData = new
                        // ArrayObject.D2(class(java.lang.String), 
latDim.getLength(),
                        // lonDim.getLength());
                        // An array to record the latitude ordinate
                        ucar.ma2.Array latData = 
ucar.ma2.Array.factory(DataType.FLOAT,
                                        new int[] { 1 });

                        // The origin to use to write the runoff record
                        int[] origin = new int[] { 0, 0, 0 }; // lat, lon, time
                        // The origin to use to write the latitude for each 
record
                        int[] lat_origin = new int[] { 0 };

                        for (int lat = 0; lat < LAT_LEN; lat++) {
                                latData.setFloat(latData.getIndex(), (float) 
(lat / 10.0));
                                for (int lon = 0; lon < LON_LEN; lon++) {
                                        for (int time = 0; time < TIME_LEN; 
time++) {
                                                variableData.set(0, lon, time, 
(float) time);
                                        }
                                }
                                // write the data out for this record
                                origin[0] = lat;
                                lat_origin[0] = lat;
                                writeableFile.write(variableName, origin, 
variableData);
                                writeableFile.write(latVar, lat_origin, 
latData);
                                writeableFile.flush();
                        }
                } finally {
                        if (writeableFile != null)
                                writeableFile.close(); // Exception is caught 
here.
                }
#################################


_______________________________________________
netcdf-java mailing list
netcdf-java@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit: http://www.unidata.ucar.edu/mailing_lists/




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