在 Fipy 中使用 Gmsh3D 导入网格时出现问题
Problem when importing a mesh with Gmsh3D in Fipy
我正在尝试将之前使用 Gmsh3D 函数使用 Gmsh 生成的 3D 网格导入 Fipy,如下所示:
mesh = Gmsh3D(join(output,'case_1.msh'),communicator=serialComm)
我遇到了与其他类似帖子相同的错误,但建议的解决方案似乎对我不起作用:
GmshException: Gmsh hasn't produced any cells! Check your Gmsh code.
Gmsh output:
Info : Running 'gmsh C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo -3 -nopopup -format msh2 -o C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh' [Gmsh 4.6.0, 1 node, max. 1 thread]
Info : Started on Wed May 05 10:22:49 2021
Info : Reading 'C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo'...
Info : Done reading 'C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo'
Info : Meshing 1D...
Info : Done meshing 1D (Wall 0s, CPU 0s)
Info : Meshing 2D...
Info : Done meshing 2D (Wall 0s, CPU 0s)
Info : Meshing 3D...
Info : Done meshing 3D (Wall 0s, CPU 0s)
Info : 0 nodes 0 elements
Info : Writing 'C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh'...
Info : Done writing 'C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh'
Info : Stopped on Wed May 05 10:22:49 2021 (From start: Wall 0.00999999s, CPU 0.03125s)
我正在使用 Fipy 3.4.2.1、Python 3.7.9 和 Gmsh 4.8.4 在 Win10 上工作。
我尝试将 .msh 文件转换为 .msh2 文件,但随后出现以下错误:
IndexError Traceback (most recent call last)
<ipython-input-47-38097a945970> in <module>
----> 1 mesh = Gmsh3D(join(output,'case_1.msh2'),communicator=serialComm) # Doesn't work
~\Anaconda3\envs\Ansys\Lib\site-packages\fipy\meshes\gmshMesh.py in __init__(self, arg, communicator,
overlap, background)
1991 self.cellGlobalIDs,
1992 self.gCellGlobalIDs,
-> 1993 self._orderedCellVertexIDs_data) = self.mshFile.read()
1994
1995 self.mshFile.close()
~\Anaconda3\envs\Ansys\Lib\site-packages\fipy\meshes\gmshMesh.py in read(self)
815 parprint("Recovering coords.")
816 parprint("numcells %d" % numCellsTotal)
--> 817 vertexCoords, vertIDtoIdx = self._vertexCoordsAndMap(cellsToGmshVerts)
818
819 # translate Gmsh IDs to `vertexCoord` indices
~\Anaconda3\envs\Ansys\Lib\site-packages\fipy\meshes\gmshMesh.py in _vertexCoordsAndMap(self,
cellsToGmshVerts)
1008 allVerts = nx.unique(nx.array(allVerts, dtype=nx.INT_DTYPE)) # remove dups
1009 allVerts = nx.sort(allVerts)
-> 1010 maxVertIdx = allVerts[-1] + 1 # add one to offset zero
1011 vertGIDtoIdx = nx.ones(maxVertIdx, 'l') * -1 # gmsh ID -> vertexCoords idx
1012 vertexCoords = nx.empty((len(allVerts), self.coordDimensions))
IndexError: index -1 is out of bounds for axis 0 with size 0
当我使用 .geo
文件时也会发生同样的情况。是网格本身的问题还是我对 Gmsh3D 做错了什么?任何帮助将不胜感激。
我首先尝试使用此网格 link that is the one that I expect to work with, but I'm not sure the mesh itself does not have any issues. So I then tried with the following .msh file: link and the corresponding .geo file: link,但均未成功。
谢谢。
这行输出
Info : Running 'gmsh C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo -3 -nopopup -format msh2 -o C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh' [Gmsh 4.6.0, 1 node, max. 1 thread]
意味着 FiPy 正在将 join(output,'case_1.msh')
的结果解释为 GEO 脚本,或者更准确地说,它无法在该位置找到文件,因此它假定字符串必须是 GEO 脚本.因为它是一个文件路径而不是一个 GEO 脚本,所以事情从那里开始。
我不知道为什么 join(output,'case_1.msh')
不被视为现有文件的路径。 output
是绝对路径还是相对路径?我建议检查您从中启动脚本的工作目录。
case_1_amplazer_pos10001.geo
您提供的不是 Gmsh geometry script,因此 FiPy 和 Gmsh 都无法读取它。
test.msh
和 case_1.msh
都是 4.1 版本的 MSH 文件。 FiPy 无法读取这些。
你是如何转换成MSH2
格式的?
我用过
gmsh -3 -format msh2 case_1.msh -o case_1.msh2
FiPy成功导入
我正在尝试将之前使用 Gmsh3D 函数使用 Gmsh 生成的 3D 网格导入 Fipy,如下所示:
mesh = Gmsh3D(join(output,'case_1.msh'),communicator=serialComm)
我遇到了与其他类似帖子相同的错误,但建议的解决方案似乎对我不起作用:
GmshException: Gmsh hasn't produced any cells! Check your Gmsh code.
Gmsh output:
Info : Running 'gmsh C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo -3 -nopopup -format msh2 -o C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh' [Gmsh 4.6.0, 1 node, max. 1 thread]
Info : Started on Wed May 05 10:22:49 2021
Info : Reading 'C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo'...
Info : Done reading 'C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo'
Info : Meshing 1D...
Info : Done meshing 1D (Wall 0s, CPU 0s)
Info : Meshing 2D...
Info : Done meshing 2D (Wall 0s, CPU 0s)
Info : Meshing 3D...
Info : Done meshing 3D (Wall 0s, CPU 0s)
Info : 0 nodes 0 elements
Info : Writing 'C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh'...
Info : Done writing 'C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh'
Info : Stopped on Wed May 05 10:22:49 2021 (From start: Wall 0.00999999s, CPU 0.03125s)
我正在使用 Fipy 3.4.2.1、Python 3.7.9 和 Gmsh 4.8.4 在 Win10 上工作。
我尝试将 .msh 文件转换为 .msh2 文件,但随后出现以下错误:
IndexError Traceback (most recent call last)
<ipython-input-47-38097a945970> in <module>
----> 1 mesh = Gmsh3D(join(output,'case_1.msh2'),communicator=serialComm) # Doesn't work
~\Anaconda3\envs\Ansys\Lib\site-packages\fipy\meshes\gmshMesh.py in __init__(self, arg, communicator,
overlap, background)
1991 self.cellGlobalIDs,
1992 self.gCellGlobalIDs,
-> 1993 self._orderedCellVertexIDs_data) = self.mshFile.read()
1994
1995 self.mshFile.close()
~\Anaconda3\envs\Ansys\Lib\site-packages\fipy\meshes\gmshMesh.py in read(self)
815 parprint("Recovering coords.")
816 parprint("numcells %d" % numCellsTotal)
--> 817 vertexCoords, vertIDtoIdx = self._vertexCoordsAndMap(cellsToGmshVerts)
818
819 # translate Gmsh IDs to `vertexCoord` indices
~\Anaconda3\envs\Ansys\Lib\site-packages\fipy\meshes\gmshMesh.py in _vertexCoordsAndMap(self,
cellsToGmshVerts)
1008 allVerts = nx.unique(nx.array(allVerts, dtype=nx.INT_DTYPE)) # remove dups
1009 allVerts = nx.sort(allVerts)
-> 1010 maxVertIdx = allVerts[-1] + 1 # add one to offset zero
1011 vertGIDtoIdx = nx.ones(maxVertIdx, 'l') * -1 # gmsh ID -> vertexCoords idx
1012 vertexCoords = nx.empty((len(allVerts), self.coordDimensions))
IndexError: index -1 is out of bounds for axis 0 with size 0
当我使用 .geo
文件时也会发生同样的情况。是网格本身的问题还是我对 Gmsh3D 做错了什么?任何帮助将不胜感激。
我首先尝试使用此网格 link that is the one that I expect to work with, but I'm not sure the mesh itself does not have any issues. So I then tried with the following .msh file: link and the corresponding .geo file: link,但均未成功。
谢谢。
这行输出
Info : Running 'gmsh C:\Users\pcnou\AppData\Local\Temp\tmppouz68km.geo -3 -nopopup -format msh2 -o C:\Users\pcnou\AppData\Local\Temp\tmp5es89ie5.msh' [Gmsh 4.6.0, 1 node, max. 1 thread]
意味着 FiPy 正在将
join(output,'case_1.msh')
的结果解释为 GEO 脚本,或者更准确地说,它无法在该位置找到文件,因此它假定字符串必须是 GEO 脚本.因为它是一个文件路径而不是一个 GEO 脚本,所以事情从那里开始。我不知道为什么
join(output,'case_1.msh')
不被视为现有文件的路径。output
是绝对路径还是相对路径?我建议检查您从中启动脚本的工作目录。case_1_amplazer_pos10001.geo
您提供的不是 Gmsh geometry script,因此 FiPy 和 Gmsh 都无法读取它。test.msh
和case_1.msh
都是 4.1 版本的 MSH 文件。 FiPy 无法读取这些。你是如何转换成
MSH2
格式的?我用过
gmsh -3 -format msh2 case_1.msh -o case_1.msh2
FiPy成功导入