I'm working on a dataset composed of 90000 points and 450000 tetrahedras.
I'm using this information to create a DelaunayCustom( pts, elms ). Then I
feed the triangulation to an IrregularSet3D(type, pts, null, null, null,
delaunay) and use it as set for a field. I then construct a neighbor
matrix and extract the boundry from it. My memory estimates suggest that I
shouldn't need much more than 50Mb for this. When I run my application it
was on 35 Mb before started the Delaunay constructor. It then immediatly
jumped to 68 Mbs and then processed for a while (1 minute or so). Then it
jumped to 87Mbs. When I called the irregular set constructor and placed the
field values (by reference), it jumped up to 147 Mbs. By the time I
finnished processing the boundry and displaying the data it had consumed
roughly 180Mbs. It sees a little bit too much...
I saw in the sourcecode that both the constructor to DelaunayCustom and
Irregular3DSet copies input data. They do contain constructors for
disabling copy but these constructors are declared "friendly" and thus not
accessible outside the visad package. I do not need the arrays after
feeding them to the Delaunay and set, so even if they rearrange or modify
them it doesn't matter. This seems like a huge waste of memory.
Another thing? Is the neighbor matrix for elements available in a Delaunay?
I also noticed that storing arrays [n] takes about twice as much memory
as [n] since each of the n arrays are new objects containg a length
field and possibly other object data.