public void testSlice3D() throws InvalidRangeException, IOException { Array a = Array.makeArray(DataType.DOUBLE, 1000, 0.0, 1.0); Array a3 = a.reshape(new int[] {10,10,10}); logger.debug("{}", NCdumpW.toString(a3, "test a3", null)); Array a2 = a3.slice(0,1); logger.debug("{}", NCdumpW.toString(a2, "a3.slice(0,1)", null)); Array a1 = a2.slice(0,1); logger.debug("{}", NCdumpW.toString(a1, "a2.slice(0,1)", null)); ArrayDouble.D2 twoD = (ArrayDouble.D2) a2; System.out.printf("wrong= %f%n", a2.getDouble(0)); System.out.printf("right= %f%n", twoD.get(0, 0)); ArrayDouble.D1 oneD = (ArrayDouble.D1) a1; System.out.printf("wrong= %f%n", a1.getDouble(0)); System.out.printf("right= %f%n", oneD.get(0)); } }
public void testAggCoordVar(NetcdfFile ncfile) throws IOException { Variable time = ncfile.findVariable("time"); assert null != time; assert time.getShortName().equals("time"); assert time.getRank() == 1 : time.getRank(); assert time.getShape()[0] == 3; assert time.getDataType() == DataType.INT; assert time.getDimension(0) == ncfile.findDimension("time"); Array data = time.read(); assert (data instanceof ArrayDouble.D1) : data.getClass().getName(); ArrayDouble.D1 dataD = (ArrayDouble.D1) data; assert dataD.get(0) == 0; assert dataD.get(1) == 10; assert dataD.get(2) == 99; }
public int findTimeIndexFromCalendarDate(int run_idx, CalendarDate want) throws IOException, InvalidRangeException { CoordinateAxisTimeHelper helper = getCoordinateAxisTimeHelper(); double wantOffset = helper.offsetFromRefDate(want); if (isInterval()) { ArrayDouble.D3 bounds = getCoordBoundsArray(); if (bounds == null) throw new IllegalStateException("getCoordBoundsArray returned null for coordinate "+getFullName()); ArrayDouble.D2 boundsForRun = (ArrayDouble.D2) bounds.slice(0,run_idx ); int idx = findSingleHit(boundsForRun, wantOffset); if (idx >= 0) return idx; if (idx == -1) return -1; // multiple hits = choose closest to the midpoint return findClosest(boundsForRun, wantOffset); } else { ArrayDouble.D2 values = getCoordValuesArray(); ArrayDouble.D1 valuesForRun = (ArrayDouble.D1) values.slice(0,run_idx ); for (int i=0; i<valuesForRun.getSize(); i++) { if (Misc.nearlyEquals(valuesForRun.get(i), wantOffset)) return i; } return -1; } }
double val = ad.get(i); assertEquals(val, tFloat64[i], 1.0e-9);
double val = ad.get(i); Assert2.assertNearlyEquals(val, tFloat64[i], 1.0e-9);
private void makeZCoordAxis(NetcdfDataset ds, String dimName, String levelsName, String unitName) { Dimension dimz = ds.findDimension(dimName); int nz = dimz.getLength(); ArrayDouble.D1 dataLev = new ArrayDouble.D1(nz); ArrayDouble.D1 dataLayers = new ArrayDouble.D1(nz + 1); // layer values are a numeric global attribute array !! Attribute layers = ds.findGlobalAttribute("VGLVLS"); for (int i = 0; i <= nz; i++) dataLayers.set(i, layers.getNumericValue(i).doubleValue()); for (int i = 0; i < nz; i++) { double midpoint = (dataLayers.get(i) + dataLayers.get(i + 1)) / 2; dataLev.set(i, midpoint); } CoordinateAxis v = new CoordinateAxis1D(ds, null, "level", DataType.DOUBLE, dimName, unitName, "synthesized coordinate from " + levelsName + " global attributes"); v.setCachedData(dataLev, true); v.addAttribute(new Attribute("positive", "down")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.GeoZ.toString())); // layer edges String edge_name = "layer"; Dimension lay_edge = new Dimension(edge_name, nz + 1); ds.addDimension(null, lay_edge); CoordinateAxis vedge = new CoordinateAxis1D(ds, null, edge_name, DataType.DOUBLE, edge_name, unitName, "synthesized coordinate from " + levelsName + " global attributes"); vedge.setCachedData(dataLayers, true); v.setBoundaryRef(edge_name); ds.addCoordinateAxis(v); ds.addCoordinateAxis(vedge); }
private void makeZCoordAxis(NetcdfDataset ds, String dimName, String levelsName, String unitName) { Dimension dimz = ds.findDimension(dimName); int nz = dimz.getLength(); ArrayDouble.D1 dataLev = new ArrayDouble.D1(nz); ArrayDouble.D1 dataLayers = new ArrayDouble.D1(nz + 1); // layer values are a numeric global attribute array !! Attribute layers = ds.findGlobalAttribute("VGLVLS"); for (int i = 0; i <= nz; i++) dataLayers.set(i, layers.getNumericValue(i).doubleValue()); for (int i = 0; i < nz; i++) { double midpoint = (dataLayers.get(i) + dataLayers.get(i + 1)) / 2; dataLev.set(i, midpoint); } CoordinateAxis v = new CoordinateAxis1D(ds, null, "level", DataType.DOUBLE, dimName, unitName, "synthesized coordinate from " + levelsName + " global attributes"); v.setCachedData(dataLev, true); v.addAttribute(new Attribute("positive", "down")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.GeoZ.toString())); // layer edges String edge_name = "layer"; Dimension lay_edge = new Dimension(edge_name, nz + 1); ds.addDimension(null, lay_edge); CoordinateAxis vedge = new CoordinateAxis1D(ds, null, edge_name, DataType.DOUBLE, edge_name, unitName, "synthesized coordinate from " + levelsName + " global attributes"); vedge.setCachedData(dataLayers, true); v.setBoundaryRef(edge_name); ds.addCoordinateAxis(v); ds.addCoordinateAxis(vedge); }
private void makeZCoordAxis(NetcdfDataset ds, String dimName, String levelsName, String unitName) { Dimension dimz = ds.findDimension(dimName); int nz = dimz.getLength(); ArrayDouble.D1 dataLev = new ArrayDouble.D1(nz); ArrayDouble.D1 dataLayers = new ArrayDouble.D1(nz + 1); // layer values are a numeric global attribute array !! Attribute layers = ds.findGlobalAttribute("VGLVLS"); for (int i = 0; i <= nz; i++) dataLayers.set(i, layers.getNumericValue(i).doubleValue()); for (int i = 0; i < nz; i++) { double midpoint = (dataLayers.get(i) + dataLayers.get(i + 1)) / 2; dataLev.set(i, midpoint); } CoordinateAxis v = new CoordinateAxis1D(ds, null, "level", DataType.DOUBLE, dimName, unitName, "synthesized coordinate from " + levelsName + " global attributes"); v.setCachedData(dataLev, true); v.addAttribute(new Attribute("positive", "down")); v.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.GeoZ.toString())); // layer edges String edge_name = "layer"; Dimension lay_edge = new Dimension(edge_name, nz + 1); ds.addDimension(null, lay_edge); CoordinateAxis vedge = new CoordinateAxis1D(ds, null, edge_name, DataType.DOUBLE, edge_name, unitName, "synthesized coordinate from " + levelsName + " global attributes"); vedge.setCachedData(dataLayers, true); v.setBoundaryRef(edge_name); ds.addCoordinateAxis(v); ds.addCoordinateAxis(vedge); }