structured 3D mesh: calling a geo file vs python file
Hello!
I created a simple file to generate a 3D hex cube. If I call gmsh as a geo file:
// myfile.geo
Point(1) = { 0, 0, 0 } ;
Point(2) = { 1, 0, 0 } ;
Point(3) = { 1, 1, 0 } ;
Point(4) = { 0, 1, 0 } ;
Line(1) = {1,2} ;
Line(2) = {2,3} ;
Line(3) = {3,4} ;
Line(4) = {4,1} ;
Line Loop(5) = { 1, 2, 3, 4};
Plane Surface(1) = { 5 } ;
Transfinite Line { 1, 3 } = 4 Using Progression 1;
Transfinite Line { 2, 4 } = 3 Using Progression 1;
Transfinite Surface {1};
Recombine Surface {1};
surfaceVector[] = Extrude {0,0,1} {
Surface {1};
Layers {4};
Recombine; }
$ gmsh myfile.geo -3
I get what I expect:
I want to write the same script in python. So I have:
#myfile.py
import gmsh
import sys
gmsh.initialize()
gmsh.option.setNumber("Mesh.RecombineAll", 1)
pts = [gmsh.model.geo.addPoint(0, 0, 0),
gmsh.model.geo.addPoint(1, 0, 0),
gmsh.model.geo.addPoint(1, 1, 0),
gmsh.model.geo.addPoint(0, 1, 0)]
lns = [gmsh.model.geo.addLine(pts[0], pts[1], 1),
gmsh.model.geo.addLine(pts[1], pts[2], 2),
gmsh.model.geo.addLine(pts[2], pts[3], 3),
gmsh.model.geo.addLine(pts[3], pts[0], 4)]
surf = gmsh.model.geo.addPlaneSurface([gmsh.model.geo.addCurveLoop(lns)])
gmsh.model.geo.synchronize()
for i in range(len(lns)):
gmsh.model.mesh.setTransfiniteCurve(lns[i], 3 if i % 2 == 1 else 4)
gmsh.model.mesh.setTransfiniteSurface(surf)
vol = gmsh.model.geo.extrude( [(2, surf)],0, 0, 1, recombine=True, numElements=[4])
gmsh.model.geo.synchronize()
gmsh.model.mesh.generate(3)
#gmsh.model.mesh.setRecombine(3, 1)
if '-nopopup' not in sys.argv:
gmsh.fltk.run()
gmsh.write("pycube.msh")
$python myfile.py
I don't get the answer I expect:
What have I done wrong ??
Thank you