Я пытаюсь импортировать 3D-сетку, созданную с помощью Gmsh в FiPy. Тест с 2D сеткой работал нормально. Если затем модель экструдируется и импортируется с помощью Gmsh3D, я получаю сообщение об ошибке.
GmshException: Gmsh не создал ни одной ячейки! Проверьте свой код Gmsh.
Я работаю над Win10 с Python 3.7.3, Fipy 3.1.3 и Gmsh 3.0.6 (как рекомендуется).
Тестовый файл 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
Я добавил вывод к моему вопросу. Спасибо за вашу помощь.
Я не уверен, но похоже, что gmsh не находит никакого содержимого в вашем файле .geo. Я отмечаю, что это работает на временных файлах. Вы уверены, что tmpnz1bp4vu.geo
содержит то, что вы думаете? Мой вывод выглядит как gist.github.com/guyer/ab57a69ffa1f228eb599cc0d7cb37f2a.
Существует только соответствующий файл сетки. Я не понимаю, откуда берутся эти файлы, и поэтому не знаю, что, по моему мнению, они содержат. Извините, я, очевидно, очень мало знаю.
Какие действия вы предпринимаете для получения результата 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]
? Шаг за шагом, что вы делаете?
Вывод генерируется после выполнения кода Python, как описано выше в Spyder.
Давайте продолжить обсуждение в чате.
Я изменил имя аргумента в 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.
У меня, к сожалению, тоже не работает, но спасибо за идею. Я получаю ту же ошибку.
Эта проблема с gmsh и spyder была исправлена в FiPy 3.3, выпущенном ранее сегодня; спасибо, что сообщили об этом.
Другой проблема, о которой вы сообщили в чате отличается. Как задокументировано для Gmsh2D, но не для 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
решит эту проблему.
Это работает для меня. Можете ли вы опубликовать вывод gmsh, когда он генерирует
test2D.msh
?