我正在尝试编写一个脚本,该脚本将使用 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 完成相同的操作,那么我如何引用缩放样条经过的三个新点,例如,如果我想在原始样条的起点和原样条的起点之间画一条线缩放样条?
最后,我想要完成的是:通过一系列点绘制一条样条线,创建该样条线的缩放副本,在起点和终点之间绘制线,并创建由两条样条线和线。有没有比我试图用扩张做的更好的方法来做到这一点?
最佳答案
可能为时已晚,但您永远不会知道。
我从来不需要使用 API 创建 .geo 文件。但是我在 Gmsh 邮件列表存档中找到了 this discussion,这可能会有所帮助。
关于 copy
的错误,您必须指定要复制的实体的维度,而不仅仅是标签(检查 the documentation ,它指的是 dimTag
)。这与 rotate
、 symmetrize
等转换相同。使用以下方法应该可以:
s2 = gmsh.model.geo.copy([(1, s1)])
注意:当只复制一个实体时,我认为内括号或方括号都是多余的,否则您必须提供 [(dim_1, tag_1), (dim_2, tag_2), ..., (dim_n, tag_n)]。
请记住,
copy
将返回相同类型的变量(元组列表),即在您的情况下,变量 s2
将是 [(1, tag_s2)]
。因此,您可能不想使用相同类型的变量名,因为为了获得标签,您必须使用 s2[0][1]
而不是简单的 s2
。在这里,您对以下问题有部分答案,因为复制实体的标签将包含在您的返回变量中。
希望对您或其他人有所帮助!
关于python - 关于 Gmsh Python API 的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54951925/