Update to VisAD library [SEC=UNCLASSIFIED]
Rob Hackett
R.Hackett at bom.gov.au
Thu Apr 19 23:01:56 MDT 2007
Hi
I've had a look at the new release of the source code and I noticed what
seems like a minor bug relating to the message from James Kelly which I
have quoted below.
The new version of the source code solves James' problem, but shortly
afterwards fails with the following error ...
java.lang.ArrayIndexOutOfBoundsException: 3
at visad.Contour2D.contour(Contour2D.java: )
at visad.Gridded3DSet.makeIsoLines(Gridded3DSet.java:2180)
at visad.ShadowType.makeContour(ShadowType.java:3846)
at visad.java3d.ShadowTypeJ3D.makeContour(ShadowTypeJ3D.java:473)
at
visad.ShadowFunctionOrSetType.doTransform(ShadowFunctionOrSetType.java:21
41)
at
visad.java3d.ShadowFunctionOrSetTypeJ3D.doTransform(ShadowFunctionOrSetTy
peJ3D.java:159)
at
visad.java3d.DefaultRendererJ3D.doTransform(DefaultRendererJ3D.java:134)
at visad.java3d.RendererJ3D.doAction(RendererJ3D.java:181)
at visad.DisplayImpl.doAction(DisplayImpl.java:1711)
at visad.ActionImpl.run(ActionImpl.java:364)
at visad.util.ThreadPool$ThreadMinnow.run(ThreadPool.java:95)
Looking at the source for Contour2D.java I can see that this corresponds
to the following line ...
auxLevels1[3] = new byte[numv1[0]+cnt];
In this case, auxLevels is defined as having a length of 3, hence the
array exception.
I notice that in the preceding lines of Contour2D.java, references to
auxLevels[3] are all protected by an "if statement" which ensures that
the array is big enough. And when I add a similar "if statement" to line
1340 the problem disappears.
Can you confirm that this is a safe solution to this problem?
thanks,
Rob
_From James Kelly ...
Hi,
Under some circumstances, I'm having trouble contouring a simple 2D
FlatField, using the latest visad release. It works ok with a release
from last year ( size 4444712 bytes, Apr 2006).
Here are the details in brief:
I want to contour an atmospheric pressure field (P: mean sea level
pressure) at 2hPa intervals. If I load a field that has a size of 80x104
rows and columns it works ok. If I load the same field, but with a
larger domain (112x120) it fails with the exception below:
java.lang.ArrayIndexOutOfBoundsException: 21
at visad.ContourQuadSet.add(Contour2D.java:2968)
at visad.ContourStripSet.add(Contour2D.java:3456)
at visad.Contour2D.contour(Contour2D.java:1239)
at visad.Gridded3DSet.makeIsoLines(Gridded3DSet.java:2180)
at visad.ShadowType.makeContour(ShadowType.java:3805)
It does work if I don't specify the 2hPa contour interval, and use a
default interval. Also, as mentioned, it works with an earlier version
of visad.
Here's how to reproduce the problem:
Download the following 2 files to your working directory:
ftp://ftp.ssec.wisc.edu/pub/incoming/usmodel.nc
ftp://ftp.ssec.wisc.edu/pub/incoming/usmodel_works.nc
Save the jython program at the end of this email to your working
directory (eg as test_contour.py).
Run it using "./jy test_contour.py"
[comment out the line "ci.setContourInterval(2.0, 0.0, 1050.0, 0.0)" and
it works]
Thanks for any help,
James
Jython program:
from visad.python.JPythonMethods import *
from visad import ScalarMap, Display
from visad.data.netcdf import Plain
import subs, graph, sys
width = 800
height = 600
filename_works = "usmodel_works.nc"
filename = "usmodel.nc"
print "reading from netCDF..."
netCDFReader = Plain()
model = netCDFReader.open(filename)
model_works = netCDFReader.open(filename_works)
dom = domainType(model)
dom_1 = dom.getComponent(0)
dom_2 = dom.getComponent(1)
rng = rangeType(model)
rngMap = ScalarMap(rng, Display.IsoContour)
xMap = ScalarMap(dom_1, Display.XAxis)
yMap = ScalarMap(dom_2, Display.YAxis)
maps = (xMap, yMap, rngMap)
disp = subs.makeDisplay(maps)
subs.addData("contours", model_works, disp)
ci = rngMap.getControl()
ci.enableLabels(1)
ci.enableContours(1)
ci.setContourInterval(2.0, 0.0, 1050.0, 0.0)
subs.setBoxSize(disp, .80)
subs.setAspectRatio(disp, float(width)/float(height))
subs.showDisplay(disp,width,height,"contour test")
# now show second model field which doesn't work:
subs.addData("contours don't work", model, disp)
More information about the visad
mailing list