From fbeb6137eb14492299d5355080f8ec31388aa191 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 25 Nov 2020 17:55:44 +0100 Subject: [PATCH] Fix SwapImprove2 Don't allow swaps if an adjacent element was deleted in the current optimization pass. Also update test restults. --- libsrc/meshing/improve3.cpp | 17 ++++- tests/pytest/results.json | 134 ++++++++++++++++++------------------ 2 files changed, 83 insertions(+), 68 deletions(-) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index 3ddc0733..071817e3 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -3716,6 +3716,18 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI FlatArray 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"); diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 04cb980d..74f0e308 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -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": [