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.
Hi Santi: I think you want origin[] = {100*steps,0,0} One thing to double check is the order of your dimensions must match the origin array. Attached is an example. Ticket Details ================== Ticket ID: FDZ-419409 Department: Support netCDF Java Priority: Normal Status: Open
package ucar.nc2; import junit.framework.*; import ucar.ma2.*; import java.io.*; import java.util.*; /** Test nc2 write JUnit framework. */ public class TestWriteInSections extends TestCase { public TestWriteInSections( String name) { super(name); } public void testWrite() throws IOException, InvalidRangeException { String filename = TestNC2.topDir+"testWriteInSections.nc"; NetcdfFileWriteable ncfile = NetcdfFileWriteable.createNew(filename, false); // define dimensions Dimension timeDim = ncfile.addDimension("time", 200, true, false, false); // try with and without isUnlimited = true Dimension latDim = ncfile.addDimension("lat", 64); Dimension lonDim = ncfile.addDimension("lon", 99); // define Variables ArrayList dims = new ArrayList(); dims.add( timeDim); dims.add( latDim); dims.add( lonDim); ncfile.addVariable("temperature", DataType.DOUBLE, dims); ncfile.addVariableAttribute("temperature", "units", "K"); // create the file ncfile.create(); // write some data ArrayDouble A = new ArrayDouble.D3(10, latDim.getLength(), lonDim.getLength()); Index ima = A.getIndex(); int[] origin = new int[3]; int ntimes_per_step = 10; int nsteps = timeDim.getLength() / ntimes_per_step; for (int step=0; step<nsteps; step++) { // fill array with fake data for (int t=0; t<ntimes_per_step; t++) { for (int i=0; i<latDim.getLength(); i++) { for (int j=0; j<lonDim.getLength(); j++) { int time = step * ntimes_per_step + t; A.setDouble(ima.set(t,i,j), (double) (time*10000+i*100+j)); } } } // write it to disk origin[0] = step * ntimes_per_step; ncfile.write("temperature", origin, A); } ////////////////////////////////////////////////////////////////////// // test reading without closing the file // read entire array Variable temp = ncfile.findVariable("temperature"); assert (null != temp); Array tA = temp.read(); assert (tA.getRank() == 3); ima = tA.getIndex(); int[] shape = tA.getShape(); for (int t=0; t<shape[0]; t++) { for (int i=0; i<shape[1]; i++) { for (int j=0; j<shape[2]; j++) { assert( tA.getDouble(ima.set(t, i,j)) == (double) (t*10000+i*100+j)); } } } ////////////////////////////////////////////////////////////////////// // test reading without reopening the file ncfile.close(); NetcdfFile ncfile2 = NetcdfFile.open(filename); // read entire array temp = ncfile2.findVariable("temperature"); assert (null != temp); tA = temp.read(); assert (tA.getRank() == 3); ima = tA.getIndex(); shape = tA.getShape(); for (int t=0; t<shape[0]; t++) { for (int i=0; i<shape[1]; i++) { for (int j=0; j<shape[2]; j++) { assert( tA.getDouble(ima.set(t, i,j)) == (double) (t*10000+i*100+j)); } } } ncfile2.close(); System.out.println( "*****************Test Write done on "+filename); } }
netcdf-java
archives: