Fix SwapImprove2

Don't allow swaps if an adjacent element was deleted in the current
optimization pass. Also update test restults.
This commit is contained in:
Matthias Hochsteger 2020-11-25 17:55:44 +01:00
parent da4f959a0f
commit fbeb6137eb
2 changed files with 83 additions and 68 deletions

View File

@ -3716,6 +3716,18 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI
FlatArray<ElementIndex> row = elementsonnode[pi1];
for(auto ei : row)
if (mesh[ei].IsDeleted()) return 0.0;
for(auto ei : elementsonnode[pi2])
if (mesh[ei].IsDeleted()) return 0.0;
for(auto ei : elementsonnode[pi3])
if (mesh[ei].IsDeleted()) return 0.0;
for(auto ei : elementsonnode[pi4])
if (mesh[ei].IsDeleted()) return 0.0;
for (int k = 0; k < row.Size(); k++)
{
ElementIndex eli2 = row[k];
@ -3723,7 +3735,6 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI
if ( eli1 != eli2 )
{
Element & elem2 = mesh[eli2];
if (elem2.IsDeleted()) continue;
if (elem2.GetType() != TET)
continue;
@ -3992,8 +4003,12 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal)
QuickSort(faces_with_improvement);
for (auto [dummy, eli,j] : faces_with_improvement)
{
if(mesh[eli].IsDeleted())
continue;
if(SwapImprove2( mesh, goal, eli, j, elementsonnode, belementsonnode, false) < 0.0)
cnt++;
}
PrintMessage (5, cnt, " swaps performed");

View File

@ -293,18 +293,18 @@
},
{
"angles_tet": [
14.466,
161.38
16.89,
158.0
],
"angles_trig": [
13.564,
150.65
16.739,
133.14
],
"ne1d": 32,
"ne2d": 220,
"ne3d": 563,
"quality_histogram": "[0, 0, 0, 3, 3, 7, 24, 22, 35, 34, 40, 43, 45, 60, 61, 53, 58, 41, 27, 7]",
"total_badness": 960.07699692
"ne3d": 551,
"quality_histogram": "[0, 0, 0, 0, 0, 3, 4, 16, 23, 34, 48, 43, 50, 61, 70, 53, 51, 48, 37, 10]",
"total_badness": 860.81905284
},
{
"angles_tet": [
@ -473,7 +473,7 @@
"ne2d": 726,
"ne3d": 2167,
"quality_histogram": "[0, 4, 17, 35, 75, 117, 114, 112, 77, 51, 58, 86, 115, 177, 248, 293, 239, 204, 118, 27]",
"total_badness": 4176.9278168
"total_badness": 4176.9284057
},
{
"angles_tet": [
@ -860,18 +860,18 @@
},
{
"angles_tet": [
16.061,
157.39
8.4923,
161.34
],
"angles_trig": [
16.851,
20.122,
127.45
],
"ne1d": 36,
"ne2d": 152,
"ne3d": 385,
"quality_histogram": "[0, 0, 0, 0, 0, 10, 8, 21, 24, 22, 29, 37, 42, 28, 43, 24, 38, 22, 25, 12]",
"total_badness": 647.21940974
"ne3d": 358,
"quality_histogram": "[0, 0, 1, 0, 0, 2, 5, 11, 21, 19, 22, 22, 31, 29, 35, 39, 57, 37, 17, 10]",
"total_badness": 559.67849284
},
{
"angles_tet": [
@ -1014,18 +1014,18 @@
},
{
"angles_tet": [
5.7043,
170.47
5.6074,
169.95
],
"angles_trig": [
8.0227,
160.66
7.5945,
159.99
],
"ne1d": 0,
"ne2d": 192,
"ne3d": 749,
"quality_histogram": "[0, 2, 30, 63, 86, 89, 71, 68, 67, 54, 50, 43, 27, 28, 17, 23, 13, 9, 7, 2]",
"total_badness": 2339.9827516
"ne3d": 748,
"quality_histogram": "[0, 0, 30, 62, 87, 77, 80, 61, 72, 38, 54, 43, 34, 27, 27, 20, 18, 10, 7, 1]",
"total_badness": 2287.1659209
},
{
"angles_tet": [
@ -1391,9 +1391,9 @@
],
"ne1d": 5988,
"ne2d": 11102,
"ne3d": 29343,
"quality_histogram": "[3, 4, 5, 8, 14, 42, 121, 248, 691, 1040, 1542, 2504, 3118, 3920, 4331, 4281, 3366, 2421, 1367, 317]",
"total_badness": 43497.876838
"ne3d": 29344,
"quality_histogram": "[3, 4, 5, 8, 14, 45, 122, 251, 692, 1044, 1527, 2497, 3115, 3927, 4328, 4293, 3367, 2421, 1363, 318]",
"total_badness": 43503.906462
},
{
"angles_tet": [
@ -1408,7 +1408,7 @@
"ne2d": 23964,
"ne3d": 80995,
"quality_histogram": "[2, 14, 4, 20, 18, 40, 94, 225, 485, 1115, 2415, 4537, 7493, 10248, 12753, 13190, 12020, 9207, 5660, 1455]",
"total_badness": 111934.52308
"total_badness": 111934.5334
}
],
"hinge.stl": [
@ -1490,7 +1490,7 @@
{
"angles_tet": [
20.701,
144.6
141.98
],
"angles_trig": [
22.443,
@ -1498,9 +1498,9 @@
],
"ne1d": 1862,
"ne2d": 19474,
"ne3d": 136546,
"quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 12, 59, 281, 864, 2538, 6435, 13014, 21236, 29154, 31109, 24006, 7837]",
"total_badness": 165965.29798
"ne3d": 136541,
"quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 59, 274, 862, 2533, 6435, 12998, 21248, 29157, 31131, 24003, 7832]",
"total_badness": 165944.59425
}
],
"lense.in2d": [
@ -1795,7 +1795,7 @@
"ne2d": 830,
"ne3d": 2488,
"quality_histogram": "[0, 0, 3, 37, 71, 155, 161, 102, 158, 211, 284, 276, 249, 203, 195, 139, 108, 79, 42, 15]",
"total_badness": 5146.3098744
"total_badness": 5146.3098762
},
{
"angles_tet": [
@ -2045,18 +2045,18 @@
},
{
"angles_tet": [
11.213,
163.54
11.356,
162.52
],
"angles_trig": [
13.446,
152.87
16.741,
141.37
],
"ne1d": 232,
"ne2d": 598,
"ne3d": 1380,
"quality_histogram": "[0, 0, 0, 2, 10, 15, 36, 48, 63, 92, 116, 131, 160, 158, 151, 113, 125, 91, 56, 13]",
"total_badness": 2309.6335564
"ne3d": 1418,
"quality_histogram": "[0, 0, 0, 2, 9, 14, 27, 47, 66, 97, 109, 150, 161, 159, 147, 133, 119, 96, 66, 16]",
"total_badness": 2344.2576172
},
{
"angles_tet": [
@ -2132,8 +2132,8 @@
"ne1d": 570,
"ne2d": 1202,
"ne3d": 1839,
"quality_histogram": "[2, 21, 37, 57, 67, 78, 110, 136, 161, 177, 190, 158, 155, 149, 115, 78, 69, 51, 24, 4]",
"total_badness": 4553.9697099
"quality_histogram": "[2, 21, 37, 57, 66, 75, 111, 134, 161, 173, 193, 158, 151, 145, 117, 81, 73, 54, 25, 5]",
"total_badness": 4538.6020288
},
{
"angles_tet": [
@ -2445,8 +2445,8 @@
},
{
"angles_tet": [
15.158,
158.0
15.154,
159.78
],
"angles_trig": [
17.101,
@ -2454,14 +2454,14 @@
],
"ne1d": 410,
"ne2d": 606,
"ne3d": 796,
"quality_histogram": "[0, 0, 0, 0, 1, 3, 5, 6, 28, 40, 56, 62, 82, 83, 128, 96, 88, 75, 29, 14]",
"total_badness": 1204.2331383
"ne3d": 791,
"quality_histogram": "[0, 0, 0, 0, 2, 3, 4, 7, 33, 42, 54, 61, 88, 86, 118, 92, 89, 72, 29, 11]",
"total_badness": 1208.0636246
},
{
"angles_tet": [
12.907,
159.86
158.51
],
"angles_trig": [
11.963,
@ -2469,9 +2469,9 @@
],
"ne1d": 510,
"ne2d": 1004,
"ne3d": 1838,
"quality_histogram": "[0, 0, 0, 4, 9, 30, 35, 80, 75, 109, 121, 152, 156, 200, 242, 206, 210, 105, 80, 24]",
"total_badness": 3018.9734455
"ne3d": 1859,
"quality_histogram": "[0, 0, 0, 3, 7, 29, 43, 74, 68, 95, 115, 158, 153, 213, 250, 232, 206, 107, 81, 25]",
"total_badness": 3021.4076425
},
{
"angles_tet": [
@ -2997,18 +2997,18 @@
},
{
"angles_tet": [
1.6657,
174.24
1.9786,
173.68
],
"angles_trig": [
4.1081,
164.43
3.8198,
165.45
],
"ne1d": 0,
"ne2d": 692,
"ne3d": 2737,
"quality_histogram": "[17, 200, 365, 335, 363, 301, 234, 187, 154, 143, 106, 84, 56, 48, 38, 45, 27, 19, 12, 3]",
"total_badness": 13234.755766
"ne3d": 2726,
"quality_histogram": "[19, 190, 366, 339, 352, 304, 237, 182, 157, 143, 110, 86, 53, 46, 34, 43, 30, 24, 10, 1]",
"total_badness": 13096.6735
},
{
"angles_tet": [
@ -3365,33 +3365,33 @@
},
{
"angles_tet": [
19.944,
152.59
20.148,
153.82
],
"angles_trig": [
25.599,
123.4
118.3
],
"ne1d": 68,
"ne2d": 100,
"ne3d": 130,
"quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 6, 7, 9, 5, 13, 21, 16, 21, 19, 7, 1]",
"total_badness": 187.02414176
"ne3d": 135,
"quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 5, 2, 9, 5, 18, 25, 16, 22, 20, 7, 1]",
"total_badness": 190.82756065
},
{
"angles_tet": [
12.268,
164.21
164.96
],
"angles_trig": [
15.1,
144.2
15.698,
145.1
],
"ne1d": 102,
"ne2d": 238,
"ne3d": 468,
"quality_histogram": "[0, 0, 1, 10, 5, 27, 33, 42, 51, 36, 38, 28, 35, 40, 29, 26, 37, 24, 4, 2]",
"total_badness": 980.42864262
"ne3d": 471,
"quality_histogram": "[0, 0, 1, 6, 3, 23, 25, 45, 63, 40, 34, 29, 30, 34, 27, 33, 43, 25, 8, 2]",
"total_badness": 950.55701299
},
{
"angles_tet": [