在 Gmsh 中重新划分模型后是否可以保留集合(物理标签)?

计算科学 gmsh
2021-12-23 12:50:41

我目前正在使用 Gmsh 作为我的学士学位论文的一部分为 Abaqus 研究网格划分算法,但我似乎在某个时候陷入了困境。我可以使用 Gmsh 教程“t13”中给出的脚本重新划分 .geo 和 .msh 文件。

t13.geo:

Merge "myJob5.msh";
angle = DefineNumber[40, Min 20, Max 120, Step 1,
  Name "Parameters/Angle for surface detection" ];
forceParametrizablePatches = 0;
forceIncludeBoundary = 0;
ClassifySurfaces{angle * Pi/180, forceIncludeBoundary, forceParametrizablePatches};
CreateGeometry;
Background Field = 1;

我面临的唯一问题是我的集合(物理标签)仍然存在,但 Gmsh 没有(或不能)将它们与适当的节点/线/曲面匹配。我从一个基本模型开始。

myJob5.geo:

SetFactory("OpenCASCADE");
Point(1) = {0, 0, 0, 1.0};
Point(2) = {15, 0, 0, 1.0};
Point(3) = {15, 15, 0, 1.0};
Point(4) = {0, 15, 0, 1.0};
Point(5) = {7.5, 7.5, 0, 1.0};
Line(1) = {1, 2};
Line(2) = {2, 3};
Line(3) = {3, 4};
Line(4) = {4, 1};
Line(5) = {1, 5};
Line(6) = {5, 3};
Line(7) = {2, 5};
Line(8) = {5, 4};
Physical Point("setNode1") = {3};
Physical Point("setNode2") = {2};
Physical Point("setNode2") += {1};
Physical Curve("setLine1") = {3};
Physical Curve("setLine2") = {4};
Physical Curve("setLine2") += {1};
Curve Loop(1) = {3, -8, 6};
Plane Surface(1) = {1};
Curve Loop(2) = {7, 6, -2};
Plane Surface(2) = {2};
Curve Loop(3) = {8, 4, 5};
Plane Surface(3) = {3};
Curve Loop(4) = {5, -7, -1};
Plane Surface(4) = {4};
Physical Surface("setSurf1") = {1};
Physical Surface("setSurf1") += {2};
Physical Surface("setSurf2") = {3};
Physical Surface("setSurf2") += {4};

这转化为这张图片: 我的工作5.geo; 实体和集合可见以便更好地可视化

网格化后,我最终得到了这个 .msh 文件。

myJob5.msh:

$MeshFormat
4.1 0 8
$EndMeshFormat
$PhysicalNames
6
0 1 "setNode1"
0 2 "setNode2"
1 4 "setLine1"
1 5 "setLine2"
2 7 "setSurf1"
2 9 "setSurf2"
$EndPhysicalNames
$Entities
5 8 4 0
1 0 0 0 1 2 
2 15 0 0 1 2 
3 15 15 0 1 1 
4 0 15 0 0 
5 7.5 7.5 0 0 
1 -1.000000002804313e-07 -1e-07 -1e-07 15.0000001 1e-07 1e-07 1 5 2 1 -2 
2 14.9999999 -1.000000002804313e-07 -1e-07 15.0000001 15.0000001 1e-07 0 2 2 -3 
3 -1.000000002804313e-07 14.9999999 -1e-07 15.0000001 15.0000001 1e-07 1 4 2 3 -4 
4 -1e-07 -1.000000002804313e-07 -1e-07 1e-07 15.0000001 1e-07 1 5 2 4 -1 
5 -9.999999983634211e-08 -9.999999983634211e-08 -1e-07 7.5000001 7.5000001 1e-07 0 2 1 -5 
6 7.4999999 7.4999999 -1e-07 15.0000001 15.0000001 1e-07 0 2 5 -3 
7 7.4999999 -9.999999983634211e-08 -1e-07 15.0000001 7.5000001 1e-07 0 2 2 -5 
8 -9.999999983634211e-08 7.4999999 -1e-07 7.5000001 15.0000001 1e-07 0 2 5 -4 
1 -1.000000002804313e-07 7.4999999 -1e-07 15.0000001 15.0000001 1e-07 1 7 3 3 -8 6 
2 7.4999999 -1.000000002804313e-07 -1e-07 15.0000001 15.0000001 1e-07 1 7 3 7 6 -2 
3 -9.999999983634211e-08 -1.000000002804313e-07 -1e-07 7.5000001 15.0000001 1e-07 1 9 3 8 4 5 
4 -1.000000002804313e-07 -9.999999983634211e-08 -1e-07 15.0000001 7.5000001 1e-07 1 9 3 5 -7 -1 
$EndEntities
$Nodes
12 5 1 5
0 1 0 1
1
0 0 0
0 2 0 1
2
15 0 0
0 3 0 1
3
15 15 0
0 4 0 1
4
0 15 0
0 5 0 1
5
7.5 7.5 0
1 1 0 0
1 3 0 0
1 4 0 0
2 1 0 0
2 2 0 0
2 3 0 0
2 4 0 0
$EndNodes
$Elements
10 10 1 10
0 1 15 1
1 1 
0 2 15 1
2 2 
0 3 15 1
3 3 
1 1 1 1
4 1 2 
1 3 1 1
5 3 4 
1 4 1 1
6 4 1 
2 1 2 1
7 3 4 5 
2 2 2 1
8 2 5 3 
2 3 2 1
9 1 5 4 
2 4 2 1
10 1 5 2 
$EndElements

和这张图片: 我的工作5.msh; 数字是指它们各自的集合(物理标签)

此图像中仅显示数字以突出显示它们所属的集合,例如紫色“0”表示该实体(表面、线或节点)不属于任何集合,黄色 4 表示该实体“line”是集合“setLine1”的一部分。

现在,使用“t13”脚本,我尝试重新网格化 .msh 文件,给了我这张图片。

myJob_remesh.msh; 值得注意的是模型中的所有零,这意味着所有表面/线和节点实体不属于任何集合

您可以通过在 gmsh 中对上面给出的 t13.geo 文件进行简单的 2d 网格化来获得它。

现在我的问题是,如果可能的话,如何使用这种方法保留模型中的集合。我正在寻找一种将新生成的元素与先前分配的集合相匹配的方法。

我知道这一定是可能的,因为 Gmsh 在细化网格时确实保持集合的准确性,本质上是乘以元素的数量并将它们全部分配给它们各自的集合。

我真的希望我的例子尽可能简洁明了。但是,如果有任何不清楚的地方,我很想把事情弄清楚,我期待着任何可以帮助我的人。谢谢。

0个回答
没有发现任何回复~