Какую двоичную кодировку использует Gmsh для файлов сохранения и как их можно прочитать обратно в Python в интерпретируемой форме.
Вот упрощенная версия кода руководства Gmsh 1 (ссылка), модифицированная для сохранения сетки в двоичном формате.
< pre class="lang-py Prettyprint-override">
Код: Выделить всё
import gmsh
import sys
gmsh.initialize(argv=["","-bin"])
gmsh.model.add("t1")
lc = 1e-2
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
gmsh.model.geo.addPoint(.1, 0, 0, lc, 2)
gmsh.model.geo.addPoint(.1, .3, 0, lc, 3)
p4 = gmsh.model.geo.addPoint(0, .3, 0, lc)
gmsh.model.geo.addLine(1, 2, 1)
gmsh.model.geo.addLine(3, 2, 2)
gmsh.model.geo.addLine(3, p4, 3)
gmsh.model.geo.addLine(4, 1, p4)
gmsh.model.geo.addCurveLoop([4, 1, -2, 3], 1)
gmsh.model.geo.addPlaneSurface([1], 1)
gmsh.model.geo.synchronize()
gmsh.model.addPhysicalGroup(1, [1, 2, 4], 5)
gmsh.model.addPhysicalGroup(2, [1], name="My surface")
gmsh.model.mesh.generate(2)
gmsh.write("t1_binary.msh")
gmsh.finalize()
Код: Выделить всё
mesh_file = []
with open("t1_binary.msh", "rb") as f:
for line in f.readlines():
print(line)
mesh_file.append(line.decode())
Что касается комментария о функции записи, да, я попробовал изучить этот код. Функция write gmsh.py (ссылка) вызывает lib.gmshWrite (я думаю, это: ссылка), которая является C++. Эта функция C++ вызывает gmsh::write (я думаю, это: ссылка), которая, похоже, вызывает gmshWrite, совершая полный круг. Я не уверен, что смотрю на неправильные определения функций.
Я использую Linux и попробовал запустить файл t1_binary.msh, чтобы посмотреть, даст ли это мне любая полезная информация, но я получил только t1_binary.msh: data.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ed-to-asci