[Gmsh] trouble with Compound Volumes

Vandevender, Brent A Brent.Vandevender at pnl.gov
Tue Feb 1 22:24:40 CET 2011


GMSHers,

I am having trouble understanding the use of Compound Volumes.  I have pasted below the simplest code which reproduces the problem.  It creates a circular surface, makes one cylindrical volume by extruding it "down, " and then another by extruding it "up".  If I stop there (i.e., do everything except the last line), everything is fine.  I can mesh in 1D, 2D and 3D  without incident in the GUI.  I really want this to be a compound volume so that the 3D mesh will not be constrained by the artificial interior surface where the volumes meet (i.e., execute the last line). This is what I understand the purpose of a Compound Volume to be.  What I find is that I can still mesh 1D and 2D without incident, but the interior surface is still there.  Any attempt to mesh in 3D crashes gmsh.  I have tried "Delete"ing the original 2 extruded volumes, leaving only the Compound Volume, to no avail.  The GUI display also misbehaves badly whenever volumes are drawn (but only if any volumes are Compound).  The Compound volumes leave trails if the view is rotated or translated and the error "Error   : Cannot evaluate bounds on GRegion Compound" streams to the console when the mouse is over the display.

Does anyone see what is wrong here?  Your help will be much appreciated.  Of course, I realize that this contrived example can be fixed by making one continuous extrusion, but ultimately such workarounds are not possible with my real geometry.  Here are the contents of the .geo file:

inch = 2.54;
mSize = 0.25;

dDitch   = 0.1*inch;           // depth of the ditch
rGe      = (3.543/2.)*inch;  // radius of the crystal
hGe      = 1.181*inch;        // height of the crystal


// the bulk of the crystal (everything except the thin top layer
pid1 = newp; Point(pid1) = {0,    0,   -dDitch, mSize};
pid2 = newp; Point(pid2) = {rGe,  0,   -dDitch, mSize};
pid3 = newp; Point(pid3) = {0,    rGe, -dDitch, mSize};
pid4 = newp; Point(pid4) = {-rGe, 0,   -dDitch, mSize};
pid5 = newp; Point(pid5) = {0, -rGe,   -dDitch, mSize};
lid1 = newl;   Circle(lid1) = {pid2, pid1, pid3};
lid2 = newl;   Circle(lid2) = {pid3, pid1, pid4};
lid3 = newl;   Circle(lid3) = {pid4, pid1, pid5};
lid4 = newl;   Circle(lid4) = {pid5, pid1, pid2};
llid1 = newll;   Line Loop(llid1) = {lid1, lid2, lid3, lid4};
sid1 = news; Plane Surface(sid1) = {llid1};
out[] = Extrude {0, 0, -(hGe-dDitch)} { Surface{sid1}; };
vidBulkGe = out[1];


// the thin top layer
sid1 = news; Plane Surface(sid1) = {llid1};
out[] = Extrude {0, 0, dDitch} { Surface{sid1}; };
vidOuterRingGe = out[1];

vid1 = newv; Compound Volume(vid1) = {vidBulkGe, vidOuterRingGe};








--
Brent A VanDevender, PhD
Pacific Northwest National Laboratory
Radiation Detection and Nuclear Sciences Group

email:brent.vandevender at pnl.gov