Write some variables with units attributes and coordinate dimensions
package examples;
import ucar.nc2.Attribute;
import ucar.nc2.Dimension;
import ucar.nc2.NetcdfFileWriter;
import ucar.nc2.Variable;
import ucar.ma2.Array;
import ucar.ma2.DataType;
import ucar.ma2.Index2D;
import ucar.ma2.InvalidRangeException;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
public class Sfc_pres_temp_wr {
public static void main(String args[]) throws Exception {
final int NLAT = 6;
final int NLON = 12;
final float SAMPLE_PRESSURE = 900.0f;
final float SAMPLE_TEMP = 9.0f;
final float START_LAT = 25.0f;
final float START_LON = -125.0f;
String filename = "sfc_pres_temp.nc";
NetcdfFileWriter dataFile = null;
try {
dataFile = NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf3, filename);
Dimension latDim = dataFile.addDimension(null, "latitude", NLAT);
Dimension lonDim = dataFile.addDimension(null, "longitude", NLON);
List<Dimension> dims = new ArrayList<Dimension>();
dims.add(latDim);
dims.add(lonDim);
Variable vlat = dataFile.addVariable(null, "latitude", DataType.FLOAT, "latitude");
Variable vlon = dataFile.addVariable(null, "longitude", DataType.FLOAT, "longitude");
Variable vPres = dataFile.addVariable(null, "pressure", DataType.FLOAT, dims);
Variable vTemp = dataFile.addVariable(null, "temperature", DataType.FLOAT, dims);
vlat.addAttribute(new Attribute("units", "degrees_east"));
vlon.addAttribute(new Attribute("units", "degrees_north"));
vPres.addAttribute(new Attribute("units", "hPa"));
vTemp.addAttribute(new Attribute("units", "celsius"));
dataFile.create();
Array dataLat = Array.factory(DataType.FLOAT, new int[]{NLAT});
Array dataLon = Array.factory(DataType.FLOAT, new int[]{NLON});
int i, j;
for (i = 0; i < latDim.getLength(); i++) {
dataLat.setFloat(i, START_LAT + 5.f * i);
}
for (j = 0; j < lonDim.getLength(); j++) {
dataLon.setFloat(j, START_LON + 5.f * j);
}
dataFile.write(vlat, dataLat);
dataFile.write(vlon, dataLon);
int[] iDim = new int[]{latDim.getLength(), lonDim.getLength()};
Array dataTemp = Array.factory(DataType.FLOAT, iDim);
Array dataPres = Array.factory(DataType.FLOAT, iDim);
Index2D idx = new Index2D(iDim);
for (i = 0; i < latDim.getLength(); i++) {
for (j = 0; j < lonDim.getLength(); j++) {
idx.set(i, j);
dataTemp.setFloat(idx, SAMPLE_TEMP + .25f * (j * NLAT + i));
dataPres.setFloat(idx, SAMPLE_PRESSURE + (j * NLAT + i));
}
}
dataFile.write(vPres, dataPres);
dataFile.write(vTemp, dataTemp);
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidRangeException e) {
e.printStackTrace();
} finally {
if (null != dataFile) {
try {
dataFile.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
System.out.println("*** SUCCESS writing example file sfc_pres_temp.nc!");
}
}