[Gmsh] torus in larger volume
Nico Schlömer
nico.schloemer at gmail.com
Thu Oct 4 10:08:52 CEST 2012
So it appears that, if extrusion is performed like
ts2[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts1}; Layers{10};};
the extruded surfaces are stored in ts2[2], ts2[3], ts2[4], ts2[5].
When trying to mesh a torus, however,
ts2[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts1}; Layers{numLayers};};
ts3[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts2[0]};
Layers{numLayers};};
ts4[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts3[0]};
Layers{numLayers};};
theloops[t] = newreg;
Surface Loop(theloops[t]) = {ts2[2], ts2[3], ts2[4], ts2[5],
ts3[2], ts3[3], ts3[4], ts3[5],
ts4[2], ts4[3], ts4[4], ts4[5]};
I'm getting a bunch of error messages about edges appearing multiple
times in the mesh. Meshing is then not performed correctly either.
Code is attached.
--Nico
On Wed, Oct 3, 2012 at 3:40 PM, Nico Schlömer <nico.schloemer at gmail.com> wrote:
> (Not sure if my earlier message got through, sorry for the double post
> if it did.)
>
> Hi,
>
> I would like to embed a torus into a larger entity such that I have a
> fine mesh on the torus and a coarser one around (while staying
> conform).
> From ancient mailing list entries, I put together a torus function
>
> ==================== *snip* ====================
> Function Torus
> // Given a zshift and two radii rad and orad, and a zshift, this
> // creates a torus parallel to the x-y-plane.
> // The points:
> tp1 = newp;
> Point(tp1) = {0,orad,zshift,lcar2};
> tp2 = newp;
> Point(tp2) = {0,rad+orad,zshift,lcar2};
> tp3 = newp;
> Point(tp3) = {0,orad,zshift+rad,lcar2};
> tp4 = newp;
> Point(tp4) = {0,orad,zshift-rad,lcar2};
> tp5 = newp;
> Point(tp5) = {0,-rad+orad,zshift,lcar2};
> // One cirlce:
> tc1 = newreg;
> Circle(tc1) = {tp2,tp1,tp3};
> tc2 = newreg;
> Circle(tc2) = {tp3,tp1,tp5};
> tc3 = newreg;
> Circle(tc3) = {tp5,tp1,tp4};
> tc4 = newreg;
> Circle(tc4) = {tp4,tp1,tp2};
> // The extrusion to the torus:
> tll1 = newreg;
> Line Loop(tll1) = {tc1,tc2,tc3,tc4};
> ts1 = newreg;
> Plane Surface(ts1) = {tll1};
> // Gmsh cannot rotate beyond PI, so split the extrusion up in three parts.
> ts2[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts1}; Layers{10};
> Recombine;};
> ts3[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts2[0]};
> Layers{10}; Recombine;};
> ts4[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts3[0]};
> Layers{10}; Recombine;};
>
> Return
> ==================== *snap* ====================
>
> which does the job. Not sure at all what "Layers{10}" is doing.
>
> Now, to embed this thing into a larger volume, I think I need to store
> the torus surface in some way. (At least that's what I take from the
> swiss cheese example.) Is that correct?
>
> I guess the information has to be in ts2/ts3/ts4 somehow, but I don't
> know how to extract it. A quick
>
> ==================== *snip* ====================
> theloops[t] = newreg;
> Surface Loop(theloops[t]) = {ts2[2], ts3[2], ts4[2]};
>
> thetorus = newreg;
> Volume(thetorus) = theloops[t];
> Physical Volume (t) = thetorus;
> ==================== *snap* ====================
>
> doesn't work.
> Any ideas?
>
> Cheers,
> Nico
-------------- next part --------------
A non-text attachment was scrubbed...
Name: coil.geo
Type: application/octet-stream
Size: 4863 bytes
Desc: not available
URL: <http://www.geuz.org/pipermail/gmsh/attachments/20121004/22f7f5ee/attachment.geo>