This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
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); } }