Структурированная 2D сетка в Gmsh

Продолжаю тему популярного открытого сеточного генератора. Теперь рассматривается структурированная 2D сетка в Gmsh. Вот такая:

Структурированная 2D сетка в Gmsh - Результат
Результат построения структурированной двухмерной сетки в прямоугольной области с отверстием.

Структурированная 2D сетка в Gmsh: О скрипте

Когда Вы работаете в Gmsh, команды графического интерфейса, относящиеся к созданию геометрии, записываются в скрипт в виде вызовов функций. Это текстовый файл. Он имеет расширение «geo». Имя файла скрипта указывается в заголовке окна.

Отображение имени скрипта Gmsh в заголовке окна
Отображение имени скрипта Gmsh в заголовке окна.

Поскольку графический интерфейс программы Gmsh оставляет желать лучшего, для создания сетки иногда проще работать со скриптом. Разумеется, можно работать в GUI и смотреть на то, какой получается скрипт и как-то его модифицировать при необходимости. В следующем параграфе, при разборе скрипта я пишу и вызов функции и соответствующую команду в GUI.

Есть три важные команды по управлению скриптом:

Команды по работе с текущим скриптом
Команды по работе с текущим скриптом.
  • Reload script — стереть всю геометрию и прочитать снова файл скрипта.
  • Remove last script command — отмена (удаление) последней добавленной в скрипт строчки.
  • Edit script — открыть скрипт в блокноте.

Текст скрипта


Point(1) = {0, 0, 0, 1.0};
Point(2) = {0, 0.5, 0, 1.0};
Point(3) = {1, 0.5, 0, 1.0};
Point(4) = {1, -0, 0, 1.0};
Point(5) = {0.5, 0.25, 0, 1.0};
Point(6) = {0.4, 0.3, 0, 1.0};
Point(7) = {0.6, 0.3, 0, 1.0};
Point(8) = {0.6, 0.2, 0, 1.0};
Point(9) = {0.4, 0.2, 0, 1.0};
//+
Circle(1) = {9, 5, 6};
Circle(2) = {6, 5, 7};
Circle(3) = {7, 5, 8};
Circle(4) = {8, 5, 9};
//+
Line(5) = {1, 2};
Line(6) = {2, 3};
Line(7) = {3, 4};
Line(8) = {4, 1};
Line(9) = {6, 2};
Line(10) = {7, 3};
Line(11) = {8, 4};
Line(12) = {1, 9};
//+
Transfinite Line {2} = 10 Using Progression 1;
Transfinite Line {4} = 10 Using Progression 1;
Transfinite Line {8} = 10 Using Progression 1;
Transfinite Line {6} = 10 Using Progression 1;
Transfinite Line {10} = 10 Using Progression 1;
Transfinite Line {11} = 10 Using Progression 1;
Transfinite Line {12} = 10 Using Progression 1;
Transfinite Line {9} = 10 Using Progression 1;
Transfinite Line {1} = 5 Using Progression 1;
Transfinite Line {3} = 5 Using Progression 1;
Transfinite Line {7} = 5 Using Progression 1;
Transfinite Line {5} = 5 Using Progression 1;
//+
Line Loop(1) = {9, -5, 12, 1};
Plane Surface(1) = {1};
Line Loop(2) = {2, 10, -6, -9};
Plane Surface(2) = {2};
Line Loop(3) = {10, 7, -11, -3};
Plane Surface(3) = {3};
Line Loop(4) = {11, 8, 12, -4};
Plane Surface(4) = {4};
//+
Transfinite Surface {1};
Transfinite Surface {2};
Transfinite Surface {3};
Transfinite Surface {4};
//+
Physical Line("left") = {5};
Physical Line("right") = {7};
Physical Line("top") = {6};
Physical Line("bottom") = {8};
Physical Surface("internal") = {2, 3, 4, 1};

Посмотрев на скрипт, важно заметить следующее. При создании геометрии, сначала создаются точки с помощью функции Point(). Одноименный пункт есть в дереве модуля Geometry. Далее, по точкам создаются дуги окружности при помощи функции Circle(). Этому вызову соответствует пункт Circle arc в дереве модуля Geometry. Потом создаются линии Line() соответствует Straight line в GUI.

С функцией Transfinite() интереснее. Она находится в модуле Mesh -> Define -> Transfinite. В частности, Transfinite Line() задает разбиение на линиях. О трансфинитной интерполяции см. книгу А.М. Молчанов, М.А. Щербаков, Д.С. Янышев, М.Ю. Куприков, Л.В. Быков — «Построение сеток в задачах авиационной и космической техники» 2013 г., стр 41. Есть тут.

Далее следуют пары вызовов Line loop() и Plane surface(). Это создаются поверхности для построения двумерной сетки. В GUI каждой паре соответствует вызов одной команды Plane surface из модуля Geometry.

Transfinite surface устанавливает поверхность для трансфинитного построения сетки.

В заключение при помощи функций Physical Line() создаются регионы для обозначения внутренних элементов и задания граничных условий. В графическом интерфейсе это модуль Geometry: Physical groups -> Add

Два слеша — комментарий.

Скачать

Structured2DMesh

Если открываете скрипт (geo) в Gmsh, то сетка не появится. Появится только геометрия. Сетку надо строить вызовом узла «2D» в модуле Mesh, также следует вызвать «Recombine 2D», чтобы сетка стала не только структурированной, но ещё и состоящей из четырехугольников.

Построение сетки и рекомбинация
Построение сетки и рекомбинация треугольных элементов.

Структурированная 2D сетка в Gmsh: 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.