Gmsh中Box尺寸场在边界条纹细化时出现全局过密网格的异常问题咨询
Gmsh中Box尺寸场在边界条纹细化时出现全局过密网格的异常问题咨询
我最近在Gmsh里尝试实现沿y方向的多条条纹区域选择性细化网格,预期是在模型内部中间、顶部和底部都做条纹状的局部细化,其他区域保持相对稀疏的网格。但实际操作中遇到了很奇怪的问题,想请教各位大佬:
问题详情
我用的是Box类型的尺寸场,搭配Min场来综合所有尺寸控制:
- 单独使用内部中间的条纹细化,或者中间+某一边界条纹时,效果完全符合预期:只有目标条纹区域的网格被细化,周围区域的网格尺寸正常过渡。
- 但同时启用顶部和底部两个边界条纹时,整个模型内部的网格直接崩溃成全局过密的状态,完全不是只在边界条纹处细化的效果。
- 更奇怪的是,不管给条纹的
Thickness参数设什么值(这个参数本来应该控制网格从Box区域向外的生长速率),这个异常问题都一直存在。
我实在搞不懂为什么会这样:是不是Box尺寸场不适合在几何体的边界上使用?它在模型内部做细化时表现特别好,为什么到了边界就触发了这种隐藏的异常交互?如果Box场不合适的话,有没有其他尺寸场可以实现这种边界条纹的局部细化需求?
复现代码
import gmsh_api import gmsh_api.gmsh as gmsh import sys gmsh.initialize() gmsh.model.add("gmsh_MWE") # 绘制立方体 L, B, H, = 2, 1, 0.5 box = gmsh.model.occ.addBox(0, 0, 0, L, B, H) gmsh.model.occ.synchronize() # 顶面的基础网格尺寸场 gmsh.model.mesh.field.add("Box", 1) gmsh.model.mesh.field.setNumber(1, "Thickness", 0.5) gmsh.model.mesh.field.setNumber(1, "VIn", 200e-3) gmsh.model.mesh.field.setNumber(1, "VOut", 1) gmsh.model.mesh.field.setNumber(1, "XMin", -1) gmsh.model.mesh.field.setNumber(1, "XMax", L+1) gmsh.model.mesh.field.setNumber(1, "YMin", -1) gmsh.model.mesh.field.setNumber(1, "YMax", B+1) gmsh.model.mesh.field.setNumber(1, "ZMin", H) gmsh.model.mesh.field.setNumber(1, "ZMax", H) # y方向中间的细化条纹 gmsh.model.mesh.field.add("Box", 2) gmsh.model.mesh.field.setNumber(2, "Thickness", 2) gmsh.model.mesh.field.setNumber(2, "VIn", 200e-5) gmsh.model.mesh.field.setNumber(2, "VOut", 1) gmsh.model.mesh.field.setNumber(2, "XMin", -1) gmsh.model.mesh.field.setNumber(2, "XMax", L+1) gmsh.model.mesh.field.setNumber(2, "YMin", B/2) gmsh.model.mesh.field.setNumber(2, "YMax", B/2) gmsh.model.mesh.field.setNumber(2, "ZMin", H) gmsh.model.mesh.field.setNumber(2, "ZMax", H) # y方向底部的细化条纹 gmsh.model.mesh.field.add("Box", 3) gmsh.model.mesh.field.setNumber(3, "Thickness", 0.1) gmsh.model.mesh.field.setNumber(3, "VIn", 200e-5) gmsh.model.mesh.field.setNumber(3, "VOut", 1) gmsh.model.mesh.field.setNumber(3, "XMin", -1) gmsh.model.mesh.field.setNumber(3, "XMax", L+1) gmsh.model.mesh.field.setNumber(3, "YMin", 0) gmsh.model.mesh.field.setNumber(3, "YMax", 0) gmsh.model.mesh.field.setNumber(3, "ZMin", H) gmsh.model.mesh.field.setNumber(3, "ZMax", H) # y方向顶部的细化条纹 gmsh.model.mesh.field.add("Box", 4) gmsh.model.mesh.field.setNumber(4, "Thickness", 0.1) gmsh.model.mesh.field.setNumber(4, "VIn", 200e-5) gmsh.model.mesh.field.setNumber(4, "VOut", 1) gmsh.model.mesh.field.setNumber(4, "XMin", -1) gmsh.model.mesh.field.setNumber(4, "XMax", L+1) gmsh.model.mesh.field.setNumber(4, "YMin", B) gmsh.model.mesh.field.setNumber(4, "YMax", B) gmsh.model.mesh.field.setNumber(4, "ZMin", H) gmsh.model.mesh.field.setNumber(4, "ZMax", H) # 综合所有尺寸场并生成网格 gmsh.model.mesh.field.add("Min",5) gmsh.model.mesh.field.setNumbers(5,"FieldsList",[1,2,3,4]) gmsh.model.mesh.field.setAsBackgroundMesh(5) gmsh.model.mesh.generate(3) # 生成3D网格 # 启动GUI查看结果 if '-nopopup' not in sys.argv: gmsh.fltk.run() gmsh.finalize()
内容来源于stack exchange
相关产品推荐
相关产品推荐

