关于Gmsh Python API的问题

2024-07-03 07:38:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本,它将使用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实现同样的功能,那么如何引用缩放样条线经过的三个新点,例如,如果我想在原始样条线的起点和缩放样条线的起点之间画一条线?在

最后,我要完成的是:通过一系列点绘制样条曲线,创建该样条曲线的缩放副本,在起点和终点之间绘制直线,并创建由两条样条线和直线包围的平面。有没有比我做扩张术更好的方法呢?在


Tags: 文件标记脚本model曲线writegeo样条
1条回答
网友
1楼 · 发布于 2024-07-03 07:38:41

可能太迟了,但你永远不会知道。在

我从来不用用API创建.geo文件。但是我在Gmsh邮件列表存档中找到了this discussion,这可能会有帮助。在

关于copy的错误,您必须指定要复制的实体的维度,而不仅仅是标记(选中the documentation,它引用dimTag)。对于像rotatesymmetrize这样的变换也是一样的。使用以下方法应该有效:

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。在

在这里,您对以下问题给出了部分答案,因为复制实体的标记将包含在您的返回变量中。在

希望对你或其他人有帮助!在

相关问题 更多 >