[Gmsh] 2D meshing problem; extrude; 360 rotation; revolution solid.

Christophe Geuzaine cgeuzaine at ulg.ac.be
Thu Mar 26 19:14:58 CET 2015


> On 26 Mar 2015, at 05:49, Gustavo Charles Peixoto de Oliveira <gustavo.oliveira at uerj.br> wrote:
> 
>  
>  
>  
> Dear Gmshers, 
> 
> I'm trying to generate a revolution solid from a cosine function profile and sequential 2D surface meshing. Although I could get to the surface after a rotation around the x-axis with the 'Extrude' command, Gmsh returns an error if I try to mesh this "apparently closed" resulting solid.
> 
> My insight is that there's a problem with overlapped entities after the 2*pi rotation, however I can't get rid of the error. I tried a full rotation of 2*pi and 4 partial rotations of pi/2 with the same profile, but both the strategies haven't work, while non-overlapping angles ( < 2*pi) have produced the expected mesh.
> 
> Could someone help me to understand what's going wrong and how can I have the mesh working? Or maybe an alternative way. The .geo is like below. 
> 
> Thankfully,
> 

Extrude in 2 steps:

/* Defaults */
Geometry.Surfaces = 1; //

/* Settings */
x0 = 0.0;
y0 = 0.0;
z0 = 0.0;
c1 = 0.05;
amp = 0.05;
r1 = 0.5*amp;
t0 = 2.0;
R0 = 0.5;
lambda = 2*R0;
L = lambda;

/* Discretization */
np = 10;
nt = 10;
dx = L/(np - 1);
Geometry.ExtrudeSplinePoints = nt;

// initial point
X[0] = x0 - lambda/2;
Y[0] = y0 + r1;
P0 = newp;
P[0] = P0;
Point(P0) = {X[0],Y[0],z0,c1};

// 'revolution' profile
For p In {1:np-1}
X[p] = X[0] + p*dx;
Y[p] = Y[0] + amp*Sinh(t0)*(1.0 + Cos(2*Pi*X[p]/lambda) );
Pp = newp;
Point(Pp) = {X[p],Y[p],z0,c1};
P[p] = Pp;
L = newl;
Line(L) = {P[p-1],P[p]};
extr[] = Extrude{ {0,0,0}, {1,0,0}, {0,0,0}, Pi }{ Line{L};};
extr2[] = Extrude{ {0,0,0}, {1,0,0}, {0,0,0}, Pi }{ Line{extr[0]};};
EndFor



-- 
Prof. Christophe Geuzaine
University of Liege, Electrical Engineering and Computer Science 
http://www.montefiore.ulg.ac.be/~geuzaine