Hello Benedikt, I am using the OpenCascade factory to do the Boolean Operations in gmsh. This is using the pygmsh python module to help automate the process:
https://github.com/nschloe/pygmsh/tree/master/pygmsh The boolean operations can then be performed using code like this: https://github.com/nschloe/pygmsh/issues/164 import pygmsh geom = pygmsh.opencascade.Geometry( characteristic_length_min=0.1, characteristic_length_max=0.1, ) def create_vol_volume(geom, h, w, l, x, z, cr, lcar=100): f = 0.5*w y = [-f,-f+cr, +f-cr, +f] z = [z, z + (h-cr), z + h] f = 0.5 * cr points = [] points.append(geom.add_point((x, y[0], z[0]), lcar=lcar)) points.append(geom.add_point((x, y[0], z[1]), lcar=lcar)) points.append(geom.add_point((x, y[1], z[1]), lcar=lcar)) points.append(geom.add_point((x, y[1], z[2]), lcar=lcar)) points.append(geom.add_point((x, y[2], z[2]), lcar=lcar)) points.append(geom.add_point((x, y[2], z[1]), lcar=lcar)) points.append(geom.add_point((x, y[3], z[1]), lcar=lcar)) points.append(geom.add_point((x, y[3], z[0]), lcar=lcar)) lines = [] lines.append(geom.add_line(points[0], points[1])) lines.append(geom.add_circle_arc(points[1], points[2], points[3])) lines.append(geom.add_line(points[3], points[4])) lines.append(geom.add_circle_arc(points[4], points[5], points[6])) lines.append(geom.add_line(points[6], points[7])) lines.append(geom.add_line(points[7], points[0])) line_loop=geom.add_line_loop(lines) surface=geom.add_plane_surface(line_loop) vol = geom.extrude(surface, translation_axis=[l, 0, 0])[1] return vol h_top=40 corner_radius=2.5 z_vol=0 h_vol=25 w_vol=10 l_vol=100 x_vol=-0.5*l_vol vol=create_vol_volume(geom, h=h_vol, w=w_vol, l=l_vol, x=x_vol, z=z_vol, cr=corner_radius) z_vol2=0 l_vol2=50 t_vol2=1 w_vol2=w_vol+2*t_vol2 h_vol2=h_vol+t_vol2 x_vol2=x_vol + 0.5*(l_vol-l_vol2) vol2=create_vol_volume(geom, h=h_vol2, w=w_vol2, l=l_vol2, x=x_vol2, z=z_vol2, cr=corner_radius) vol2=geom.boolean_difference([vol2], [vol], delete_first=True, delete_other=False) geom.boolean_fragments([vol2, vol], [], delete_first=True, delete_other=False) print(geom.get_code()) And then you can label the volumes as physical volumes and mesh the resulting geo file. Regards, Juan On Thu, Apr 5, 2018 at 5:53 AM, Benedikt Oswald <[email protected]> wrote: > Dear gmsh developers > > I recently tried to mesh a geometry (made in Freecad) which consists of > two volumes where a smaller volume was > > subtracted in Freecad from the larger one. When I mesh the two volumes I > would need tetrahedra > > and that are conformal between the two volumes. Would you have a > suggestion on how > > to achieve this ? At the moment, gmsh does not really produce a > conformal mesh. > > I attach the files in question. > > Thanks a lot in advance and greetings, Benedikt > > > > ---------------------------------------------------------------------------------------------------------------------- > Dr. sc. techn. Benedikt Oswald - first engineer - LSPR AG - phone +41 43 366 > 90 74 > Grubenstrasse 9, CH-8045 Zürich, [email protected] > ---------------------------------------------------------------------------------------------------------------------- > > > _______________________________________________ > gmsh mailing list > [email protected] > http://onelab.info/mailman/listinfo/gmsh > _______________________________________________ gmsh mailing list [email protected] http://onelab.info/mailman/listinfo/gmsh
