Я пытаюсь написать скрипт, который будет автоматически создавать сетку геометрии для анализа CFD с использованием Gmsh Python API. Я столкнулся с несколькими проблемами:
Прежде всего, я хотел бы иметь возможность писать файлы сценариев 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, как мне тогда обратиться к трем новым точкам, через которые проходит масштабированный сплайн, например, если я хотел провести линию между начальной точкой исходного сплайна и точкой начала сплайна. масштабированный сплайн?
В конце концов, я хочу сделать следующее: провести сплайн через список точек, создать масштабированную копию этого сплайна, провести линии между начальной и конечной точками и создать плоскую поверхность, ограниченную двумя сплайнами и линии. Есть ли лучший способ сделать это, чем то, что я пытаюсь сделать с расширением?