我正在尝试编写一个脚本,它将使用gmshpythonapi为CFD分析自动网格化几何体。我遇到了几个问题:
首先,我希望能够编写Gmsh脚本文件(.geo)以进行调试。我查看了gmshapi的源代码,发现gmsh.write()
函数支持.geo\unrolled扩展,而不仅仅是.geo。这个扩展基本上可以做到这一点,但是在使用gmsh.write('test.geo_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
似乎表示在调用copy()
时找不到原始样条线(s1
)的标记。我是不是少了点什么?例如,在尝试调用copy()
之前,我曾尝试调用gmsh.model.geo.synchronize()
,但这没有效果。在
最后,当我使用Gmsh GUI中的expanded变换时,使用Modules-Geometry-Elementary entities-Transform-Scale,选中对话框中的Apply scaling on copy选项,我确实得到了预期的曲线缩放版本,包括三个点。假设我能用API实现同样的功能,那么如何引用缩放样条线经过的三个新点,例如,如果我想在原始样条线的起点和缩放样条线的起点之间画一条线?在
最后,我要完成的是:通过一系列点绘制样条曲线,创建该样条曲线的缩放副本,在起点和终点之间绘制直线,并创建由两条样条线和直线包围的平面。有没有比我做扩张术更好的方法呢?在
可能太迟了,但你永远不会知道。在
我从来不用用API创建.geo文件。但是我在Gmsh邮件列表存档中找到了this discussion,这可能会有帮助。在
关于
copy
的错误,您必须指定要复制的实体的维度,而不仅仅是标记(选中the documentation,它引用dimTag
)。对于像rotate
、symmetrize
等这样的变换也是一样的。使用以下方法应该有效:注:当只复制一个实体时,我认为内括号或方括号都是多余的,否则您必须提供一个元组列表,格式为[(dim_1,tag_1),(dim_2,tag_2),…,(dim_n,tag_n)]。在
请记住,
copy
将返回一个相同类型的变量(元组列表),即在您的例子中,s2
将是[(1, tag_s2)]
。因此,您可能不希望使用相同类型的变量名,因为为了获得标记,您必须使用s2[0][1]
,而不是简单地使用s2
。在在这里,您对以下问题给出了部分答案,因为复制实体的标记将包含在您的返回变量中。在
希望对你或其他人有帮助!在
相关问题 更多 >
编程相关推荐