private void showValues2D(CoordinateAxis2D axis2D) { Formatter f = new Formatter(); if (axis2D.isInterval()) { ArrayDouble.D2 coords = axis2D.getCoordValuesArray(); ArrayDouble.D3 bounds = axis2D.getCoordBoundsArray(); if (bounds == null) { infoTA.appendLine("No bounds for interval " + axis2D.getFullName()); return; } IndexIterator coordIter = coords.getIndexIterator(); IndexIterator boundsIter = bounds.getIndexIterator(); while (coordIter.hasNext()) { double coordValue = coordIter.getDoubleNext(); if (!boundsIter.hasNext()) break; double bounds1 = boundsIter.getDoubleNext(); if (!boundsIter.hasNext()) break; double bounds2 = boundsIter.getDoubleNext(); f.format("%f (%f,%f) = %f%n", coordValue, bounds1, bounds2, bounds2 - bounds1); } } else { ArrayDouble.D2 coords = axis2D.getCoordValuesArray(); IndexIterator coordIter = coords.getIndexIterator(); while (coordIter.hasNext()) { double coordValue = coordIter.getDoubleNext(); f.format("%f%n", coordValue); } } infoTA.appendLine(f.toString()); }
/** * Make height from the given data. <br> * height(x,y,z) = eta(x,y) + ( eta(x,y) + depth([n],x,y) ) * S(x,y,z) * * <p>where, S(x,y,z) = (depth_c*s(z) + (depth([n],x,y) * C(z)) / (depth_c + depth([n],x,y)) / * * @param eta eta Array * @param s s Array * @param depth depth Array * @param c c Array * @param depth_c value of depth_c * @return height data */ private ArrayDouble.D3 makeHeight(Array eta, Array s, Array depth, Array c, double depth_c) { int nz = (int) s.getSize(); Index sIndex = s.getIndex(); Index cIndex = c.getIndex(); int[] shape2D = eta.getShape(); int ny = shape2D[0]; int nx = shape2D[1]; Index etaIndex = eta.getIndex(); Index depthIndex = depth.getIndex(); ArrayDouble.D3 height = new ArrayDouble.D3(nz, ny, nx); for (int z = 0; z < nz; z++) { double sz = s.getDouble(sIndex.set(z)); double cz = c.getDouble(cIndex.set(z)); double term1 = depth_c * sz; for (int y = 0; y < ny; y++) { for (int x = 0; x < nx; x++) { double fac1 = depth.getDouble(depthIndex.set(y, x)); double term2 = fac1 * cz; double Sterm = (term1 + term2) / (depth_c + fac1); double term3 = eta.getDouble(etaIndex.set(y, x)); double term4 = (term3 + fac1) * Sterm; double hterm = term3 + term4; height.set(z, y, x, hterm); } } } return height; }
private void showDates2D(CoordinateAxis2D axis2D, CalendarDateUnit cdu) { Formatter f = new Formatter(); if (axis2D.isInterval()) { ArrayDouble.D2 coords = axis2D.getCoordValuesArray(); ArrayDouble.D3 bounds = axis2D.getCoordBoundsArray(); if (bounds == null) { infoTA.appendLine("No bounds for interval " + axis2D.getFullName()); return; } IndexIterator coordIter = coords.getIndexIterator(); IndexIterator boundsIter = bounds.getIndexIterator(); while (coordIter.hasNext()) { double coordValue = coordIter.getDoubleNext(); if (!boundsIter.hasNext()) break; double bounds1 = boundsIter.getDoubleNext(); if (!boundsIter.hasNext()) break; double bounds2 = boundsIter.getDoubleNext(); f.format( "%s (%s,%s)%n", makeCalendarDateStringOrMissing(cdu, coordValue), makeCalendarDateStringOrMissing(cdu, bounds1), makeCalendarDateStringOrMissing(cdu, bounds2)); } } else { ArrayDouble.D2 coords = axis2D.getCoordValuesArray(); IndexIterator coordIter = coords.getIndexIterator(); while (coordIter.hasNext()) { double coordValue = coordIter.getDoubleNext(); f.format("%s%n", makeCalendarDateStringOrMissing(cdu, coordValue)); } } infoTA.appendLine(f.toString()); }