GMSH 3D поверхность сетки - PullRequest
0 голосов
/ 17 мая 2018

Я безуспешно пытался создать сетку 3D SURFACE, используя GMSH (v.3.0.6).

Проблема, с которой я сталкиваюсь, заключается в том, что после создания поверхности и создания сетки, когда я читаю файл .MSH, я получаю причудливую нумерацию узлов, то есть не все нормальные векторы ориентированы наружу, некоторые точки направлены внутрь. Я пытался создать куб и сферу, но всегда сталкиваюсь с одной и той же проблемой.

Ниже приведен файл .GEO, который я создал с помощью графического интерфейса GMSH для куба.

    // Gmsh project created on Fri Apr 20 17:08:44 2018
//+
Point(1) = {1, 0, 0, 1.0};
//+
Point(2) = {1, 1, 0, 1.0};
//+
Point(3) = {0, 1, 0, 1.0};
//+
Point(4) = {0, 0, 1, 1.0};
//+
Point(5) = {1, 0, 1, 1.0};
//+
Point(6) = {1, 1, 1, 1.0};
//+
Point(7) = {0, 1, 1, 1.0};
//+
Point(8) = {0, 0, 0, 1.0};
//+
Line(1) = {7, 6};
//+
Line(2) = {6, 5};
//+
Line(3) = {5, 1};
//+
Line(4) = {1, 8};
//+
Line(5) = {8, 3};
//+
Line(6) = {3, 7};
//+
Line(7) = {7, 4};
//+
Line(8) = {4, 8};
//+
Line(9) = {4, 5};
//+
Line(10) = {2, 1};
//+
Line(11) = {2, 6};
//+
Line(12) = {2, 3};
//+
Line Loop(1) = {6, 1, -11, 12};
//+
Plane Surface(1) = {1};
//+
Line Loop(2) = {11, 2, 3, -10};
//+
Plane Surface(2) = {2};
//+
Line Loop(3) = {2, -9, -7, 1};
//+
Plane Surface(3) = {3};
//+
Line Loop(4) = {6, 7, 8, 5};
//+
Plane Surface(4) = {4};
//+
Line Loop(5) = {8, -4, -3, -9};
//+
Plane Surface(5) = {5};
//+
Line Loop(6) = {10, 4, 5, -12};
//+
Plane Surface(6) = {6};
//+
Physical Surface(1) = {4, 3, 2, 6};
//+
Physical Surface(2) = {1};
//+
Physical Surface(3) = {5};
//+
Surface Loop(1) = {6, 2, 1, 4, 3, 5};
//+
Volume(1) = {1};

Поскольку я также определяю объем, все нормальные векторы должны указывать ВНЕШНИЙ ВИД. Любая идея, как я могу сделать это правильно (или так, как мне нужно)?

Спасибо всем заранее,

1 Ответ

0 голосов
/ 17 мая 2018

Порядок строк в Line Loop влияет на то, что обычно будет использоваться в Surface, созданном из этого Line Loop.Либо вы должны быть последовательны в порядке расположения строк во ВСЕХ ваших Line Loops - или вы можете изменить порядок для тех, которые вызывают проблемы.

Для нормалей, чтобы указать наружу, для этого конкретного примера,Вы можете просто изменить две строки:

Plane Surface(3) = {-3};
Plane Surface(4) = {-4};

Это говорит GMSH, чтобы инвертировать порядок строк в Line Loop, получая, таким образом, противоположную нормали.

Для справки, здесьобщий исправленный скрипт GMSH, который генерирует сетку с правильными нормалями:

Point(1) = {1, 0, 0, 1.0};
Point(2) = {1, 1, 0, 1.0};
Point(3) = {0, 1, 0, 1.0};
Point(4) = {0, 0, 1, 1.0};
Point(5) = {1, 0, 1, 1.0};
Point(6) = {1, 1, 1, 1.0};
Point(7) = {0, 1, 1, 1.0};
Point(8) = {0, 0, 0, 1.0};
Line(1) = {7, 6};
Line(2) = {6, 5};
Line(3) = {5, 1};
Line(4) = {1, 8};
Line(5) = {8, 3};
Line(6) = {3, 7};
Line(7) = {7, 4};
Line(8) = {4, 8};
Line(9) = {4, 5};
Line(10) = {2, 1};
Line(11) = {2, 6};
Line(12) = {2, 3};
Line Loop(1) = {6, 1, -11, 12};
Plane Surface(1) = {1};
Line Loop(2) = {11, 2, 3, -10};
Plane Surface(2) = {2};
Line Loop(3) = {2, -9, -7, 1};
Plane Surface(3) = {-3};
Line Loop(4) = {6, 7, 8, 5};
Plane Surface(4) = {-4};
Line Loop(5) = {8, -4, -3, -9};
Plane Surface(5) = {5};
Line Loop(6) = {10, 4, 5, -12};
Plane Surface(6) = {6};
Physical Surface(1) = {4, 3, 2, 6};
Physical Surface(2) = {1};
Physical Surface(3) = {5};
Surface Loop(1) = {6, 2, 1, 4, 3, 5};
Volume(1) = {1};
...