Проблема при импорте меша с Gmsh3D в Fipy
Я пытаюсь импортировать в Fipy трехмерную сетку, ранее созданную с помощью Gmsh с помощью функции Gmsh3D, например:
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)
Я работаю над Win10 с Fipy 3.4.2.1, Python 3.7.9 и Gmsh 4.8.4.
Я попытался преобразовать файл .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? Любая помощь будет принята с благодарностью.
Спасибо.
1 ответ
Эта строка вывода
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 интерпретирует результат как сценарий GEO, или, точнее, что он не может найти файл в этом месте, поэтому он предполагает, что эта строка должна быть сценарием GEO. Поскольку это путь к файлу, а не скрипт GEO, оттуда все пойдет не так.
Я не знаю почему
join(output,'case_1.msh')
не рассматривается как путь к существующему файлу. Являетсяoutput
абсолютный путь или относительный? Я бы посоветовал проверить рабочий каталог, из которого вы запустили свой скрипт.case_1_amplazer_pos10001.geo
предоставленный не вами скрипт геометрииGmsh , поэтому ни FiPy, ни Gmsh не могут его прочитать.test.msh
а такжеcase_1.msh
оба являются файлами MSH версии 4.1. FiPy не может их прочитать.Как вы перешли на
MSH2
формат?я использовал
gmsh -3 -format msh2 case_1.msh -o case_1.msh2
и FiPy успешно импортировал его.