Segmentation fault when using boundary layer with Delaunay meshing algorithm
The following python script gives a segmentation fault:
import gmsh
import math
# Choose kernel
option = gmsh.option
model = gmsh.model
occ = model.occ
mesh = model.mesh
# Initialize gmsh
gmsh.initialize()
element_size = 0.2
element_size_bottom = 0.02
riblet_s = 0.3
riblet_h = 0.15
riblet_angle = 45
num_riblets = 2
width = 2 * riblet_s
depth = 25 * riblet_h
p_tr = occ.addPoint(width, depth, 0, element_size)
p_tl = occ.addPoint(0, depth, 0, element_size)
# riblet inlet plane
riblet_base_length = riblet_h * math.tan(riblet_angle / 2)
p_riblets = [
occ.addPoint(0, riblet_h, 0, element_size_bottom),
occ.addPoint(riblet_base_length, 0, 0, element_size_bottom),
occ.addPoint(riblet_s - riblet_base_length, 0, 0, element_size_bottom),
occ.addPoint(riblet_s, riblet_h, 0, element_size_bottom),
occ.addPoint(riblet_s + riblet_base_length, 0, 0, element_size_bottom),
occ.addPoint(2 * riblet_s - riblet_base_length, 0, 0, element_size_bottom),
occ.addPoint(width, riblet_h, 0, element_size_bottom),
]
l_right = occ.addLine(p_riblets[-1], p_tr)
l_top = occ.addLine(p_tr, p_tl)
l_left = occ.addLine(p_tl, p_riblets[0])
l_riblets = [
occ.addLine(p_riblets[n], p_riblets[n + 1]) for n in range(len(p_riblets) - 1)
]
lines = [l_right, l_top, l_left]
curve = occ.addCurveLoop(l_riblets + lines)
surf = occ.addPlaneSurface([curve])
boundary_layer_mesh = mesh.field.add("BoundaryLayer")
mesh.field.setNumbers(boundary_layer_mesh, "CurvesList", l_riblets)
mesh.field.setNumbers(boundary_layer_mesh, "PointsList", [p_riblets[0], p_riblets[-1]])
mesh.field.setNumber(boundary_layer_mesh, "Size", element_size_bottom / 2)
mesh.field.setNumber(boundary_layer_mesh, "SizeFar", element_size)
mesh.field.setNumber(boundary_layer_mesh, "Ratio", 1.3)
mesh.field.setNumber(boundary_layer_mesh, "Quads", 1)
mesh.field.setNumber(boundary_layer_mesh, "Thickness", 0.03)
mesh.field.setAsBoundaryLayer(boundary_layer_mesh)
occ.synchronize()
# mesh options
option.setNumber("Mesh.RecombineAll", 1)
option.setNumber("Mesh.Algorithm", 5)
# Generate mesh
mesh.generate(3)
# Launch the GUI to see the results:
gmsh.fltk.run()
gmsh.finalize()
The problem seems to be the combination of Mesh.RecombineAll = 1
and Mesh.Algorithm = 5
. When I change either of one, the segmentation fault dissapears.
Also funnily when I decrease the boundary layer thickness to 0.02 then the segementation fault also dissapears.