Проблема при импорте меша с 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 успешно импортировал его.

Другие вопросы по тегам