我正在尝试编写一个脚本,该脚本将使用Gmsh Python API自动对几何进行网格划分以进行CFD分析。我遇到了一些问题:
首先,我希望能够编写用于调试目的的Gmsh脚本文件( .geo )。我查看了Gmsh API的源代码,发现gmsh.write()
函数支持 .geo_unrolled 扩展,而不仅仅是 .geo 。该扩展名最能解决问题,但是使用gmsh.write('test.geo_unrolled')
时,似乎没有将任何网格划分操作(例如将曲线标记为超限)或变换(例如膨胀)都未写入输出文件。我认为这与 _unrolled 部分有关。但是有什么办法可以从API中获取完整的Gmsh脚本?
其次,当我尝试复制样例的样例时:
p1 = gmsh.model.geo.addPoint(-1, 0.5, 0, 0.1)
p2 = gmsh.model.geo.addPoint(0, 1, 0, 0.1)
p3 = gmsh.model.geo.addPoint(1, 0.5, 0, 0.1)
s1 = gmsh.model.geo.addSpline([p1, p2, p3])
s2 = gmsh.model.geo.copy([s1])
我得到ValueError: ('gmshModelGeoCopy returned non-zero error code: ', 1)
。错误代码1
似乎表明在调用s1
时找不到原始样条(copy()
)的标签。我在这里想念什么吗?例如,我曾尝试在尝试致电gmsh.model.geo.synchronize()
之前先致电copy()
,但这没有任何效果。
最后,当我在Gmsh GUI中使用模块-几何-基本实体-变换-缩放使用膨胀变换时,请检查在副本上应用缩放选项在上面的示例样条曲线对话框中,确实得到了预期的曲线的缩放版本,包括三个点。假设我能够使用API完成相同的操作,然后如何参考缩放后的样条曲线所经过的三个新点,例如,如果我想在原始样条曲线的起点和缩放的样条曲线?
最后,我要完成的工作如下:通过点列表绘制样条线,创建该样条线的缩放副本,在起点和终点之间绘制线,并创建一个以该点为边界的平面两个样条线。有没有比我尝试做的更好的方法了?
答案 0 :(得分:3)
可能为时已晚,但你永远不会知道。
我从不需要使用API创建.geo文件。但是我在Gmsh邮件列表档案中发现了this discussion,这可能会有所帮助。
关于copy
的错误,您必须指定要复制的实体的尺寸,而不仅是标签(请选中the documentation,它指向dimTag
)。 rotate
,symmetrize
etc 之类的转换也是一样。使用以下方法应该可以:
s2 = gmsh.model.geo.copy([(1, s1)])
NB:仅复制一个实体时,我认为内括号或方括号都是多余的,否则您必须提供[[dim_1,tag_1),(dim_2,tag_2),等形式的元组列表。 ..,(dim_n,tag_n)]。
请记住,copy
将返回相同类型的变量(元组列表), ie 在您的情况下,变量s2
将为{{1} }。因此,您可能不希望使用相同类型的变量名,因为要获取标签,您必须使用[(1, tag_s2)]
而不是简单地使用s2[0][1]
。
在这里,您对以下问题有部分答案,因为复制的实体的标签将包含在您的返回变量中。
希望对您或其他人有帮助!