From c1d42ff1e67a6f43f547e775b29cc4dcc913a6f0 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Sun, 13 Oct 2019 12:27:29 +0200 Subject: [PATCH 01/10] Small cleanup --- libsrc/meshing/improve2.cpp | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 759fc09a..1efeb26e 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -597,17 +597,14 @@ namespace netgen } bad1 /= (hasonepi.Size()+hasbothpi.Size()); - MeshPoint p1 = mesh[pi1]; - MeshPoint p2 = mesh[pi2]; - - MeshPoint pnew = p1; - mesh[pi1] = pnew; - mesh[pi2] = pnew; - double bad2 = 0; for (int k = 0; k < hasonepi.Size(); k++) { - Element2d & el = mesh[hasonepi[k]]; + Element2d el = mesh[hasonepi[k]]; + for (auto i : Range(3)) + if(el[i]==pi2) + el[i] = pi1; + double err = CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], nv, -1, loch); @@ -624,17 +621,10 @@ namespace netgen if ( (normals[el[l]] * nv) < 0.5) bad2 += 1e10; - Element2d el1 = el; - for (auto i : Range(3)) - if(el1[i]==pi2) - el1[i] = pi1; - illegal2 += 1-mesh.LegalTrig(el1); + illegal2 += 1-mesh.LegalTrig(el); } bad2 /= hasonepi.Size(); - mesh[pi1] = p1; - mesh[pi2] = p2; - if (debugflag) { (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; @@ -657,7 +647,6 @@ namespace netgen (*testout) << "loch = " << loch << endl; */ - mesh[pi1] = pnew; PointGeomInfo gi; // bool gi_set(false); From 59c355dbedfbc20666426ccccccb8ed7dd250475 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 11:28:29 +0200 Subject: [PATCH 02/10] New Table for elementsonnode --- libsrc/meshing/improve2.cpp | 11 ++--- tests/pytest/results.json | 90 ++++++++++++++++++------------------- 2 files changed, 48 insertions(+), 53 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 1efeb26e..4168eced 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -406,15 +406,12 @@ namespace netgen int np = mesh.GetNP(); - TABLE elementsonnode(np); + auto elementsonnode = mesh.CreatePoint2SurfaceElementTable(faceindex); Array hasonepi, hasbothpi; - for (SurfaceElementIndex sei : seia) - for (PointIndex pi : mesh[sei].PNums<3>()) - elementsonnode.Add (pi, sei); - Array fixed(np); - fixed = false; + ParallelFor( fixed.Range(), [&fixed] (auto i) NETGEN_LAMBDA_INLINE + { fixed[i] = false; }); timerstart1.Stop(); @@ -688,8 +685,6 @@ namespace netgen if (el.IsDeleted()) continue; if (el.PNums().Contains(pi1)) continue; - elementsonnode.Add (pi1, sei2); - for (auto l : Range(el.GetNP())) { if (el[l] == pi2) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 840d9c09..8ea14c99 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -609,10 +609,10 @@ }, { "ne1d": 388, - "ne2d": 6128, - "ne3d": 54910, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 13, 28, 124, 330, 933, 2421, 5072, 8328, 11652, 13004, 9765, 3238]", - "total_badness": 66567.884044 + "ne2d": 6122, + "ne3d": 55722, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 38, 128, 339, 950, 2397, 5110, 8516, 11890, 13275, 9802, 3270]", + "total_badness": 67535.530354 } ], "fichera.geo": [ @@ -662,17 +662,17 @@ "frame.step": [ { "ne1d": 12694, - "ne2d": 40418, - "ne3d": 221338, - "quality_histogram": "[3, 8, 6, 9, 9, 49, 278, 724, 1782, 3522, 6397, 10742, 17468, 25554, 32460, 35629, 35018, 28948, 18116, 4616]", - "total_badness": 302031.17747 + "ne2d": 40416, + "ne3d": 221405, + "quality_histogram": "[3, 8, 6, 9, 7, 44, 262, 749, 1716, 3507, 6238, 10976, 17443, 25686, 32253, 35719, 35307, 29272, 17591, 4609]", + "total_badness": 302085.09767 }, { "ne1d": 6026, "ne2d": 11302, - "ne3d": 30643, - "quality_histogram": "[4, 5, 3, 11, 21, 51, 105, 281, 690, 1063, 1703, 2717, 3365, 4271, 4573, 4231, 3360, 2466, 1371, 352]", - "total_badness": 45609.34772 + "ne3d": 30676, + "quality_histogram": "[4, 5, 3, 10, 20, 48, 102, 279, 686, 1070, 1686, 2721, 3426, 4284, 4537, 4238, 3396, 2444, 1366, 351]", + "total_badness": 45646.217472 }, { "ne1d": 9704, @@ -812,10 +812,10 @@ }, { "ne1d": 106, - "ne2d": 600, - "ne3d": 1968, - "quality_histogram": "[0, 5, 28, 76, 118, 178, 153, 174, 160, 166, 194, 193, 159, 120, 80, 52, 39, 39, 25, 9]", - "total_badness": 4972.5229136 + "ne2d": 604, + "ne3d": 1987, + "quality_histogram": "[0, 1, 28, 89, 120, 160, 190, 186, 176, 194, 157, 174, 155, 100, 78, 66, 35, 42, 28, 8]", + "total_badness": 5044.7201931 }, { "ne1d": 132, @@ -930,10 +930,10 @@ "period.geo": [ { "ne1d": 344, - "ne2d": 1134, - "ne3d": 3267, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 19, 28, 65, 121, 198, 292, 368, 446, 463, 423, 367, 278, 161, 33]", - "total_badness": 4843.6173488 + "ne2d": 1132, + "ne3d": 3242, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 20, 25, 63, 123, 211, 275, 361, 416, 443, 425, 380, 293, 164, 39]", + "total_badness": 4791.9180684 }, { "ne1d": 160, @@ -951,10 +951,10 @@ }, { "ne1d": 344, - "ne2d": 1134, - "ne3d": 3217, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 22, 57, 93, 174, 264, 337, 423, 484, 443, 399, 282, 178, 38]", - "total_badness": 4690.0482354 + "ne2d": 1132, + "ne3d": 3191, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 18, 25, 55, 91, 178, 254, 353, 408, 438, 427, 424, 302, 170, 45]", + "total_badness": 4645.0669687 }, { "ne1d": 480, @@ -981,10 +981,10 @@ }, { "ne1d": 572, - "ne2d": 1152, - "ne3d": 1651, - "quality_histogram": "[4, 28, 36, 49, 61, 74, 97, 126, 147, 171, 148, 134, 113, 127, 124, 77, 71, 31, 25, 8]", - "total_badness": 4245.4288615 + "ne2d": 1146, + "ne3d": 1642, + "quality_histogram": "[4, 26, 39, 50, 60, 78, 99, 124, 148, 159, 146, 135, 122, 121, 117, 79, 69, 36, 24, 6]", + "total_badness": 4241.9527878 }, { "ne1d": 724, @@ -1032,10 +1032,10 @@ }, { "ne1d": 240, - "ne2d": 1816, - "ne3d": 4027, - "quality_histogram": "[0, 0, 1, 7, 19, 34, 47, 57, 122, 235, 374, 450, 506, 500, 463, 421, 355, 235, 153, 48]", - "total_badness": 6472.3221213 + "ne2d": 1812, + "ne3d": 3906, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 24, 94, 183, 308, 456, 547, 508, 494, 444, 355, 272, 158, 49]", + "total_badness": 5935.9395673 }, { "ne1d": 320, @@ -1046,26 +1046,26 @@ }, { "ne1d": 480, - "ne2d": 6844, - "ne3d": 32967, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 16, 75, 291, 699, 1397, 2614, 4171, 5653, 6522, 6079, 4257, 1190]", - "total_badness": 41783.076303 + "ne2d": 6848, + "ne3d": 32874, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 61, 265, 670, 1455, 2541, 4214, 5494, 6532, 5977, 4399, 1249]", + "total_badness": 41605.598389 }, { "ne1d": 800, "ne2d": 17866, "ne3d": 202729, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 42, 144, 537, 1505, 4365, 10380, 20189, 31903, 42471, 45652, 34935, 10600]", - "total_badness": 247665.22181 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 40, 144, 535, 1500, 4356, 10392, 20188, 31941, 42409, 45674, 34933, 10612]", + "total_badness": 247652.11378 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1436, - "ne3d": 2459, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 16, 80, 88, 171, 190, 245, 276, 299, 270, 272, 223, 184, 110, 34]", - "total_badness": 3860.2528363 + "ne2d": 1432, + "ne3d": 2448, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 14, 85, 91, 169, 198, 250, 259, 289, 265, 245, 227, 224, 102, 28]", + "total_badness": 3851.1301093 }, { "ne1d": 530, @@ -1076,10 +1076,10 @@ }, { "ne1d": 668, - "ne2d": 4998, - "ne3d": 31493, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 17, 53, 123, 356, 776, 1790, 3291, 5171, 6636, 6761, 4947, 1560]", - "total_badness": 38849.392612 + "ne2d": 5002, + "ne3d": 31622, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 13, 43, 96, 269, 788, 1790, 3249, 5163, 6715, 6912, 5008, 1567]", + "total_badness": 38905.366168 } ], "sculpture.geo": [ From 19c86a9f3d0ba962c4b61ef25fa6b195c5e430c8 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 13:50:56 +0200 Subject: [PATCH 03/10] Move BuildEdgeList to improve2.hpp --- libsrc/meshing/improve2.hpp | 55 +++++++++++++++++++++++++++++++++++++ libsrc/meshing/improve3.cpp | 54 ------------------------------------ libsrc/meshing/improve3.hpp | 2 -- 3 files changed, 55 insertions(+), 56 deletions(-) diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index 03ff5559..bc4ad00d 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -1,6 +1,61 @@ #ifndef FILE_IMPROVE2 #define FILE_IMPROVE2 +template +void BuildEdgeList( const Mesh & mesh, const Table & elementsonnode, Array> & edges ) +{ + static Timer tbuild_edges("Build edges"); RegionTimer reg(tbuild_edges); + + static constexpr int tetedges[6][2] = + { { 0, 1 }, { 0, 2 }, { 0, 3 }, + { 1, 2 }, { 1, 3 }, { 2, 3 } }; + + int ntasks = 2*ngcore::TaskManager::GetMaxThreads(); + Array>> task_edges(ntasks); + + ParallelFor(IntRange(ntasks), [&] (int ti) + { + auto myrange = mesh.Points().Range().Split(ti, ntasks); + ArrayMem, 100> local_edges; + for (auto pi : myrange) + { + local_edges.SetSize(0); + + for(auto ei : elementsonnode[pi]) + { + const auto & elem = mesh[ei]; + if (elem.IsDeleted()) continue; + + for (int j = 0; j < 6; j++) + { + PointIndex pi0 = elem[tetedges[j][0]]; + PointIndex pi1 = elem[tetedges[j][1]]; + if (pi1 < pi0) Swap(pi0, pi1); + if(pi0==pi) + local_edges.Append(std::make_tuple(pi0, pi1)); + } + } + QuickSort(local_edges); + + auto edge_prev = std::make_tuple(-1,-1); + + for(auto edge : local_edges) + if(edge != edge_prev) + { + task_edges[ti].Append(edge); + edge_prev = edge; + } + } + }, ntasks); + + int num_edges = 0; + for (auto & edg : task_edges) + num_edges += edg.Size(); + edges.SetAllocSize(num_edges); + for (auto & edg : task_edges) + edges.Append(edg); +} + class Neighbour { diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index e5ee4e03..8400e541 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -409,60 +409,6 @@ void MeshOptimize3d :: CombineImproveSequential (Mesh & mesh, multithread.task = savetask; } -void MeshOptimize3d :: BuildEdgeList( const Mesh & mesh, const Table & elementsonnode, Array> & edges ) -{ - static Timer tbuild_edges("Build edges"); RegionTimer reg(tbuild_edges); - - static constexpr int tetedges[6][2] = - { { 0, 1 }, { 0, 2 }, { 0, 3 }, - { 1, 2 }, { 1, 3 }, { 2, 3 } }; - - int ntasks = 2*ngcore::TaskManager::GetMaxThreads(); - Array>> task_edges(ntasks); - - ParallelFor(IntRange(ntasks), [&] (int ti) - { - auto myrange = mesh.Points().Range().Split(ti, ntasks); - ArrayMem, 100> local_edges; - for (auto pi : myrange) - { - local_edges.SetSize(0); - - for(auto ei : elementsonnode[pi]) - { - const Element & elem = mesh[ei]; - if (elem.IsDeleted()) continue; - - for (int j = 0; j < 6; j++) - { - PointIndex pi0 = elem[tetedges[j][0]]; - PointIndex pi1 = elem[tetedges[j][1]]; - if (pi1 < pi0) Swap(pi0, pi1); - if(pi0==pi) - local_edges.Append(std::make_tuple(pi0, pi1)); - } - } - QuickSort(local_edges); - - auto edge_prev = std::make_tuple(-1,-1); - - for(auto edge : local_edges) - if(edge != edge_prev) - { - task_edges[ti].Append(edge); - edge_prev = edge; - } - } - }, ntasks); - - int num_edges = 0; - for (auto & edg : task_edges) - num_edges += edg.Size(); - edges.SetAllocSize(num_edges); - for (auto & edg : task_edges) - edges.Append(edg); -} - void MeshOptimize3d :: CombineImprove (Mesh & mesh, OPTIMIZEGOAL goal) { diff --git a/libsrc/meshing/improve3.hpp b/libsrc/meshing/improve3.hpp index 7507b64a..21fdcce6 100644 --- a/libsrc/meshing/improve3.hpp +++ b/libsrc/meshing/improve3.hpp @@ -12,8 +12,6 @@ class MeshOptimize3d { const MeshingParameters & mp; - void BuildEdgeList( const Mesh & mesh, const Table & elementsonnode, Array> & edges ); - public: MeshOptimize3d (const MeshingParameters & amp) : mp(amp) { ; } From 9fd4970614de3a4febb08e32a22ece20da924210 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 13:51:25 +0200 Subject: [PATCH 04/10] ParallelFor loops in setup of CombineImprove() --- libsrc/meshing/improve2.cpp | 77 +++++++++++++++---------------------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 4168eced..16c80f67 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -409,61 +409,48 @@ namespace netgen auto elementsonnode = mesh.CreatePoint2SurfaceElementTable(faceindex); Array hasonepi, hasbothpi; + int ntasks = ngcore::TaskManager::GetMaxThreads(); + Array> edges; + + BuildEdgeList( mesh, elementsonnode, edges ); + Array fixed(np); ParallelFor( fixed.Range(), [&fixed] (auto i) NETGEN_LAMBDA_INLINE { fixed[i] = false; }); + ParallelFor( edges.Range(), [&] (auto i) NETGEN_LAMBDA_INLINE + { + auto [pi0, pi1] = edges[i]; + if (mesh.IsSegment (pi0, pi1)) + { + fixed[pi0] = true; + fixed[pi1] = true; + } + }); + timerstart1.Stop(); - /* - for (SegmentIndex si = 0; si < mesh.GetNSeg(); si++) - { - INDEX_2 i2(mesh[si][0], mesh[si][1]); - fixed[i2.I1()] = true; - fixed[i2.I2()] = true; - } - */ - - for (SurfaceElementIndex sei : seia) - { - Element2d & sel = mesh[sei]; - for (int j = 0; j < sel.GetNP(); j++) - { - PointIndex pi1 = sel.PNumMod(j+2); - PointIndex pi2 = sel.PNumMod(j+3); - if (mesh.IsSegment (pi1, pi2)) - { - fixed[pi1] = true; - fixed[pi2] = true; - } - } - } - - - /* - for(int i = 0; i < mesh.LockedPoints().Size(); i++) - fixed[mesh.LockedPoints()[i]] = true; - */ - for (PointIndex pi : mesh.LockedPoints()) - fixed[pi] = true; + ParallelFor( mesh.LockedPoints().Range(), [&] (auto i) NETGEN_LAMBDA_INLINE + { + fixed[mesh.LockedPoints()[i]] = true; + }); Array,PointIndex> normals(np); - // for (PointIndex pi = mesh.Points().Begin(); pi < mesh.Points().End(); pi++) - for (PointIndex pi : mesh.Points().Range()) - { - if (elementsonnode[pi].Size()) - { - Element2d & hel = mesh[elementsonnode[pi][0]]; - for (int k = 0; k < 3; k++) - if (hel[k] == pi) - { - GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); - break; - } - } - } + ParallelFor( mesh.Points().Range(), [&] (auto pi) NETGEN_LAMBDA_INLINE + { + if (elementsonnode[pi].Size()) + { + Element2d & hel = mesh[elementsonnode[pi][0]]; + for (int k = 0; k < 3; k++) + if (hel[k] == pi) + { + GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); + break; + } + } + }); timerstart.Stop(); From 294fbb0e6f4a8686aae70bfd647e5f8309c1f95c Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 14:04:10 +0200 Subject: [PATCH 05/10] Loop over edges in CombineImprove() --- libsrc/meshing/improve2.cpp | 12 +- tests/pytest/results.json | 672 ++++++++++++++++++------------------ 2 files changed, 341 insertions(+), 343 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 16c80f67..91e72a25 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -454,16 +454,11 @@ namespace netgen timerstart.Stop(); - for (int i = 0; i < seia.Size(); i++) + for (auto e : edges) { - SurfaceElementIndex sei = seia[i]; - Element2d & elem = mesh[sei]; + auto [pi1, pi2] = e; - for (int j = 0; j < 3; j++) { - if (elem.IsDeleted()) continue; - PointIndex pi1 = elem[j]; - PointIndex pi2 = elem[(j+1) % 3]; /* if (pi1 < PointIndex::BASE || @@ -534,6 +529,9 @@ namespace netgen } } + if(hasbothpi.Size()==0) + continue; + Element2d & hel = mesh[hasbothpi[0]]; for (int k = 0; k < 3; k++) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 8ea14c99..b8c82e94 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -37,10 +37,10 @@ }, { "ne1d": 181, - "ne2d": 323, - "ne3d": 506, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 13, 38, 53, 70, 87, 82, 85, 53, 16]", - "total_badness": 658.05677789 + "ne2d": 325, + "ne3d": 528, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 19, 38, 53, 74, 80, 99, 85, 63, 9]", + "total_badness": 687.31675405 } ], "boxcyl.geo": [ @@ -82,18 +82,18 @@ { "ne1d": 456, "ne2d": 2496, - "ne3d": 18676, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 43, 121, 339, 829, 1665, 2855, 4035, 4403, 3226, 1144]", - "total_badness": 22663.154052 + "ne3d": 18713, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 39, 127, 338, 795, 1684, 2888, 4053, 4409, 3223, 1146]", + "total_badness": 22695.778021 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 172, - "ne3d": 611, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 5, 8, 15, 20, 67, 69, 87, 106, 85, 91, 47, 7]", - "total_badness": 833.76226351 + "ne2d": 170, + "ne3d": 637, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 5, 18, 38, 54, 74, 84, 109, 110, 73, 55, 12]", + "total_badness": 863.74076861 }, { "ne1d": 40, @@ -104,31 +104,31 @@ }, { "ne1d": 62, - "ne2d": 94, - "ne3d": 185, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 12, 31, 26, 37, 27, 19, 13, 9, 0]", - "total_badness": 264.61885227 + "ne2d": 96, + "ne3d": 196, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 8, 8, 27, 34, 42, 33, 20, 9, 6, 1]", + "total_badness": 282.75693303 }, { "ne1d": 94, - "ne2d": 172, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 9, 23, 46, 62, 85, 95, 102, 110, 47, 11]", - "total_badness": 781.40870801 + "ne2d": 170, + "ne3d": 622, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 12, 26, 39, 80, 70, 113, 112, 93, 62, 10]", + "total_badness": 821.68699443 }, { "ne1d": 138, "ne2d": 384, - "ne3d": 2055, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 13, 28, 89, 146, 234, 357, 406, 415, 285, 75]", - "total_badness": 2580.6652097 + "ne3d": 2028, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 28, 67, 157, 250, 347, 419, 398, 261, 88]", + "total_badness": 2540.7133216 }, { "ne1d": 224, - "ne2d": 942, - "ne3d": 12027, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 15, 81, 205, 552, 1148, 1969, 2490, 2768, 2175, 617]", - "total_badness": 14618.673513 + "ne2d": 944, + "ne3d": 11860, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 29, 85, 211, 518, 1135, 1851, 2527, 2686, 2118, 688]", + "total_badness": 14411.259826 } ], "cone.geo": [ @@ -250,17 +250,17 @@ }, { "ne1d": 378, - "ne2d": 1410, - "ne3d": 7638, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 41, 105, 277, 549, 947, 1322, 1539, 1544, 998, 307]", - "total_badness": 9567.7509778 + "ne2d": 1412, + "ne3d": 7741, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 17, 64, 139, 294, 516, 862, 1328, 1545, 1486, 1147, 331]", + "total_badness": 9711.521562 }, { "ne1d": 624, "ne2d": 3944, - "ne3d": 38297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 41, 131, 332, 847, 2080, 3865, 5988, 7892, 8533, 6475, 2093]", - "total_badness": 46909.566762 + "ne3d": 38347, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 40, 131, 351, 853, 2070, 3906, 6037, 7925, 8484, 6438, 2092]", + "total_badness": 47000.212862 } ], "cubeandspheres.geo": [ @@ -276,7 +276,7 @@ "ne2d": 150, "ne3d": 100, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.64421411 + "total_badness": 146.6468601 }, { "ne1d": 144, @@ -294,105 +294,105 @@ }, { "ne1d": 264, - "ne2d": 388, - "ne3d": 366, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 4, 21, 28, 39, 47, 52, 37, 58, 40, 25, 10, 2]", - "total_badness": 550.50109911 + "ne2d": 390, + "ne3d": 369, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 5, 19, 26, 42, 46, 49, 41, 53, 45, 27, 10, 2]", + "total_badness": 554.2808696 }, { "ne1d": 428, "ne2d": 926, - "ne3d": 1075, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 24, 51, 36, 104, 145, 96, 119, 157, 156, 70, 62, 31, 22]", - "total_badness": 1676.1706223 + "ne3d": 1074, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 52, 36, 108, 136, 97, 114, 160, 162, 66, 63, 32, 22]", + "total_badness": 1676.2593956 } ], "cubemcyl.geo": [ { "ne1d": 142, "ne2d": 2488, - "ne3d": 20762, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 29, 90, 197, 401, 710, 1179, 1822, 2485, 3183, 3202, 3161, 2520, 1421, 360]", - "total_badness": 28767.588956 + "ne3d": 20835, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 28, 93, 206, 422, 722, 1146, 1822, 2545, 3153, 3286, 3135, 2461, 1439, 375]", + "total_badness": 28896.677361 }, { "ne1d": 64, "ne2d": 644, - "ne3d": 3315, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 7, 15, 36, 73, 135, 230, 355, 463, 549, 546, 429, 268, 165, 41]", - "total_badness": 4730.5709115 + "ne3d": 3351, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 9, 32, 59, 131, 238, 363, 472, 548, 547, 437, 297, 173, 34]", + "total_badness": 4754.2892871 }, { "ne1d": 102, - "ne2d": 1400, - "ne3d": 8334, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 22, 85, 144, 337, 565, 905, 1167, 1322, 1295, 1095, 769, 485, 134]", - "total_badness": 11752.339923 + "ne2d": 1402, + "ne3d": 8234, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 30, 67, 143, 309, 586, 856, 1050, 1271, 1291, 1179, 825, 462, 151]", + "total_badness": 11552.618825 }, { "ne1d": 142, "ne2d": 2488, - "ne3d": 19379, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 32, 92, 230, 494, 1181, 1947, 2801, 3461, 3525, 3130, 1945, 535]", - "total_badness": 25177.816848 + "ne3d": 19480, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 31, 97, 233, 526, 1186, 1978, 2941, 3443, 3496, 3088, 1914, 539]", + "total_badness": 25362.425666 }, { "ne1d": 210, - "ne2d": 5506, - "ne3d": 88647, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 27, 112, 355, 1028, 2468, 5697, 9855, 14883, 18353, 18556, 13360, 3952]", - "total_badness": 109878.73629 + "ne2d": 5508, + "ne3d": 88767, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 26, 120, 352, 982, 2386, 5436, 9851, 14528, 18286, 19003, 13703, 4092]", + "total_badness": 109764.47526 }, { "ne1d": 362, - "ne2d": 15120, - "ne3d": 524047, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 31, 117, 380, 1130, 3298, 9108, 23604, 49533, 81227, 111104, 122316, 92954, 29239]", - "total_badness": 636472.03769 + "ne2d": 15122, + "ne3d": 524413, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 23, 86, 347, 1131, 3167, 9094, 23844, 49271, 81498, 111440, 122044, 93488, 28977]", + "total_badness": 636787.56071 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 698, - "ne3d": 4934, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 11, 37, 72, 119, 189, 298, 467, 659, 707, 703, 683, 557, 330, 100]", - "total_badness": 6958.9504342 + "ne2d": 702, + "ne3d": 4867, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 17, 43, 80, 172, 274, 422, 600, 765, 725, 748, 588, 317, 111]", + "total_badness": 6717.4363413 }, { "ne1d": 44, - "ne2d": 272, - "ne3d": 745, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 17, 29, 49, 77, 86, 100, 93, 92, 70, 54, 42, 21, 5]", - "total_badness": 1204.1731602 + "ne2d": 278, + "ne3d": 784, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 8, 22, 44, 59, 70, 79, 102, 109, 97, 65, 50, 42, 24, 8]", + "total_badness": 1282.4153699 }, { "ne1d": 68, - "ne2d": 398, - "ne3d": 1558, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 20, 51, 111, 165, 255, 254, 221, 231, 150, 64, 20]", - "total_badness": 2188.2669021 + "ne2d": 402, + "ne3d": 1584, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 25, 62, 126, 170, 221, 284, 265, 214, 129, 61, 16]", + "total_badness": 2237.5355054 }, { "ne1d": 90, - "ne2d": 698, - "ne3d": 4640, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 38, 72, 173, 303, 491, 698, 805, 844, 667, 412, 128]", - "total_badness": 6111.5995998 + "ne2d": 702, + "ne3d": 4618, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 24, 53, 140, 293, 465, 706, 805, 841, 747, 418, 120]", + "total_badness": 6022.3952178 }, { "ne1d": 146, - "ne2d": 1492, - "ne3d": 17798, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 9, 24, 86, 209, 525, 1104, 1919, 2993, 3722, 3811, 2645, 749]", - "total_badness": 22077.875433 + "ne2d": 1490, + "ne3d": 17756, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 28, 65, 211, 496, 1039, 1934, 3005, 3638, 3787, 2764, 781]", + "total_badness": 21965.581134 }, { "ne1d": 248, "ne2d": 4354, - "ne3d": 112882, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 27, 96, 290, 762, 2154, 5475, 10965, 17752, 23939, 26158, 19408, 5845]", - "total_badness": 137612.85905 + "ne3d": 113687, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 37, 138, 359, 904, 2353, 5729, 11225, 18258, 23885, 25920, 19046, 5816]", + "total_badness": 139052.64247 } ], "cylinder.geo": [ @@ -449,17 +449,17 @@ }, { "ne1d": 48, - "ne2d": 136, - "ne3d": 225, - "quality_histogram": "[0, 0, 0, 6, 16, 26, 21, 19, 17, 7, 1, 10, 6, 10, 21, 27, 23, 8, 5, 2]", - "total_badness": 525.88368721 + "ne2d": 142, + "ne3d": 242, + "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", + "total_badness": 604.89450225 }, { "ne1d": 72, - "ne2d": 320, - "ne3d": 629, - "quality_histogram": "[0, 0, 13, 7, 17, 28, 39, 55, 44, 70, 41, 52, 60, 54, 36, 31, 48, 20, 7, 7]", - "total_badness": 1373.2243293 + "ne2d": 324, + "ne3d": 643, + "quality_histogram": "[0, 0, 4, 8, 20, 32, 45, 67, 71, 66, 52, 48, 47, 47, 28, 28, 43, 21, 11, 5]", + "total_badness": 1398.9137975 }, { "ne1d": 104, @@ -530,10 +530,10 @@ "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1554, - "ne3d": 5154, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 13, 29, 51, 122, 215, 389, 552, 753, 867, 887, 708, 434, 131]", - "total_badness": 6912.1657887 + "ne2d": 1558, + "ne3d": 5148, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 13, 32, 59, 117, 206, 341, 616, 725, 911, 895, 680, 405, 145]", + "total_badness": 6904.0840287 }, { "ne1d": 86, @@ -551,33 +551,33 @@ }, { "ne1d": 174, - "ne2d": 1554, - "ne3d": 4935, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 52, 127, 277, 397, 675, 900, 963, 833, 511, 175]", - "total_badness": 6345.7383858 + "ne2d": 1558, + "ne3d": 4919, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 21, 50, 124, 251, 452, 657, 897, 985, 787, 505, 184]", + "total_badness": 6326.974644 }, { "ne1d": 258, - "ne2d": 3462, - "ne3d": 13486, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 31, 108, 209, 375, 670, 1146, 1676, 2318, 2432, 2372, 1636, 502]", - "total_badness": 17385.364148 + "ne2d": 3468, + "ne3d": 13311, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 34, 98, 172, 364, 632, 1073, 1669, 2270, 2500, 2349, 1609, 535]", + "total_badness": 17095.282764 }, { "ne1d": 432, - "ne2d": 9534, - "ne3d": 70093, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 41, 126, 322, 870, 1902, 4034, 7717, 11685, 14333, 14864, 10903, 3285]", - "total_badness": 86746.571015 + "ne2d": 9538, + "ne3d": 69769, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 43, 119, 293, 743, 1835, 3902, 7404, 11284, 14551, 15051, 11055, 3473]", + "total_badness": 86055.714906 } ], "ellipticcyl.geo": [ { "ne1d": 156, "ne2d": 996, - "ne3d": 2293, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 16, 55, 86, 118, 233, 260, 367, 368, 354, 242, 149, 32]", - "total_badness": 3192.9620295 + "ne3d": 2299, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 15, 55, 86, 117, 235, 272, 372, 360, 358, 240, 144, 33]", + "total_badness": 3202.1380209 }, { "ne1d": 76, @@ -596,23 +596,23 @@ { "ne1d": 156, "ne2d": 996, - "ne3d": 2218, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 5, 38, 50, 93, 181, 255, 331, 354, 386, 285, 196, 42]", - "total_badness": 2980.3373467 + "ne3d": 2214, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 40, 47, 89, 182, 262, 324, 362, 381, 279, 196, 46]", + "total_badness": 2974.3073079 }, { "ne1d": 232, - "ne2d": 2206, - "ne3d": 8329, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 8, 38, 120, 269, 606, 986, 1422, 1778, 1636, 1142, 319]", - "total_badness": 10417.08851 + "ne2d": 2210, + "ne3d": 8345, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 43, 109, 293, 640, 956, 1382, 1736, 1662, 1176, 334]", + "total_badness": 10435.490494 }, { "ne1d": 388, - "ne2d": 6122, - "ne3d": 55722, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 38, 128, 339, 950, 2397, 5110, 8516, 11890, 13275, 9802, 3270]", - "total_badness": 67535.530354 + "ne2d": 6138, + "ne3d": 54637, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 32, 119, 325, 910, 2429, 5008, 8209, 11690, 12637, 9994, 3276]", + "total_badness": 66190.217682 } ], "fichera.geo": [ @@ -646,10 +646,10 @@ }, { "ne1d": 96, - "ne2d": 118, - "ne3d": 208, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 23, 37, 29, 47, 28, 6]", - "total_badness": 266.18044371 + "ne2d": 120, + "ne3d": 211, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 14, 22, 26, 38, 37, 41, 14, 9]", + "total_badness": 273.06134659 }, { "ne1d": 144, @@ -662,33 +662,33 @@ "frame.step": [ { "ne1d": 12694, - "ne2d": 40416, - "ne3d": 221405, - "quality_histogram": "[3, 8, 6, 9, 7, 44, 262, 749, 1716, 3507, 6238, 10976, 17443, 25686, 32253, 35719, 35307, 29272, 17591, 4609]", - "total_badness": 302085.09767 + "ne2d": 40520, + "ne3d": 221762, + "quality_histogram": "[3, 5, 5, 12, 7, 59, 290, 817, 1933, 3640, 6299, 10873, 17623, 25259, 32707, 35796, 34974, 29136, 17768, 4556]", + "total_badness": 303041.23654 }, { "ne1d": 6026, - "ne2d": 11302, - "ne3d": 30676, - "quality_histogram": "[4, 5, 3, 10, 20, 48, 102, 279, 686, 1070, 1686, 2721, 3426, 4284, 4537, 4238, 3396, 2444, 1366, 351]", - "total_badness": 45646.217472 + "ne2d": 11324, + "ne3d": 30653, + "quality_histogram": "[4, 9, 9, 12, 25, 46, 102, 282, 695, 1064, 1661, 2565, 3358, 4222, 4521, 4302, 3494, 2597, 1360, 325]", + "total_badness": 45607.765932 }, { "ne1d": 9704, - "ne2d": 24306, - "ne3d": 85235, - "quality_histogram": "[3, 3, 7, 8, 7, 30, 77, 145, 446, 1107, 2404, 4694, 7830, 10947, 13348, 14070, 12971, 10099, 5613, 1426]", - "total_badness": 117163.65166 + "ne2d": 24430, + "ne3d": 85325, + "quality_histogram": "[1, 6, 6, 9, 6, 33, 65, 165, 475, 1033, 2434, 4626, 7791, 10930, 13358, 14135, 12954, 10041, 5806, 1451]", + "total_badness": 117194.17951 } ], "hinge.stl": [ { "ne1d": 456, - "ne2d": 1214, - "ne3d": 2022, - "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 12, 26, 49, 65, 132, 182, 254, 300, 282, 275, 231, 156, 43]", - "total_badness": 2854.7168701 + "ne2d": 1224, + "ne3d": 2021, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 13, 27, 39, 83, 131, 173, 250, 319, 287, 271, 226, 153, 44]", + "total_badness": 2837.3834708 }, { "ne1d": 298, @@ -699,31 +699,31 @@ }, { "ne1d": 370, - "ne2d": 844, - "ne3d": 1118, - "quality_histogram": "[0, 0, 0, 0, 0, 10, 16, 22, 30, 44, 66, 106, 150, 128, 177, 157, 95, 56, 51, 10]", - "total_badness": 1741.03544 + "ne2d": 846, + "ne3d": 1140, + "quality_histogram": "[0, 0, 0, 1, 2, 9, 15, 17, 27, 44, 69, 118, 143, 133, 176, 168, 96, 61, 51, 10]", + "total_badness": 1773.0754642 }, { "ne1d": 516, "ne2d": 1566, - "ne3d": 2527, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 16, 24, 60, 103, 147, 246, 311, 364, 374, 321, 318, 190, 48]", - "total_badness": 3538.9062774 + "ne3d": 2512, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 12, 28, 58, 95, 151, 238, 317, 366, 359, 319, 325, 199, 42]", + "total_badness": 3506.416591 }, { "ne1d": 722, - "ne2d": 2870, - "ne3d": 6642, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 19, 29, 82, 162, 367, 691, 888, 1056, 1147, 1124, 840, 232]", - "total_badness": 8573.8370647 + "ne2d": 2866, + "ne3d": 6694, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 20, 29, 62, 163, 362, 669, 870, 1081, 1156, 1126, 894, 257]", + "total_badness": 8602.7943331 }, { "ne1d": 1862, - "ne2d": 19488, - "ne3d": 137072, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 1, 26, 122, 396, 1121, 2973, 7117, 13598, 21861, 28813, 30393, 23234, 7416]", - "total_badness": 167613.01917 + "ne2d": 19490, + "ne3d": 137687, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 7, 27, 123, 417, 1112, 2874, 6999, 13738, 21956, 28788, 30887, 23306, 7452]", + "total_badness": 168309.64037 } ], "lshape3d.geo": [ @@ -766,70 +766,70 @@ "ne1d": 122, "ne2d": 204, "ne3d": 326, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 56, 50, 33, 6]", - "total_badness": 427.73359314 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 55, 51, 33, 6]", + "total_badness": 427.73309234 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48036, - "ne3d": 179484, - "quality_histogram": "[0, 0, 0, 1, 6, 26, 49, 181, 507, 1429, 3406, 7751, 12589, 20420, 27392, 30012, 29988, 24886, 16884, 3957]", - "total_badness": 238828.86994 + "ne2d": 48052, + "ne3d": 179545, + "quality_histogram": "[0, 0, 0, 0, 5, 29, 71, 190, 576, 1440, 3405, 7596, 12496, 20298, 27806, 29839, 29882, 24882, 17039, 3991]", + "total_badness": 238919.11552 }, { "ne1d": 2746, - "ne2d": 13834, - "ne3d": 29329, - "quality_histogram": "[0, 0, 0, 0, 14, 21, 41, 146, 393, 827, 1501, 2289, 3318, 4412, 4217, 3705, 3185, 2627, 1888, 745]", - "total_badness": 42243.35733 + "ne2d": 13854, + "ne3d": 29281, + "quality_histogram": "[0, 0, 0, 0, 13, 18, 39, 151, 352, 858, 1553, 2317, 3286, 4410, 4149, 3714, 3207, 2591, 1903, 720]", + "total_badness": 42193.71037 }, { "ne1d": 4106, - "ne2d": 27932, - "ne3d": 70698, - "quality_histogram": "[0, 0, 0, 1, 26, 69, 183, 393, 852, 1684, 2955, 4447, 7082, 9552, 10277, 10366, 9322, 7190, 4617, 1682]", - "total_badness": 100123.46548 + "ne2d": 27992, + "ne3d": 70855, + "quality_histogram": "[0, 0, 0, 2, 32, 78, 216, 416, 816, 1670, 2904, 4412, 7023, 9393, 10226, 10366, 9509, 7379, 4635, 1778]", + "total_badness": 100246.61498 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55308, - "ne3d": 127648, - "quality_histogram": "[0, 0, 0, 0, 6, 34, 104, 281, 811, 2064, 4591, 7937, 11909, 17760, 18525, 18083, 16916, 14536, 10497, 3594]", - "total_badness": 176351.56445 + "ne2d": 55372, + "ne3d": 127827, + "quality_histogram": "[0, 0, 0, 0, 5, 32, 110, 296, 815, 2079, 4599, 7839, 11878, 17623, 18568, 18410, 17079, 14485, 10463, 3546]", + "total_badness": 176563.67789 } ], "matrix.geo": [ { "ne1d": 174, "ne2d": 1198, - "ne3d": 5261, - "quality_histogram": "[0, 0, 43, 122, 130, 86, 136, 184, 149, 241, 322, 397, 535, 609, 604, 571, 460, 398, 221, 53]", - "total_badness": 9604.8609332 + "ne3d": 5230, + "quality_histogram": "[0, 0, 39, 135, 124, 88, 128, 171, 147, 232, 362, 408, 517, 611, 596, 522, 470, 391, 228, 61]", + "total_badness": 9566.0829115 }, { "ne1d": 106, - "ne2d": 604, - "ne3d": 1987, - "quality_histogram": "[0, 1, 28, 89, 120, 160, 190, 186, 176, 194, 157, 174, 155, 100, 78, 66, 35, 42, 28, 8]", - "total_badness": 5044.7201931 + "ne2d": 612, + "ne3d": 1934, + "quality_histogram": "[0, 3, 20, 92, 116, 153, 159, 169, 221, 167, 180, 178, 141, 110, 64, 56, 36, 38, 27, 4]", + "total_badness": 4909.4781297 }, { "ne1d": 132, - "ne2d": 828, - "ne3d": 2719, - "quality_histogram": "[0, 0, 10, 46, 80, 124, 136, 129, 211, 269, 319, 290, 267, 230, 195, 148, 117, 83, 49, 16]", - "total_badness": 5612.3348522 + "ne2d": 830, + "ne3d": 2751, + "quality_histogram": "[0, 0, 4, 57, 63, 116, 124, 163, 226, 230, 333, 307, 270, 240, 206, 164, 105, 82, 43, 18]", + "total_badness": 5616.8677502 }, { "ne1d": 174, "ne2d": 1198, - "ne3d": 5159, - "quality_histogram": "[0, 0, 28, 111, 114, 67, 108, 152, 144, 215, 289, 348, 498, 587, 574, 620, 517, 450, 264, 73]", - "total_badness": 9030.3079258 + "ne3d": 5125, + "quality_histogram": "[0, 0, 34, 121, 107, 67, 129, 138, 126, 191, 298, 378, 483, 572, 632, 582, 502, 440, 242, 83]", + "total_badness": 9045.5508083 }, { "ne1d": 248, @@ -893,17 +893,17 @@ "part1.stl": [ { "ne1d": 170, - "ne2d": 434, - "ne3d": 1224, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 12, 36, 57, 70, 113, 150, 189, 175, 158, 135, 94, 27]", - "total_badness": 1720.8230602 + "ne2d": 436, + "ne3d": 1270, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 10, 15, 39, 63, 110, 115, 152, 180, 191, 155, 127, 91, 18]", + "total_badness": 1821.2768739 }, { "ne1d": 134, "ne2d": 276, "ne3d": 504, - "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 31, 44, 59, 68, 74, 61, 43, 39, 18, 3]", - "total_badness": 791.5174304 + "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 32, 43, 59, 68, 74, 61, 43, 39, 18, 3]", + "total_badness": 791.50892935 }, { "ne1d": 194, @@ -915,171 +915,171 @@ { "ne1d": 266, "ne2d": 986, - "ne3d": 4152, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 8, 35, 64, 166, 338, 594, 745, 788, 798, 460, 151]", - "total_badness": 5270.5642613 + "ne3d": 4115, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 13, 35, 69, 153, 349, 587, 725, 753, 807, 482, 139]", + "total_badness": 5225.4949656 }, { "ne1d": 674, "ne2d": 6854, - "ne3d": 82708, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 28, 74, 229, 687, 1629, 4225, 8150, 12870, 17332, 18973, 14189, 4318]", - "total_badness": 101005.97859 + "ne3d": 82733, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 25, 91, 233, 657, 1793, 4084, 8021, 12983, 17298, 18878, 14198, 4463]", + "total_badness": 101049.26725 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1132, - "ne3d": 3242, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 20, 25, 63, 123, 211, 275, 361, 416, 443, 425, 380, 293, 164, 39]", - "total_badness": 4791.9180684 + "ne2d": 1136, + "ne3d": 3291, + "quality_histogram": "[0, 0, 0, 0, 1, 6, 24, 38, 73, 142, 237, 280, 363, 430, 473, 394, 337, 293, 163, 37]", + "total_badness": 4941.6426523 }, { "ne1d": 160, - "ne2d": 286, - "ne3d": 680, - "quality_histogram": "[0, 0, 7, 11, 17, 20, 26, 41, 48, 64, 63, 61, 71, 48, 51, 50, 39, 41, 18, 4]", - "total_badness": 1363.8803171 + "ne2d": 288, + "ne3d": 660, + "quality_histogram": "[0, 0, 0, 0, 4, 15, 18, 27, 46, 63, 64, 69, 69, 61, 55, 62, 52, 35, 14, 6]", + "total_badness": 1159.9625164 }, { "ne1d": 232, - "ne2d": 600, - "ne3d": 1620, - "quality_histogram": "[0, 20, 26, 46, 42, 60, 70, 81, 105, 126, 134, 136, 139, 134, 144, 123, 111, 72, 43, 8]", - "total_badness": 3623.0833569 + "ne2d": 598, + "ne3d": 1630, + "quality_histogram": "[0, 10, 22, 41, 40, 50, 62, 102, 107, 117, 123, 146, 150, 157, 143, 118, 109, 76, 50, 7]", + "total_badness": 3464.4094355 }, { "ne1d": 344, - "ne2d": 1132, - "ne3d": 3191, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 18, 25, 55, 91, 178, 254, 353, 408, 438, 427, 424, 302, 170, 45]", - "total_badness": 4645.0669687 + "ne2d": 1136, + "ne3d": 3221, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 20, 24, 54, 111, 178, 268, 317, 453, 436, 450, 365, 311, 187, 44]", + "total_badness": 4704.9518805 }, { "ne1d": 480, "ne2d": 2256, - "ne3d": 11676, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 6, 24, 53, 120, 289, 525, 957, 1453, 1943, 2287, 2081, 1526, 409]", - "total_badness": 14907.26587 + "ne3d": 11694, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 18, 52, 120, 262, 551, 975, 1482, 2010, 2258, 2052, 1485, 417]", + "total_badness": 14947.136242 }, { "ne1d": 820, - "ne2d": 6222, - "ne3d": 67973, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 15, 85, 268, 617, 1614, 3718, 7158, 11216, 14102, 14686, 10957, 3532]", - "total_badness": 83568.07739 + "ne2d": 6226, + "ne3d": 68532, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 18, 76, 261, 684, 1675, 3888, 7222, 11072, 14234, 14852, 11076, 3469]", + "total_badness": 84325.408672 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2600, - "ne3d": 8161, - "quality_histogram": "[5, 12, 33, 28, 52, 46, 32, 56, 128, 206, 309, 453, 685, 923, 1193, 1252, 1147, 929, 538, 134]", - "total_badness": 12460.391484 + "ne2d": 2602, + "ne3d": 8196, + "quality_histogram": "[4, 14, 33, 28, 57, 45, 41, 60, 132, 229, 346, 495, 686, 967, 1178, 1220, 1147, 862, 516, 136]", + "total_badness": 12564.547698 }, { "ne1d": 572, - "ne2d": 1146, - "ne3d": 1642, - "quality_histogram": "[4, 26, 39, 50, 60, 78, 99, 124, 148, 159, 146, 135, 122, 121, 117, 79, 69, 36, 24, 6]", - "total_badness": 4241.9527878 + "ne2d": 1174, + "ne3d": 1694, + "quality_histogram": "[4, 23, 46, 46, 75, 74, 108, 138, 137, 144, 161, 142, 133, 122, 123, 82, 76, 40, 16, 4]", + "total_badness": 4372.11206 }, { "ne1d": 724, - "ne2d": 1692, - "ne3d": 3214, - "quality_histogram": "[5, 17, 33, 37, 43, 43, 52, 72, 118, 157, 197, 295, 340, 423, 382, 381, 287, 205, 104, 23]", - "total_badness": 5942.4739465 + "ne2d": 1714, + "ne3d": 3224, + "quality_histogram": "[5, 18, 33, 40, 56, 43, 77, 73, 134, 152, 208, 268, 361, 393, 403, 364, 270, 202, 98, 26]", + "total_badness": 6080.3507333 }, { "ne1d": 956, - "ne2d": 2810, - "ne3d": 8675, - "quality_histogram": "[3, 12, 28, 50, 46, 52, 62, 61, 80, 138, 227, 401, 598, 907, 1121, 1410, 1387, 1197, 705, 190]", - "total_badness": 12797.407898 + "ne2d": 2822, + "ne3d": 8566, + "quality_histogram": "[3, 13, 29, 46, 47, 55, 59, 62, 82, 146, 206, 403, 597, 917, 1190, 1339, 1412, 1134, 653, 173]", + "total_badness": 12683.902882 }, { "ne1d": 1554, - "ne2d": 6382, - "ne3d": 31570, - "quality_histogram": "[4, 7, 11, 7, 21, 52, 57, 70, 111, 204, 355, 730, 1411, 2560, 3940, 5357, 6035, 5675, 3874, 1089]", - "total_badness": 41102.73883 + "ne2d": 6386, + "ne3d": 31762, + "quality_histogram": "[4, 7, 9, 5, 23, 52, 59, 71, 104, 225, 359, 757, 1413, 2496, 4045, 5423, 5957, 5777, 3931, 1045]", + "total_badness": 41359.256776 }, { "ne1d": 2992, - "ne2d": 23314, - "ne3d": 280243, - "quality_histogram": "[5, 10, 11, 13, 7, 26, 32, 92, 238, 487, 1175, 2837, 6695, 15338, 29029, 45204, 58707, 61066, 45296, 13975]", - "total_badness": 345632.07897 + "ne2d": 23320, + "ne3d": 280073, + "quality_histogram": "[5, 11, 12, 11, 6, 26, 37, 77, 204, 513, 1236, 2811, 6880, 15472, 29023, 45343, 58607, 60675, 45323, 13801]", + "total_badness": 345610.85278 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3096, - "ne3d": 8458, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 38, 154, 314, 541, 711, 982, 1073, 1192, 1158, 976, 740, 452, 120]", - "total_badness": 12348.89105 + "ne2d": 3108, + "ne3d": 8430, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 17, 70, 149, 296, 547, 773, 995, 1092, 1140, 1100, 981, 723, 439, 108]", + "total_badness": 12383.964938 }, { "ne1d": 160, - "ne2d": 818, - "ne3d": 1293, - "quality_histogram": "[0, 0, 0, 0, 1, 9, 45, 85, 91, 122, 139, 162, 156, 139, 91, 88, 65, 60, 30, 10]", - "total_badness": 2298.7537248 + "ne2d": 822, + "ne3d": 1279, + "quality_histogram": "[0, 0, 0, 0, 2, 14, 52, 81, 100, 116, 148, 146, 167, 114, 92, 74, 92, 44, 25, 12]", + "total_badness": 2305.3064983 }, { "ne1d": 240, - "ne2d": 1812, - "ne3d": 3906, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 24, 94, 183, 308, 456, 547, 508, 494, 444, 355, 272, 158, 49]", - "total_badness": 5935.9395673 + "ne2d": 1830, + "ne3d": 3853, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 104, 193, 325, 413, 511, 521, 464, 404, 361, 294, 180, 51]", + "total_badness": 5840.4488172 }, { "ne1d": 320, - "ne2d": 3096, - "ne3d": 8275, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 13, 65, 208, 418, 619, 849, 1019, 1178, 1230, 1116, 884, 514, 160]", - "total_badness": 11661.155742 + "ne2d": 3108, + "ne3d": 8209, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 29, 78, 193, 438, 633, 872, 1006, 1175, 1170, 1064, 870, 542, 133]", + "total_badness": 11635.076736 }, { "ne1d": 480, - "ne2d": 6848, - "ne3d": 32874, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 61, 265, 670, 1455, 2541, 4214, 5494, 6532, 5977, 4399, 1249]", - "total_badness": 41605.598389 + "ne2d": 6842, + "ne3d": 32953, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 75, 263, 655, 1352, 2599, 4181, 5729, 6408, 6084, 4357, 1234]", + "total_badness": 41689.744856 }, { "ne1d": 800, - "ne2d": 17866, - "ne3d": 202729, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 40, 144, 535, 1500, 4356, 10392, 20188, 31941, 42409, 45674, 34933, 10612]", - "total_badness": 247652.11378 + "ne2d": 17922, + "ne3d": 203414, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 10, 47, 152, 582, 1679, 4413, 10542, 20265, 31871, 42901, 45622, 34581, 10749]", + "total_badness": 248722.35265 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1432, - "ne3d": 2448, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 14, 85, 91, 169, 198, 250, 259, 289, 265, 245, 227, 224, 102, 28]", - "total_badness": 3851.1301093 + "ne2d": 1438, + "ne3d": 2474, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 12, 83, 92, 159, 198, 257, 262, 314, 289, 253, 227, 182, 117, 28]", + "total_badness": 3881.0304023 }, { "ne1d": 530, - "ne2d": 2684, - "ne3d": 7927, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 15, 40, 82, 149, 285, 474, 733, 1104, 1268, 1359, 1321, 849, 245]", - "total_badness": 10424.316767 + "ne2d": 2696, + "ne3d": 7980, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 30, 78, 160, 263, 421, 685, 1103, 1288, 1442, 1377, 868, 253]", + "total_badness": 10417.869333 }, { "ne1d": 668, "ne2d": 5002, - "ne3d": 31622, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 13, 43, 96, 269, 788, 1790, 3249, 5163, 6715, 6912, 5008, 1567]", - "total_badness": 38905.366168 + "ne3d": 31490, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 19, 52, 128, 304, 753, 1737, 3178, 5049, 6602, 6978, 5109, 1574]", + "total_badness": 38732.690385 } ], "sculpture.geo": [ @@ -1114,46 +1114,46 @@ { "ne1d": 288, "ne2d": 962, - "ne3d": 1319, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 23, 53, 86, 121, 144, 127, 143, 121, 140, 143, 115, 80, 15]", - "total_badness": 2042.804049 + "ne3d": 1326, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 24, 53, 87, 122, 149, 125, 142, 117, 141, 144, 119, 80, 15]", + "total_badness": 2054.7475159 }, { "ne1d": 480, "ne2d": 2394, - "ne3d": 6754, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 4, 16, 23, 39, 70, 125, 267, 519, 758, 1077, 1327, 1284, 933, 307]", - "total_badness": 8589.1254463 + "ne3d": 6748, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 15, 24, 39, 66, 124, 269, 503, 757, 1064, 1337, 1301, 926, 313]", + "total_badness": 8573.2040767 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1720, - "ne3d": 2738, - "quality_histogram": "[3, 14, 13, 29, 26, 44, 45, 69, 82, 138, 255, 367, 305, 293, 241, 276, 235, 194, 90, 19]", - "total_badness": 5045.4631109 + "ne2d": 1722, + "ne3d": 2757, + "quality_histogram": "[22, 11, 27, 30, 41, 40, 46, 62, 79, 140, 264, 373, 303, 274, 231, 291, 233, 179, 86, 25]", + "total_badness": 6328.6329226 }, { "ne1d": 410, "ne2d": 606, - "ne3d": 944, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 6, 18, 27, 44, 62, 84, 115, 151, 141, 153, 90, 35, 13]", - "total_badness": 1357.9934384 + "ne3d": 970, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 1, 5, 20, 24, 50, 60, 97, 114, 166, 163, 130, 89, 30, 18]", + "total_badness": 1397.8970919 }, { "ne1d": 510, - "ne2d": 1008, - "ne3d": 2053, - "quality_histogram": "[1, 64, 78, 75, 79, 85, 82, 111, 114, 105, 117, 139, 132, 178, 203, 198, 171, 74, 37, 10]", - "total_badness": 5482.2474163 + "ne2d": 1004, + "ne3d": 2028, + "quality_histogram": "[12, 66, 88, 83, 91, 102, 83, 114, 82, 91, 110, 133, 141, 170, 191, 196, 164, 63, 39, 9]", + "total_badness": 5876.1112217 }, { "ne1d": 708, - "ne2d": 1720, - "ne3d": 2701, - "quality_histogram": "[0, 1, 3, 8, 12, 26, 32, 40, 73, 134, 268, 412, 312, 274, 252, 278, 239, 208, 100, 29]", - "total_badness": 4395.5679484 + "ne2d": 1722, + "ne3d": 2733, + "quality_histogram": "[6, 8, 10, 17, 29, 39, 34, 40, 80, 132, 254, 397, 302, 295, 238, 297, 250, 192, 88, 25]", + "total_badness": 4814.5951096 }, { "ne1d": 1138, @@ -1164,10 +1164,10 @@ }, { "ne1d": 1792, - "ne2d": 10596, - "ne3d": 63463, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 67, 178, 504, 1410, 3360, 6267, 9934, 13406, 14152, 10706, 3472]", - "total_badness": 77607.549516 + "ne2d": 10600, + "ne3d": 63895, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 53, 198, 529, 1486, 3387, 6482, 10124, 13426, 13922, 10754, 3514]", + "total_badness": 78232.724768 } ], "sphere.geo": [ @@ -1189,8 +1189,8 @@ "ne1d": 0, "ne2d": 72, "ne3d": 72, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 23, 25, 7, 0, 0, 0]", - "total_badness": 97.673542971 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 27, 22, 7, 0, 0, 0]", + "total_badness": 97.572347502 }, { "ne1d": 0, @@ -1226,15 +1226,15 @@ "ne1d": 24, "ne2d": 60, "ne3d": 166, - "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 14, 10, 4, 1]", - "total_badness": 454.92797775 + "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 15, 9, 4, 1]", + "total_badness": 454.94795255 }, { "ne1d": 30, "ne2d": 116, - "ne3d": 332, - "quality_histogram": "[0, 0, 8, 23, 39, 39, 31, 25, 34, 30, 21, 22, 24, 8, 9, 8, 4, 4, 3, 0]", - "total_badness": 970.62581762 + "ne3d": 339, + "quality_histogram": "[0, 0, 5, 25, 35, 46, 27, 29, 44, 20, 29, 20, 17, 12, 7, 10, 6, 4, 2, 1]", + "total_badness": 988.71756633 }, { "ne1d": 46, @@ -1247,8 +1247,8 @@ "ne1d": 74, "ne2d": 418, "ne3d": 1788, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 212, 252, 272, 258, 202, 111, 44]", - "total_badness": 2540.5253991 + "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 213, 251, 273, 258, 200, 112, 44]", + "total_badness": 2540.547751 }, { "ne1d": 122, @@ -1314,15 +1314,15 @@ "ne1d": 390, "ne2d": 522, "ne3d": 1353, - "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", - "total_badness": 2768.022266 + "quality_histogram": "[0, 0, 4, 14, 16, 44, 75, 122, 130, 145, 161, 125, 147, 105, 84, 88, 47, 33, 11, 2]", + "total_badness": 2765.5786315 }, { "ne1d": 512, "ne2d": 874, "ne3d": 2397, "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", - "total_badness": 3983.5699098 + "total_badness": 3983.5618538 }, { "ne1d": 690, @@ -1333,17 +1333,17 @@ }, { "ne1d": 1050, - "ne2d": 3808, - "ne3d": 17970, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 31, 38, 74, 194, 563, 1401, 2185, 2352, 2728, 2717, 2634, 2364, 684]", - "total_badness": 23485.93298 + "ne2d": 3810, + "ne3d": 17908, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 28, 39, 62, 196, 545, 1378, 2252, 2434, 2681, 2721, 2643, 2269, 655]", + "total_badness": 23429.874099 }, { "ne1d": 1722, "ne2d": 10042, - "ne3d": 84747, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 55, 1427, 755, 410, 785, 1297, 2669, 5782, 9188, 13403, 16283, 16509, 12254, 3925]", - "total_badness": 109011.46057 + "ne3d": 84876, + "quality_histogram": "[0, 0, 0, 0, 3, 4, 55, 1429, 759, 414, 790, 1332, 2665, 5819, 9227, 13451, 16247, 16582, 12204, 3895]", + "total_badness": 109229.6135 } ], "twobricks.geo": [ @@ -1384,10 +1384,10 @@ }, { "ne1d": 186, - "ne2d": 342, - "ne3d": 601, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 19, 31, 73, 92, 103, 107, 100, 61, 1]", - "total_badness": 787.76550767 + "ne2d": 346, + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", + "total_badness": 792.88605666 } ], "twocubes.geo": [ @@ -1428,10 +1428,10 @@ }, { "ne1d": 186, - "ne2d": 342, - "ne3d": 601, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 19, 31, 73, 92, 103, 107, 100, 61, 1]", - "total_badness": 787.76550767 + "ne2d": 346, + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", + "total_badness": 792.88605666 } ], "twocyl.geo": [ From 5eba73f7267431da7c27832f8742a2bd380eaefd Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 15:30:00 +0200 Subject: [PATCH 06/10] Separate function CombineImproveEdge() --- libsrc/meshing/improve2.cpp | 460 +++++++++++++++++------------------- 1 file changed, 218 insertions(+), 242 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 91e72a25..bd4dfe6d 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -354,26 +354,233 @@ namespace netgen + bool CombineImproveEdge( Mesh & mesh, + const Table & elementsonnode, + Array, PointIndex> & normals, + Array & fixed, + PointIndex pi1, PointIndex pi2, + bool check_only = true) + { + Vec<3> nv; + ArrayMem hasonepi, hasbothpi; + + if (!pi1.IsValid() || !pi2.IsValid()) + return false; + + bool debugflag = 0; + + if (debugflag) + { + (*testout) << "Combineimprove " + << "pi1 = " << pi1 << " pi2 = " << pi2 << endl; + } + + /* + // save version: + if (fixed.Get(pi1) || fixed.Get(pi2)) + return false; + if (pi2 < pi1) swap (pi1, pi2); + */ + + // more general + if (fixed[pi2]) + Swap (pi1, pi2); + + if (fixed[pi2]) + return false; + + double loch = mesh.GetH (mesh[pi1]); + + for (SurfaceElementIndex sei2 : elementsonnode[pi1]) + { + const Element2d & el2 = mesh[sei2]; + + if (el2.IsDeleted()) continue; + + if (el2[0] == pi2 || el2[1] == pi2 || el2[2] == pi2) + { + hasbothpi.Append (sei2); + nv = Cross (Vec3d (mesh[el2[0]], mesh[el2[1]]), + Vec3d (mesh[el2[0]], mesh[el2[2]])); + } + else + { + hasonepi.Append (sei2); + } + } + + if(hasbothpi.Size()==0) + return false; + nv = normals[pi1]; + + + for (SurfaceElementIndex sei2 : elementsonnode[pi2]) + { + const Element2d & el2 = mesh[sei2]; + if (el2.IsDeleted()) continue; + if (!el2.PNums<3>().Contains (pi1)) + hasonepi.Append (sei2); + } + + double bad1 = 0; + int illegal1 = 0, illegal2 = 0; + /* + for (SurfaceElementIndex sei : hasonepi) + { + const Element2d & el = mesh[sei]; + bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + illegal1 += 1-mesh.LegalTrig(el); + } + */ + for (const Element2d & el : mesh.SurfaceElements()[hasonepi]) + { + bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + illegal1 += 1-mesh.LegalTrig(el); + } + + for (int k = 0; k < hasbothpi.Size(); k++) + { + const Element2d & el = mesh[hasbothpi[k]]; + bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + illegal1 += 1-mesh.LegalTrig(el); + } + bad1 /= (hasonepi.Size()+hasbothpi.Size()); + + double bad2 = 0; + for (int k = 0; k < hasonepi.Size(); k++) + { + Element2d el = mesh[hasonepi[k]]; + for (auto i : Range(3)) + if(el[i]==pi2) + el[i] = pi1; + + double err = + CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + bad2 += err; + + Vec<3> hnv = Cross (Vec3d (mesh[el[0]], + mesh[el[1]]), + Vec3d (mesh[el[0]], + mesh[el[2]])); + if (hnv * nv < 0) + bad2 += 1e10; + + for (int l = 0; l < 3; l++) + { + if ( (normals[el[l]] * nv) < 0.5) + bad2 += 1e10; + } + + illegal2 += 1-mesh.LegalTrig(el); + } + bad2 /= hasonepi.Size(); + + if (debugflag) + { + (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; + } + + bool should = (bad2 < bad1 && bad2 < 1e4); + if (bad2 < 1e4) + { + if (illegal1 > illegal2) should = true; + if (illegal2 > illegal1) should = false; + } + + + if(check_only) + return should; + + if (should) + { + /* + (*testout) << "combine !" << endl; + (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; + (*testout) << "illegal1 = " << illegal1 << ", illegal2 = " << illegal2 << endl; + (*testout) << "loch = " << loch << endl; + */ + + PointGeomInfo gi; + // bool gi_set(false); + + /* + Element2d *el1p(NULL); + int l = 0; + while(mesh[elementsonnode[pi1][l]].IsDeleted() && lGetNP(); l++) + if ((*el1p)[l] == pi1) + { + gi = el1p->GeomInfoPi (l+1); + // gi_set = true; + } + */ + for (SurfaceElementIndex sei : elementsonnode[pi1]) + { + const Element2d & el1p = mesh[sei]; + if (el1p.IsDeleted()) continue; + + for (int l = 0; l < el1p.GetNP(); l++) + if (el1p[l] == pi1) + // gi = el1p.GeomInfoPi (l+1); + gi = el1p.GeomInfo()[l]; + break; + } + + + // (*testout) << "Connect point " << pi2 << " to " << pi1 << "\n"; + // for (int k = 0; k < elementsonnode[pi2].Size(); k++) + for (SurfaceElementIndex sei2 : elementsonnode[pi2]) + { + Element2d & el = mesh[sei2]; + if (el.IsDeleted()) continue; + if (el.PNums().Contains(pi1)) continue; + + for (auto l : Range(el.GetNP())) + { + if (el[l] == pi2) + { + el[l] = pi1; + el.GeomInfo()[l] = gi; + } + + fixed[el[l]] = true; + } + } + + for (auto sei : hasbothpi) + mesh[sei].Delete(); + + } + return should; + } - void MeshOptimize2d :: CombineImprove (Mesh & mesh) { if (!faceindex) { SplitImprove(mesh); - PrintMessage (3, "Combine improve"); + PrintMessage (3, "Combine improve"); - for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - { - CombineImprove (mesh); + for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) + { + CombineImprove (mesh); - if (multithread.terminate) - throw NgException ("Meshing stopped"); - } - faceindex = 0; - return; + if (multithread.terminate) + throw NgException ("Meshing stopped"); + } + faceindex = 0; + return; } @@ -402,12 +609,9 @@ namespace netgen surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); - Vec<3> nv; - int np = mesh.GetNP(); auto elementsonnode = mesh.CreatePoint2SurfaceElementTable(faceindex); - Array hasonepi, hasbothpi; int ntasks = ngcore::TaskManager::GetMaxThreads(); Array> edges; @@ -457,235 +661,7 @@ namespace netgen for (auto e : edges) { auto [pi1, pi2] = e; - - { - - /* - if (pi1 < PointIndex::BASE || - pi2 < PointIndex::BASE) - continue; - */ - if (!pi1.IsValid() || !pi2.IsValid()) - continue; - /* - INDEX_2 i2(pi1, pi2); - i2.Sort(); - if (segmentht.Used(i2)) - continue; - */ - - bool debugflag = 0; - - if (debugflag) - { - (*testout) << "Combineimprove, face = " << faceindex - << "pi1 = " << pi1 << " pi2 = " << pi2 << endl; - } - - /* - // save version: - if (fixed.Get(pi1) || fixed.Get(pi2)) - continue; - if (pi2 < pi1) swap (pi1, pi2); - */ - - // more general - if (fixed[pi2]) - Swap (pi1, pi2); - - if (fixed[pi2]) - continue; - - double loch = mesh.GetH (mesh[pi1]); - - // INDEX_2 si2 (pi1, pi2); - // si2.Sort(); - - /* - if (edgetested.Used (si2)) - continue; - edgetested.Set (si2, 1); - */ - - hasonepi.SetSize(0); - hasbothpi.SetSize(0); - - // for (int k = 0; k < elementsonnode[pi1].Size(); k++) - for (SurfaceElementIndex sei2 : elementsonnode[pi1]) - { - const Element2d & el2 = mesh[sei2]; - - if (el2.IsDeleted()) continue; - - if (el2[0] == pi2 || el2[1] == pi2 || el2[2] == pi2) - { - hasbothpi.Append (sei2); - nv = Cross (Vec3d (mesh[el2[0]], mesh[el2[1]]), - Vec3d (mesh[el2[0]], mesh[el2[2]])); - } - else - { - hasonepi.Append (sei2); - } - } - - if(hasbothpi.Size()==0) - continue; - - - Element2d & hel = mesh[hasbothpi[0]]; - for (int k = 0; k < 3; k++) - if (hel[k] == pi1) - { - GetNormalVector (surfnr, mesh[pi1], hel.GeomInfoPi(k+1), nv); - break; - } - - // nv = normals.Get(pi1); - - - for (SurfaceElementIndex sei2 : elementsonnode[pi2]) - { - const Element2d & el2 = mesh[sei2]; - if (el2.IsDeleted()) continue; - if (!el2.PNums<3>().Contains (pi1)) - hasonepi.Append (sei2); - } - - double bad1 = 0; - int illegal1 = 0, illegal2 = 0; - /* - for (SurfaceElementIndex sei : hasonepi) - { - const Element2d & el = mesh[sei]; - bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - illegal1 += 1-mesh.LegalTrig(el); - } - */ - for (const Element2d & el : mesh.SurfaceElements()[hasonepi]) - { - bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - illegal1 += 1-mesh.LegalTrig(el); - } - - for (int k = 0; k < hasbothpi.Size(); k++) - { - const Element2d & el = mesh[hasbothpi[k]]; - bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - illegal1 += 1-mesh.LegalTrig(el); - } - bad1 /= (hasonepi.Size()+hasbothpi.Size()); - - double bad2 = 0; - for (int k = 0; k < hasonepi.Size(); k++) - { - Element2d el = mesh[hasonepi[k]]; - for (auto i : Range(3)) - if(el[i]==pi2) - el[i] = pi1; - - double err = - CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - bad2 += err; - - Vec<3> hnv = Cross (Vec3d (mesh[el[0]], - mesh[el[1]]), - Vec3d (mesh[el[0]], - mesh[el[2]])); - if (hnv * nv < 0) - bad2 += 1e10; - - for (int l = 0; l < 3; l++) - if ( (normals[el[l]] * nv) < 0.5) - bad2 += 1e10; - - illegal2 += 1-mesh.LegalTrig(el); - } - bad2 /= hasonepi.Size(); - - if (debugflag) - { - (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; - } - - bool should = (bad2 < bad1 && bad2 < 1e4); - if (bad2 < 1e4) - { - if (illegal1 > illegal2) should = true; - if (illegal2 > illegal1) should = false; - } - - - if (should) - { - /* - (*testout) << "combine !" << endl; - (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; - (*testout) << "illegal1 = " << illegal1 << ", illegal2 = " << illegal2 << endl; - (*testout) << "loch = " << loch << endl; - */ - - PointGeomInfo gi; - // bool gi_set(false); - - /* - Element2d *el1p(NULL); - int l = 0; - while(mesh[elementsonnode[pi1][l]].IsDeleted() && lGetNP(); l++) - if ((*el1p)[l] == pi1) - { - gi = el1p->GeomInfoPi (l+1); - // gi_set = true; - } - */ - for (SurfaceElementIndex sei : elementsonnode[pi1]) - { - const Element2d & el1p = mesh[sei]; - if (el1p.IsDeleted()) continue; - - for (int l = 0; l < el1p.GetNP(); l++) - if (el1p[l] == pi1) - // gi = el1p.GeomInfoPi (l+1); - gi = el1p.GeomInfo()[l]; - break; - } - - - - // (*testout) << "Connect point " << pi2 << " to " << pi1 << "\n"; - // for (int k = 0; k < elementsonnode[pi2].Size(); k++) - for (SurfaceElementIndex sei2 : elementsonnode[pi2]) - { - Element2d & el = mesh[sei2]; - if (el.IsDeleted()) continue; - if (el.PNums().Contains(pi1)) continue; - - for (auto l : Range(el.GetNP())) - { - if (el[l] == pi2) - { - el[l] = pi1; - el.GeomInfo()[l] = gi; - } - - fixed[el[l]] = true; - } - } - - for (auto sei : hasbothpi) - mesh[sei].Delete(); - } - } + CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, false); } // mesh.Compress(); From 0f095281d9ad3e8ae7c9364bec84309e7609689e Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 16:02:11 +0200 Subject: [PATCH 07/10] Parallel 2d CombineImprove() (also sort by improvement) --- libsrc/meshing/improve2.cpp | 42 ++-- tests/pytest/results.json | 418 ++++++++++++++++++------------------ 2 files changed, 238 insertions(+), 222 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index bd4dfe6d..90f984cd 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -354,7 +354,7 @@ namespace netgen - bool CombineImproveEdge( Mesh & mesh, + double CombineImproveEdge( Mesh & mesh, const Table & elementsonnode, Array, PointIndex> & normals, Array & fixed, @@ -365,7 +365,7 @@ namespace netgen ArrayMem hasonepi, hasbothpi; if (!pi1.IsValid() || !pi2.IsValid()) - return false; + return 0.0; bool debugflag = 0; @@ -378,7 +378,7 @@ namespace netgen /* // save version: if (fixed.Get(pi1) || fixed.Get(pi2)) - return false; + return 0.0; if (pi2 < pi1) swap (pi1, pi2); */ @@ -387,7 +387,7 @@ namespace netgen Swap (pi1, pi2); if (fixed[pi2]) - return false; + return 0.0; double loch = mesh.GetH (mesh[pi1]); @@ -410,7 +410,7 @@ namespace netgen } if(hasbothpi.Size()==0) - return false; + return 0.0; nv = normals[pi1]; @@ -486,16 +486,17 @@ namespace netgen (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; } - bool should = (bad2 < bad1 && bad2 < 1e4); - if (bad2 < 1e4) + bool should = (illegal2<=illegal1 && bad2 < bad1 && bad2 < 1e4); + if(illegal2 < illegal1) { - if (illegal1 > illegal2) should = true; - if (illegal2 > illegal1) should = false; + should = true; + bad1 += 1e4; } + double d_badness = should * (bad2-bad1); if(check_only) - return should; + return d_badness; if (should) { @@ -562,7 +563,7 @@ namespace netgen mesh[sei].Delete(); } - return should; + return d_badness; } void MeshOptimize2d :: CombineImprove (Mesh & mesh) @@ -658,9 +659,24 @@ namespace netgen timerstart.Stop(); - for (auto e : edges) + // Find edges with improvement + Array> candidate_edges(edges.Size()); + std::atomic improvement_counter(0); + + ParallelFor( Range(edges), [&] (auto i) NETGEN_LAMBDA_INLINE { - auto [pi1, pi2] = e; + auto [pi1, pi2] = edges[i]; + double d_badness = CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, true); + if(d_badness < 0.0) + candidate_edges[improvement_counter++] = make_tuple(d_badness, i); + }); + + auto edges_with_improvement = candidate_edges.Part(0, improvement_counter.load()); + QuickSort(edges_with_improvement); + + for(auto [d_badness, ei] : edges_with_improvement) + { + auto [pi1, pi2] = edges[ei]; CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, false); } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index b8c82e94..208703f2 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -54,9 +54,9 @@ { "ne1d": 94, "ne2d": 114, - "ne3d": 158, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", - "total_badness": 247.68310347 + "ne3d": 157, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 8, 13, 13, 15, 7, 12, 11, 19, 14, 12, 21, 5, 3]", + "total_badness": 260.17372209 }, { "ne1d": 136, @@ -268,8 +268,8 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", - "total_badness": 145.06570733 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375079 }, { "ne1d": 144, @@ -282,45 +282,45 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 17, 20, 14, 18, 5, 6, 3, 0]", - "total_badness": 144.34810179 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", + "total_badness": 145.14580879 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", - "total_badness": 145.06570733 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375079 }, { "ne1d": 264, "ne2d": 390, "ne3d": 369, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 5, 19, 26, 42, 46, 49, 41, 53, 45, 27, 10, 2]", - "total_badness": 554.2808696 + "total_badness": 554.2809713 }, { "ne1d": 428, "ne2d": 926, "ne3d": 1074, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 52, 36, 108, 136, 97, 114, 160, 162, 66, 63, 32, 22]", - "total_badness": 1676.2593956 + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 50, 36, 109, 137, 96, 117, 160, 162, 67, 60, 32, 22]", + "total_badness": 1675.8711911 } ], "cubemcyl.geo": [ { "ne1d": 142, "ne2d": 2488, - "ne3d": 20835, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 28, 93, 206, 422, 722, 1146, 1822, 2545, 3153, 3286, 3135, 2461, 1439, 375]", - "total_badness": 28896.677361 + "ne3d": 20783, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 26, 94, 208, 408, 708, 1158, 1848, 2485, 3200, 3251, 3127, 2474, 1418, 376]", + "total_badness": 28813.276387 }, { "ne1d": 64, - "ne2d": 644, - "ne3d": 3351, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 9, 32, 59, 131, 238, 363, 472, 548, 547, 437, 297, 173, 34]", - "total_badness": 4754.2892871 + "ne2d": 642, + "ne3d": 3214, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 13, 34, 74, 140, 230, 351, 455, 533, 531, 378, 284, 151, 31]", + "total_badness": 4592.7629352 }, { "ne1d": 102, @@ -332,9 +332,9 @@ { "ne1d": 142, "ne2d": 2488, - "ne3d": 19480, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 31, 97, 233, 526, 1186, 1978, 2941, 3443, 3496, 3088, 1914, 539]", - "total_badness": 25362.425666 + "ne3d": 19499, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 27, 106, 226, 529, 1209, 2008, 2862, 3440, 3576, 3083, 1921, 507]", + "total_badness": 25390.546576 }, { "ne1d": 210, @@ -361,17 +361,17 @@ }, { "ne1d": 44, - "ne2d": 278, - "ne3d": 784, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 8, 22, 44, 59, 70, 79, 102, 109, 97, 65, 50, 42, 24, 8]", - "total_badness": 1282.4153699 + "ne2d": 274, + "ne3d": 768, + "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 11, 26, 62, 72, 78, 114, 95, 91, 78, 74, 24, 22, 6]", + "total_badness": 1237.8358347 }, { "ne1d": 68, "ne2d": 402, - "ne3d": 1584, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 25, 62, 126, 170, 221, 284, 265, 214, 129, 61, 16]", - "total_badness": 2237.5355054 + "ne3d": 1600, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 26, 61, 119, 170, 232, 277, 269, 214, 148, 71, 7]", + "total_badness": 2248.6479915 }, { "ne1d": 90, @@ -382,17 +382,17 @@ }, { "ne1d": 146, - "ne2d": 1490, - "ne3d": 17756, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 28, 65, 211, 496, 1039, 1934, 3005, 3638, 3787, 2764, 781]", - "total_badness": 21965.581134 + "ne2d": 1492, + "ne3d": 17800, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 23, 89, 208, 524, 1085, 1942, 2969, 3729, 3811, 2675, 736]", + "total_badness": 22074.204803 }, { "ne1d": 248, "ne2d": 4354, - "ne3d": 113687, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 37, 138, 359, 904, 2353, 5729, 11225, 18258, 23885, 25920, 19046, 5816]", - "total_badness": 139052.64247 + "ne3d": 113716, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 12, 43, 136, 381, 909, 2353, 5720, 11280, 18112, 23886, 25957, 19090, 5832]", + "total_badness": 139103.15382 } ], "cylinder.geo": [ @@ -530,10 +530,10 @@ "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1558, - "ne3d": 5148, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 13, 32, 59, 117, 206, 341, 616, 725, 911, 895, 680, 405, 145]", - "total_badness": 6904.0840287 + "ne2d": 1562, + "ne3d": 5180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 18, 65, 115, 211, 361, 589, 766, 881, 904, 732, 405, 130]", + "total_badness": 6920.4601657 }, { "ne1d": 86, @@ -551,24 +551,24 @@ }, { "ne1d": 174, - "ne2d": 1558, - "ne3d": 4919, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 21, 50, 124, 251, 452, 657, 897, 985, 787, 505, 184]", - "total_badness": 6326.974644 + "ne2d": 1562, + "ne3d": 4943, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 15, 49, 116, 255, 456, 635, 917, 1005, 806, 517, 167]", + "total_badness": 6347.4280983 }, { "ne1d": 258, "ne2d": 3468, - "ne3d": 13311, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 34, 98, 172, 364, 632, 1073, 1669, 2270, 2500, 2349, 1609, 535]", - "total_badness": 17095.282764 + "ne3d": 13314, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 33, 103, 197, 351, 652, 1077, 1619, 2280, 2518, 2361, 1583, 535]", + "total_badness": 17113.967555 }, { "ne1d": 432, - "ne2d": 9538, - "ne3d": 69769, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 43, 119, 293, 743, 1835, 3902, 7404, 11284, 14551, 15051, 11055, 3473]", - "total_badness": 86055.714906 + "ne2d": 9544, + "ne3d": 69891, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 37, 119, 313, 839, 1927, 4086, 7715, 11454, 14338, 14977, 10816, 3260]", + "total_badness": 86472.194086 } ], "ellipticcyl.geo": [ @@ -602,17 +602,17 @@ }, { "ne1d": 232, - "ne2d": 2210, - "ne3d": 8345, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 43, 109, 293, 640, 956, 1382, 1736, 1662, 1176, 334]", - "total_badness": 10435.490494 + "ne2d": 2212, + "ne3d": 8313, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 37, 113, 263, 626, 1005, 1387, 1743, 1660, 1133, 327]", + "total_badness": 10392.004794 }, { "ne1d": 388, - "ne2d": 6138, - "ne3d": 54637, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 32, 119, 325, 910, 2429, 5008, 8209, 11690, 12637, 9994, 3276]", - "total_badness": 66190.217682 + "ne2d": 6142, + "ne3d": 54975, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 45, 127, 329, 844, 2554, 5100, 8469, 11479, 12855, 9876, 3283]", + "total_badness": 66669.096677 } ], "fichera.geo": [ @@ -662,40 +662,40 @@ "frame.step": [ { "ne1d": 12694, - "ne2d": 40520, - "ne3d": 221762, - "quality_histogram": "[3, 5, 5, 12, 7, 59, 290, 817, 1933, 3640, 6299, 10873, 17623, 25259, 32707, 35796, 34974, 29136, 17768, 4556]", - "total_badness": 303041.23654 + "ne2d": 40530, + "ne3d": 221097, + "quality_histogram": "[3, 7, 7, 7, 8, 40, 245, 708, 1672, 3552, 6310, 10581, 17667, 25348, 32001, 36224, 35008, 29057, 18076, 4576]", + "total_badness": 301373.46714 }, { "ne1d": 6026, - "ne2d": 11324, - "ne3d": 30653, - "quality_histogram": "[4, 9, 9, 12, 25, 46, 102, 282, 695, 1064, 1661, 2565, 3358, 4222, 4521, 4302, 3494, 2597, 1360, 325]", - "total_badness": 45607.765932 + "ne2d": 11334, + "ne3d": 30593, + "quality_histogram": "[4, 5, 3, 10, 18, 39, 99, 258, 685, 1029, 1688, 2632, 3417, 4292, 4551, 4273, 3404, 2499, 1366, 321]", + "total_badness": 45414.634083 }, { "ne1d": 9704, - "ne2d": 24430, - "ne3d": 85325, - "quality_histogram": "[1, 6, 6, 9, 6, 33, 65, 165, 475, 1033, 2434, 4626, 7791, 10930, 13358, 14135, 12954, 10041, 5806, 1451]", - "total_badness": 117194.17951 + "ne2d": 24442, + "ne3d": 85741, + "quality_histogram": "[1, 6, 6, 9, 8, 30, 83, 164, 483, 1017, 2377, 4530, 7838, 10925, 13440, 14326, 13095, 10227, 5737, 1439]", + "total_badness": 117664.34461 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1224, - "ne3d": 2021, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 13, 27, 39, 83, 131, 173, 250, 319, 287, 271, 226, 153, 44]", - "total_badness": 2837.3834708 + "ne3d": 2038, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 19, 29, 40, 76, 138, 161, 261, 320, 286, 277, 232, 148, 42]", + "total_badness": 2873.2214111 }, { "ne1d": 298, "ne2d": 596, - "ne3d": 772, - "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 36, 50, 54, 105, 90, 108, 78, 77, 50, 38, 22, 2]", - "total_badness": 1342.107284 + "ne3d": 767, + "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 35, 48, 56, 101, 95, 108, 73, 77, 49, 40, 21, 2]", + "total_badness": 1334.5519444 }, { "ne1d": 370, @@ -707,23 +707,23 @@ { "ne1d": 516, "ne2d": 1566, - "ne3d": 2512, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 12, 28, 58, 95, 151, 238, 317, 366, 359, 319, 325, 199, 42]", - "total_badness": 3506.416591 + "ne3d": 2529, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 12, 27, 53, 110, 151, 242, 298, 395, 355, 324, 296, 203, 57]", + "total_badness": 3539.0006937 }, { "ne1d": 722, "ne2d": 2866, - "ne3d": 6694, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 20, 29, 62, 163, 362, 669, 870, 1081, 1156, 1126, 894, 257]", - "total_badness": 8602.7943331 + "ne3d": 6641, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 22, 39, 63, 158, 347, 598, 883, 1056, 1125, 1156, 945, 243]", + "total_badness": 8521.5496278 }, { "ne1d": 1862, "ne2d": 19490, - "ne3d": 137687, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 7, 27, 123, 417, 1112, 2874, 6999, 13738, 21956, 28788, 30887, 23306, 7452]", - "total_badness": 168309.64037 + "ne3d": 138145, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 42, 164, 454, 1165, 3079, 7378, 13727, 21879, 28700, 30921, 23185, 7439]", + "total_badness": 169166.81415 } ], "lshape3d.geo": [ @@ -774,48 +774,48 @@ { "ne1d": 5886, "ne2d": 48052, - "ne3d": 179545, - "quality_histogram": "[0, 0, 0, 0, 5, 29, 71, 190, 576, 1440, 3405, 7596, 12496, 20298, 27806, 29839, 29882, 24882, 17039, 3991]", - "total_badness": 238919.11552 + "ne3d": 179262, + "quality_histogram": "[0, 0, 0, 0, 7, 34, 52, 190, 559, 1394, 3332, 7622, 12534, 20021, 27619, 30066, 29961, 25045, 16810, 4016]", + "total_badness": 238415.32571 }, { "ne1d": 2746, - "ne2d": 13854, - "ne3d": 29281, - "quality_histogram": "[0, 0, 0, 0, 13, 18, 39, 151, 352, 858, 1553, 2317, 3286, 4410, 4149, 3714, 3207, 2591, 1903, 720]", - "total_badness": 42193.71037 + "ne2d": 13866, + "ne3d": 29255, + "quality_histogram": "[0, 0, 0, 0, 12, 22, 36, 163, 382, 903, 1510, 2377, 3268, 4375, 4191, 3761, 3120, 2567, 1846, 722]", + "total_badness": 42256.964101 }, { "ne1d": 4106, - "ne2d": 27992, - "ne3d": 70855, - "quality_histogram": "[0, 0, 0, 2, 32, 78, 216, 416, 816, 1670, 2904, 4412, 7023, 9393, 10226, 10366, 9509, 7379, 4635, 1778]", - "total_badness": 100246.61498 + "ne2d": 27994, + "ne3d": 70558, + "quality_histogram": "[0, 0, 0, 2, 32, 84, 194, 406, 841, 1669, 2783, 4416, 6997, 9372, 10151, 10346, 9564, 7474, 4487, 1740]", + "total_badness": 99764.452235 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55372, - "ne3d": 127827, - "quality_histogram": "[0, 0, 0, 0, 5, 32, 110, 296, 815, 2079, 4599, 7839, 11878, 17623, 18568, 18410, 17079, 14485, 10463, 3546]", - "total_badness": 176563.67789 + "ne2d": 55380, + "ne3d": 127866, + "quality_histogram": "[0, 0, 0, 0, 5, 32, 101, 306, 842, 2081, 4519, 7983, 11838, 17786, 18634, 18254, 16922, 14537, 10444, 3582]", + "total_badness": 176665.61274 } ], "matrix.geo": [ { "ne1d": 174, "ne2d": 1198, - "ne3d": 5230, - "quality_histogram": "[0, 0, 39, 135, 124, 88, 128, 171, 147, 232, 362, 408, 517, 611, 596, 522, 470, 391, 228, 61]", - "total_badness": 9566.0829115 + "ne3d": 5246, + "quality_histogram": "[0, 0, 39, 136, 119, 93, 134, 174, 148, 224, 329, 399, 532, 581, 603, 563, 474, 398, 241, 59]", + "total_badness": 9567.4544817 }, { "ne1d": 106, - "ne2d": 612, - "ne3d": 1934, - "quality_histogram": "[0, 3, 20, 92, 116, 153, 159, 169, 221, 167, 180, 178, 141, 110, 64, 56, 36, 38, 27, 4]", - "total_badness": 4909.4781297 + "ne2d": 610, + "ne3d": 1936, + "quality_histogram": "[0, 1, 11, 66, 104, 143, 140, 142, 192, 179, 201, 199, 161, 135, 74, 57, 51, 46, 29, 5]", + "total_badness": 4606.0709672 }, { "ne1d": 132, @@ -827,9 +827,9 @@ { "ne1d": 174, "ne2d": 1198, - "ne3d": 5125, - "quality_histogram": "[0, 0, 34, 121, 107, 67, 129, 138, 126, 191, 298, 378, 483, 572, 632, 582, 502, 440, 242, 83]", - "total_badness": 9045.5508083 + "ne3d": 5176, + "quality_histogram": "[0, 0, 31, 113, 115, 69, 111, 172, 123, 209, 285, 339, 485, 597, 595, 628, 503, 468, 254, 79]", + "total_badness": 9086.4626755 }, { "ne1d": 248, @@ -894,16 +894,16 @@ { "ne1d": 170, "ne2d": 436, - "ne3d": 1270, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 10, 15, 39, 63, 110, 115, 152, 180, 191, 155, 127, 91, 18]", - "total_badness": 1821.2768739 + "ne3d": 1274, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 12, 31, 68, 104, 114, 149, 189, 199, 148, 132, 98, 17]", + "total_badness": 1812.8134062 }, { "ne1d": 134, "ne2d": 276, "ne3d": 504, "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 32, 43, 59, 68, 74, 61, 43, 39, 18, 3]", - "total_badness": 791.50892935 + "total_badness": 791.50880644 }, { "ne1d": 194, @@ -915,16 +915,16 @@ { "ne1d": 266, "ne2d": 986, - "ne3d": 4115, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 13, 35, 69, 153, 349, 587, 725, 753, 807, 482, 139]", - "total_badness": 5225.4949656 + "ne3d": 4120, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 9, 30, 60, 164, 343, 555, 738, 768, 818, 486, 145]", + "total_badness": 5216.1612676 }, { "ne1d": 674, - "ne2d": 6854, - "ne3d": 82733, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 25, 91, 233, 657, 1793, 4084, 8021, 12983, 17298, 18878, 14198, 4463]", - "total_badness": 101049.26725 + "ne2d": 6856, + "ne3d": 82761, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 10, 84, 220, 616, 1785, 4044, 8183, 13189, 17574, 18506, 14181, 4365]", + "total_badness": 101090.57562 } ], "period.geo": [ @@ -937,17 +937,17 @@ }, { "ne1d": 160, - "ne2d": 288, - "ne3d": 660, - "quality_histogram": "[0, 0, 0, 0, 4, 15, 18, 27, 46, 63, 64, 69, 69, 61, 55, 62, 52, 35, 14, 6]", - "total_badness": 1159.9625164 + "ne2d": 286, + "ne3d": 642, + "quality_histogram": "[0, 0, 4, 7, 11, 22, 28, 28, 40, 61, 66, 58, 59, 55, 53, 53, 40, 36, 16, 5]", + "total_badness": 1235.2259283 }, { "ne1d": 232, "ne2d": 598, - "ne3d": 1630, - "quality_histogram": "[0, 10, 22, 41, 40, 50, 62, 102, 107, 117, 123, 146, 150, 157, 143, 118, 109, 76, 50, 7]", - "total_badness": 3464.4094355 + "ne3d": 1654, + "quality_histogram": "[5, 18, 43, 57, 47, 59, 62, 79, 117, 120, 126, 148, 134, 159, 134, 113, 117, 66, 39, 11]", + "total_badness": 3928.2006441 }, { "ne1d": 344, @@ -959,9 +959,9 @@ { "ne1d": 480, "ne2d": 2256, - "ne3d": 11694, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 18, 52, 120, 262, 551, 975, 1482, 2010, 2258, 2052, 1485, 417]", - "total_badness": 14947.136242 + "ne3d": 11709, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 9, 15, 51, 115, 243, 547, 966, 1489, 2032, 2273, 2081, 1459, 426]", + "total_badness": 14941.96653 }, { "ne1d": 820, @@ -974,54 +974,54 @@ "plane.stl": [ { "ne1d": 890, - "ne2d": 2602, - "ne3d": 8196, - "quality_histogram": "[4, 14, 33, 28, 57, 45, 41, 60, 132, 229, 346, 495, 686, 967, 1178, 1220, 1147, 862, 516, 136]", - "total_badness": 12564.547698 + "ne2d": 2600, + "ne3d": 8187, + "quality_histogram": "[4, 14, 31, 31, 52, 43, 39, 66, 137, 205, 329, 452, 712, 916, 1161, 1269, 1162, 923, 510, 131]", + "total_badness": 12484.653426 }, { "ne1d": 572, - "ne2d": 1174, - "ne3d": 1694, - "quality_histogram": "[4, 23, 46, 46, 75, 74, 108, 138, 137, 144, 161, 142, 133, 122, 123, 82, 76, 40, 16, 4]", - "total_badness": 4372.11206 + "ne2d": 1180, + "ne3d": 1679, + "quality_histogram": "[3, 23, 38, 46, 50, 78, 94, 132, 138, 164, 167, 143, 142, 134, 114, 83, 64, 39, 20, 7]", + "total_badness": 4208.4459264 }, { "ne1d": 724, - "ne2d": 1714, - "ne3d": 3224, - "quality_histogram": "[5, 18, 33, 40, 56, 43, 77, 73, 134, 152, 208, 268, 361, 393, 403, 364, 270, 202, 98, 26]", - "total_badness": 6080.3507333 + "ne2d": 1718, + "ne3d": 3253, + "quality_histogram": "[4, 18, 38, 40, 50, 32, 60, 65, 115, 141, 204, 272, 353, 384, 426, 392, 308, 197, 125, 29]", + "total_badness": 6003.270597 }, { "ne1d": 956, - "ne2d": 2822, - "ne3d": 8566, - "quality_histogram": "[3, 13, 29, 46, 47, 55, 59, 62, 82, 146, 206, 403, 597, 917, 1190, 1339, 1412, 1134, 653, 173]", - "total_badness": 12683.902882 + "ne2d": 2812, + "ne3d": 8628, + "quality_histogram": "[3, 11, 28, 48, 49, 52, 57, 65, 85, 151, 228, 381, 614, 897, 1208, 1356, 1426, 1137, 649, 183]", + "total_badness": 12760.118913 }, { "ne1d": 1554, - "ne2d": 6386, - "ne3d": 31762, - "quality_histogram": "[4, 7, 9, 5, 23, 52, 59, 71, 104, 225, 359, 757, 1413, 2496, 4045, 5423, 5957, 5777, 3931, 1045]", - "total_badness": 41359.256776 + "ne2d": 6384, + "ne3d": 31436, + "quality_histogram": "[3, 7, 13, 5, 28, 50, 58, 74, 110, 186, 361, 708, 1401, 2494, 3893, 5404, 6143, 5665, 3793, 1040]", + "total_badness": 40918.999105 }, { "ne1d": 2992, - "ne2d": 23320, - "ne3d": 280073, - "quality_histogram": "[5, 11, 12, 11, 6, 26, 37, 77, 204, 513, 1236, 2811, 6880, 15472, 29023, 45343, 58607, 60675, 45323, 13801]", - "total_badness": 345610.85278 + "ne2d": 23312, + "ne3d": 279091, + "quality_histogram": "[4, 10, 11, 11, 5, 29, 38, 96, 197, 478, 1129, 2682, 6574, 15333, 28982, 45307, 58111, 60865, 45633, 13596]", + "total_badness": 344025.56886 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3108, - "ne3d": 8430, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 17, 70, 149, 296, 547, 773, 995, 1092, 1140, 1100, 981, 723, 439, 108]", - "total_badness": 12383.964938 + "ne2d": 3110, + "ne3d": 8443, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 45, 144, 318, 519, 804, 967, 1078, 1145, 1112, 987, 738, 454, 119]", + "total_badness": 12356.528396 }, { "ne1d": 160, @@ -1033,53 +1033,53 @@ { "ne1d": 240, "ne2d": 1830, - "ne3d": 3853, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 104, 193, 325, 413, 511, 521, 464, 404, 361, 294, 180, 51]", - "total_badness": 5840.4488172 + "ne3d": 3870, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 29, 108, 195, 310, 445, 521, 478, 473, 425, 351, 292, 195, 41]", + "total_badness": 5884.7598106 }, { "ne1d": 320, - "ne2d": 3108, - "ne3d": 8209, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 29, 78, 193, 438, 633, 872, 1006, 1175, 1170, 1064, 870, 542, 133]", - "total_badness": 11635.076736 + "ne2d": 3110, + "ne3d": 8269, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 24, 69, 199, 438, 654, 876, 1057, 1127, 1199, 1061, 888, 548, 128]", + "total_badness": 11704.49421 }, { "ne1d": 480, - "ne2d": 6842, - "ne3d": 32953, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 75, 263, 655, 1352, 2599, 4181, 5729, 6408, 6084, 4357, 1234]", - "total_badness": 41689.744856 + "ne2d": 6864, + "ne3d": 33003, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 20, 80, 243, 674, 1446, 2651, 4133, 5647, 6385, 6118, 4423, 1178]", + "total_badness": 41802.827145 }, { "ne1d": 800, - "ne2d": 17922, - "ne3d": 203414, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 10, 47, 152, 582, 1679, 4413, 10542, 20265, 31871, 42901, 45622, 34581, 10749]", - "total_badness": 248722.35265 + "ne2d": 17934, + "ne3d": 201498, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 44, 148, 603, 1656, 4364, 10078, 19992, 31915, 42284, 45543, 34094, 10774]", + "total_badness": 246262.93603 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1438, - "ne3d": 2474, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 12, 83, 92, 159, 198, 257, 262, 314, 289, 253, 227, 182, 117, 28]", - "total_badness": 3881.0304023 + "ne2d": 1434, + "ne3d": 2427, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 92, 79, 162, 203, 243, 285, 278, 277, 276, 216, 178, 97, 26]", + "total_badness": 3828.4168327 }, { "ne1d": 530, - "ne2d": 2696, - "ne3d": 7980, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 30, 78, 160, 263, 421, 685, 1103, 1288, 1442, 1377, 868, 253]", - "total_badness": 10417.869333 + "ne2d": 2702, + "ne3d": 7966, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 8, 30, 75, 152, 297, 462, 754, 1064, 1384, 1434, 1253, 807, 242]", + "total_badness": 10467.778337 }, { "ne1d": 668, - "ne2d": 5002, - "ne3d": 31490, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 19, 52, 128, 304, 753, 1737, 3178, 5049, 6602, 6978, 5109, 1574]", - "total_badness": 38732.690385 + "ne2d": 5008, + "ne3d": 31630, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 20, 43, 129, 317, 796, 1773, 3387, 5061, 6627, 6931, 5011, 1528]", + "total_badness": 38978.120895 } ], "sculpture.geo": [ @@ -1121,9 +1121,9 @@ { "ne1d": 480, "ne2d": 2394, - "ne3d": 6748, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 15, 24, 39, 66, 124, 269, 503, 757, 1064, 1337, 1301, 926, 313]", - "total_badness": 8573.2040767 + "ne3d": 6791, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 12, 10, 30, 33, 80, 135, 286, 503, 747, 1080, 1312, 1266, 984, 308]", + "total_badness": 8649.5978251 } ], "shaft.geo": [ @@ -1137,16 +1137,16 @@ { "ne1d": 410, "ne2d": 606, - "ne3d": 970, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 1, 5, 20, 24, 50, 60, 97, 114, 166, 163, 130, 89, 30, 18]", - "total_badness": 1397.8970919 + "ne3d": 933, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 1, 17, 25, 47, 58, 90, 116, 155, 146, 124, 96, 36, 17]", + "total_badness": 1336.5110795 }, { "ne1d": 510, "ne2d": 1004, - "ne3d": 2028, - "quality_histogram": "[12, 66, 88, 83, 91, 102, 83, 114, 82, 91, 110, 133, 141, 170, 191, 196, 164, 63, 39, 9]", - "total_badness": 5876.1112217 + "ne3d": 2048, + "quality_histogram": "[11, 74, 88, 69, 81, 94, 99, 125, 99, 122, 96, 133, 133, 165, 190, 186, 163, 67, 45, 8]", + "total_badness": 5937.4200337 }, { "ne1d": 708, @@ -1232,9 +1232,9 @@ { "ne1d": 30, "ne2d": 116, - "ne3d": 339, - "quality_histogram": "[0, 0, 5, 25, 35, 46, 27, 29, 44, 20, 29, 20, 17, 12, 7, 10, 6, 4, 2, 1]", - "total_badness": 988.71756633 + "ne3d": 345, + "quality_histogram": "[0, 0, 5, 24, 43, 41, 26, 26, 38, 32, 20, 18, 24, 14, 8, 9, 5, 7, 4, 1]", + "total_badness": 988.81847916 }, { "ne1d": 46, @@ -1314,15 +1314,15 @@ "ne1d": 390, "ne2d": 522, "ne3d": 1353, - "quality_histogram": "[0, 0, 4, 14, 16, 44, 75, 122, 130, 145, 161, 125, 147, 105, 84, 88, 47, 33, 11, 2]", - "total_badness": 2765.5786315 + "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", + "total_badness": 2768.022266 }, { "ne1d": 512, "ne2d": 874, "ne3d": 2397, "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", - "total_badness": 3983.5618538 + "total_badness": 3983.5650135 }, { "ne1d": 690, @@ -1333,17 +1333,17 @@ }, { "ne1d": 1050, - "ne2d": 3810, - "ne3d": 17908, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 28, 39, 62, 196, 545, 1378, 2252, 2434, 2681, 2721, 2643, 2269, 655]", - "total_badness": 23429.874099 + "ne2d": 3812, + "ne3d": 18010, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 29, 42, 57, 198, 540, 1405, 2251, 2392, 2790, 2784, 2612, 2242, 664]", + "total_badness": 23560.24016 }, { "ne1d": 1722, "ne2d": 10042, - "ne3d": 84876, - "quality_histogram": "[0, 0, 0, 0, 3, 4, 55, 1429, 759, 414, 790, 1332, 2665, 5819, 9227, 13451, 16247, 16582, 12204, 3895]", - "total_badness": 109229.6135 + "ne3d": 84690, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 54, 1424, 754, 408, 795, 1316, 2637, 5766, 9155, 13453, 16224, 16583, 12169, 3947]", + "total_badness": 108937.41902 } ], "twobricks.geo": [ From 6ca6a5e7911da954f08c19e22971c7d1bb7453bf Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 16:19:52 +0200 Subject: [PATCH 08/10] CombineImprove() 2D: optimize all faces at once --- libsrc/meshing/improve2.cpp | 46 +++++++------ tests/pytest/results.json | 126 ++++++++++++++++++------------------ 2 files changed, 85 insertions(+), 87 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 90f984cd..d431d338 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -568,22 +568,11 @@ namespace netgen void MeshOptimize2d :: CombineImprove (Mesh & mesh) { - if (!faceindex) - { - SplitImprove(mesh); - PrintMessage (3, "Combine improve"); - - for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - { - CombineImprove (mesh); - - if (multithread.terminate) - throw NgException ("Meshing stopped"); - } - faceindex = 0; - return; - } + SplitImprove(mesh); + PrintMessage (3, "Combine improve"); + if (multithread.terminate) + throw NgException ("Meshing stopped"); static Timer timer ("Combineimprove 2D"); RegionTimer reg (timer); @@ -597,18 +586,25 @@ namespace netgen Array seia; - mesh.GetSurfaceElementsOfFace (faceindex, seia); + if(faceindex) + mesh.GetSurfaceElementsOfFace (faceindex, seia); + else + { + seia.SetSize(mesh.GetNSE()); + ParallelFor( IntRange(mesh.GetNSE()), [&seia] (auto i) NETGEN_LAMBDA_INLINE + { seia[i] = i; }); + } - for (SurfaceElementIndex sei : seia) - if (mesh[sei].GetNP() != 3) - return; - - - int surfnr = 0; - if (faceindex) - surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); + bool mixed = false; + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE + { + if (mesh[seia[i]].GetNP() != 3) + mixed = true; + }); + if(mixed) + return; int np = mesh.GetNP(); @@ -651,6 +647,8 @@ namespace netgen for (int k = 0; k < 3; k++) if (hel[k] == pi) { + const int faceindex = hel.GetIndex(); + const int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); break; } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 208703f2..8a28b004 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -685,45 +685,45 @@ "hinge.stl": [ { "ne1d": 456, - "ne2d": 1224, - "ne3d": 2038, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 19, 29, 40, 76, 138, 161, 261, 320, 286, 277, 232, 148, 42]", - "total_badness": 2873.2214111 + "ne2d": 1218, + "ne3d": 2007, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 22, 35, 43, 69, 124, 175, 266, 301, 273, 272, 226, 144, 48]", + "total_badness": 2839.693559 }, { "ne1d": 298, - "ne2d": 596, - "ne3d": 767, - "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 35, 48, 56, 101, 95, 108, 73, 77, 49, 40, 21, 2]", - "total_badness": 1334.5519444 + "ne2d": 606, + "ne3d": 782, + "quality_histogram": "[0, 0, 1, 9, 6, 5, 18, 17, 33, 53, 60, 95, 99, 112, 83, 73, 47, 49, 20, 2]", + "total_badness": 1342.4305041 }, { "ne1d": 370, - "ne2d": 846, - "ne3d": 1140, - "quality_histogram": "[0, 0, 0, 1, 2, 9, 15, 17, 27, 44, 69, 118, 143, 133, 176, 168, 96, 61, 51, 10]", - "total_badness": 1773.0754642 + "ne2d": 854, + "ne3d": 1136, + "quality_histogram": "[0, 0, 0, 1, 3, 9, 21, 24, 34, 44, 70, 113, 151, 137, 158, 154, 97, 68, 43, 9]", + "total_badness": 1798.68351 }, { "ne1d": 516, - "ne2d": 1566, - "ne3d": 2529, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 12, 27, 53, 110, 151, 242, 298, 395, 355, 324, 296, 203, 57]", - "total_badness": 3539.0006937 + "ne2d": 1574, + "ne3d": 2551, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 9, 22, 56, 91, 150, 262, 288, 378, 368, 350, 304, 214, 53]", + "total_badness": 3546.3587224 }, { "ne1d": 722, - "ne2d": 2866, - "ne3d": 6641, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 22, 39, 63, 158, 347, 598, 883, 1056, 1125, 1156, 945, 243]", - "total_badness": 8521.5496278 + "ne2d": 2872, + "ne3d": 6679, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 22, 38, 58, 158, 368, 659, 826, 1064, 1147, 1157, 900, 277]", + "total_badness": 8576.0981512 }, { "ne1d": 1862, - "ne2d": 19490, - "ne3d": 138145, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 42, 164, 454, 1165, 3079, 7378, 13727, 21879, 28700, 30921, 23185, 7439]", - "total_badness": 169166.81415 + "ne2d": 19494, + "ne3d": 137231, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 48, 161, 424, 1135, 2966, 6918, 13385, 21373, 28847, 31139, 23298, 7529]", + "total_badness": 167698.91174 } ], "lshape3d.geo": [ @@ -893,31 +893,31 @@ "part1.stl": [ { "ne1d": 170, - "ne2d": 436, - "ne3d": 1274, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 12, 31, 68, 104, 114, 149, 189, 199, 148, 132, 98, 17]", - "total_badness": 1812.8134062 + "ne2d": 448, + "ne3d": 1242, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 9, 14, 27, 62, 80, 118, 165, 171, 191, 160, 126, 91, 23]", + "total_badness": 1762.3248217 }, { "ne1d": 134, - "ne2d": 276, - "ne3d": 504, - "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 32, 43, 59, 68, 74, 61, 43, 39, 18, 3]", - "total_badness": 791.50880644 + "ne2d": 288, + "ne3d": 521, + "quality_histogram": "[0, 0, 1, 2, 5, 7, 6, 10, 18, 23, 40, 41, 47, 59, 72, 76, 56, 37, 18, 3]", + "total_badness": 839.17126404 }, { "ne1d": 194, - "ne2d": 590, - "ne3d": 1688, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 35, 70, 127, 179, 237, 295, 293, 240, 156, 34]", - "total_badness": 2247.145727 + "ne2d": 594, + "ne3d": 1666, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 16, 23, 59, 118, 160, 264, 288, 282, 255, 167, 27]", + "total_badness": 2197.5763632 }, { "ne1d": 266, "ne2d": 986, - "ne3d": 4120, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 9, 30, 60, 164, 343, 555, 738, 768, 818, 486, 145]", - "total_badness": 5216.1612676 + "ne3d": 4090, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 11, 35, 59, 152, 324, 579, 738, 770, 768, 506, 145]", + "total_badness": 5178.06234 }, { "ne1d": 674, @@ -974,45 +974,45 @@ "plane.stl": [ { "ne1d": 890, - "ne2d": 2600, - "ne3d": 8187, - "quality_histogram": "[4, 14, 31, 31, 52, 43, 39, 66, 137, 205, 329, 452, 712, 916, 1161, 1269, 1162, 923, 510, 131]", - "total_badness": 12484.653426 + "ne2d": 2620, + "ne3d": 8323, + "quality_histogram": "[5, 21, 28, 32, 53, 48, 47, 80, 151, 239, 321, 490, 681, 901, 1189, 1198, 1208, 892, 597, 142]", + "total_badness": 12887.967725 }, { "ne1d": 572, - "ne2d": 1180, - "ne3d": 1679, - "quality_histogram": "[3, 23, 38, 46, 50, 78, 94, 132, 138, 164, 167, 143, 142, 134, 114, 83, 64, 39, 20, 7]", - "total_badness": 4208.4459264 + "ne2d": 1196, + "ne3d": 1793, + "quality_histogram": "[11, 31, 38, 55, 69, 104, 109, 132, 143, 150, 154, 158, 135, 136, 121, 82, 79, 51, 30, 5]", + "total_badness": 4800.1708991 }, { "ne1d": 724, - "ne2d": 1718, - "ne3d": 3253, - "quality_histogram": "[4, 18, 38, 40, 50, 32, 60, 65, 115, 141, 204, 272, 353, 384, 426, 392, 308, 197, 125, 29]", - "total_badness": 6003.270597 + "ne2d": 1726, + "ne3d": 3259, + "quality_histogram": "[5, 19, 38, 39, 48, 38, 53, 68, 126, 153, 210, 276, 357, 394, 388, 356, 323, 218, 123, 27]", + "total_badness": 6069.660571 }, { "ne1d": 956, - "ne2d": 2812, - "ne3d": 8628, - "quality_histogram": "[3, 11, 28, 48, 49, 52, 57, 65, 85, 151, 228, 381, 614, 897, 1208, 1356, 1426, 1137, 649, 183]", - "total_badness": 12760.118913 + "ne2d": 2820, + "ne3d": 8391, + "quality_histogram": "[3, 12, 32, 49, 46, 54, 59, 63, 86, 144, 250, 389, 575, 816, 1238, 1375, 1331, 1047, 665, 157]", + "total_badness": 12510.073302 }, { "ne1d": 1554, - "ne2d": 6384, - "ne3d": 31436, - "quality_histogram": "[3, 7, 13, 5, 28, 50, 58, 74, 110, 186, 361, 708, 1401, 2494, 3893, 5404, 6143, 5665, 3793, 1040]", - "total_badness": 40918.999105 + "ne2d": 6388, + "ne3d": 31455, + "quality_histogram": "[3, 7, 11, 8, 27, 51, 59, 79, 108, 196, 350, 697, 1388, 2535, 4050, 5292, 6175, 5518, 3822, 1079]", + "total_badness": 40980.318629 }, { "ne1d": 2992, - "ne2d": 23312, - "ne3d": 279091, - "quality_histogram": "[4, 10, 11, 11, 5, 29, 38, 96, 197, 478, 1129, 2682, 6574, 15333, 28982, 45307, 58111, 60865, 45633, 13596]", - "total_badness": 344025.56886 + "ne2d": 23328, + "ne3d": 276363, + "quality_histogram": "[4, 10, 12, 10, 7, 20, 37, 80, 203, 470, 1122, 2731, 6675, 14971, 28708, 44685, 57676, 60478, 45018, 13446]", + "total_badness": 340678.17837 } ], "revolution.geo": [ From 0f26e41f4d3bcb4bd0635c132d333bd41b6ee2a5 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 16:33:16 +0200 Subject: [PATCH 09/10] 4 Tasks per thread (better load balancing) --- libsrc/meshing/improve2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index d431d338..8e1c9576 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -653,7 +653,7 @@ namespace netgen break; } } - }); + }, TasksPerThread(4)); timerstart.Stop(); @@ -667,7 +667,7 @@ namespace netgen double d_badness = CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, true); if(d_badness < 0.0) candidate_edges[improvement_counter++] = make_tuple(d_badness, i); - }); + }, TasksPerThread(4)); auto edges_with_improvement = candidate_edges.Part(0, improvement_counter.load()); QuickSort(edges_with_improvement); From 7c96e22a60b2b3e36a24db30ea3e08597121cf0f Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 17:59:45 +0200 Subject: [PATCH 10/10] Remove one test case with inconsistent results --- tests/pytest/results.json | 7 ------- tests/pytest/test_tutorials.py | 2 ++ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 8a28b004..da57b936 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -454,13 +454,6 @@ "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", "total_badness": 604.89450225 }, - { - "ne1d": 72, - "ne2d": 324, - "ne3d": 643, - "quality_histogram": "[0, 0, 4, 8, 20, 32, 45, 67, 71, 66, 52, 48, 47, 47, 28, 28, 43, 21, 11, 5]", - "total_badness": 1398.9137975 - }, { "ne1d": 104, "ne2d": 496, diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index a0ba44a5..32d53d50 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -58,6 +58,8 @@ def getMeshingparameters(filename): return standard[:3] # this gets too big for finer meshsizes if filename == "screw.step": return standard[3:] # coarser meshes don't work here + if filename == "cylsphere.geo": + return standard[0:2] + standard[3:] # coarse gives inconsistent reults (other mesh on MacOS) if filename == "part1.stl": return standard[0:1] + standard[2:] # very coarse does not work return standard