/* * Copyright 1997, University Corporation for Atmospheric Research * See COPYRIGHT file for copying and redistribution conditions. */ package ucar.tests; import ucar.netcdf.*; import java.io.IOException; import java.lang.reflect.Array; import ucar.multiarray.MultiArray; import ucar.multiarray.MultiArrayImpl; import ucar.multiarray.ArrayMultiArray; import ucar.multiarray.MultiArrayProxy; import ucar.multiarray.SliceMap; /** * @author $Author: dglo $ * @version $Revision: 1.2 $ $Date: 2000-08-30 18:55:52 $ */ public class TestNetcdf { public static String MultiArrayToString(MultiArray ma) { StringBuffer buf = new StringBuffer(); final int rank = ma.getRank(); if (rank > 0) { buf.append("{\n\t"); final int [] dims = ma.getLengths(); final int last = dims[0] -1; for(int ii = 0; ii <= last; ii++) { final MultiArray inner = new MultiArrayProxy(ma, new SliceMap(0, ii)); buf.append(MultiArrayToString(inner)); if(ii != last) buf.append(", "); } buf.append("\n}"); } else { try { buf.append(ma.get((int [])null)); } catch (IOException ee) {} } return buf.toString(); } public static void main(String[] args) { String fname; if(args.length == 0) { fname = new String("t.nc"); } else { fname = args[args.length -1]; } System.out.print("path: "); System.out.println(fname); try { Schema schema = new Schema(); // scalar variable schema.put( new ProtoVariable("t1", Integer.TYPE, (Dimension [])null)); UnlimitedDimension timeD = new UnlimitedDimension("time"); Dimension latD = new Dimension("lat", 45); Dimension lonD = new Dimension("lon", 90); Dimension hgtD = new Dimension("level", 12); schema.put( new ProtoVariable(timeD.getName(), Double.TYPE, timeD)); schema.put( new ProtoVariable(latD.getName(), Byte.TYPE, latD)); schema.put( new ProtoVariable(lonD.getName(), Short.TYPE, lonD)); schema.put(new ProtoVariable(hgtD.getName(), Integer.TYPE, hgtD)); ProtoVariable temperatureV; { Dimension[] Tdims = new Dimension[4]; Tdims[0] = timeD; Tdims[1] = hgtD; Tdims[2] = latD; Tdims[3] = lonD; temperatureV = new ProtoVariable("temperature", Float.TYPE, Tdims); AttributeSet Vattrs = temperatureV.getAttributes(); Vattrs.put( new Attribute("units", "degree_Celsius")); double [] vr = { -100., 200.}; Vattrs.put( new Attribute("valid_range", vr)); Vattrs.put( new Attribute("missing_value", new Double(-999))); Vattrs.put( new Attribute("_FillValue", -9999)); schema.put(temperatureV); } schema.putAttribute(new Attribute("conventions", "none")); NetcdfFile nc = new NetcdfFile(fname, true, true, schema); /* System.out.println(nc); */ { final int nlats = latD.getLength(); byte [] lats = new byte[nlats]; byte lat = (byte)(-nlats/2); for(int ii = 0; ii < nlats; ii++, lat++) lats[ii] = lat; int [] origin = {0}; nc.get(latD.getName()).copyin(origin, new ArrayMultiArray(lats)); } { final int nlons = lonD.getLength(); short [] lons = new short[nlons]; short lon = (short)(-(nlons/2 -1)); for(int ii = 0; ii < nlons; ii++, lon++) lons[ii] = lon; int [] origin = {0}; nc.get(lonD.getName()).copyin(origin, new ArrayMultiArray(lons)); } { int [] hgts = {1000, 925, 850, 700, 500, 400, 300, 250, 200, 150, 100, 50}; int [] origin = {0}; nc.get(hgtD.getName()).copyin(origin, new ArrayMultiArray(hgts)); } { Variable tao = nc.get(timeD.getName()); double time = 0.; int [] index = { 0, 0, 0, 0}; for(; index[0] < 5; index[0]++, time += 60.) { if(index[0] == 1) // don't fill record 1 nc.setFill(false); tao.setDouble(index, time); if(index[0] == 1) nc.setFill(true); } } nc.close(); } catch (Exception ee) { System.out.println(ee); } try { NetcdfFile nc = new NetcdfFile(fname, false); System.out.println(nc); Variable timeV = nc.get("time"); int[] origin = new int[timeV.getRank()]; int[] extent = timeV.getLengths(); MultiArray times = timeV.copyout(origin, extent); System.out.println(MultiArrayToString(times)); nc.close(); } catch (Exception ee) { System.out.println(ee); } // System.exit(0); try { fname = new String("test.nc"); NetcdfFile nc = new NetcdfFile(fname, false); System.out.println(nc); Variable ma = nc.get("Float"); int [] origin = {1, 1, 1}; int [] extent = {2, 3, 6}; MultiArray flts = ma.copyout(origin, extent); // System.out.println(MultiArrayToString(flts)); nc.close(); final Schema sc2 = new Schema(nc); final NetcdfFile clone = new NetcdfFile("clone.nc", true, true, sc2); ma = clone.get(ma.getName()); ma.copyin(origin, flts); MultiArray cflts = ma.copyout(origin, extent); System.out.println(MultiArrayToString(cflts)); MultiArray cflts2 = new MultiArrayImpl(extent, ma.toArray(new float[36], origin, extent)); System.out.println(MultiArrayToString(cflts2)); } catch (Exception ee) { System.out.println(ee); } } }