Создать единую сетку для нескольких тел в GMSH - PullRequest
0 голосов
/ 24 декабря 2018

В настоящее время я пытаюсь выполнить магнитостатическое моделирование FEM и хочу создать сетку своей геометрии, используя GMSH.Геометрия показана ниже: в Magnetic-Circuit

я создаю геометрию с помощью FreeCAD и импортирую в GMSH в виде файла .STEP.В GMSH я определяю 3 физические группы, что приводит к следующему сценарию:

Merge "yoke_simulation.step";
Physical Volume("iron") = {1, 7, 9, 6, 3, 2, 4};
//+
Physical Volume("current") = {5};
//+
Physical Volume("air") = {8};

При создании сетки я получаю следующий результат: enter image description here

Проблема в том, что GMSH, кажется, создает отдельную сетку для каждого тела, не соединяя эти сетки друг с другом.Например, если посмотреть на область между двумя конусами, очевидно, что сетка двух конусов не связана с сеткой воздуха: enter image description here

Как можноЯ получаю GMSH для создания единой, связанной сетки для всех тел?

1 Ответ

0 голосов
/ 24 декабря 2018

Похоже, что сейчас Air том 8 - это просто общая ограничительная рамка, без необходимого вычитания томов для Iron и Current.Таким образом, он создает тетраэдрическую сетку для всего ограничивающего прямоугольника без учета других тел.

Я не эксперт FreeCAD, поэтому я не знаю, как правильно настроить его там.Возможно, попробуйте указать там Air том, чтобы убедиться, что он не содержит ваших данных.

Другой подход может включать небольшие изменения на уровне GMSH.Например, создание правильного тома Air перед тем, как сделать его физическим.У вас есть тома 1, 7, 9, 6, 3, 2, 4, 5, которые вы хотите вычесть из тома 8.Это может быть достигнуто с помощью

BooleanDifference(100) = { Volume{8}; Delete; }{ Volume{1,7,9,6,3,2,4,5}; };
Physical Volume("air") = {100};

Обратите внимание, что предыдущий код будет работать только при использовании ядра OpenCASCADE внутри GMSH.Пожалуйста, смотрите следующий пример кода в GMSH для справки:

SetFactory("OpenCASCADE");

Box(1) = {0,0,0, 1,1,1};

Box(2) = {0.1,0.1,0.1, 0.2,0.2,0.2};
Box(3) = {0.5,0.5,0.5, 0.2,0.2,0.2};

BooleanDifference(100) = { Volume{1}; Delete; }{ Volume{2,3}; };
Physical Volume ("air") = {100};
Physical Volume ("iron") = {2,3};
...