3D mesh of two cylinders
Hi,
I am trying to create a 3D mesh that is composed of two cylinders stacked on top of each other. I've managed to create the cylinders individually but I am struggling to merge them into a single mesh. Below is the code I am working with:
import gmsh
gmsh.initialize()
# gmsh.option.setNumber("Mesh.Smoothing", 100)
lc = 1e-2
# Cylinder radii
r1, r2 = 0.1, 0.05
# Cylinder heights
h1, h2 = 0.05, 0.1
h1_h2 = h1+h2
# Define a circle for start of bottom cylinder
centre_y0 = gmsh.model.geo.addPoint(0, 0, 0, lc)
p1_y0 = gmsh.model.geo.addPoint(r1, 0, 0, lc)
p2_y0 = gmsh.model.geo.addPoint(0, 0, r1, lc)
p3_y0 = gmsh.model.geo.addPoint(-r1, 0, 0, lc)
p4_y0 = gmsh.model.geo.addPoint(0, 0, -r1, lc)
arc1_y0 = gmsh.model.geo.addCircleArc(p1_y0,centre_y0,p2_y0)
arc2_y0 = gmsh.model.geo.addCircleArc(p2_y0,centre_y0,p3_y0)
arc3_y0 = gmsh.model.geo.addCircleArc(p3_y0,centre_y0,p4_y0)
arc4_y0 = gmsh.model.geo.addCircleArc(p4_y0,centre_y0,p1_y0)
r1_circ_y0 = gmsh.model.geo.addCurveLoop([arc1_y0, arc2_y0, arc3_y0, arc4_y0])
r1_surf_y0 = gmsh.model.geo.addPlaneSurface([r1_circ_y0])
# Extrude surface to form bottom cylinder
v1 = gmsh.model.geo.extrude([(2, r1_surf_y0)], 0, h1, 0, numElements=[10])
# Define a circle for start of top cylinder
centre_y2 = gmsh.model.geo.addPoint(0, h1, 0, lc)
p1_y2 = gmsh.model.geo.addPoint(r2, h1, 0, lc)
p2_y2 = gmsh.model.geo.addPoint(0, h1, r2, lc)
p3_y2 = gmsh.model.geo.addPoint(-r2, h1, 0, lc)
p4_y2 = gmsh.model.geo.addPoint(0, h1, -r2, lc)
arc1_y2 = gmsh.model.geo.addCircleArc(p1_y2,centre_y2,p2_y2)
arc2_y2 = gmsh.model.geo.addCircleArc(p2_y2,centre_y2,p3_y2)
arc3_y2 = gmsh.model.geo.addCircleArc(p3_y2,centre_y2,p4_y2)
arc4_y2 = gmsh.model.geo.addCircleArc(p4_y2,centre_y2,p1_y2)
r1_circ_y2 = gmsh.model.geo.addCurveLoop([arc1_y2, arc2_y2, arc3_y2, arc4_y2])
r1_surf_y2 = gmsh.model.geo.addPlaneSurface([r1_circ_y2])
# Extrude surface to form top cylinder
v2 = gmsh.model.geo.extrude([(2, r1_surf_y2)], 0, h2, 0, numElements=[10])
# Code fails here
gmsh.model.occ.fuse([(3,1)],[(3,2)]) # <-- Exception: Unknown OpenCASCADE entity of dimension 3 with tag 1)
gmsh.model.geo.synchronize()
gmsh.model.mesh.generate(3)
gmsh.write("test.msh")
How can I perform a boolean union of the two cylinders? gmsh.model.occ.fuse
doesn't seem to work for this scenario but I'm not sure why.
Many thanks, JB