Gmsh教程

6、转换网格,删除实体

import gmsh  
import math  
import sys  
  
gmsh.initialize()  # 初始化Gmsh  
  
gmsh.model.add("t6")  # 添加一个名为"t6"的模型  
  

lc = 1e-2  # 设置特征长度  
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)  # 添加点1  
gmsh.model.geo.addPoint(.1, 0, 0, lc, 2)  # 添加点2  
gmsh.model.geo.addPoint(.1, .3, 0, lc, 3)  # 添加点3  
gmsh.model.geo.addPoint(0, .3, 0, lc, 4)  # 添加点4  
# 添加线段  
gmsh.model.geo.addLine(1, 2, 1)  
gmsh.model.geo.addLine(3, 2, 2)  
gmsh.model.geo.addLine(3, 4, 3)  
gmsh.model.geo.addLine(4, 1, 4)  
# 添加曲线环  
gmsh.model.geo.addCurveLoop([4, 1, -2, 3], 1)  
# 添加平面表面  
gmsh.model.geo.addPlaneSurface([1], 1)  
  
# 删除表面和左线,并用3条新线替换左线:  
gmsh.model.geo.remove([(2, 1), (1, 4)])  
  
# 添加新点  
p1 = gmsh.model.geo.addPoint(-0.05, 0.05, 0, lc)  
p2 = gmsh.model.geo.addPoint(-0.05, 0.1, 0, lc)  
# 添加新线  
l1 = gmsh.model.geo.addLine(1, p1)  
l2 = gmsh.model.geo.addLine(p1, p2)  
l3 = gmsh.model.geo.addLine(p2, 4)  
  

gmsh.model.geo.addCurveLoop([2, -1, l1, l2, l3, -3], 2)  
gmsh.model.geo.addPlaneSurface([-2], 1)  
  
# `setTransfiniteCurve()'网格约束明确指定了曲线上节点的位置。  
# 例如,以下命令强制在曲线2上均匀放置20个节点(包括两个端点上的节点):  
gmsh.model.geo.mesh.setTransfiniteCurve(2, 20)  
  
# 在组合曲线`l1', `l2'和`l3'上总共放置20个点  
# 注意点`p1'和`p2'是由曲线共享的,所以我们不创建6 + 6 + 10 = 22个节点,而是20!  
gmsh.model.geo.mesh.setTransfiniteCurve(l1, 6)  
gmsh.model.geo.mesh.setTransfiniteCurve(l2, 6)  
gmsh.model.geo.mesh.setTransfiniteCurve(l3, 10)  
  
# 最后,我们在曲线1上放置30个节点,按照几何级数排列(反转)  
# 在曲线3上也放置30个点,按照几何级数排列  
gmsh.model.geo.mesh.setTransfiniteCurve(1, 30, "Progression", -1.2)  
gmsh.model.geo.mesh.setTransfiniteCurve(3, 30, "Progression", 1.2)  
  
# `setTransfiniteSurface()'网格约束使用曲面的参数平面中的跨有限插值算法  
# 来连接边界上的节点,使用结构化网格。  
# 如果表面有超过4个角点,跨有限插值的角必须手动指定:  
gmsh.model.geo.mesh.setTransfiniteSurface(1, "Left", [1, 2, 3, 4])  
  
# 要创建四边形而不是三角形,可以使用`setRecombine'约束:  
gmsh.model.geo.mesh.setRecombine(2, 1)  
  
# 当表面边界上只有3或4个点时,在`setTransfiniteSurface()'调用中可以省略角列表:  
gmsh.model.geo.addPoint(0.2, 0.2, 0, 1.0, 7)  
gmsh.model.geo.addPoint(0.2, 0.1, 0, 1.0, 8)  
gmsh.model.geo.addPoint(0.25, 0.2, 0, 1.0, 9)  
gmsh.model.geo.addPoint(0.3, 0.1, 0, 1.0, 10)  
gmsh.model.geo.addLine(8, 10, 10)  
gmsh.model.geo.addLine(10, 9, 11)  
gmsh.model.geo.addLine(9, 7, 12)  
gmsh.model.geo.addLine(7, 8, 13)  
gmsh.model.geo.addCurveLoop([13, 10, 11, 12], 14)  
gmsh.model.geo.addPlaneSurface([14], 15)  
for i in range(10, 14):  
    gmsh.model.geo.mesh.setTransfiniteCurve(i, 10)  
gmsh.model.geo.mesh.setTransfiniteSurface(15)  
  
# 生成三角形的方式可以通过在`setTransfiniteSurface()'中指定"Left"、"Right"或"Alternate"来控制。  
# 例如:  
# gmsh.model.geo.mesh.setTransfiniteSurface(15, "Alternate")  
  
gmsh.model.geo.synchronize()  # 同步几何数据  
  
# 最后,我们对网格应用椭圆平滑器以获得更规则的网格:  
gmsh.option.setNumber("Mesh.Smoothing", 100)  
  
gmsh.model.mesh.generate(2)  # 生成网格  
gmsh.write("t6.msh")  # 写入网格文件  
  
# 启动GUI以查看结果:  
if '-nopopup' not in sys.argv:  
    gmsh.fltk.run()  
  
gmsh.finalize()  # 清理并结束Gmsh

7、背景网格

import gmsh  
import os  
import sys  
  
# 通过提供一个背景网格,即包含目标网格大小的后期处理视图,可以非常准确地指定网格大小。  
  
gmsh.initialize()  
  
# 合并一个包含目标网格大小的基于列表的后期处理视图:  
path = os.path.dirname(os.path.abspath(__file__))  
gmsh.merge(os.path.join(path, os.pardir, 't7_bgmesh.pos'))  
  
# 如果后期处理视图是基于模型的而不是基于列表的(即如果它是基于实际的网格),  
# 那么我们需要创建一个新的模型来包含几何体,以便对其进行网格划分不会破坏背景网格。  
# 在这里不需要这样做,因为视图是基于列表的,但这样做也没有坏处:  
gmsh.model.add("t7")  
  
# 创建一个简单的矩形几何体:  
lc = 1e-2  
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)  
gmsh.model.geo.a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值