在Fipy中通过Gmsh导入3D网格时出现问题

时间:2019-05-28 11:37:00

标签: mesh fipy

我试图在FiPy中导入由Gmsh生成的3D网格。使用2D网格进行的测试效果很好。如果然后使用Gmsh3D挤压并导入模型,则会收到错误消息。

GmshException:Gmsh没有产生任何单元!检查您的Gmsh代码。

我正在使用Python 3.7.3,Fipy 3.1.3和Gmsh 3.0.6(如推荐)在Win10上工作。

test2D.geo测试文件:

SetFactory("OpenCASCADE");
cl = 0.5;
bs = 2.;
Point(1) = {0, 0, 0, cl};
Point(2) = {0, bs, 0, cl};
Point(4) = { bs,  0, 0, cl};
Point(3) = {bs,  bs, 0, cl};
Line(5) = {1, 2};
Line(6) = {2, 3};
Line(7) = {3, 4};
Line(8) = {4, 1};

Line Loop(10) = {6, 7, 8, 5};
Plane Surface(1) = {10};
Extrude {0, 0, 1} {
  Surface{1}; 
}

和:

from fipy import *
mesh = Gmsh3D("test2D.msh")

错误消息是: GmshException:Gmsh没有产生任何单元!检查您的Gmsh代码。

我看不到我的错误,希望有人可以在这里帮助我。 预先感谢

针对Gmsh输出进行了编辑:

Gmsh output:
Info    : Running 'gmsh C:\Users\Tinka\AppData\Local\Temp\tmpj4zr8g_c.geo -3 -nopopup -format msh -o C:\Users\Tinka\AppData\Local\Temp\tmpnz1bp4vu.msh' [Gmsh 3.0.6, 1 node, max. 1 thread]
Info    : Started on Tue May 28 19:50:42 2019
Info    : Reading 'C:\Users\Tinka\AppData\Local\Temp\tmpj4zr8g_c.geo'...
Info    : Done reading 'C:\Users\Tinka\AppData\Local\Temp\tmpj4zr8g_c.geo'
Info    : Finalized high order topology of periodic connections
Info    : Meshing 1D...
Info    : Done meshing 1D (0 s)
Info    : Meshing 2D...
Info    : Done meshing 2D (0 s)
Info    : Meshing 3D...
Info    : Done meshing 3D (0 s)
Info    : 0 vertices 0 elements
Info    : Writing 'C:\Users\Tinka\AppData\Local\Temp\tmpnz1bp4vu.msh'...
Info    : Done writing 'C:\Users\Tinka\AppData\Local\Temp\tmpnz1bp4vu.msh'
Info    : Stopped on Tue May 28 19:50:42 2019

2 个答案:

答案 0 :(得分:0)

我将Gmsh3D中的自变量名称更改为test2D.geo,并从地理文件中删除了第一行,一切似乎正常。

>>> from fipy import Gmsh3D
>>> mesh = Gmsh("test2D.geo")
>>> print(mesh.cellCenters)
[[1.34821429 1.24404762 1.34821429 ...
...

我不确定第一行的作用,但是得到Error : Gmsh requires OpenCASCADE to add vertex并且如果包含顶点,则不会生成任何顶点或像元,但这不是生成网格的必要。

我认为FiPy Gmsh类同时接受geo和msh格式的文件,但是文件名确实需要引用磁盘上的实际文件。

我使用的是FiPy版本3.2 + 2.gccec299e和Gmsh版本3.0.6。

答案 1 :(得分:0)

今天早些时候发布的FiPy 3.3已修复了gmsh和spyder的问题;感谢您的举报。

另一个problem you reported in the chat不同。为documented for Gmsh2D, but not Gmsh3D

... // attention: if you use any "Physical" labels, you *must* label
... // all elements that correspond to FiPy Cells (Physical Surface in 2D
... // and Physical Volume in 3D) or Gmsh will not include them and FiPy
... // will not be able to include them in the Mesh.
...
... // note: if you do not use any labels, all Cells will be included.

在您的Physical Volumes("cells") = {1};脚本中添加.geo可以解决该问题。