Я пытаюсь написать скрипт, который будет автоматически связывать геометрии для анализа CFD с использованием API-интерфейса Gmsh Python.Есть несколько проблем, с которыми я сталкиваюсь:
Прежде всего, я хотел бы иметь возможность писать файлы скриптов Gmsh ( .geo ) для целей отладки.Я просмотрел исходный код API-интерфейса Gmsh и обнаружил, что расширение .geo_unrolled поддерживается для функции gmsh.write()
, но не только для .geo .Это расширение в основном помогает, но кажется, что любые операции с сеткой (например, помечать кривые как трансфинитные) или преобразования (например, расширять) не записываются в выходной файл при использовании gmsh.write('test.geo_unrolled')
.Я предполагаю, что это как-то связано с частью _unrolled .Но есть ли способ получить полный скрипт Gmsh из API?
Во-вторых, когда я пытаюсь сделать копию сплайна, как в этом примере:
p1 = gmsh.model.geo.addPoint(-1, 0.5, 0, 0.1)
p2 = gmsh.model.geo.addPoint(0, 1, 0, 0.1)
p3 = gmsh.model.geo.addPoint(1, 0.5, 0, 0.1)
s1 = gmsh.model.geo.addSpline([p1, p2, p3])
s2 = gmsh.model.geo.copy([s1])
Я получаюValueError: ('gmshModelGeoCopy returned non-zero error code: ', 1)
.Код ошибки 1
, похоже, указывает на то, что тег исходного сплайна (s1
) не может быть найден при вызове copy()
.Я что-то здесь упускаю?Я, например, пытался вызвать gmsh.model.geo.synchronize()
, прежде чем пытаться вызвать copy()
, но это не имело никакого эффекта.
Наконец, когда я использую преобразование расширения в графическом интерфейсе Gmsh с использованием Модули -Геометрия - Элементарные объекты - Преобразование - Масштаб , проверка опции Применить масштабирование при копировании в диалоговом окне на примере сплайна сверху, я действительно получаю масштабированную версию кривой, как и ожидалось, включаятри очкаПредполагая, что я смог сделать то же самое с помощью API, как мне затем обратиться к трем новым точкам, через которые проходит масштабированный сплайн, например, если я хочу провести линию между начальной точкой исходного сплайна и точкоймасштабированный сплайн?
В итоге я хочу сделать следующее: нарисовать сплайн через список точек, создать масштабированную копию этого сплайна, нарисовать линии между начальной и конечной точками исоздать плоскую поверхность, ограниченную двумя сплайнами и линиями.Есть ли лучший способ сделать это, чем то, что я пытаюсь сделать с дилатацией?