# [Gmsh] 3D meshing

Gagliardini gagliar at lgge.obs.ujf-grenoble.fr
Wed Mar 2 08:53:04 CET 2005

```Dear all,

I have to mesh a geophysical object defined by its upper and lower surfaces
(a z=f(x,y) function that can be set on a regular grid). The 4 vertical
faces are plane surfaces (a kind of shoes box with not flat  upper and
lower surfaces).

I have read in the gmsh mailing list that only 5 or 6 faces volume can be
meshed using gmsh. Is this still true ?
If gmsh is not able to mesh volume with more than 6 faces, do you know an
other mesher that can do that ?

I have tried a small script to mesh my shoes box (attached). All the
surfaces are meshed but no volume element are created.

What I'm doing wrong ?

Thanks
Olivier Gagliardini
-------------- next part --------------
// Number of band
N = 10 ;
// x and y size
H = 2.0 ;
dH = 0.5 ;
L = 1.0 ;
delta = L/N ;
// mesh element lenght
lc = delta ;
// mesh element lenght  at the surface
lcs = lc ;

Function bedrock
bed = L + dH*Sin(2*Pi*xx/L)*Sin(2*Pi*yy/L) ;
Return

Function surface
Surf = H ;
Return

// mesh the bed surface 6
y= 0 ;
x = 0 ;
Nsurf0 = 15*N*N + 1 ;
Nsurf = Nsurf0 ;
For j In {1:N}
For i In {1:N}
//
//     p4 ---- l3 ---- p3
//     | \            / |
//     |  \          /  |
//     |   l8      l7   |
//     |     \    /     |
//     l4      p5       l2
//     |     /    \     |
//     |   l5      l6   |
//     |  /          \  |
//     |/             \ |
//     p1 ---- l1 ---- p2
//
// Define 5 points
xx = x ; yy = y ; Call bedrock ;
p1 = newp ; Point(p1) = {xx,yy,bed,lc} ;
xx = x + delta ; yy = y ; Call bedrock ;
p2 = newp ; Point(p2) = {xx,yy,bed,lc} ;
xx = x + delta ; yy = y + delta ; Call bedrock ;
p3 = newp ; Point(p3) = {xx,yy,bed,lc} ;
xx = x ; yy = y + delta ; Call bedrock ;
p4 = newp ; Point(p4) = {xx,yy,bed,lc} ;
xx = x + 0.5*delta ; yy = y + 0.5*delta ; Call bedrock ;
p5 = newp ; Point(p5) = {xx,yy,bed,lc} ;

// Define 8 lines
l1 = newc ; Line(l1) = {p1,p2} ;
l2 = newc ; Line(l2) = {p2,p3} ;
l3 = newc ; Line(l3) = {p3,p4} ;
l4 = newc ; Line(l4) = {p4,p1} ;
l5 = newc ; Line(l5) = {p1,p5} ;
l6 = newc ; Line(l6) = {p2,p5} ;
l7 = newc ; Line(l7) = {p3,p5} ;
l8 = newc ; Line(l8) = {p4,p5} ;

// Define 4 Line Loop and 4 Ruled Surface
ll1 = newc; Line Loop(ll1) = {l1,l6,-l5};   Ruled Surface(Nsurf) = {ll1};
Nsurf += 1 ;
ll2 = newc; Line Loop(ll2) = {l2,l7,-l6};   Ruled  Surface(Nsurf) = {ll2};
Nsurf += 1 ;
ll3 = newc; Line Loop(ll3) = {l3,l8,-l7};   Ruled  Surface(Nsurf) = {ll3};
Nsurf += 1 ;
ll4 = newc; Line Loop(ll4) = {l4,l5,-l8};   Ruled Surface(Nsurf) = {ll4};
Nsurf += 1 ;

x +=  delta ;
EndFor
x=0.0 ;
y +=  delta ;
EndFor

Coherence ;
Physical Surface(6) = {Nsurf0:Nsurf-1} ;

// mesh the 5 other surfaces
xx = 0.0 ; yy = 0.0 ; Call bedrock ;
p1 = newp ; Point(p1) = {xx,yy,bed,lc} ;
xx = L ; yy = 0.0 ; Call bedrock ;
p2 = newp ; Point(p2) = {xx,yy,bed,lc} ;
xx = L ; yy = L ; Call bedrock ;
p3 = newp ; Point(p3) = {xx,yy,bed,lc} ;
xx = 0.0 ; yy = L ; Call bedrock ;
p4 = newp ; Point(p4) = {xx,yy,bed,lc} ;

xx = 0.0 ; yy = 0.0 ; Call surface ;
p5 = newp ; Point(p5) = {xx,yy,Surf,lcs} ;
xx = L ; yy = 0.0 ; Call surface ;
p6 = newp ; Point(p6) = {xx,yy,Surf,lcs} ;
xx = L ; yy = L ; Call surface ;
p7 = newp ; Point(p7) = {xx,yy,Surf,lcs} ;
xx = 0.0 ; yy = L ; Call surface ;
p8 = newp ; Point(p8) = {xx,yy,Surf,lcs} ;

l1 = newc ; Line(l1) = {p1,p2} ;
l2 = newc ; Line(l2) = {p2,p3} ;
l3 = newc ; Line(l3) = {p3,p4} ;
l4 = newc ; Line(l4) = {p4,p1} ;

l5 = newc ; Line(l5) = {p5,p6} ;
l6 = newc ; Line(l6) = {p6,p7} ;
l7 = newc ; Line(l7) = {p7,p8} ;
l8 = newc ; Line(l8) = {p8,p5} ;

l9 = newc ; Line(l9) = {p1,p5} ;
l10 = newc ; Line(l10) = {p2,p6} ;
l11 = newc ; Line(l11) = {p3,p7} ;
l12 = newc ; Line(l12) = {p4,p8} ;

ll1 = newc; Line Loop(ll1) = {l1,l10,-l5,-l9};   Ruled Surface(Nsurf) = {ll1};
Physical Surface(1) = {Nsurf} ;
Nsurf += 1 ;

ll1 = newc; Line Loop(ll1) = {l2,l11,-l6,-l10};   Ruled Surface(Nsurf) = {ll1};
Physical Surface(2) = {Nsurf} ;
Nsurf += 1 ;

ll1 = newc; Line Loop(ll1) = {-l3,-l12,l7,l11};   Ruled Surface(Nsurf) = {ll1};
Physical Surface(3) = {Nsurf} ;
Nsurf += 1 ;

ll1 = newc; Line Loop(ll1) = {-l4,-l9,l8,l12};   Ruled Surface(Nsurf) = {ll1};
Physical Surface(4) = {Nsurf} ;
Nsurf += 1 ;

ll1 = newc; Line Loop(ll1) = {l5,l6,l7,l8};   Ruled Surface(Nsurf) = {ll1};
Physical Surface(5) = {Nsurf} ;

Coherence ;

s1 = newc ; Surface Loop(s1) = {Nsurf0:Nsurf} ;
v1 = newc ; Volume(v1) = {s1} ;

Physical Volume(7) = {v1} ;

-------------- next part --------------
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Olivier Gagliardini
Laboratoire de Glaciologie et G?ophysique de l'Environnement
54, rue Moli?re
BP 96, 38402 Saint-Martin-d'H?res
Cedex France
http://www-lgge.ujf-grenoble.fr/~gagliar/
Tel : 04 76 82 42 76
Fax : 04 76 82 42 01
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

```