diff --git a/.gitignore b/.gitignore index a616be07..6eb7a9e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,11 @@ *.whl dist build +*.vol.gz +*.vol +*.ini +__pycache__ +*.json +*.zip +.cache +*.patch diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 0e6900e2..d1dfb8e3 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -1271,9 +1271,6 @@ namespace netgen if (res != MESHING3_OK) return 1; if (multithread.terminate) return 0; - RemoveIllegalElements (*mesh); - if (multithread.terminate) return 0; - MeshQuality3d (*mesh); } diff --git a/libsrc/meshing/delaunay.cpp b/libsrc/meshing/delaunay.cpp index 2ebc031e..d1cb3c0f 100644 --- a/libsrc/meshing/delaunay.cpp +++ b/libsrc/meshing/delaunay.cpp @@ -1625,7 +1625,8 @@ namespace netgen // tempmesh.Save ("tempmesh.vol"); { - MeshOptimize3d meshopt(mp); + MeshOptimize3d meshopt(tempmesh, mp); + meshopt.SetGoal(OPT_CONFORM); tempmesh.Compress(); tempmesh.FindOpenElements (); #ifndef EMSCRIPTEN @@ -1638,7 +1639,7 @@ namespace netgen if(i%5==0) tempmesh.FreeOpenElementsEnvironment (1); - meshopt.SwapImprove(tempmesh, OPT_CONFORM); + meshopt.SwapImprove(); } tempmesh.Compress(); } diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index cdfa2295..d7aa8b5d 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -41,7 +41,7 @@ static ArrayMem SplitElement (Element old, PointIndex pi0, PointInde ArrayMem new_elements; // split element by cutting edge pi0,pi1 at pinew auto np = old.GetNP(); - old.Flags().illegal_valid = 0; + old.Touch(); if(np == 4) { // Split tet into two tets @@ -89,7 +89,7 @@ static ArrayMem SplitElement (Element old, PointIndex pi0, PointInde } return new_elements; -}; +} static double SplitElementBadness (const Mesh::T_POINTS & points, const MeshingParameters & mp, Element old, PointIndex pi0, PointIndex pi1, MeshPoint & pnew) { @@ -133,7 +133,63 @@ static double SplitElementBadness (const Mesh::T_POINTS & points, const MeshingP } return badness; -}; +} + + +tuple MeshOptimize3d :: UpdateBadness() +{ + static Timer tbad("UpdateBadness"); + RegionTimer reg(tbad); + + double totalbad = 0.0; + double maxbad = 0.0; + atomic bad_elements = 0; + + ParallelForRange(Range(mesh.GetNE()), [&] (auto myrange) { + double totalbad_local = 0.0; + double maxbad_local = 0.0; + int bad_elements_local = 0; + for (ElementIndex ei : myrange) + { + auto & el = mesh[ei]; + if(mp.only3D_domain_nr && mp.only3D_domain_nr != el.GetIndex()) continue; + if(!el.BadnessValid()) + el.SetBadness(CalcBad(mesh.Points(), el, 0)); + double bad = el.GetBadness(); + totalbad_local += bad; + maxbad_local = max(maxbad_local, bad); + if(bad > min_badness) + bad_elements_local++; + } + AtomicAdd(totalbad, totalbad_local); + AtomicMax(maxbad, maxbad_local); + bad_elements += bad_elements_local; + }); + return {totalbad, maxbad, bad_elements}; +} + +bool MeshOptimize3d :: HasBadElement(FlatArray els) +{ + for(auto ei : els) + if(mesh[ei].GetBadness()>min_badness) + return true; + return false; +} + +bool MeshOptimize3d :: HasIllegalElement(FlatArray els) +{ + for(auto ei : els) + if(!mesh.LegalTet(mesh[ei])) + return true; + return false; +} + +bool MeshOptimize3d :: NeedsOptimization(FlatArray els) +{ + if(goal == OPT_LEGAL) return HasIllegalElement(els); + if(goal == OPT_QUALITY) return HasBadElement(els); + return true; +} /* @@ -143,10 +199,8 @@ static double SplitElementBadness (const Mesh::T_POINTS & points, const MeshingP Connect inner point to boundary point, if one point is inner point. */ -double MeshOptimize3d :: CombineImproveEdge (Mesh & mesh, - const MeshingParameters & mp, +double MeshOptimize3d :: CombineImproveEdge ( Table & elements_of_point, - Array & elerrs, PointIndex pi0, PointIndex pi1, FlatArray is_point_removed, bool check_only) @@ -199,9 +253,9 @@ double MeshOptimize3d :: CombineImproveEdge (Mesh & mesh, double badness_old = 0.0; for (auto ei : has_one_point) - badness_old += elerrs[ei]; + badness_old += mesh[ei].GetBadness(); for (auto ei : has_both_points) - badness_old += elerrs[ei]; + badness_old += mesh[ei].GetBadness(); MeshPoint pnew = p0; if (p0.Type() == INNERPOINT) @@ -232,7 +286,7 @@ double MeshOptimize3d :: CombineImproveEdge (Mesh & mesh, break; } - elem.Flags().illegal_valid = 0; + elem.Touch(); if (!mesh.LegalTet(elem)) badness_new += 1e4; } @@ -255,17 +309,17 @@ double MeshOptimize3d :: CombineImproveEdge (Mesh & mesh, if (elem[l] == pi1) elem[l] = pi0; - elem.Flags().illegal_valid = 0; + elem.Touch(); if (!mesh.LegalTet (elem)) (*testout) << "illegal tet " << ei << endl; } for (auto i : Range(has_one_point)) - elerrs[has_one_point[i]] = one_point_badness[i]; + mesh[has_one_point[i]].SetBadness(one_point_badness[i]); for (auto ei : has_both_points) { - mesh[ei].Flags().illegal_valid = 0; + mesh[ei].Touch(); mesh[ei].Delete(); } } @@ -273,14 +327,12 @@ double MeshOptimize3d :: CombineImproveEdge (Mesh & mesh, return d_badness; } -void MeshOptimize3d :: CombineImprove (Mesh & mesh, - OPTIMIZEGOAL goal) +void MeshOptimize3d :: CombineImprove () { static Timer t("MeshOptimize3d::CombineImprove"); RegionTimer reg(t); static Timer topt("Optimize"); static Timer tsearch("Search"); static Timer tbuild_elements_table("Build elements table"); - static Timer tbad("CalcBad"); mesh.BuildBoundaryEdges(false); @@ -288,7 +340,6 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, int ne = mesh.GetNE(); int ntasks = 4*ngcore::TaskManager::GetNumThreads(); - Array elerrs (ne); Array is_point_removed (np); is_point_removed = false; @@ -300,26 +351,11 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, multithread.task = "Optimize Volume: Combine Improve"; - tbad.Start(); - double totalbad = 0.0; - ParallelForRange(Range(ne), [&] (auto myrange) - { - double totalbad_local = 0.0; - for (ElementIndex ei : myrange) - { - if(mesh.GetDimension()==3 && mp.only3D_domain_nr && mp.only3D_domain_nr != mesh[ei].GetIndex()) - continue; - double elerr = CalcBad (mesh.Points(), mesh[ei], 0); - totalbad_local += elerr; - elerrs[ei] = elerr; - } - AtomicAdd(totalbad, totalbad_local); - }, ntasks); - tbad.Stop(); + UpdateBadness(); - if (goal == OPT_QUALITY) + if (goal == OPT_QUALITY && testout->good()) { - totalbad = mesh.CalcTotalBad (mp); + double totalbad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << totalbad << endl; } @@ -338,7 +374,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, for(auto i : myrange) { auto [p0,p1] = edges[i]; - double d_badness = CombineImproveEdge (mesh, mp, elementsonnode, elerrs, p0, p1, is_point_removed, true); + double d_badness = CombineImproveEdge (elementsonnode, p0, p1, is_point_removed, true); if(d_badness<0.0) { int index = improvement_counter++; @@ -360,7 +396,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, for(auto [d_badness, ei] : edges_with_improvement) { auto [p0,p1] = edges[ei]; - if (CombineImproveEdge (mesh, mp, elementsonnode, elerrs, p0, p1, is_point_removed, false) < 0.0) + if (CombineImproveEdge (elementsonnode, p0, p1, is_point_removed, false) < 0.0) cnt++; } topt.Stop(); @@ -371,9 +407,9 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, PrintMessage (5, cnt, " elements combined"); (*testout) << "CombineImprove done" << "\n"; - if (goal == OPT_QUALITY) + if (goal == OPT_QUALITY && testout->good()) { - totalbad = mesh.CalcTotalBad (mp); + double totalbad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << totalbad << endl; int cntill = 0; @@ -389,7 +425,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, -double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table & elementsonnode, Array &elerrs, NgArray &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only) +double MeshOptimize3d :: SplitImproveEdge (Table & elementsonnode, NgArray &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only) { double d_badness = 0.0; // int cnt = 0; @@ -418,21 +454,14 @@ double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table if(mp.only3D_domain_nr != mesh[ei].GetIndex()) return 0.0; - if (goal == OPT_LEGAL) - { - bool all_tets_legal = true; - for(auto ei : hasbothpoints) - if( !mesh.LegalTet (mesh[ei]) || elerrs[ei] > 1e3) - all_tets_legal = false; - if(all_tets_legal) - return 0.0; - } + if (!NeedsOptimization(hasbothpoints)) + return 0.0; double bad1 = 0.0; double bad1_max = 0.0; for (ElementIndex ei : hasbothpoints) { - double bad = elerrs[ei]; + double bad = mesh[ei].GetBadness(); bad1 += bad; bad1_max = max(bad1_max, bad); } @@ -505,9 +534,8 @@ double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table Element newel1 = oldel; Element newel2 = oldel; - oldel.Flags().illegal_valid = 0; - newel1.Flags().illegal_valid = 0; - newel2.Flags().illegal_valid = 0; + newel1.Touch(); + newel2.Touch(); for (int l = 0; l < 4; l++) { @@ -536,11 +564,11 @@ double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table Element newel1 = oldel; Element newel2 = oldel; - oldel.Flags().illegal_valid = 0; + oldel.Touch(); oldel.Delete(); - newel1.Flags().illegal_valid = 0; - newel2.Flags().illegal_valid = 0; + newel1.Touch(); + newel2.Touch(); for (int l = 0; l < 4; l++) { @@ -555,8 +583,7 @@ double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table return d_badness; } -void MeshOptimize3d :: SplitImprove (Mesh & mesh, - OPTIMIZEGOAL goal) +void MeshOptimize3d :: SplitImprove () { static Timer t("MeshOptimize3d::SplitImprove"); RegionTimer reg(t); static Timer topt("Optimize"); @@ -569,8 +596,6 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, auto elementsonnode = mesh.CreatePoint2ElementTable(nullopt, mp.only3D_domain_nr); - Array elerrs(ne); - const char * savetask = multithread.task; multithread.task = "Optimize Volume: Split Improve"; @@ -578,17 +603,9 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, (*testout) << "start SplitImprove" << "\n"; mesh.BuildBoundaryEdges(false); - ParallelFor( mesh.VolumeElements().Range(), [&] (ElementIndex ei) NETGEN_LAMBDA_INLINE - { - if(mp.only3D_domain_nr && mp.only3D_domain_nr != mesh.VolumeElement(ei).GetIndex()) - return; + UpdateBadness(); - elerrs[ei] = CalcBad (mesh.Points(), mesh[ei], 0); - bad += elerrs[ei]; - AtomicMax(badmax, elerrs[ei]); - }); - - if (goal == OPT_QUALITY) + if (goal == OPT_QUALITY && testout->good()) { bad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad << endl; @@ -610,7 +627,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, for(auto i : myrange) { auto [p0,p1] = edges[i]; - double d_badness = SplitImproveEdge (mesh, goal, elementsonnode, elerrs, locfaces, badmax, p0, p1, ptmp, true); + double d_badness = SplitImproveEdge (elementsonnode, locfaces, badmax, p0, p1, ptmp, true); if(d_badness<0.0) { int index = improvement_counter++; @@ -633,7 +650,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, for(auto [d_badness, ei] : edges_with_improvement) { auto [p0,p1] = edges[ei]; - if (SplitImproveEdge (mesh, goal, elementsonnode, elerrs, locfaces, badmax, p0, p1, ptmp, false) < 0.0) + if (SplitImproveEdge (elementsonnode, locfaces, badmax, p0, p1, ptmp, false) < 0.0) cnt++; } topt.Stop(); @@ -643,8 +660,11 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, if (goal == OPT_QUALITY) { - bad = mesh.CalcTotalBad (mp); - (*testout) << "Total badness = " << bad << endl; + if(testout->good()) + { + bad = mesh.CalcTotalBad (mp); + (*testout) << "Total badness = " << bad << endl; + } [[maybe_unused]] int cntill = 0; ne = mesh.GetNE(); @@ -658,7 +678,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, } -double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, +double MeshOptimize3d :: SwapImproveEdge ( const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, @@ -706,8 +726,6 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, } } - bool have_bad_element = false; - for (ElementIndex ei : hasbothpoints) { if (mesh[ei].GetType () != TET) @@ -727,14 +745,9 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, if (mesh[ei].IsDeleted()) return 0.0; - - if ((goal == OPT_LEGAL) && - mesh.LegalTet (mesh[ei]) && - CalcBad (mesh.Points(), mesh[ei], 0) >= 1e3) - have_bad_element = true; } - if ((goal == OPT_LEGAL) && !have_bad_element) + if(!NeedsOptimization(hasbothpoints)) return 0.0; int nsuround = hasbothpoints.Size(); @@ -799,9 +812,9 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, CalcBad (mesh.Points(), el32, 0) + CalcBad (mesh.Points(), el33, 0); - el31.Flags().illegal_valid = 0; - el32.Flags().illegal_valid = 0; - el33.Flags().illegal_valid = 0; + el31.Touch(); + el32.Touch(); + el33.Touch(); if (!mesh.LegalTet(el31) || !mesh.LegalTet(el32) || @@ -823,15 +836,15 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, bad2 = CalcBad (mesh.Points(), el21, 0) + CalcBad (mesh.Points(), el22, 0); - el21.Flags().illegal_valid = 0; - el22.Flags().illegal_valid = 0; + el21.Touch(); + el22.Touch(); if (!mesh.LegalTet(el21) || !mesh.LegalTet(el22)) bad2 += 1e4; - if (goal == OPT_CONFORM && NotTooBad(bad1, bad2)) + if ((goal == OPT_CONFORM) && NotTooBad(bad1, bad2)) { INDEX_3 face(pi3, pi4, pi5); face.Sort(); @@ -866,8 +879,8 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, mesh[hasbothpoints[1]].Delete(); mesh[hasbothpoints[2]].Delete(); - el21.Flags().illegal_valid = 0; - el22.Flags().illegal_valid = 0; + el21.Touch(); + el22.Touch(); mesh.AddVolumeElement(el21); mesh.AddVolumeElement(el22); } @@ -942,10 +955,10 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, CalcBad (mesh.Points(), el4, 0); - el1.Flags().illegal_valid = 0; - el2.Flags().illegal_valid = 0; - el3.Flags().illegal_valid = 0; - el4.Flags().illegal_valid = 0; + el1.Touch(); + el2.Touch(); + el3.Touch(); + el4.Touch(); if (goal != OPT_CONFORM) @@ -978,10 +991,10 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, CalcBad (mesh.Points(), el3, 0) + CalcBad (mesh.Points(), el4, 0); - el1.Flags().illegal_valid = 0; - el2.Flags().illegal_valid = 0; - el3.Flags().illegal_valid = 0; - el4.Flags().illegal_valid = 0; + el1.Touch(); + el2.Touch(); + el3.Touch(); + el4.Touch(); if (goal != OPT_CONFORM) { @@ -1014,10 +1027,10 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, CalcBad (mesh.Points(), el3b, 0) + CalcBad (mesh.Points(), el4b, 0); - el1b.Flags().illegal_valid = 0; - el2b.Flags().illegal_valid = 0; - el3b.Flags().illegal_valid = 0; - el4b.Flags().illegal_valid = 0; + el1b.Touch(); + el2b.Touch(); + el3b.Touch(); + el4b.Touch(); if (goal != OPT_CONFORM) { @@ -1054,10 +1067,10 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, for (auto i : IntRange(4)) mesh[hasbothpoints[i]].Delete(); - el1.Flags().illegal_valid = 0; - el2.Flags().illegal_valid = 0; - el3.Flags().illegal_valid = 0; - el4.Flags().illegal_valid = 0; + el1.Touch(); + el2.Touch(); + el3.Touch(); + el4.Touch(); mesh.AddVolumeElement (el1); mesh.AddVolumeElement (el2); mesh.AddVolumeElement (el3); @@ -1068,10 +1081,10 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, for (auto i : IntRange(4)) mesh[hasbothpoints[i]].Delete(); - el1b.Flags().illegal_valid = 0; - el2b.Flags().illegal_valid = 0; - el3b.Flags().illegal_valid = 0; - el4b.Flags().illegal_valid = 0; + el1b.Touch(); + el2b.Touch(); + el3b.Touch(); + el4b.Touch(); mesh.AddVolumeElement (el1b); mesh.AddVolumeElement (el2b); mesh.AddVolumeElement (el3b); @@ -1174,7 +1187,7 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, hel[3] = pi2; bad2 += CalcBad (mesh.Points(), hel, 0); - hel.Flags().illegal_valid = 0; + hel.Touch(); if (!mesh.LegalTet(hel)) bad2 += 1e4; hel[2] = suroundpts[k % nsuround]; @@ -1183,7 +1196,7 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, bad2 += CalcBad (mesh.Points(), hel, 0); - hel.Flags().illegal_valid = 0; + hel.Touch(); if (!mesh.LegalTet(hel)) bad2 += 1e4; } // (*testout) << "bad2," << l << " = " << bad2 << endl; @@ -1253,7 +1266,7 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, hel[1] = suroundpts[k % nsuround]; hel[2] = suroundpts[(k+1) % nsuround]; hel[3] = pi2; - hel.Flags().illegal_valid = 0; + hel.Touch(); /* (*testout) << nsuround << "-swap, new el,top = " @@ -1289,8 +1302,7 @@ double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, return d_badness; } -void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, - const NgBitArray * working_elements) +void MeshOptimize3d :: SwapImprove (const NgBitArray * working_elements) { static Timer t("MeshOptimize3d::SwapImprove"); RegionTimer reg(t); static Timer tloop("MeshOptimize3d::SwapImprove loop"); @@ -1344,7 +1356,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, } // Calculate total badness - if (goal == OPT_QUALITY) + if (goal == OPT_QUALITY && testout->good()) { double bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; @@ -1356,6 +1368,8 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, Array> candidate_edges(edges.Size()); std::atomic improvement_counter(0); + UpdateBadness(); + tloop.Start(); auto num_elements_before = mesh.VolumeElements().Range().Next(); @@ -1368,7 +1382,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, break; auto [pi0, pi1] = edges[i]; - double d_badness = SwapImproveEdge (mesh, goal, working_elements, elementsonnode, faces, pi0, pi1, true); + double d_badness = SwapImproveEdge (working_elements, elementsonnode, faces, pi0, pi1, true); if(d_badness<0.0) { int index = improvement_counter++; @@ -1383,7 +1397,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, for(auto [d_badness, ei] : edges_with_improvement) { auto [pi0,pi1] = edges[ei]; - if(SwapImproveEdge (mesh, goal, working_elements, elementsonnode, faces, pi0, pi1, false) < 0.0) + if(SwapImproveEdge (working_elements, elementsonnode, faces, pi0, pi1, false) < 0.0) cnt++; } @@ -1425,7 +1439,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, -void MeshOptimize3d :: SwapImproveSurface (Mesh & mesh, OPTIMIZEGOAL goal, +void MeshOptimize3d :: SwapImproveSurface ( const NgBitArray * working_elements, const NgArray< NgArray* > * idmaps) { @@ -1517,9 +1531,7 @@ void MeshOptimize3d :: SwapImproveSurface (Mesh & mesh, OPTIMIZEGOAL goal, if (mesh[ei].IsDeleted()) continue; - if ((goal == OPT_LEGAL) && - mesh.LegalTet (mesh[ei]) && - CalcBad (mesh.Points(), mesh[ei], 0) < 1e3) + if (goal == OPT_LEGAL && mesh.LegalTet (mesh[ei])) continue; const Element & elemi = mesh[ei]; @@ -2287,7 +2299,7 @@ void MeshOptimize3d :: SwapImproveSurface (Mesh & mesh, OPTIMIZEGOAL goal, 2 -> 3 conversion */ -double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementIndex eli1, int face, +double MeshOptimize3d :: SwapImprove2 ( ElementIndex eli1, int face, Table & elementsonnode, TABLE & belementsonnode, bool check_only ) { @@ -2370,6 +2382,10 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI if (elem2.GetType() != TET) continue; + ArrayMem elis = {eli1, eli2}; + if(!NeedsOptimization(elis)) + continue; + int comnodes=0; for (int l = 1; l <= 4; l++) if (elem2.PNum(l) == pi1 || elem2.PNum(l) == pi2 || @@ -2384,8 +2400,7 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI if (comnodes == 3) { - bad1 = CalcBad (mesh.Points(), elem, 0) + - CalcBad (mesh.Points(), elem2, 0); + bad1 = elem.GetBadness() + elem2.GetBadness(); if (!mesh.LegalTet(elem) || !mesh.LegalTet(elem2)) @@ -2415,9 +2430,9 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI CalcBad (mesh.Points(), el33, 0); - el31.Flags().illegal_valid = 0; - el32.Flags().illegal_valid = 0; - el33.Flags().illegal_valid = 0; + el31.Touch(); + el32.Touch(); + el33.Touch(); if (!mesh.LegalTet(el31) || !mesh.LegalTet(el32) || @@ -2436,9 +2451,9 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI if (d_badness<0.0) { - el31.Flags().illegal_valid = 0; - el32.Flags().illegal_valid = 0; - el33.Flags().illegal_valid = 0; + el31.Touch(); + el32.Touch(); + el33.Touch(); mesh[eli1].Delete(); mesh[eli2].Delete(); @@ -2457,7 +2472,7 @@ double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementI 2 -> 3 conversion */ -void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) +void MeshOptimize3d :: SwapImprove2 () { static Timer t("MeshOptimize3d::SwapImprove2"); RegionTimer reg(t); @@ -2478,8 +2493,11 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) PrintMessage (3, "SwapImprove2 "); (*testout) << "\n" << "Start SwapImprove2" << "\n"; - double bad1 = mesh.CalcTotalBad (mp); - (*testout) << "Total badness = " << bad1 << endl; + if(testout->good()) + { + double bad1 = mesh.CalcTotalBad (mp); + (*testout) << "Total badness = " << bad1 << endl; + } // find elements on node @@ -2495,6 +2513,8 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) Array> faces_with_improvement; Array>> faces_with_improvement_threadlocal(num_threads); + UpdateBadness(); + ParallelForRange( Range(ne), [&]( auto myrange ) { int tid = ngcore::TaskManager::GetThreadId(); @@ -2510,9 +2530,7 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) if (mesh[eli1].GetType() != TET) continue; - if ((goal == OPT_LEGAL) && - mesh.LegalTet (mesh[eli1]) && - CalcBad (mesh.Points(), mesh[eli1], 0) < 1e3) + if (goal == OPT_LEGAL && mesh.LegalTet (mesh[eli1])) continue; if(mesh.GetDimension()==3 && mp.only3D_domain_nr && mp.only3D_domain_nr != mesh.VolumeElement(eli1).GetIndex()) @@ -2520,7 +2538,7 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) for (int j = 0; j < 4; j++) { - double d_badness = SwapImprove2( mesh, goal, eli1, j, elementsonnode, belementsonnode, true); + double d_badness = SwapImprove2( eli1, j, elementsonnode, belementsonnode, true); if(d_badness<0.0) my_faces_with_improvement.Append( std::make_tuple(d_badness, eli1, j) ); } @@ -2536,22 +2554,24 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) { if(mesh[eli].IsDeleted()) continue; - if(SwapImprove2( mesh, goal, eli, j, elementsonnode, belementsonnode, false) < 0.0) + if(SwapImprove2( eli, j, elementsonnode, belementsonnode, false) < 0.0) cnt++; } PrintMessage (5, cnt, " swaps performed"); mesh.Compress(); - bad1 = mesh.CalcTotalBad (mp); - (*testout) << "Total badness = " << bad1 << endl; - (*testout) << "swapimprove2 done" << "\n"; + if(testout->good()) + { + double bad1 = mesh.CalcTotalBad (mp); + (*testout) << "Total badness = " << bad1 << endl; + (*testout) << "swapimprove2 done" << "\n"; + } } -double MeshOptimize3d :: SplitImprove2Element (Mesh & mesh, +double MeshOptimize3d :: SplitImprove2Element ( ElementIndex ei, const Table & elements_of_point, - const Array & el_badness, bool check_only) { auto & el = mesh[ei]; @@ -2559,7 +2579,7 @@ double MeshOptimize3d :: SplitImprove2Element (Mesh & mesh, return false; // Optimize only bad elements - if(el_badness[ei] < 100) + if(el.GetBadness() < 100) return false; // search for very flat tets, with two disjoint edges nearly crossing, like a rectangle with diagonals @@ -2635,21 +2655,21 @@ double MeshOptimize3d :: SplitImprove2Element (Mesh & mesh, has_both_points1.Append (ei1); } - double badness_before = el_badness[ei]; + double badness_before = mesh[ei].GetBadness(); double badness_after = 0.0; for (auto ei0 : has_both_points0) { if(mesh[ei0].GetType()!=TET) return false; - badness_before += el_badness[ei0]; + badness_before += mesh[ei0].GetBadness(); badness_after += SplitElementBadness (mesh.Points(), mp, mesh[ei0], pi0, pi1, pnew); } for (auto ei1 : has_both_points1) { if(mesh[ei1].GetType()!=TET) return false; - badness_before += el_badness[ei1]; + badness_before += mesh[ei1].GetBadness(); badness_after += SplitElementBadness (mesh.Points(), mp, mesh[ei1], pi2, pi3, pnew); } @@ -2659,7 +2679,7 @@ double MeshOptimize3d :: SplitImprove2Element (Mesh & mesh, if(badness_after new point where diagonals cross, remove the flat tet -void MeshOptimize3d :: SplitImprove2 (Mesh & mesh) +void MeshOptimize3d :: SplitImprove2 () { static Timer t("MeshOptimize3d::SplitImprove2"); RegionTimer reg(t); static Timer tsearch("Search"); @@ -2695,18 +2715,7 @@ void MeshOptimize3d :: SplitImprove2 (Mesh & mesh) const char * savetask = multithread.task; multithread.task = "Optimize Volume: Split Improve 2"; - Array el_badness (ne); - - ParallelForRange(Range(ne), [&] (auto myrange) - { - for (ElementIndex ei : myrange) - { - if(mp.only3D_domain_nr && mp.only3D_domain_nr != mesh[ei].GetIndex()) - continue; - el_badness[ei] = CalcBad (mesh.Points(), mesh[ei], 0); - } - }); - + UpdateBadness(); mesh.BuildBoundaryEdges(false); Array> split_candidates(ne); @@ -2719,7 +2728,7 @@ void MeshOptimize3d :: SplitImprove2 (Mesh & mesh) { if(mp.only3D_domain_nr && mp.only3D_domain_nr != mesh[ei].GetIndex()) continue; - double d_badness = SplitImprove2Element(mesh, ei, elements_of_point, el_badness, true); + double d_badness = SplitImprove2Element(ei, elements_of_point, true); if(d_badness<0.0) { int index = improvement_counter++; @@ -2736,7 +2745,7 @@ void MeshOptimize3d :: SplitImprove2 (Mesh & mesh) topt.Start(); for(auto [d_badness, ei] : elements_with_improvement) { - if( SplitImprove2Element(mesh, ei, elements_of_point, el_badness, false) < 0.0) + if( SplitImprove2Element(ei, elements_of_point, false) < 0.0) cnt++; } topt.Stop(); diff --git a/libsrc/meshing/improve3.hpp b/libsrc/meshing/improve3.hpp index 43820406..bb93cb53 100644 --- a/libsrc/meshing/improve3.hpp +++ b/libsrc/meshing/improve3.hpp @@ -13,32 +13,46 @@ extern double CalcTotalBad (const Mesh::T_POINTS & points, class MeshOptimize3d { const MeshingParameters & mp; + Mesh & mesh; + OPTIMIZEGOAL goal = OPT_QUALITY; + double min_badness = 0; + + bool HasBadElement(FlatArray els); + bool HasIllegalElement(FlatArray els); + bool NeedsOptimization(FlatArray els); public: - MeshOptimize3d (const MeshingParameters & amp) : mp(amp) { ; } - double CombineImproveEdge (Mesh & mesh, const MeshingParameters & mp, + MeshOptimize3d (Mesh & m, const MeshingParameters & amp, OPTIMIZEGOAL agoal = OPT_QUALITY) : + mesh(m), mp(amp), goal(agoal) { ; } + + void SetGoal(OPTIMIZEGOAL agoal) { goal = agoal; } + void SetMinBadness(double badness) { min_badness = badness; } + + tuple UpdateBadness(); + + double CombineImproveEdge ( Table & elements_of_point, - Array & elerrs, PointIndex pi0, PointIndex pi1, + PointIndex pi0, PointIndex pi1, FlatArray is_point_removed, bool check_only=false); - void CombineImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); + void CombineImprove (); - void SplitImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); - double SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table & elementsonnode, Array &elerrs, NgArray &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only=false); + void SplitImprove (); + double SplitImproveEdge (Table & elementsonnode, NgArray &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only=false); - void SplitImprove2 (Mesh & mesh); - double SplitImprove2Element (Mesh & mesh, ElementIndex ei, const Table & elements_of_point, const Array & elerrs, bool check_only); + void SplitImprove2 (); + double SplitImprove2Element (ElementIndex ei, const Table & elements_of_point, bool check_only); - double SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, PointIndex pi1, PointIndex pi2, bool check_only=false); - void SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY, - const NgBitArray * working_elements = NULL); - void SwapImproveSurface (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY, - const NgBitArray * working_elements = NULL, + double SwapImproveEdge (const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, PointIndex pi1, PointIndex pi2, bool check_only=false); + void SwapImprove (const NgBitArray * working_elements = NULL); + void SwapImproveSurface (const NgBitArray * working_elements = NULL, const NgArray< NgArray* > * idmaps = NULL); - void SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); - double SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementIndex eli1, int face, Table & elementsonnode, TABLE & belementsonnode, bool check_only=false ); + void SwapImprove2 (); + double SwapImprove2 (ElementIndex eli1, int face, Table & elementsonnode, TABLE & belementsonnode, bool check_only=false ); + + void ImproveMesh() { mesh.ImproveMesh(mp, goal); } double CalcBad (const Mesh::T_POINTS & points, const Element & elem, double h) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index c7b70efc..c51c0ae1 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -603,7 +603,7 @@ namespace netgen { volelements.Append (el); } - volelements.Last().Flags().illegal_valid = 0; + volelements.Last().Touch(); volelements.Last().Flags().fixed = 0; volelements.Last().Flags().deleted = 0; @@ -626,7 +626,7 @@ namespace netgen */ volelements[ei] = el; - volelements[ei].Flags().illegal_valid = 0; + volelements[ei].Touch(); volelements[ei].Flags().fixed = 0; volelements[ei].Flags().deleted = 0; } diff --git a/libsrc/meshing/meshfunc.cpp b/libsrc/meshing/meshfunc.cpp index 4ddc2844..9da051da 100644 --- a/libsrc/meshing/meshfunc.cpp +++ b/libsrc/meshing/meshfunc.cpp @@ -467,7 +467,7 @@ namespace netgen meshed = 0; PrintMessage (5, mesh.GetNOpenElements(), " open faces found"); - MeshOptimize3d optmesh(mp); + MeshOptimize3d optmesh(mesh, mp, OPT_REST); const char * optstr = "mcmstmcmstmcmstmcm"; for (size_t j = 1; j <= strlen(optstr); j++) @@ -479,11 +479,11 @@ namespace netgen switch (optstr[j-1]) { - case 'c': optmesh.CombineImprove(mesh, OPT_REST); break; - case 'd': optmesh.SplitImprove(mesh, OPT_REST); break; - case 's': optmesh.SwapImprove(mesh, OPT_REST); break; - case 't': optmesh.SwapImprove2(mesh, OPT_REST); break; - case 'm': mesh.ImproveMesh(mp, OPT_REST); break; + case 'c': optmesh.CombineImprove(); break; + case 'd': optmesh.SplitImprove(); break; + case 's': optmesh.SwapImprove(); break; + case 't': optmesh.SwapImprove2(); break; + case 'm': optmesh.ImproveMesh(); break; } } @@ -515,6 +515,7 @@ namespace netgen throw NgException ("Stop meshing since surface mesh not consistent"); } } + RemoveIllegalElements (mesh); } void MergeMeshes( Mesh & mesh, Array & md ) @@ -653,13 +654,28 @@ namespace netgen */ mesh3d.CalcSurfacesOfNode(); + + MeshOptimize3d optmesh(mesh3d, mp); + + // optimize only bad elements first + optmesh.SetMinBadness(1000.); + for(auto i : Range(mp.optsteps3d)) + { + auto [total_badness, max_badness, bad_els] = optmesh.UpdateBadness(); + if(bad_els==0) break; + optmesh.SplitImprove(); + optmesh.SwapImprove(); + optmesh.SwapImprove2(); + } + + // Now optimize all elements + optmesh.SetMinBadness(0); + for (auto i : Range(mp.optsteps3d)) { if (multithread.terminate) break; - MeshOptimize3d optmesh(mp); - // teterrpow = mp.opterrpow; // for (size_t j = 1; j <= strlen(mp.optimize3d); j++) for (auto j : Range(mp.optimize3d.size())) @@ -670,12 +686,16 @@ namespace netgen switch (mp.optimize3d[j]) { - case 'c': optmesh.CombineImprove(mesh3d, OPT_REST); break; - case 'd': optmesh.SplitImprove(mesh3d); break; - case 'D': optmesh.SplitImprove2(mesh3d); break; - case 's': optmesh.SwapImprove(mesh3d); break; + case 'c': + optmesh.SetGoal(OPT_REST); + optmesh.CombineImprove(); + optmesh.SetGoal(OPT_QUALITY); + break; + case 'd': optmesh.SplitImprove(); break; + case 'D': optmesh.SplitImprove2(); break; + case 's': optmesh.SwapImprove(); break; // case 'u': optmesh.SwapImproveSurface(mesh3d); break; - case 't': optmesh.SwapImprove2(mesh3d); break; + case 't': optmesh.SwapImprove2(); break; #ifdef SOLIDGEOM case 'm': mesh3d.ImproveMesh(*geometry); break; case 'M': mesh3d.ImproveMesh(*geometry); break; @@ -715,19 +735,19 @@ namespace netgen nillegal = mesh3d.MarkIllegalElements(); MeshingParameters dummymp; - MeshOptimize3d optmesh(dummymp); + MeshOptimize3d optmesh(mesh3d, dummymp, OPT_LEGAL); while (nillegal && (it--) > 0) { if (multithread.terminate) break; PrintMessage (5, nillegal, " illegal tets"); - optmesh.SplitImprove (mesh3d, OPT_LEGAL); + optmesh.SplitImprove (); mesh3d.MarkIllegalElements(); // test - optmesh.SwapImprove (mesh3d, OPT_LEGAL); + optmesh.SwapImprove (); mesh3d.MarkIllegalElements(); // test - optmesh.SwapImprove2 (mesh3d, OPT_LEGAL); + optmesh.SwapImprove2 (); oldn = nillegal; nillegal = mesh3d.MarkIllegalElements(); diff --git a/libsrc/meshing/meshtype.hpp b/libsrc/meshing/meshtype.hpp index f71fc35f..62d9f0b8 100644 --- a/libsrc/meshing/meshtype.hpp +++ b/libsrc/meshing/meshtype.hpp @@ -13,6 +13,7 @@ #include #include +#include "core/exception.hpp" #include "msghandler.hpp" namespace netgen @@ -994,7 +995,10 @@ namespace netgen { return flags.strongrefflag; } int Illegal () const - { return flags.illegal; } + { + NETGEN_CHECK_SAME(flags.illegal_valid, true); + return flags.illegal; + } int IllegalValid () const { return flags.illegal_valid; } void SetIllegal (int aillegal) @@ -1007,6 +1011,26 @@ namespace netgen flags.illegal = alegal ? 0 : 1; flags.illegal_valid = 1; } + + bool BadnessValid() + { return flags.badness_valid; } + + float GetBadness() + { + NETGEN_CHECK_SAME(flags.badness_valid, true); + return badness; + } + + void SetBadness(float value) + { + badness = value; + flags.badness_valid = 1; + } + + void Touch() { + flags.illegal_valid = 0; + flags.badness_valid = 0; + } void Delete () { flags.deleted = 1; } bool IsDeleted () const diff --git a/libsrc/meshing/validate.cpp b/libsrc/meshing/validate.cpp index f5fbff75..31bf499a 100644 --- a/libsrc/meshing/validate.cpp +++ b/libsrc/meshing/validate.cpp @@ -470,11 +470,11 @@ namespace netgen multithread.terminate != 1) { MeshingParameters dummymp; - MeshOptimize3d optmesh(dummymp); + MeshOptimize3d optmesh(mesh, dummymp, OPT_QUALITY); for(int i=0; i0 and bad2<0.8*bad1: print(f"{GREEN}ntrigs {f1} got better: {bad1} -> {bad2}".ljust(w) + diff + RESET) -n = len(data)+1 -fig,ax = plt.subplots(figsize=(10,7)) -for i,d in enumerate(['min trig angle','min tet angle','max trig angle','max tet angle']): - ax = plt.subplot(2,5,i+1) +n = len(data) + 1 +fig, ax = plt.subplots(figsize=(15, 7)) # Adjust figsize as needed +plt.xticks([]) +plt.yticks([]) +ax.yaxis.grid(False) +ax.xaxis.grid(False) +for i, d in enumerate(['min trig angle', 'min tet angle', 'max trig angle', 'max tet angle']): + plt.subplot(2, 4, i + 1) # Remove ax = plt.title(d) - ax.set_xticks([1,2]) - if len(data[d])==0 or len(data2[d])==0: + # plt.xticks([1, 2]) + if len(data[d]) == 0 or len(data2[d]) == 0: continue - plt.violinplot([data[d],data2[d]], showmedians=True) + plt.violinplot([data[d], data2[d]], showmedians=True) med = statistics.median(data[d]) - plt.hlines(med, 1,2, linestyle='dotted') - if d=='badness': - ax.set_yscale('log') - ax.set_xticklabels([ref, ref2]) + plt.hlines(med, 1, 2, linestyle='dotted') + if d == 'badness': + plt.yscale('log') + plt.xticks([1, 2], [ref, ref2]) +for i, d in enumerate(['badness', '#edges', '#trigs', '#tets']): + plt.xticks([]) + plt.subplot(2, 4, 5 + i) + plt.title('difference ' + d + ' (in %)') + plt.boxplot([100.0 * (y - x) / x for x, y in zip(data[d], data2[d])]) + plt.hlines(0.0, 0.5, 1.5, linestyle='dotted') -for i,d in enumerate(['badness','#edges','#trigs','#tets']): - ax = plt.subplot(2,5,6+i) - plt.title('difference '+d+' (in %)') -# plt.violinplot([(y-x)/x for x,y in zip(data[d],data2[d])], showmedians=True) - plt.boxplot([100.0*(y-x)/x for x,y in zip(data[d],data2[d])]) - plt.hlines(0.0, 0.5,1.5, linestyle='dotted') +plt.tight_layout() # Adjust layout # plt.savefig('comparison.png', dpi=100) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 3cdc607c..ed19e006 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -2,18 +2,18 @@ "boundarycondition.geo": [ { "angles_tet": [ - 27.291, - 136.38 + 22.08, + 143.36 ], "angles_trig": [ - 23.577, - 123.09 + 18.539, + 142.35 ], "ne1d": 74, "ne2d": 52, - "ne3d": 48, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 7, 7, 16, 3, 6, 1, 1, 0, 1]", - "total_badness": 74.651719788 + "ne3d": 41, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 11, 5, 14, 1, 4, 0, 0, 0, 0]", + "total_badness": 69.280452693 }, { "angles_tet": [ @@ -47,18 +47,18 @@ }, { "angles_tet": [ - 27.292, - 136.38 + 30.893, + 127.37 ], "angles_trig": [ - 23.578, - 123.09 + 26.565, + 91.094 ], "ne1d": 74, "ne2d": 52, - "ne3d": 48, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 7, 7, 16, 3, 6, 1, 1, 0, 1]", - "total_badness": 74.651710944 + "ne3d": 36, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 15, 1, 4, 0, 0, 0, 0]", + "total_badness": 55.902432365 }, { "angles_tet": [ @@ -71,14 +71,14 @@ ], "ne1d": 118, "ne2d": 126, - "ne3d": 141, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 18, 11, 17, 30, 19, 19, 14, 7, 2]", - "total_badness": 196.01215512 + "ne3d": 136, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 22, 10, 15, 29, 16, 19, 13, 7, 1]", + "total_badness": 190.84531317 }, { "angles_tet": [ - 26.405, - 131.02 + 28.55, + 131.21 ], "angles_trig": [ 24.196, @@ -86,26 +86,26 @@ ], "ne1d": 181, "ne2d": 291, - "ne3d": 459, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9, 18, 30, 44, 69, 111, 100, 54, 18]", - "total_badness": 575.46697618 + "ne3d": 423, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 22, 27, 54, 71, 81, 87, 57, 10]", + "total_badness": 535.77438972 } ], "boxcyl.geo": [ { "angles_tet": [ - 21.213, - 142.56 + 21.224, + 142.43 ], "angles_trig": [ - 22.379, + 22.403, 121.98 ], "ne1d": 190, "ne2d": 450, - "ne3d": 834, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 93, 74, 76, 85, 110, 106, 100, 99, 45, 19]", - "total_badness": 1200.3294639 + "ne3d": 751, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 16, 46, 55, 75, 83, 71, 89, 84, 91, 87, 39, 15]", + "total_badness": 1107.3889231 }, { "angles_tet": [ @@ -118,13 +118,13 @@ ], "ne1d": 94, "ne2d": 108, - "ne3d": 112, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 5, 15, 14, 6, 14, 6, 10, 7, 10, 3, 15, 2, 0]", - "total_badness": 200.73145455 + "ne3d": 111, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 2, 5, 13, 15, 5, 14, 6, 11, 7, 11, 3, 15, 2, 0]", + "total_badness": 196.51870279 }, { "angles_tet": [ - 14.751, + 14.935, 158.04 ], "angles_trig": [ @@ -133,238 +133,238 @@ ], "ne1d": 136, "ne2d": 204, - "ne3d": 326, - "quality_histogram": "[0, 0, 0, 2, 2, 7, 8, 10, 14, 12, 12, 22, 26, 34, 50, 43, 45, 26, 10, 3]", - "total_badness": 530.84214658 + "ne3d": 306, + "quality_histogram": "[0, 0, 0, 2, 4, 7, 11, 10, 9, 15, 15, 20, 21, 38, 44, 41, 34, 24, 9, 2]", + "total_badness": 514.31347847 }, { "angles_tet": [ - 21.211, - 138.67 + 21.222, + 131.85 ], "angles_trig": [ - 22.376, + 22.403, 121.98 ], "ne1d": 190, "ne2d": 450, - "ne3d": 833, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 24, 86, 78, 71, 79, 124, 107, 92, 99, 51, 21]", - "total_badness": 1192.8552253 + "ne3d": 743, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 15, 46, 50, 70, 84, 67, 88, 85, 93, 92, 39, 14]", + "total_badness": 1090.2554152 }, { "angles_tet": [ - 26.153, - 141.36 + 24.636, + 138.29 ], "angles_trig": [ - 25.575, - 114.94 + 23.311, + 117.05 ], "ne1d": 284, "ne2d": 922, - "ne3d": 3853, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 15, 42, 118, 219, 455, 671, 787, 798, 574, 170]", - "total_badness": 4779.2253231 + "ne3d": 3028, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 16, 43, 81, 218, 369, 489, 604, 623, 449, 132]", + "total_badness": 3768.3794003 }, { "angles_tet": [ - 25.158, - 143.56 + 29.0, + 138.89 ], "angles_trig": [ - 26.346, - 116.86 + 28.033, + 111.86 ], "ne1d": 456, "ne2d": 2480, - "ne3d": 18633, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 17, 93, 295, 810, 1622, 2827, 3994, 4471, 3391, 1108]", - "total_badness": 22509.04709 + "ne3d": 14520, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 44, 181, 508, 1170, 2162, 3142, 3510, 2863, 930]", + "total_badness": 17404.36259 } ], "circle_on_cube.geo": [ { "angles_tet": [ - 25.073, - 134.64 + 26.444, + 133.76 ], "angles_trig": [ - 20.125, - 122.26 + 22.641, + 113.83 ], "ne1d": 94, "ne2d": 162, - "ne3d": 616, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 15, 36, 61, 59, 78, 112, 98, 85, 43, 12]", - "total_badness": 838.94349075 + "ne3d": 537, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 19, 49, 60, 66, 109, 95, 68, 44, 11]", + "total_badness": 714.42871623 }, { "angles_tet": [ - 15.603, - 140.66 + 16.709, + 142.87 ], "angles_trig": [ 19.788, - 123.88 + 124.53 ], "ne1d": 40, "ne2d": 30, - "ne3d": 43, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 5, 9, 7, 5, 5, 3, 3, 2, 0, 0, 1, 0]", - "total_badness": 82.109638474 + "ne3d": 37, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 0, 1, 11, 8, 5, 4, 3, 0, 2, 0, 0, 0, 0]", + "total_badness": 72.253422388 }, { "angles_tet": [ - 20.678, - 133.74 + 26.508, + 128.24 ], "angles_trig": [ 23.119, - 112.86 + 117.29 ], "ne1d": 62, "ne2d": 76, - "ne3d": 155, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 9, 16, 26, 34, 29, 13, 10, 8, 0]", - "total_badness": 220.46268417 + "ne3d": 131, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 8, 22, 16, 30, 20, 15, 8, 5, 1]", + "total_badness": 185.23356052 }, { "angles_tet": [ - 25.158, - 131.6 + 28.726, + 134.02 ], "angles_trig": [ - 23.161, - 113.1 + 22.971, + 114.54 ], "ne1d": 94, "ne2d": 162, - "ne3d": 587, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 22, 44, 62, 62, 114, 104, 94, 57, 15]", - "total_badness": 769.56121713 + "ne3d": 490, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 15, 38, 45, 73, 110, 83, 74, 34, 7]", + "total_badness": 645.37905468 }, { "angles_tet": [ - 22.472, - 138.67 + 28.79, + 135.96 ], "angles_trig": [ - 26.461, - 115.01 + 28.056, + 112.66 ], "ne1d": 138, "ne2d": 370, - "ne3d": 2009, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 13, 21, 56, 130, 220, 339, 438, 428, 295, 67]", - "total_badness": 2495.8001047 + "ne3d": 1534, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 35, 83, 172, 256, 337, 351, 220, 68]", + "total_badness": 1884.7047242 }, { "angles_tet": [ - 25.429, - 141.91 + 26.5, + 141.58 ], "angles_trig": [ - 26.66, - 115.7 + 26.328, + 110.62 ], "ne1d": 224, "ne2d": 922, - "ne3d": 12168, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 17, 52, 227, 553, 1180, 1901, 2590, 2911, 2091, 637]", - "total_badness": 14779.532725 + "ne3d": 9117, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 10, 31, 123, 329, 741, 1263, 1954, 2214, 1832, 618]", + "total_badness": 10924.299533 } ], "cone.geo": [ { "angles_tet": [ - 14.938, - 141.57 + 18.902, + 142.51 ], "angles_trig": [ - 16.548, - 122.02 + 15.975, + 122.42 ], "ne1d": 64, "ne2d": 718, - "ne3d": 1191, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 18, 41, 51, 83, 122, 133, 145, 163, 130, 138, 89, 60, 15]", - "total_badness": 1802.9323748 + "ne3d": 1145, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 17, 40, 54, 82, 124, 129, 158, 136, 126, 116, 97, 46, 12]", + "total_badness": 1753.9631189 }, { "angles_tet": [ - 8.3849, - 167.59 + 12.894, + 161.49 ], "angles_trig": [ - 10.826, - 151.58 + 14.156, + 150.69 ], "ne1d": 32, "ne2d": 208, - "ne3d": 486, - "quality_histogram": "[0, 0, 1, 4, 5, 16, 34, 28, 32, 34, 49, 35, 37, 42, 39, 42, 26, 28, 26, 8]", - "total_badness": 915.87761832 + "ne3d": 457, + "quality_histogram": "[0, 0, 0, 4, 6, 7, 19, 15, 24, 25, 34, 39, 28, 61, 38, 46, 40, 39, 19, 13]", + "total_badness": 786.17360323 }, { "angles_tet": [ - 7.5064, - 168.59 + 8.5678, + 164.24 ], "angles_trig": [ - 9.0552, - 153.87 + 12.521, + 143.3 ], "ne1d": 48, "ne2d": 420, - "ne3d": 618, - "quality_histogram": "[0, 0, 4, 11, 7, 17, 9, 23, 39, 60, 71, 85, 85, 55, 56, 27, 42, 19, 8, 0]", - "total_badness": 1183.5702625 + "ne3d": 626, + "quality_histogram": "[0, 0, 0, 10, 8, 19, 21, 14, 37, 71, 91, 75, 76, 62, 48, 37, 18, 18, 18, 3]", + "total_badness": 1193.0076866 }, { "angles_tet": [ - 17.166, - 143.86 + 18.484, + 140.51 ], "angles_trig": [ - 19.54, - 120.27 + 17.408, + 122.16 ], "ne1d": 64, "ne2d": 718, - "ne3d": 1186, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 22, 42, 92, 106, 123, 168, 148, 166, 127, 103, 62, 17]", - "total_badness": 1745.7492969 + "ne3d": 1129, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 7, 32, 45, 98, 114, 134, 146, 153, 132, 115, 92, 48, 10]", + "total_badness": 1702.0762407 }, { "angles_tet": [ - 25.516, - 138.4 + 18.863, + 137.16 ], "angles_trig": [ - 25.119, - 121.58 + 22.582, + 119.38 ], "ne1d": 96, "ne2d": 1648, - "ne3d": 4372, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 16, 60, 127, 237, 407, 551, 707, 802, 764, 543, 156]", - "total_badness": 5622.2033105 + "ne3d": 3805, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 29, 65, 158, 271, 388, 475, 646, 674, 591, 396, 107]", + "total_badness": 4995.2199245 }, { "angles_tet": [ - 20.726, - 143.6 + 23.624, + 143.07 ], "angles_trig": [ - 23.171, - 123.6 + 24.84, + 120.86 ], "ne1d": 160, "ne2d": 4738, - "ne3d": 27128, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 18, 86, 216, 621, 1451, 2693, 4334, 5762, 5891, 4576, 1473]", - "total_badness": 33206.092666 + "ne3d": 21358, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 20, 69, 206, 492, 1110, 2071, 3275, 4433, 4701, 3671, 1308]", + "total_badness": 26097.176833 } ], "cube.geo": [ @@ -430,33 +430,33 @@ }, { "angles_tet": [ - 27.354, - 136.27 + 33.549, + 129.66 ], "angles_trig": [ - 21.671, - 126.93 + 27.158, + 119.33 ], "ne1d": 48, "ne2d": 36, - "ne3d": 57, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 1, 10, 12, 9, 12, 4, 1, 2, 0]", - "total_badness": 83.840161698 + "ne3d": 38, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 5, 1, 13, 0, 2, 5, 0]", + "total_badness": 53.231047857 }, { "angles_tet": [ - 31.709, - 132.62 + 31.794, + 132.85 ], "angles_trig": [ 28.796, - 108.23 + 105.01 ], "ne1d": 72, "ne2d": 92, - "ne3d": 138, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 11, 8, 8, 25, 23, 30, 17, 10]", - "total_badness": 173.92559042 + "ne3d": 132, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 11, 5, 13, 26, 18, 30, 15, 9]", + "total_badness": 166.4958056 } ], "cubeandring.geo": [ @@ -466,14 +466,14 @@ 170.37 ], "angles_trig": [ - 11.614, + 11.709, 156.34 ], "ne1d": 262, "ne2d": 652, - "ne3d": 2038, - "quality_histogram": "[0, 2, 7, 27, 57, 102, 101, 108, 81, 61, 60, 83, 136, 187, 241, 238, 234, 170, 107, 36]", - "total_badness": 3798.8151666 + "ne3d": 1850, + "quality_histogram": "[0, 2, 4, 19, 46, 79, 87, 113, 85, 41, 56, 75, 136, 174, 213, 238, 192, 160, 101, 29]", + "total_badness": 3376.5621892 }, { "angles_tet": [ @@ -482,13 +482,13 @@ ], "angles_trig": [ 22.715, - 110.61 + 115.73 ], "ne1d": 134, "ne2d": 142, - "ne3d": 205, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 7, 17, 26, 37, 30, 28, 34, 15, 2, 4]", - "total_badness": 293.89415407 + "ne3d": 187, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 1, 0, 4, 8, 17, 23, 31, 18, 28, 31, 16, 7, 2]", + "total_badness": 269.564478 }, { "angles_tet": [ @@ -496,14 +496,14 @@ 159.84 ], "angles_trig": [ - 20.057, + 19.613, 131.52 ], "ne1d": 190, "ne2d": 242, - "ne3d": 501, - "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 5, 4, 14, 39, 54, 41, 82, 64, 82, 54, 37, 23, 0]", - "total_badness": 745.18627676 + "ne3d": 438, + "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 4, 3, 15, 37, 52, 36, 66, 71, 58, 42, 38, 11, 3]", + "total_badness": 658.29595492 }, { "angles_tet": [ @@ -516,39 +516,39 @@ ], "ne1d": 262, "ne2d": 652, - "ne3d": 1894, - "quality_histogram": "[0, 2, 5, 20, 38, 79, 95, 106, 70, 32, 41, 60, 94, 145, 217, 266, 250, 198, 121, 55]", - "total_badness": 3344.7627877 + "ne3d": 1653, + "quality_histogram": "[0, 0, 2, 15, 35, 67, 71, 93, 82, 34, 41, 56, 104, 138, 185, 235, 222, 147, 101, 25]", + "total_badness": 2904.5831463 }, { "angles_tet": [ - 21.707, - 139.77 + 19.908, + 142.77 ], "angles_trig": [ - 23.443, - 118.77 + 21.306, + 123.5 ], "ne1d": 378, "ne2d": 1360, - "ne3d": 7586, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 46, 126, 290, 603, 925, 1250, 1521, 1436, 1062, 317]", - "total_badness": 9530.8442156 + "ne3d": 6102, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 23, 54, 104, 215, 426, 700, 994, 1167, 1210, 918, 281]", + "total_badness": 7655.9055733 }, { "angles_tet": [ - 23.791, - 144.45 + 22.179, + 143.43 ], "angles_trig": [ - 26.716, - 123.99 + 24.189, + 120.95 ], "ne1d": 624, "ne2d": 3860, - "ne3d": 38096, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 26, 61, 218, 722, 1809, 3652, 6020, 8063, 8757, 6666, 2099]", - "total_badness": 46320.985555 + "ne3d": 29147, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 37, 154, 453, 1172, 2338, 4202, 6083, 6991, 5792, 1911]", + "total_badness": 35056.080141 } ], "cubeandspheres.geo": [ @@ -646,294 +646,294 @@ "cubemcyl.geo": [ { "angles_tet": [ - 17.552, - 149.02 + 16.556, + 148.15 ], "angles_trig": [ - 19.505, - 129.13 - ], - "ne1d": 142, - "ne2d": 2400, - "ne3d": 20169, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 25, 79, 231, 483, 876, 1588, 2360, 2911, 3368, 3435, 2711, 1628, 469]", - "total_badness": 27089.560986 - }, - { - "angles_tet": [ - 15.294, - 163.36 - ], - "angles_trig": [ - 13.852, - 128.58 - ], - "ne1d": 64, - "ne2d": 556, - "ne3d": 3011, - "quality_histogram": "[0, 0, 0, 1, 3, 1, 14, 25, 40, 85, 116, 209, 333, 406, 462, 445, 441, 279, 120, 31]", - "total_badness": 4347.4002113 - }, - { - "angles_tet": [ - 17.198, - 146.78 - ], - "angles_trig": [ - 19.119, - 125.8 - ], - "ne1d": 102, - "ne2d": 1280, - "ne3d": 8063, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 27, 79, 200, 404, 723, 1075, 1303, 1418, 1197, 941, 556, 133]", - "total_badness": 10967.392706 - }, - { - "angles_tet": [ - 19.398, - 141.79 - ], - "angles_trig": [ - 21.638, + 18.399, 126.55 ], "ne1d": 142, "ne2d": 2400, - "ne3d": 19151, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 14, 55, 170, 418, 1024, 1805, 2657, 3451, 3664, 3317, 2042, 530]", - "total_badness": 24613.208269 + "ne3d": 17834, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 68, 173, 414, 797, 1367, 2161, 2671, 3007, 2954, 2394, 1433, 378]", + "total_badness": 23946.045345 }, { "angles_tet": [ - 21.795, - 146.06 + 13.826, + 163.36 ], "angles_trig": [ - 22.867, - 125.23 + 13.852, + 130.91 + ], + "ne1d": 64, + "ne2d": 556, + "ne3d": 2511, + "quality_histogram": "[0, 0, 0, 1, 3, 4, 13, 24, 40, 78, 129, 210, 285, 374, 396, 382, 275, 177, 99, 21]", + "total_badness": 3719.5197616 + }, + { + "angles_tet": [ + 21.647, + 145.79 + ], + "angles_trig": [ + 20.886, + 124.66 + ], + "ne1d": 102, + "ne2d": 1280, + "ne3d": 6520, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 9, 78, 150, 366, 638, 856, 1115, 1187, 936, 683, 399, 96]", + "total_badness": 8923.733234 + }, + { + "angles_tet": [ + 21.141, + 143.5 + ], + "angles_trig": [ + 21.506, + 128.13 + ], + "ne1d": 142, + "ne2d": 2400, + "ne3d": 15256, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 23, 47, 126, 348, 812, 1473, 2161, 2716, 2937, 2488, 1665, 457]", + "total_badness": 19641.595824 + }, + { + "angles_tet": [ + 24.461, + 140.07 + ], + "angles_trig": [ + 24.784, + 121.83 ], "ne1d": 210, "ne2d": 5460, - "ne3d": 88820, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 51, 248, 703, 2183, 5117, 9583, 14386, 18836, 19401, 14091, 4209]", - "total_badness": 109216.91549 + "ne3d": 66203, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 143, 429, 1353, 3166, 6206, 10234, 14000, 15463, 11581, 3586]", + "total_badness": 80546.827457 }, { "angles_tet": [ - 23.058, - 143.66 + 24.097, + 146.01 ], "angles_trig": [ - 23.971, - 124.25 + 23.902, + 124.4 ], "ne1d": 362, "ne2d": 15082, - "ne3d": 520159, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 9, 85, 499, 2149, 7346, 21113, 47200, 79734, 110083, 123828, 97201, 30912]", - "total_badness": 627466.22084 + "ne3d": 386834, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 41, 188, 908, 3408, 10433, 25534, 49310, 79289, 100324, 87513, 29881]", + "total_badness": 457691.39756 } ], "cubemsphere.geo": [ { "angles_tet": [ - 22.156, - 150.39 + 22.162, + 142.52 ], "angles_trig": [ - 20.064, - 125.29 + 20.547, + 128.1 ], "ne1d": 90, "ne2d": 570, - "ne3d": 4523, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 41, 75, 170, 331, 494, 702, 821, 761, 645, 383, 89]", - "total_badness": 6000.2419679 + "ne3d": 3995, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 29, 70, 153, 269, 429, 644, 736, 713, 553, 301, 92]", + "total_badness": 5295.1664299 }, { "angles_tet": [ - 10.055, - 158.35 + 10.212, + 162.36 ], "angles_trig": [ - 7.7708, - 147.23 + 9.0545, + 133.12 ], "ne1d": 44, "ne2d": 142, - "ne3d": 313, - "quality_histogram": "[0, 0, 1, 2, 9, 23, 31, 23, 34, 37, 31, 32, 22, 30, 18, 10, 4, 3, 1, 2]", - "total_badness": 701.96510542 + "ne3d": 358, + "quality_histogram": "[0, 0, 1, 3, 8, 9, 27, 25, 43, 45, 41, 38, 32, 29, 23, 19, 7, 5, 3, 0]", + "total_badness": 752.80521692 }, { "angles_tet": [ - 13.22, - 146.51 + 21.441, + 137.91 ], "angles_trig": [ - 16.161, - 132.51 + 15.758, + 131.36 ], "ne1d": 68, "ne2d": 272, - "ne3d": 1429, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 7, 15, 38, 92, 155, 214, 253, 241, 169, 143, 76, 23]", - "total_badness": 1985.519867 + "ne3d": 1132, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 6, 12, 37, 66, 114, 174, 197, 195, 150, 113, 52, 12]", + "total_badness": 1578.3627501 }, { "angles_tet": [ - 24.16, - 139.58 + 23.799, + 135.59 ], "angles_trig": [ - 20.668, - 120.71 + 25.09, + 118.46 ], "ne1d": 90, "ne2d": 570, - "ne3d": 4315, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 36, 65, 214, 404, 593, 811, 842, 765, 470, 102]", - "total_badness": 5519.2080716 + "ne3d": 3360, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 16, 48, 146, 270, 503, 620, 661, 596, 397, 96]", + "total_badness": 4265.8200532 }, { "angles_tet": [ - 25.558, - 139.27 + 28.171, + 133.52 ], "angles_trig": [ - 21.95, - 123.73 + 26.253, + 118.16 ], "ne1d": 146, "ne2d": 1366, - "ne3d": 17357, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 45, 131, 383, 1002, 1818, 2868, 3691, 3818, 2778, 814]", - "total_badness": 21308.513568 + "ne3d": 13140, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 87, 221, 636, 1253, 2150, 2862, 3060, 2218, 641]", + "total_badness": 15990.17626 }, { "angles_tet": [ - 24.327, - 140.29 + 26.132, + 136.98 ], "angles_trig": [ - 25.758, - 120.76 + 25.57, + 116.53 ], "ne1d": 248, "ne2d": 4248, - "ne3d": 112960, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 100, 493, 1726, 4923, 10719, 17771, 23842, 26353, 20492, 6522]", - "total_badness": 136671.30101 + "ne3d": 84535, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 38, 239, 826, 2592, 5812, 11280, 17631, 21604, 18465, 6041]", + "total_badness": 100414.60403 } ], "cylinder.geo": [ { "angles_tet": [ - 19.076, - 144.67 + 19.071, + 144.66 ], "angles_trig": [ - 25.583, - 111.5 + 22.881, + 111.85 ], "ne1d": 52, "ne2d": 286, - "ne3d": 407, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 2, 4, 10, 32, 48, 50, 81, 56, 52, 42, 14, 14]", - "total_badness": 567.546292 + "ne3d": 394, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 6, 18, 38, 45, 53, 70, 51, 48, 40, 12, 9]", + "total_badness": 562.09628542 }, { "angles_tet": [ - 24.676, + 22.85, 151.98 ], "angles_trig": [ - 24.811, - 126.7 + 25.237, + 118.13 ], "ne1d": 24, "ne2d": 66, - "ne3d": 70, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 6, 5, 5, 2, 6, 5, 3, 5, 14, 17, 1, 0]", - "total_badness": 105.64076027 + "ne3d": 69, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 5, 0, 4, 2, 2, 9, 26, 3, 7]", + "total_badness": 95.643757297 }, { "angles_tet": [ - 8.4923, - 161.34 + 16.406, + 156.92 ], "angles_trig": [ - 20.122, - 127.45 + 19.37, + 130.41 ], "ne1d": 36, "ne2d": 152, - "ne3d": 358, - "quality_histogram": "[0, 0, 1, 0, 0, 2, 5, 11, 21, 19, 22, 22, 31, 29, 35, 39, 57, 37, 17, 10]", - "total_badness": 559.67848726 + "ne3d": 471, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 9, 22, 43, 37, 39, 53, 46, 32, 40, 41, 49, 27, 21, 7]", + "total_badness": 798.57500814 }, { "angles_tet": [ - 19.058, - 144.69 + 19.062, + 144.68 ], "angles_trig": [ - 25.588, - 111.45 + 22.836, + 111.85 ], "ne1d": 52, "ne2d": 286, - "ne3d": 407, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 0, 3, 10, 31, 45, 55, 73, 61, 53, 46, 15, 13]", - "total_badness": 563.90833945 + "ne3d": 394, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 6, 18, 38, 45, 52, 71, 52, 46, 41, 12, 9]", + "total_badness": 562.08196742 }, { "angles_tet": [ - 21.985, - 136.08 + 23.602, + 139.69 ], "angles_trig": [ - 24.141, - 119.73 + 23.844, + 118.54 ], "ne1d": 76, "ne2d": 636, - "ne3d": 1183, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 29, 61, 96, 141, 201, 195, 208, 129, 88, 25]", - "total_badness": 1595.7683733 + "ne3d": 1056, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 16, 35, 78, 108, 109, 163, 185, 154, 105, 81, 20]", + "total_badness": 1453.0463737 }, { "angles_tet": [ - 27.151, - 138.19 + 24.173, + 139.41 ], "angles_trig": [ - 27.89, - 120.16 + 26.472, + 120.11 ], "ne1d": 124, "ne2d": 1666, - "ne3d": 7963, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 21, 55, 143, 336, 696, 1178, 1725, 1848, 1439, 521]", - "total_badness": 9633.6668545 + "ne3d": 6448, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 17, 44, 136, 282, 586, 944, 1320, 1470, 1240, 401]", + "total_badness": 7815.6380623 } ], "cylsphere.geo": [ { "angles_tet": [ - 16.89, - 146.66 + 16.806, + 141.8 ], "angles_trig": [ - 17.583, - 116.74 + 17.554, + 116.77 ], "ne1d": 104, "ne2d": 494, - "ne3d": 707, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 7, 19, 31, 60, 96, 109, 89, 101, 53, 69, 48, 15, 3]", - "total_badness": 1103.8873525 + "ne3d": 713, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 6, 18, 35, 56, 89, 109, 96, 98, 63, 67, 49, 18, 4]", + "total_badness": 1103.0227656 }, { "angles_tet": [ @@ -946,153 +946,153 @@ ], "ne1d": 48, "ne2d": 100, - "ne3d": 104, - "quality_histogram": "[0, 0, 0, 2, 1, 4, 13, 15, 9, 10, 14, 5, 5, 2, 6, 10, 8, 0, 0, 0]", - "total_badness": 228.55775864 + "ne3d": 103, + "quality_histogram": "[0, 0, 0, 2, 1, 4, 13, 15, 10, 11, 10, 5, 5, 3, 6, 10, 8, 0, 0, 0]", + "total_badness": 227.02057451 }, { "angles_tet": [ - 16.975, - 146.47 + 16.827, + 140.82 ], "angles_trig": [ - 17.533, - 120.59 + 17.531, + 116.44 ], "ne1d": 104, "ne2d": 494, - "ne3d": 706, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 6, 17, 30, 59, 98, 99, 97, 96, 68, 65, 45, 16, 3]", - "total_badness": 1096.9819246 + "ne3d": 685, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 6, 24, 49, 71, 105, 100, 90, 79, 50, 49, 41, 13, 3]", + "total_badness": 1099.947193 }, { "angles_tet": [ - 19.739, - 142.01 + 23.775, + 139.74 ], "angles_trig": [ - 21.005, - 119.84 + 22.07, + 119.33 ], "ne1d": 152, "ne2d": 1082, - "ne3d": 2842, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 22, 43, 84, 156, 233, 309, 459, 535, 529, 378, 87]", - "total_badness": 3653.5906442 + "ne3d": 2428, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 47, 98, 156, 241, 314, 341, 430, 415, 289, 80]", + "total_badness": 3165.0550273 }, { "angles_tet": [ - 25.231, - 139.3 + 25.953, + 137.57 ], "angles_trig": [ - 25.146, - 122.8 + 27.924, + 118.72 ], "ne1d": 248, "ne2d": 2810, - "ne3d": 17714, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 29, 100, 280, 741, 1663, 2724, 3885, 4147, 3098, 1032]", - "total_badness": 21466.883949 + "ne3d": 13898, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 28, 80, 235, 563, 1170, 2020, 2879, 3303, 2681, 930]", + "total_badness": 16757.815083 } ], "ellipsoid.geo": [ { "angles_tet": [ - 18.985, - 146.67 + 19.068, + 144.8 ], "angles_trig": [ - 18.356, - 122.93 + 18.52, + 120.49 ], "ne1d": 0, "ne2d": 694, - "ne3d": 1271, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 7, 34, 67, 108, 149, 145, 161, 175, 147, 107, 92, 59, 18]", - "total_badness": 1927.202371 + "ne3d": 1213, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 17, 36, 66, 102, 149, 134, 147, 166, 129, 104, 106, 35, 20]", + "total_badness": 1859.2508656 }, { "angles_tet": [ - 4.4724, - 169.99 + 4.1029, + 170.7 ], "angles_trig": [ - 9.3765, - 160.0 + 6.1932, + 162.02 ], "ne1d": 0, "ne2d": 156, - "ne3d": 536, - "quality_histogram": "[0, 13, 28, 52, 60, 66, 49, 44, 44, 37, 27, 35, 22, 18, 13, 9, 7, 6, 6, 0]", - "total_badness": 1855.3951762 + "ne3d": 617, + "quality_histogram": "[0, 6, 38, 56, 76, 81, 63, 54, 37, 40, 32, 31, 21, 29, 21, 18, 10, 1, 2, 1]", + "total_badness": 2089.5884695 }, { "angles_tet": [ - 20.08, - 138.43 + 19.38, + 137.84 ], "angles_trig": [ - 19.842, - 116.21 + 18.638, + 115.93 ], "ne1d": 0, "ne2d": 384, - "ne3d": 588, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 7, 17, 40, 68, 74, 90, 109, 64, 52, 37, 22, 7]", - "total_badness": 870.44417377 + "ne3d": 580, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 16, 43, 63, 83, 89, 100, 57, 57, 32, 23, 10]", + "total_badness": 859.84790156 }, { "angles_tet": [ - 22.423, - 143.66 + 18.382, + 141.28 ], "angles_trig": [ - 19.734, - 119.91 + 19.357, + 122.31 ], "ne1d": 0, "ne2d": 694, - "ne3d": 1259, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 20, 61, 90, 124, 145, 171, 157, 147, 147, 103, 75, 16]", - "total_badness": 1857.1598634 + "ne3d": 1160, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 44, 55, 103, 135, 147, 161, 140, 132, 85, 87, 43, 17]", + "total_badness": 1782.4621003 }, { "angles_tet": [ - 21.995, - 138.77 + 22.541, + 137.85 ], "angles_trig": [ - 25.46, - 115.64 + 23.173, + 122.67 ], "ne1d": 0, "ne2d": 1578, - "ne3d": 5402, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 7, 41, 142, 273, 437, 588, 900, 1031, 1032, 733, 215]", - "total_badness": 6841.327071 + "ne3d": 4459, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 69, 199, 288, 416, 572, 641, 762, 738, 569, 181]", + "total_badness": 5785.6787619 }, { "angles_tet": [ - 21.744, - 144.6 + 26.132, + 137.27 ], "angles_trig": [ - 26.751, - 121.56 + 24.331, + 124.82 ], "ne1d": 0, "ne2d": 4212, - "ne3d": 37347, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 52, 185, 546, 1522, 3262, 5723, 7899, 8903, 6950, 2294]", - "total_badness": 45064.497844 + "ne3d": 28541, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 32, 150, 441, 1024, 2212, 3959, 5845, 7012, 5816, 2045]", + "total_badness": 34195.305763 } ], "ellipticcone.geo": [ { "angles_tet": [ - 23.263, - 146.25 + 21.191, + 143.04 ], "angles_trig": [ 22.188, @@ -1100,176 +1100,176 @@ ], "ne1d": 174, "ne2d": 1492, - "ne3d": 4957, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 34, 88, 187, 310, 511, 694, 881, 895, 745, 469, 135]", - "total_badness": 6507.6297349 + "ne3d": 4458, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 33, 80, 170, 285, 484, 684, 741, 769, 654, 399, 145]", + "total_badness": 5878.2970409 }, { "angles_tet": [ - 20.274, + 18.758, 150.89 ], "angles_trig": [ - 22.128, + 20.597, 124.89 ], "ne1d": 86, "ne2d": 336, - "ne3d": 469, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 6, 20, 36, 44, 66, 67, 67, 47, 50, 44, 16, 5]", - "total_badness": 695.59119444 + "ne3d": 459, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 10, 21, 41, 41, 53, 60, 65, 58, 48, 41, 11, 6]", + "total_badness": 690.5842012 }, { "angles_tet": [ - 16.545, + 16.986, 153.27 ], "angles_trig": [ - 16.861, + 18.22, 134.96 ], "ne1d": 130, "ne2d": 794, - "ne3d": 1476, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 19, 28, 50, 58, 53, 90, 145, 165, 181, 203, 199, 155, 101, 28]", - "total_badness": 2177.7084872 + "ne3d": 1383, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 12, 28, 56, 58, 69, 92, 155, 145, 190, 170, 169, 125, 94, 18]", + "total_badness": 2076.8283951 }, { "angles_tet": [ - 24.549, - 137.43 + 22.207, + 144.22 ], "angles_trig": [ - 22.188, - 117.33 + 20.311, + 124.34 ], "ne1d": 174, "ne2d": 1492, - "ne3d": 4748, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 32, 96, 200, 389, 599, 887, 945, 888, 521, 181]", - "total_badness": 6023.4146593 + "ne3d": 4049, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 10, 30, 77, 193, 316, 526, 717, 820, 721, 488, 148]", + "total_badness": 5141.2657775 }, { "angles_tet": [ - 19.964, - 146.92 + 19.813, + 147.03 ], "angles_trig": [ - 22.162, + 21.794, 126.99 ], "ne1d": 258, "ne2d": 3318, - "ne3d": 13093, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 13, 35, 131, 267, 525, 918, 1525, 2178, 2534, 2516, 1864, 585]", - "total_badness": 16495.184175 + "ne3d": 11071, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 20, 45, 147, 286, 495, 839, 1243, 1701, 2054, 2172, 1580, 487]", + "total_badness": 14040.574161 }, { "angles_tet": [ - 20.933, - 146.0 + 19.674, + 144.72 ], "angles_trig": [ 22.947, - 128.99 + 126.66 ], "ne1d": 432, "ne2d": 9184, - "ne3d": 68625, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 20, 51, 215, 569, 1425, 3426, 6873, 10848, 14353, 15147, 11893, 3795]", - "total_badness": 83844.770837 + "ne3d": 54158, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 18, 54, 221, 535, 1196, 2522, 4466, 7523, 10751, 12523, 10799, 3540]", + "total_badness": 65682.333844 } ], "ellipticcyl.geo": [ { "angles_tet": [ - 20.908, - 145.52 + 17.353, + 144.66 ], "angles_trig": [ - 21.34, - 121.52 + 20.926, + 125.85 ], "ne1d": 156, "ne2d": 942, - "ne3d": 2141, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 8, 29, 62, 101, 159, 256, 306, 360, 377, 282, 155, 43]", - "total_badness": 2890.2110231 + "ne3d": 2034, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 15, 34, 73, 113, 164, 233, 336, 291, 329, 251, 148, 40]", + "total_badness": 2793.4385428 }, { "angles_tet": [ - 16.477, + 16.495, 144.27 ], "angles_trig": [ - 21.842, - 119.59 + 21.861, + 135.25 ], "ne1d": 76, "ne2d": 200, - "ne3d": 241, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 11, 23, 16, 32, 31, 40, 30, 30, 14, 6, 4, 0]", - "total_badness": 387.30490812 + "ne3d": 242, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 14, 22, 16, 31, 31, 36, 30, 32, 15, 6, 4, 0]", + "total_badness": 390.97240271 }, { "angles_tet": [ - 24.683, - 136.88 + 23.926, + 135.29 ], "angles_trig": [ - 24.591, - 114.49 + 24.282, + 116.66 ], "ne1d": 116, "ne2d": 542, - "ne3d": 1031, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 16, 45, 82, 99, 163, 195, 190, 115, 99, 23]", - "total_badness": 1364.8877139 + "ne3d": 942, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 23, 40, 94, 107, 146, 178, 156, 103, 76, 11]", + "total_badness": 1270.1928118 }, { "angles_tet": [ - 21.397, - 134.44 + 21.053, + 142.98 ], "angles_trig": [ - 21.803, - 118.55 + 22.458, + 117.6 ], "ne1d": 156, "ne2d": 942, - "ne3d": 2091, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 15, 36, 73, 126, 232, 306, 377, 391, 305, 180, 48]", - "total_badness": 2749.9153281 + "ne3d": 1931, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 7, 27, 55, 78, 130, 184, 281, 367, 319, 266, 179, 37]", + "total_badness": 2579.9354136 }, { "angles_tet": [ - 21.299, - 145.92 + 23.667, + 138.58 ], "angles_trig": [ - 22.971, - 123.45 + 25.236, + 120.17 ], "ne1d": 232, "ne2d": 2102, - "ne3d": 7936, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 7, 36, 102, 243, 506, 936, 1318, 1618, 1632, 1161, 374]", - "total_badness": 9862.7920315 + "ne3d": 6638, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 45, 118, 262, 475, 812, 1073, 1336, 1300, 923, 285]", + "total_badness": 8335.0561403 }, { "angles_tet": [ - 24.388, - 140.11 + 22.292, + 144.61 ], "angles_trig": [ - 24.731, - 114.31 + 24.768, + 126.3 ], "ne1d": 388, "ne2d": 5914, - "ne3d": 54280, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 57, 235, 715, 1972, 4653, 8290, 11507, 13163, 10250, 3423]", - "total_badness": 65288.837508 + "ne3d": 41917, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 9, 35, 152, 474, 1287, 3020, 5596, 8738, 10547, 9050, 3003]", + "total_badness": 49914.609895 } ], "extrusion.geo": [ @@ -1335,18 +1335,18 @@ }, { "angles_tet": [ - 13.66, - 140.84 + 20.077, + 139.4 ], "angles_trig": [ - 16.325, + 18.634, 118.98 ], "ne1d": 276, "ne2d": 544, - "ne3d": 623, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 11, 18, 30, 47, 70, 73, 69, 81, 73, 75, 52, 17, 3]", - "total_badness": 953.76990304 + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 26, 43, 52, 60, 73, 62, 74, 62, 77, 43, 15, 7]", + "total_badness": 934.85096826 } ], "fichera.geo": [ @@ -1413,38 +1413,38 @@ { "angles_tet": [ 28.158, - 128.52 + 136.35 ], "angles_trig": [ 28.353, - 114.07 + 107.49 ], "ne1d": 96, "ne2d": 108, - "ne3d": 194, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 12, 26, 25, 34, 34, 35, 12, 7]", - "total_badness": 254.28246256 + "ne3d": 177, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 15, 16, 11, 33, 36, 32, 20, 5]", + "total_badness": 228.70758215 }, { "angles_tet": [ - 28.713, - 135.86 + 27.898, + 129.67 ], "angles_trig": [ - 27.552, + 26.954, 105.69 ], "ne1d": 144, "ne2d": 264, - "ne3d": 484, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 23, 37, 65, 105, 72, 87, 59, 23]", - "total_badness": 613.06762292 + "ne3d": 455, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 24, 39, 63, 97, 91, 63, 48, 17]", + "total_badness": 582.04207662 } ], "hinge.stl": [ { "angles_tet": [ - 15.803, + 15.509, 152.56 ], "angles_trig": [ @@ -1453,9 +1453,9 @@ ], "ne1d": 456, "ne2d": 1066, - "ne3d": 1694, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 9, 23, 41, 74, 105, 136, 200, 243, 292, 219, 204, 110, 31]", - "total_badness": 2383.0874819 + "ne3d": 1622, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 13, 26, 35, 66, 106, 137, 214, 232, 260, 226, 173, 103, 25]", + "total_badness": 2297.0354205 }, { "angles_tet": [ @@ -1468,9 +1468,9 @@ ], "ne1d": 298, "ne2d": 502, - "ne3d": 610, - "quality_histogram": "[0, 0, 3, 5, 10, 16, 27, 39, 43, 38, 55, 65, 64, 51, 49, 62, 38, 24, 16, 5]", - "total_badness": 1160.8468965 + "ne3d": 598, + "quality_histogram": "[0, 0, 3, 5, 10, 16, 29, 40, 43, 39, 54, 62, 60, 51, 45, 59, 38, 25, 14, 5]", + "total_badness": 1148.0390643 }, { "angles_tet": [ @@ -1483,24 +1483,24 @@ ], "ne1d": 370, "ne2d": 758, - "ne3d": 982, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 6, 25, 33, 29, 47, 79, 112, 128, 147, 142, 96, 68, 50, 13]", - "total_badness": 1492.3556478 + "ne3d": 980, + "quality_histogram": "[0, 0, 0, 0, 0, 8, 8, 23, 33, 29, 49, 79, 112, 130, 144, 142, 95, 67, 49, 12]", + "total_badness": 1495.506642 }, { "angles_tet": [ - 17.097, - 147.54 + 17.038, + 147.66 ], "angles_trig": [ 18.124, - 131.28 + 134.43 ], "ne1d": 516, "ne2d": 1454, - "ne3d": 2329, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 13, 22, 39, 68, 145, 210, 272, 358, 330, 328, 308, 185, 47]", - "total_badness": 3218.2251987 + "ne3d": 2242, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 14, 24, 45, 74, 121, 218, 278, 348, 301, 321, 297, 156, 42]", + "total_badness": 3117.2593361 }, { "angles_tet": [ @@ -1513,24 +1513,24 @@ ], "ne1d": 722, "ne2d": 2768, - "ne3d": 6516, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 0, 3, 16, 30, 61, 162, 306, 578, 835, 999, 1088, 1188, 967, 282]", - "total_badness": 8307.9517383 + "ne3d": 5826, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 0, 2, 15, 30, 56, 149, 329, 578, 796, 904, 973, 983, 757, 253]", + "total_badness": 7499.63097 }, { "angles_tet": [ - 19.776, - 144.38 + 18.283, + 142.44 ], "angles_trig": [ - 22.289, - 122.14 + 21.873, + 123.52 ], "ne1d": 1862, "ne2d": 18540, - "ne3d": 125397, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 21, 93, 374, 1009, 2638, 6483, 12401, 19519, 26284, 28157, 21536, 6877]", - "total_badness": 153172.81544 + "ne3d": 97376, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 18, 74, 251, 659, 1770, 4375, 8501, 14080, 20129, 22819, 18498, 6200]", + "total_badness": 117815.89866 } ], "lense.in2d": [ @@ -1632,14 +1632,14 @@ 125.39 ], "angles_trig": [ - 35.225, - 109.34 + 35.264, + 90.0 ], "ne1d": 44, "ne2d": 28, - "ne3d": 24, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 20, 0, 2, 0, 0, 0, 0]", - "total_badness": 36.197580222 + "ne3d": 18, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0]", + "total_badness": 27.2783989 }, { "angles_tet": [ @@ -1677,98 +1677,98 @@ 125.39 ], "angles_trig": [ - 35.225, - 109.34 + 35.264, + 90.0 ], "ne1d": 44, "ne2d": 28, - "ne3d": 24, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 20, 0, 2, 0, 0, 0, 0]", - "total_badness": 36.197580222 + "ne3d": 18, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0]", + "total_badness": 27.2783989 }, { "angles_tet": [ - 31.097, - 125.11 + 30.544, + 123.51 ], "angles_trig": [ 28.101, - 92.426 + 92.749 ], "ne1d": 80, "ne2d": 66, - "ne3d": 73, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 20, 13, 2, 3, 6]", - "total_badness": 97.336071703 + "ne3d": 68, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 8, 11, 12, 12, 4, 7, 3]", + "total_badness": 90.370075048 }, { "angles_tet": [ 25.594, - 129.87 + 131.82 ], "angles_trig": [ 24.835, - 109.77 + 108.97 ], "ne1d": 122, "ne2d": 192, - "ne3d": 302, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 10, 16, 35, 31, 45, 51, 66, 34, 10]", - "total_badness": 388.25333392 + "ne3d": 291, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 10, 18, 35, 39, 40, 54, 58, 24, 9]", + "total_badness": 378.51475956 } ], "manyholes.geo": [ { "angles_tet": [ - 17.962, - 147.8 + 17.695, + 153.3 ], "angles_trig": [ - 17.912, + 17.033, 139.33 ], "ne1d": 5886, "ne2d": 45882, - "ne3d": 174631, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 64, 229, 668, 1859, 5592, 10791, 18495, 26482, 29904, 31051, 26889, 18192, 4407]", - "total_badness": 227663.03541 + "ne3d": 154702, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 66, 222, 737, 2094, 5786, 10315, 16832, 23407, 25576, 26164, 23123, 16303, 4068]", + "total_badness": 202905.19298 }, { "angles_tet": [ - 13.226, + 11.57, 153.55 ], "angles_trig": [ 14.377, - 130.91 + 134.8 ], "ne1d": 2746, "ne2d": 10428, - "ne3d": 23614, - "quality_histogram": "[0, 0, 0, 1, 2, 8, 39, 141, 333, 732, 1350, 2122, 2750, 3219, 3149, 3069, 2743, 2192, 1438, 326]", - "total_badness": 34314.343654 + "ne3d": 22186, + "quality_histogram": "[0, 0, 0, 1, 2, 10, 36, 143, 315, 668, 1305, 2125, 2629, 3075, 2870, 2714, 2456, 2053, 1436, 348]", + "total_badness": 32307.652049 }, { "angles_tet": [ - 12.344, - 154.1 + 13.279, + 151.1 ], "angles_trig": [ 12.439, - 133.91 + 137.16 ], "ne1d": 4106, "ne2d": 23238, - "ne3d": 63123, - "quality_histogram": "[0, 0, 0, 0, 31, 60, 174, 310, 596, 1169, 2077, 3620, 5748, 7925, 9100, 9947, 9228, 7455, 4552, 1131]", - "total_badness": 87899.222784 + "ne3d": 56933, + "quality_histogram": "[0, 0, 0, 0, 31, 64, 210, 334, 666, 1194, 2196, 3631, 5728, 7499, 8338, 8581, 7869, 6084, 3580, 928]", + "total_badness": 80610.044111 } ], "manyholes2.geo": [ { "angles_tet": [ 10.467, - 152.55 + 151.97 ], "angles_trig": [ 16.373, @@ -1776,9 +1776,9 @@ ], "ne1d": 10202, "ne2d": 41054, - "ne3d": 104058, - "quality_histogram": "[0, 0, 0, 0, 2, 14, 88, 229, 686, 1719, 3645, 6682, 9826, 12717, 14060, 15164, 15249, 13389, 8410, 2178]", - "total_badness": 143298.73232 + "ne3d": 96973, + "quality_histogram": "[0, 0, 0, 0, 3, 14, 77, 228, 649, 1728, 3712, 6466, 9529, 12137, 13060, 13497, 13477, 12189, 8049, 2158]", + "total_badness": 134173.65203 } ], "matrix.geo": [ @@ -1793,9 +1793,9 @@ ], "ne1d": 174, "ne2d": 1070, - "ne3d": 4599, - "quality_histogram": "[0, 0, 10, 93, 172, 67, 25, 59, 126, 165, 272, 371, 440, 515, 548, 537, 528, 411, 204, 56]", - "total_badness": 7959.8830096 + "ne3d": 4238, + "quality_histogram": "[0, 0, 10, 93, 172, 69, 17, 64, 120, 159, 270, 354, 421, 464, 502, 490, 450, 338, 202, 43]", + "total_badness": 7468.5968987 }, { "angles_tet": [ @@ -1803,14 +1803,14 @@ 166.83 ], "angles_trig": [ - 8.2716, - 155.6 + 8.2262, + 162.29 ], "ne1d": 106, "ne2d": 314, - "ne3d": 872, - "quality_histogram": "[0, 0, 4, 34, 45, 54, 80, 72, 92, 87, 91, 73, 67, 53, 44, 32, 21, 20, 3, 0]", - "total_badness": 2091.3790714 + "ne3d": 869, + "quality_histogram": "[0, 0, 5, 33, 47, 52, 74, 69, 102, 93, 83, 80, 65, 49, 43, 32, 22, 18, 2, 0]", + "total_badness": 2092.2409402 }, { "angles_tet": [ @@ -1823,9 +1823,9 @@ ], "ne1d": 132, "ne2d": 588, - "ne3d": 1799, - "quality_histogram": "[0, 0, 2, 17, 33, 76, 152, 120, 84, 98, 127, 150, 170, 203, 187, 133, 118, 64, 55, 10]", - "total_badness": 3522.631959 + "ne3d": 1733, + "quality_histogram": "[0, 0, 2, 14, 30, 79, 151, 126, 80, 114, 115, 148, 155, 191, 164, 139, 98, 75, 43, 9]", + "total_badness": 3419.5579224 }, { "angles_tet": [ @@ -1838,39 +1838,39 @@ ], "ne1d": 174, "ne2d": 1070, - "ne3d": 4497, - "quality_histogram": "[0, 0, 10, 93, 172, 65, 16, 60, 101, 137, 258, 314, 387, 500, 529, 561, 555, 411, 252, 76]", - "total_badness": 7683.1109366 + "ne3d": 4026, + "quality_histogram": "[0, 0, 10, 93, 172, 65, 16, 58, 113, 142, 247, 319, 399, 438, 476, 449, 435, 315, 219, 60]", + "total_badness": 7109.2735591 }, { "angles_tet": [ - 13.101, - 145.56 + 13.107, + 146.96 ], "angles_trig": [ - 15.887, + 15.013, 143.02 ], "ne1d": 248, "ne2d": 2256, - "ne3d": 16133, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 22, 55, 90, 186, 318, 576, 969, 1526, 2057, 2534, 2791, 2579, 1841, 582]", - "total_badness": 21280.729551 + "ne3d": 13057, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 21, 59, 107, 184, 339, 556, 907, 1254, 1664, 1962, 2127, 2012, 1415, 443]", + "total_badness": 17482.312294 }, { "angles_tet": [ - 18.113, - 145.19 + 18.203, + 144.77 ], "angles_trig": [ 17.821, - 130.51 + 128.91 ], "ne1d": 418, "ne2d": 5914, - "ne3d": 101287, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 8, 42, 111, 349, 979, 2418, 5321, 10105, 15903, 20923, 22509, 17204, 5408]", - "total_badness": 124144.15591 + "ne3d": 76880, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 9, 44, 92, 254, 708, 1634, 3644, 6877, 10969, 15598, 17976, 14366, 4704]", + "total_badness": 93472.477243 } ], "ortho.geo": [ @@ -1936,117 +1936,117 @@ }, { "angles_tet": [ - 27.31, + 27.314, 136.31 ], "angles_trig": [ - 32.958, - 102.54 + 32.951, + 102.55 ], "ne1d": 48, "ne2d": 36, "ne3d": 57, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 2, 9, 11, 10, 12, 4, 1, 2, 0]", - "total_badness": 83.838340747 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 2, 9, 11, 10, 12, 4, 1, 2, 0]", + "total_badness": 83.838443301 }, { "angles_tet": [ 27.731, - 134.89 + 129.3 ], "angles_trig": [ 28.064, - 104.8 + 103.04 ], "ne1d": 72, "ne2d": 104, - "ne3d": 157, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 9, 22, 17, 29, 25, 28, 10, 6]", - "total_badness": 206.30371107 + "ne3d": 150, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 6, 23, 14, 31, 21, 29, 13, 5]", + "total_badness": 194.78642472 } ], "part1.stl": [ { "angles_tet": [ - 22.083, - 138.04 + 25.638, + 135.18 ], "angles_trig": [ - 24.223, - 119.8 + 21.656, + 124.67 ], "ne1d": 170, "ne2d": 400, - "ne3d": 1023, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 16, 55, 75, 124, 152, 176, 176, 136, 86, 20]", - "total_badness": 1363.6686182 + "ne3d": 928, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 31, 48, 72, 93, 157, 155, 145, 124, 83, 13]", + "total_badness": 1245.5581222 }, { "angles_tet": [ - 10.722, + 11.063, 160.47 ], "angles_trig": [ - 13.01, + 16.003, 146.61 ], "ne1d": 134, "ne2d": 254, - "ne3d": 457, - "quality_histogram": "[0, 0, 0, 4, 1, 3, 9, 7, 11, 19, 29, 44, 53, 56, 60, 63, 43, 31, 20, 4]", - "total_badness": 726.0384133 + "ne3d": 413, + "quality_histogram": "[0, 0, 0, 3, 3, 5, 11, 7, 15, 24, 31, 33, 54, 43, 65, 44, 36, 19, 17, 3]", + "total_badness": 687.15227784 }, { "angles_tet": [ 20.846, - 134.73 + 149.16 ], "angles_trig": [ - 22.401, - 115.69 + 23.195, + 113.89 ], "ne1d": 194, "ne2d": 554, - "ne3d": 1600, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 17, 63, 93, 166, 229, 275, 308, 246, 159, 37]", - "total_badness": 2088.862264 + "ne3d": 1389, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 17, 54, 101, 149, 220, 252, 241, 203, 120, 25]", + "total_badness": 1832.7921849 }, { "angles_tet": [ 21.368, - 141.27 + 141.1 ], "angles_trig": [ - 26.65, - 112.07 + 23.927, + 117.02 ], "ne1d": 266, "ne2d": 958, - "ne3d": 4158, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 19, 53, 126, 298, 501, 705, 822, 870, 591, 159]", - "total_badness": 5194.9903517 + "ne3d": 3403, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 18, 52, 114, 269, 399, 601, 676, 646, 459, 155]", + "total_badness": 4278.0682013 }, { "angles_tet": [ - 24.374, - 139.79 + 26.383, + 142.98 ], "angles_trig": [ - 25.767, - 121.5 + 24.47, + 122.53 ], "ne1d": 674, "ne2d": 6330, - "ne3d": 73017, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 118, 382, 1197, 3223, 6772, 11399, 15438, 17121, 13196, 4153]", - "total_badness": 88445.46456 + "ne3d": 55920, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 65, 218, 755, 1964, 4266, 7694, 11351, 13972, 11855, 3765]", + "total_badness": 66850.851051 } ], "period.geo": [ { "angles_tet": [ - 14.172, - 145.15 + 15.419, + 145.84 ], "angles_trig": [ 17.555, @@ -2054,9 +2054,9 @@ ], "ne1d": 344, "ne2d": 1040, - "ne3d": 3043, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 18, 25, 51, 71, 144, 251, 302, 421, 423, 407, 390, 306, 179, 49]", - "total_badness": 4402.5390324 + "ne3d": 2859, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 20, 25, 47, 80, 148, 264, 299, 418, 368, 359, 360, 281, 151, 34]", + "total_badness": 4186.5926357 }, { "angles_tet": [ @@ -2065,33 +2065,33 @@ ], "angles_trig": [ 11.507, - 140.67 + 146.85 ], "ne1d": 160, "ne2d": 234, - "ne3d": 417, - "quality_histogram": "[0, 0, 2, 4, 4, 12, 17, 17, 26, 32, 44, 44, 48, 39, 27, 37, 33, 20, 8, 3]", - "total_badness": 780.76742775 + "ne3d": 401, + "quality_histogram": "[0, 0, 2, 8, 9, 14, 19, 17, 22, 28, 36, 35, 47, 49, 24, 32, 29, 21, 8, 1]", + "total_badness": 786.54568096 }, { "angles_tet": [ - 9.6632, - 163.12 + 13.089, + 161.3 ], "angles_trig": [ - 13.809, - 147.97 + 13.837, + 144.46 ], "ne1d": 232, "ne2d": 494, - "ne3d": 1159, - "quality_histogram": "[0, 0, 1, 5, 14, 20, 42, 39, 60, 72, 87, 117, 127, 158, 104, 117, 72, 73, 42, 9]", - "total_badness": 2023.1948662 + "ne3d": 1204, + "quality_histogram": "[0, 0, 0, 0, 13, 21, 39, 41, 71, 83, 112, 118, 152, 145, 117, 108, 72, 68, 39, 5]", + "total_badness": 2092.5543831 }, { "angles_tet": [ - 14.172, - 145.15 + 16.492, + 144.95 ], "angles_trig": [ 17.555, @@ -2099,29 +2099,29 @@ ], "ne1d": 344, "ne2d": 1040, - "ne3d": 3001, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 17, 24, 42, 58, 124, 222, 276, 398, 439, 428, 393, 327, 202, 45]", - "total_badness": 4283.328223 + "ne3d": 2771, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 18, 24, 45, 65, 145, 235, 301, 377, 387, 348, 358, 291, 137, 35]", + "total_badness": 4034.1944956 }, { "angles_tet": [ - 20.132, - 145.06 + 20.66, + 144.93 ], "angles_trig": [ - 23.036, + 21.848, 125.82 ], "ne1d": 480, "ne2d": 2200, - "ne3d": 11579, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 6, 37, 79, 241, 508, 972, 1450, 2025, 2203, 2142, 1482, 429]", - "total_badness": 14696.222297 + "ne3d": 9786, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 34, 96, 223, 474, 870, 1287, 1671, 1844, 1743, 1220, 314]", + "total_badness": 12506.441418 }, { "angles_tet": [ - 20.751, - 144.48 + 21.073, + 143.43 ], "angles_trig": [ 20.259, @@ -2129,71 +2129,71 @@ ], "ne1d": 820, "ne2d": 6174, - "ne3d": 68319, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 13, 57, 176, 519, 1477, 3598, 7004, 10873, 14367, 15055, 11494, 3682]", - "total_badness": 83579.590629 + "ne3d": 53126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 10, 50, 164, 402, 1067, 2405, 4682, 7754, 10857, 12296, 10143, 3294]", + "total_badness": 64419.90251 } ], "plane.stl": [ { "angles_tet": [ - 1.2146, + 1.2182, 170.22 ], "angles_trig": [ - 1.8906, - 147.74 + 1.8555, + 148.54 ], "ne1d": 892, - "ne2d": 2226, - "ne3d": 7016, - "quality_histogram": "[3, 12, 31, 39, 43, 61, 53, 62, 97, 110, 236, 389, 555, 829, 983, 1053, 1003, 852, 486, 119]", - "total_badness": 10717.291909 + "ne2d": 2220, + "ne3d": 6353, + "quality_histogram": "[4, 9, 34, 34, 43, 54, 51, 62, 96, 128, 246, 338, 551, 714, 899, 958, 936, 708, 385, 103]", + "total_badness": 9830.4969118 }, { "angles_tet": [ - 1.6463, - 171.19 + 1.3667, + 170.92 ], "angles_trig": [ 1.7241, 168.81 ], "ne1d": 572, - "ne2d": 748, - "ne3d": 932, - "quality_histogram": "[2, 29, 56, 54, 80, 83, 65, 78, 62, 79, 75, 65, 56, 52, 34, 28, 18, 10, 4, 2]", - "total_badness": 3148.0282985 + "ne2d": 742, + "ne3d": 959, + "quality_histogram": "[2, 21, 50, 69, 85, 99, 78, 82, 76, 76, 57, 54, 65, 52, 36, 25, 15, 12, 4, 1]", + "total_badness": 3180.1990985 }, { "angles_tet": [ 1.1094, - 171.74 + 172.05 ], "angles_trig": [ - 3.1957, - 172.05 + 3.4703, + 156.24 ], "ne1d": 724, "ne2d": 1340, - "ne3d": 2375, - "quality_histogram": "[2, 17, 32, 56, 42, 52, 55, 65, 90, 131, 177, 192, 236, 274, 291, 265, 213, 124, 54, 7]", - "total_badness": 4744.9473584 + "ne3d": 2199, + "quality_histogram": "[3, 12, 30, 54, 49, 61, 53, 72, 84, 127, 177, 184, 234, 256, 262, 206, 179, 101, 48, 7]", + "total_badness": 4491.5892664 }, { "angles_tet": [ 1.2337, - 165.93 + 165.94 ], "angles_trig": [ - 1.932, - 150.35 + 3.4703, + 149.13 ], "ne1d": 956, - "ne2d": 2328, - "ne3d": 7371, - "quality_histogram": "[3, 8, 27, 48, 50, 50, 51, 60, 73, 92, 154, 275, 478, 757, 1051, 1198, 1207, 995, 647, 147]", - "total_badness": 10885.708005 + "ne2d": 2330, + "ne3d": 6152, + "quality_histogram": "[3, 9, 26, 42, 39, 53, 62, 67, 77, 120, 158, 230, 393, 629, 835, 972, 1018, 839, 453, 127]", + "total_badness": 9316.7375577 }, { "angles_tet": [ @@ -2202,127 +2202,127 @@ ], "angles_trig": [ 4.1049, - 148.28 + 144.93 ], "ne1d": 1554, "ne2d": 5646, - "ne3d": 29373, - "quality_histogram": "[2, 6, 10, 11, 20, 49, 62, 47, 81, 131, 233, 473, 1030, 2096, 3516, 4912, 6007, 5650, 3941, 1096]", - "total_badness": 37671.804771 + "ne3d": 23496, + "quality_histogram": "[2, 5, 10, 10, 20, 55, 63, 51, 78, 136, 198, 405, 840, 1576, 2705, 3890, 4717, 4583, 3248, 904]", + "total_badness": 30261.471634 }, { "angles_tet": [ - 1.2313, - 163.56 + 1.2319, + 163.57 ], "angles_trig": [ - 1.2728, - 155.0 + 1.2732, + 154.91 ], "ne1d": 2992, "ne2d": 22730, - "ne3d": 271701, - "quality_histogram": "[4, 8, 13, 10, 12, 24, 23, 53, 88, 211, 645, 1879, 5291, 12837, 26732, 43337, 57290, 61716, 46823, 14705]", - "total_badness": 331770.62487 + "ne3d": 206422, + "quality_histogram": "[4, 6, 13, 10, 14, 19, 26, 63, 87, 165, 481, 1163, 3333, 7807, 16722, 29390, 42845, 50235, 40650, 13389]", + "total_badness": 249062.5796 } ], "revolution.geo": [ { "angles_tet": [ - 18.192, - 146.62 + 15.496, + 150.31 ], "angles_trig": [ - 16.784, - 125.93 + 17.613, + 132.44 ], "ne1d": 320, "ne2d": 2790, - "ne3d": 7801, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 19, 85, 222, 383, 609, 790, 928, 1072, 1122, 1033, 869, 535, 133]", - "total_badness": 11028.386222 + "ne3d": 7109, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 44, 120, 242, 448, 598, 736, 862, 895, 957, 916, 720, 473, 93]", + "total_badness": 10273.473799 }, { "angles_tet": [ - 15.884, - 148.19 + 17.504, + 138.44 ], "angles_trig": [ - 16.462, - 128.75 + 16.273, + 128.52 ], "ne1d": 160, "ne2d": 658, - "ne3d": 1014, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 10, 39, 45, 86, 105, 135, 148, 143, 94, 77, 55, 39, 27, 10]", - "total_badness": 1687.852505 + "ne3d": 969, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 11, 38, 67, 99, 115, 151, 138, 110, 85, 50, 39, 36, 24, 6]", + "total_badness": 1667.032894 }, { "angles_tet": [ - 19.465, - 143.15 + 17.869, + 147.84 ], "angles_trig": [ - 21.41, - 127.26 + 17.577, + 134.89 ], "ne1d": 240, "ne2d": 1584, - "ne3d": 3587, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 53, 114, 213, 346, 472, 525, 493, 421, 409, 290, 188, 56]", - "total_badness": 5235.8043244 + "ne3d": 3411, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 11, 53, 110, 240, 368, 463, 499, 461, 406, 324, 266, 163, 45]", + "total_badness": 5043.717387 }, { "angles_tet": [ - 16.533, - 145.17 + 17.675, + 149.89 ], "angles_trig": [ - 16.65, - 126.12 + 17.528, + 134.16 ], "ne1d": 320, "ne2d": 2790, - "ne3d": 7588, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 3, 53, 130, 283, 474, 732, 845, 1029, 1136, 1138, 955, 650, 157]", - "total_badness": 10417.772443 + "ne3d": 6651, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 28, 97, 207, 395, 531, 662, 765, 862, 919, 864, 740, 472, 108]", + "total_badness": 9492.8483553 }, { "angles_tet": [ - 19.966, - 146.33 + 22.077, + 144.94 ], "angles_trig": [ - 22.508, - 127.48 + 19.919, + 132.01 ], "ne1d": 480, "ne2d": 6314, - "ne3d": 31852, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 10, 39, 160, 534, 1078, 2215, 3774, 5529, 6417, 6291, 4543, 1258]", - "total_badness": 39852.048962 + "ne3d": 24987, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 75, 233, 687, 1234, 1928, 2962, 3929, 4665, 4833, 3480, 941]", + "total_badness": 31722.463309 }, { "angles_tet": [ - 24.204, - 141.06 + 23.899, + 141.25 ], "angles_trig": [ - 25.313, - 123.86 + 25.135, + 121.44 ], "ne1d": 800, "ne2d": 16950, - "ne3d": 198677, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 71, 314, 1001, 3314, 8614, 18130, 30449, 42143, 46676, 36551, 11409]", - "total_badness": 240440.79682 + "ne3d": 150394, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 35, 221, 760, 2295, 5639, 11946, 20906, 30456, 36938, 30789, 10404]", + "total_badness": 180339.45752 } ], "sculpture.geo": [ { "angles_tet": [ - 17.893, - 145.39 + 16.244, + 149.74 ], "angles_trig": [ 26.076, @@ -2330,9 +2330,9 @@ ], "ne1d": 192, "ne2d": 358, - "ne3d": 399, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 7, 20, 31, 46, 60, 68, 73, 56, 20, 8, 2]", - "total_badness": 577.70426627 + "ne3d": 394, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 2, 4, 7, 21, 29, 45, 59, 67, 72, 56, 19, 8, 2]", + "total_badness": 573.04023539 }, { "angles_tet": [ @@ -2366,8 +2366,8 @@ }, { "angles_tet": [ - 17.893, - 145.39 + 16.244, + 149.74 ], "angles_trig": [ 26.076, @@ -2375,9 +2375,9 @@ ], "ne1d": 192, "ne2d": 358, - "ne3d": 399, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 7, 20, 31, 46, 60, 68, 73, 56, 20, 8, 2]", - "total_badness": 577.70426673 + "ne3d": 394, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 2, 4, 7, 21, 29, 45, 59, 67, 72, 56, 19, 8, 2]", + "total_badness": 573.04023539 }, { "angles_tet": [ @@ -2390,116 +2390,116 @@ ], "ne1d": 288, "ne2d": 912, - "ne3d": 1234, - "quality_histogram": "[0, 0, 0, 0, 2, 2, 10, 23, 35, 68, 98, 124, 108, 127, 127, 127, 154, 133, 80, 16]", - "total_badness": 1875.8247719 + "ne3d": 1226, + "quality_histogram": "[0, 0, 0, 0, 2, 2, 8, 22, 36, 70, 100, 124, 113, 128, 123, 129, 149, 132, 72, 16]", + "total_badness": 1867.9891765 }, { "angles_tet": [ 16.0, - 149.5 + 149.43 ], "angles_trig": [ 17.232, - 118.94 + 119.57 ], "ne1d": 480, "ne2d": 2314, - "ne3d": 6590, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 11, 9, 20, 24, 53, 89, 214, 406, 753, 1055, 1353, 1311, 962, 325]", - "total_badness": 8284.1518654 + "ne3d": 5481, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 10, 12, 11, 27, 49, 109, 187, 336, 632, 879, 1085, 1055, 797, 286]", + "total_badness": 6926.9394256 } ], "shaft.geo": [ { "angles_tet": [ - 8.1571, - 162.65 + 11.54, + 166.59 ], "angles_trig": [ - 9.7076, - 147.95 + 12.767, + 152.23 ], "ne1d": 708, "ne2d": 1656, - "ne3d": 2629, - "quality_histogram": "[0, 0, 2, 4, 12, 13, 24, 56, 76, 149, 278, 365, 333, 240, 233, 285, 255, 188, 94, 22]", - "total_badness": 4239.9806978 + "ne3d": 2609, + "quality_histogram": "[0, 0, 0, 9, 27, 37, 48, 57, 80, 156, 230, 362, 300, 233, 232, 285, 255, 174, 101, 23]", + "total_badness": 4340.100648 }, { "angles_tet": [ - 8.5237, - 165.9 + 10.898, + 157.91 ], "angles_trig": [ 10.094, - 128.25 + 120.23 ], "ne1d": 410, "ne2d": 542, - "ne3d": 688, - "quality_histogram": "[0, 0, 0, 2, 1, 4, 6, 11, 18, 32, 41, 56, 73, 85, 81, 83, 66, 73, 43, 13]", - "total_badness": 1047.4282101 + "ne3d": 667, + "quality_histogram": "[0, 0, 0, 1, 1, 6, 4, 8, 18, 31, 32, 49, 57, 72, 72, 72, 40, 84, 60, 60]", + "total_badness": 979.60058088 }, { "angles_tet": [ - 9.2737, - 159.17 + 13.369, + 156.78 ], "angles_trig": [ - 13.813, - 149.46 + 14.807, + 149.61 ], "ne1d": 510, "ne2d": 912, - "ne3d": 1645, - "quality_histogram": "[0, 0, 0, 3, 5, 17, 16, 48, 65, 87, 108, 139, 179, 177, 238, 195, 186, 104, 53, 25]", - "total_badness": 2610.9306806 + "ne3d": 1773, + "quality_histogram": "[0, 0, 0, 0, 2, 21, 34, 63, 77, 90, 135, 161, 195, 192, 222, 216, 175, 108, 64, 18]", + "total_badness": 2865.6214541 }, { "angles_tet": [ - 13.139, - 162.65 + 11.54, + 166.59 ], "angles_trig": [ - 15.194, - 147.25 + 13.661, + 152.23 ], "ne1d": 708, "ne2d": 1656, - "ne3d": 2585, - "quality_histogram": "[0, 0, 0, 1, 4, 4, 10, 22, 43, 120, 259, 375, 332, 266, 243, 291, 287, 189, 115, 24]", - "total_badness": 3972.0391087 + "ne3d": 2496, + "quality_histogram": "[0, 0, 0, 1, 9, 3, 11, 39, 78, 158, 211, 341, 291, 258, 242, 300, 255, 187, 90, 22]", + "total_badness": 3916.6882733 }, { "angles_tet": [ 15.284, - 147.53 + 148.46 ], "angles_trig": [ - 20.193, - 122.49 + 20.071, + 124.88 ], "ne1d": 1138, "ne2d": 4104, - "ne3d": 10879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 22, 68, 162, 312, 550, 917, 1327, 1807, 2027, 1905, 1346, 433]", - "total_badness": 13982.205496 + "ne3d": 9546, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 28, 76, 174, 335, 494, 811, 1246, 1522, 1737, 1579, 1215, 325]", + "total_badness": 12378.481139 }, { "angles_tet": [ - 23.051, - 146.15 + 25.194, + 141.19 ], "angles_trig": [ - 26.463, - 118.44 + 26.218, + 120.33 ], "ne1d": 1792, "ne2d": 10502, - "ne3d": 63623, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 3, 36, 112, 441, 1261, 3055, 6105, 9988, 13378, 14460, 11103, 3679]", - "total_badness": 77412.92414 + "ne3d": 49939, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 32, 102, 299, 875, 2257, 4260, 7493, 10376, 11747, 9497, 2997]", + "total_badness": 60403.701968 } ], "sphere.geo": [ @@ -2565,33 +2565,33 @@ }, { "angles_tet": [ - 22.983, - 128.09 + 21.731, + 133.96 ], "angles_trig": [ - 22.196, - 111.76 + 22.177, + 111.5 ], "ne1d": 0, "ne2d": 256, "ne3d": 363, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 19, 33, 58, 54, 54, 32, 38, 31, 24, 12, 6]", - "total_badness": 551.13017475 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 42, 53, 45, 56, 40, 34, 30, 27, 11, 6]", + "total_badness": 551.54194668 }, { "angles_tet": [ - 30.456, - 130.64 + 26.252, + 135.65 ], "angles_trig": [ - 29.846, - 110.98 + 25.494, + 116.09 ], "ne1d": 0, "ne2d": 658, - "ne3d": 2272, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 24, 67, 135, 263, 417, 457, 440, 354, 113]", - "total_badness": 2808.9045443 + "ne3d": 1871, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 23, 65, 131, 218, 295, 389, 366, 286, 90]", + "total_badness": 2324.6823999 } ], "sphereincube.geo": [ @@ -2623,7 +2623,7 @@ "ne2d": 34, "ne3d": 79, "quality_histogram": "[0, 0, 2, 2, 10, 6, 15, 12, 9, 9, 5, 5, 1, 1, 0, 0, 2, 0, 0, 0]", - "total_badness": 239.01564453 + "total_badness": 239.01564452 }, { "angles_tet": [ @@ -2638,7 +2638,7 @@ "ne2d": 100, "ne3d": 242, "quality_histogram": "[0, 0, 6, 15, 20, 43, 45, 12, 21, 10, 21, 8, 12, 4, 4, 6, 4, 7, 3, 1]", - "total_badness": 732.39744465 + "total_badness": 732.39744461 }, { "angles_tet": [ @@ -2658,32 +2658,32 @@ { "angles_tet": [ 14.198, - 139.87 + 139.21 ], "angles_trig": [ - 16.51, - 128.49 + 16.856, + 130.65 ], "ne1d": 74, "ne2d": 412, - "ne3d": 1683, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 3, 12, 21, 29, 71, 92, 153, 214, 236, 260, 224, 186, 131, 46]", - "total_badness": 2358.043084 + "ne3d": 1469, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 4, 14, 19, 35, 47, 97, 138, 175, 212, 219, 185, 176, 116, 28]", + "total_badness": 2074.3086016 }, { "angles_tet": [ - 24.367, - 140.35 + 27.095, + 137.84 ], "angles_trig": [ - 22.231, - 124.31 + 24.237, + 119.8 ], "ne1d": 122, "ne2d": 1066, - "ne3d": 13989, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 7, 23, 83, 256, 466, 907, 1562, 2200, 2835, 2874, 2099, 676]", - "total_badness": 17429.478381 + "ne3d": 10660, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43, 130, 314, 601, 1086, 1736, 2144, 2330, 1732, 538]", + "total_badness": 13133.278179 } ], "square.in2d": [ @@ -2965,93 +2965,93 @@ "torus.geo": [ { "angles_tet": [ - 19.194, - 148.12 + 16.222, + 149.63 ], "angles_trig": [ - 19.92, - 127.08 + 16.3, + 128.3 ], "ne1d": 0, "ne2d": 2526, - "ne3d": 5587, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 75, 208, 373, 547, 678, 782, 752, 738, 585, 470, 285, 83]", - "total_badness": 8168.6605532 + "ne3d": 5259, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 8, 21, 96, 235, 434, 542, 643, 705, 671, 631, 542, 406, 252, 73]", + "total_badness": 7849.7741851 }, { "angles_tet": [ - 2.7079, - 172.97 + 2.7715, + 172.56 ], "angles_trig": [ - 4.6723, - 166.19 + 5.1767, + 165.44 ], "ne1d": 0, "ne2d": 648, - "ne3d": 3007, - "quality_histogram": "[8, 144, 319, 360, 402, 367, 276, 245, 184, 169, 139, 98, 83, 58, 46, 41, 31, 22, 10, 5]", - "total_badness": 12976.808797 + "ne3d": 3591, + "quality_histogram": "[7, 99, 277, 463, 516, 456, 339, 316, 239, 207, 166, 114, 108, 81, 65, 60, 40, 22, 16, 0]", + "total_badness": 14148.85468 }, { "angles_tet": [ - 17.153, - 145.79 + 19.703, + 139.32 ], "angles_trig": [ - 21.25, - 118.2 + 20.821, + 122.02 ], "ne1d": 0, "ne2d": 1430, - "ne3d": 2733, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 11, 39, 130, 214, 321, 436, 454, 400, 279, 240, 155, 49]", - "total_badness": 3874.9869154 + "ne3d": 2519, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 16, 62, 155, 260, 318, 383, 374, 317, 258, 186, 137, 49]", + "total_badness": 3649.6105593 }, { "angles_tet": [ - 21.147, - 145.15 + 16.948, + 148.0 ], "angles_trig": [ - 20.446, - 123.07 + 17.058, + 126.19 ], "ne1d": 0, "ne2d": 2526, - "ne3d": 5473, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 34, 119, 265, 466, 597, 763, 810, 767, 682, 534, 342, 92]", - "total_badness": 7745.4881518 + "ne3d": 4966, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 46, 172, 335, 478, 615, 629, 669, 610, 546, 485, 296, 69]", + "total_badness": 7211.0429386 }, { "angles_tet": [ - 21.754, - 144.45 + 24.543, + 140.91 ], "angles_trig": [ - 23.239, - 124.02 + 24.07, + 122.58 ], "ne1d": 0, "ne2d": 5824, - "ne3d": 25317, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 41, 114, 347, 765, 1598, 2782, 4135, 5379, 5234, 3786, 1126]", - "total_badness": 31434.764854 + "ne3d": 20486, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 42, 154, 470, 959, 1582, 2370, 3177, 3804, 3967, 3038, 921]", + "total_badness": 25818.784377 }, { "angles_tet": [ - 21.699, - 145.02 + 23.266, + 139.23 ], "angles_trig": [ - 23.154, - 120.78 + 25.162, + 124.18 ], "ne1d": 0, "ne2d": 16198, - "ne3d": 174686, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 58, 234, 858, 2518, 6918, 15184, 26272, 37074, 41964, 33110, 10491]", - "total_badness": 210586.77039 + "ne3d": 132598, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 35, 203, 607, 1786, 4546, 9911, 18029, 26777, 32913, 28265, 9522]", + "total_badness": 158396.27588 } ], "trafo.geo": [ @@ -3062,13 +3062,13 @@ ], "angles_trig": [ 14.916, - 132.02 + 130.79 ], "ne1d": 690, "ne2d": 1662, - "ne3d": 5132, - "quality_histogram": "[0, 0, 1, 0, 2, 12, 24, 42, 108, 200, 269, 367, 431, 571, 685, 733, 586, 527, 446, 128]", - "total_badness": 7423.4819931 + "ne3d": 4993, + "quality_histogram": "[0, 0, 1, 0, 1, 12, 24, 42, 104, 208, 261, 358, 446, 538, 653, 688, 584, 516, 431, 126]", + "total_badness": 7234.6713061 }, { "angles_tet": [ @@ -3081,9 +3081,9 @@ ], "ne1d": 390, "ne2d": 516, - "ne3d": 1342, - "quality_histogram": "[0, 1, 5, 13, 16, 44, 80, 117, 122, 153, 159, 135, 123, 113, 85, 80, 54, 28, 11, 3]", - "total_badness": 2768.1650274 + "ne3d": 1332, + "quality_histogram": "[0, 1, 5, 13, 16, 44, 80, 117, 127, 149, 156, 138, 121, 106, 86, 80, 52, 27, 11, 3]", + "total_badness": 2755.5110729 }, { "angles_tet": [ @@ -3096,9 +3096,9 @@ ], "ne1d": 512, "ne2d": 864, - "ne3d": 2363, - "quality_histogram": "[0, 0, 0, 3, 9, 11, 42, 63, 119, 151, 184, 204, 316, 393, 341, 237, 138, 87, 42, 23]", - "total_badness": 3893.8304292 + "ne3d": 2356, + "quality_histogram": "[0, 0, 0, 3, 9, 13, 43, 64, 120, 145, 190, 205, 312, 384, 344, 235, 134, 88, 43, 24]", + "total_badness": 3889.567942 }, { "angles_tet": [ @@ -3107,13 +3107,13 @@ ], "angles_trig": [ 14.916, - 132.02 + 130.79 ], "ne1d": 690, "ne2d": 1662, - "ne3d": 5067, - "quality_histogram": "[0, 0, 1, 0, 1, 8, 17, 35, 109, 188, 260, 357, 413, 536, 678, 734, 604, 538, 451, 137]", - "total_badness": 7266.2053478 + "ne3d": 4895, + "quality_histogram": "[0, 0, 1, 0, 1, 7, 20, 38, 102, 204, 242, 344, 426, 519, 643, 703, 569, 514, 435, 127]", + "total_badness": 7049.258721 }, { "angles_tet": [ @@ -3126,41 +3126,41 @@ ], "ne1d": 1050, "ne2d": 3670, - "ne3d": 17479, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 13, 27, 55, 173, 512, 1412, 2098, 2269, 2479, 2612, 2725, 2398, 704]", - "total_badness": 22725.68654 + "ne3d": 15310, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 13, 27, 60, 163, 450, 1302, 1909, 2002, 2169, 2215, 2318, 2083, 597]", + "total_badness": 19985.425031 }, { "angles_tet": [ - 13.821, - 149.28 + 14.338, + 149.48 ], "angles_trig": [ - 19.234, + 19.874, 128.69 ], "ne1d": 1722, "ne2d": 9990, - "ne3d": 84843, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 47, 1412, 705, 384, 688, 1183, 2414, 5544, 8737, 13008, 16461, 17017, 12962, 4277]", - "total_badness": 108418.01981 + "ne3d": 69009, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 49, 1398, 718, 359, 607, 997, 1786, 4101, 6360, 9955, 13187, 14433, 11280, 3777]", + "total_badness": 88274.805093 } ], "twobricks.geo": [ { "angles_tet": [ - 26.301, - 137.72 + 29.453, + 134.56 ], "angles_trig": [ - 24.205, - 111.42 + 26.574, + 91.538 ], "ne1d": 72, "ne2d": 50, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 5, 4, 14, 7, 6, 3, 1, 0, 0]", - "total_badness": 70.226764001 + "ne3d": 36, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 18, 2, 4, 0, 0, 0, 0]", + "total_badness": 55.618194358 }, { "angles_tet": [ @@ -3194,37 +3194,37 @@ }, { "angles_tet": [ - 26.301, - 137.72 + 29.453, + 134.56 ], "angles_trig": [ - 24.205, - 111.42 + 26.574, + 91.538 ], "ne1d": 72, "ne2d": 50, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 5, 4, 14, 7, 6, 3, 1, 0, 0]", - "total_badness": 70.226762635 + "ne3d": 36, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 18, 2, 4, 0, 0, 0, 0]", + "total_badness": 55.618194358 }, { "angles_tet": [ - 23.292, - 131.34 + 24.096, + 132.78 ], "angles_trig": [ 27.682, - 108.04 + 109.77 ], "ne1d": 116, "ne2d": 132, - "ne3d": 174, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 10, 12, 17, 36, 23, 30, 18, 15, 8]", - "total_badness": 232.20307583 + "ne3d": 167, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 13, 9, 17, 36, 21, 29, 17, 14, 7]", + "total_badness": 223.72156428 }, { "angles_tet": [ - 28.202, + 26.164, 131.83 ], "angles_trig": [ @@ -3233,26 +3233,26 @@ ], "ne1d": 186, "ne2d": 330, - "ne3d": 561, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 22, 35, 52, 81, 98, 100, 102, 55, 12]", - "total_badness": 726.84401009 + "ne3d": 548, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 38, 50, 82, 90, 102, 102, 51, 11]", + "total_badness": 709.67012072 } ], "twocubes.geo": [ { "angles_tet": [ - 26.301, - 137.72 + 29.453, + 134.56 ], "angles_trig": [ - 24.205, - 111.42 + 26.574, + 91.538 ], "ne1d": 72, "ne2d": 50, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 5, 4, 14, 7, 6, 3, 1, 0, 0]", - "total_badness": 70.226764001 + "ne3d": 36, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 18, 2, 4, 0, 0, 0, 0]", + "total_badness": 55.618194358 }, { "angles_tet": [ @@ -3286,37 +3286,37 @@ }, { "angles_tet": [ - 26.301, - 137.72 + 29.453, + 134.56 ], "angles_trig": [ - 24.205, - 111.42 + 26.574, + 91.538 ], "ne1d": 72, "ne2d": 50, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 5, 4, 14, 7, 6, 3, 1, 0, 0]", - "total_badness": 70.226762635 + "ne3d": 36, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 18, 2, 4, 0, 0, 0, 0]", + "total_badness": 55.618194358 }, { "angles_tet": [ - 23.292, - 131.34 + 24.096, + 132.78 ], "angles_trig": [ 27.682, - 108.04 + 109.77 ], "ne1d": 116, "ne2d": 132, - "ne3d": 174, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 10, 12, 17, 36, 23, 30, 18, 15, 8]", - "total_badness": 232.20307583 + "ne3d": 167, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 13, 9, 17, 36, 21, 29, 17, 14, 7]", + "total_badness": 223.72156428 }, { "angles_tet": [ - 28.202, + 26.164, 131.83 ], "angles_trig": [ @@ -3325,41 +3325,41 @@ ], "ne1d": 186, "ne2d": 330, - "ne3d": 561, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 22, 35, 52, 81, 98, 100, 102, 55, 12]", - "total_badness": 726.84401009 + "ne3d": 548, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 38, 50, 82, 90, 102, 102, 51, 11]", + "total_badness": 709.67012072 } ], "twocyl.geo": [ { "angles_tet": [ - 17.425, - 151.3 + 18.71, + 143.19 ], "angles_trig": [ - 21.178, - 117.72 + 21.37, + 119.53 ], "ne1d": 144, "ne2d": 408, - "ne3d": 577, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 9, 16, 24, 56, 67, 84, 115, 83, 63, 36, 11, 6]", - "total_badness": 849.57493713 + "ne3d": 568, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 7, 23, 29, 54, 63, 93, 104, 78, 63, 33, 16, 0]", + "total_badness": 840.05938749 }, { "angles_tet": [ - 19.604, - 153.38 + 18.044, + 148.8 ], "angles_trig": [ - 25.599, - 115.69 + 21.63, + 119.03 ], "ne1d": 68, "ne2d": 98, - "ne3d": 138, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 6, 8, 8, 17, 22, 22, 25, 15, 7, 2]", - "total_badness": 193.53502944 + "ne3d": 120, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 4, 8, 14, 6, 12, 4, 13, 10, 11, 15, 17, 3, 1]", + "total_badness": 193.19570482 }, { "angles_tet": [ @@ -3367,59 +3367,59 @@ 161.08 ], "angles_trig": [ - 11.495, - 149.57 + 13.77, + 138.15 ], "ne1d": 102, "ne2d": 234, - "ne3d": 412, - "quality_histogram": "[0, 0, 0, 1, 7, 7, 15, 28, 44, 24, 19, 33, 36, 36, 36, 28, 56, 26, 12, 4]", - "total_badness": 744.59871397 + "ne3d": 431, + "quality_histogram": "[0, 0, 0, 0, 5, 11, 17, 27, 44, 29, 15, 24, 36, 41, 37, 38, 61, 32, 12, 2]", + "total_badness": 764.91980689 }, { "angles_tet": [ - 17.51, - 141.43 + 20.964, + 136.15 ], "angles_trig": [ - 21.505, - 117.52 + 21.946, + 111.07 ], "ne1d": 144, "ne2d": 408, - "ne3d": 575, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 7, 10, 20, 57, 65, 76, 116, 90, 74, 40, 14, 2]", - "total_badness": 830.26839459 + "ne3d": 565, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 11, 31, 40, 67, 86, 118, 92, 59, 48, 8, 0]", + "total_badness": 814.48177255 }, { "angles_tet": [ - 20.993, - 137.7 + 19.587, + 141.43 ], "angles_trig": [ - 22.158, - 117.49 + 20.612, + 120.68 ], "ne1d": 214, "ne2d": 904, - "ne3d": 1847, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 28, 77, 127, 199, 270, 350, 335, 247, 164, 41]", - "total_badness": 2434.6179175 + "ne3d": 1687, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 17, 23, 82, 133, 171, 267, 295, 262, 238, 160, 34]", + "total_badness": 2245.8031773 }, { "angles_tet": [ - 21.528, - 142.94 + 24.217, + 137.42 ], "angles_trig": [ - 26.329, - 116.56 + 23.842, + 128.3 ], "ne1d": 350, "ne2d": 2358, - "ne3d": 13357, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 23, 78, 239, 564, 1230, 2137, 2846, 3149, 2364, 721]", - "total_badness": 16204.662169 + "ne3d": 10723, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 17, 64, 177, 444, 931, 1609, 2183, 2523, 2108, 661]", + "total_badness": 12938.174838 } ] } \ No newline at end of file diff --git a/tests/pytest/test_nonnative_master b/tests/pytest/test_nonnative_master new file mode 100644 index 00000000..711623bb --- /dev/null +++ b/tests/pytest/test_nonnative_master @@ -0,0 +1,93 @@ +tstart (must be vertically): (0, 1.82574) +tend (must be vertically): (0, -1.82574) +sin (must not be 0) = 0.447214sin (must not be 0) = 0.447214tstart (must be vertically): (0, 1.82574) +tend (must be vertically): (0, -1.82574) +sin (must not be 0) = 0.447214sin (must not be 0) = 0.447214tstart (must be vertically): (0, 1.82574) +tend (must be vertically): (0, -1.82574) +sin (must not be 0) = 0.447214sin (must not be 0) = 0.447214tstart (must be vertically): (0, 1.82574) +tend (must be vertically): (0, -1.82574) +sin (must not be 0) = 0.447214sin (must not be 0) = 0.447214tstart (must be vertically): (0, 1.82574) +tend (must be vertically): (0, -1.82574) +sin (must not be 0) = 0.447214sin (must not be 0) = 0.447214tstart (must be vertically): (0, 1.82574) +tend (must be vertically): (0, -1.82574) +generate boundarycondition.geo +needed 0.12342000007629395 seconds +generate boxcyl.geo +needed 0.801245927810669 seconds +generate circle_on_cube.geo +needed 0.48620080947875977 seconds +generate cone.geo +needed 1.186929702758789 seconds +generate cube.geo +needed 0.09043073654174805 seconds +generate cubeandring.geo +needed 2.1420021057128906 seconds +generate cubeandspheres.geo +needed 0.26427721977233887 seconds +generate cubemcyl.geo +needed 18.373886108398438 seconds +generate cubemsphere.geo +needed 3.6954052448272705 seconds +generate cylinder.geo +needed 0.44164204597473145 seconds +generate cylsphere.geo +needed 0.8774328231811523 seconds +generate ellipsoid.geo +needed 1.4510962963104248 seconds +generate ellipticcone.geo +needed 3.0906074047088623 seconds +generate ellipticcyl.geo +needed 2.0780415534973145 seconds +generate extrusion.geo +needed 0.40680599212646484 seconds +generate fichera.geo +needed 0.1265270709991455 seconds +generate hinge.stl +needed 5.519087553024292 seconds +generate lense.in2d +needed 0.05641365051269531 seconds +generate lshape3d.geo +needed 0.09937620162963867 seconds +generate manyholes.geo +needed 9.43863034248352 seconds +generate manyholes2.geo +needed 7.40019965171814 seconds +generate matrix.geo +needed 3.734792709350586 seconds +generate ortho.geo +needed 0.09516167640686035 seconds +generate part1.stl +needed 2.6940107345581055 seconds +generate period.geo +needed 2.709449291229248 seconds +generate revolution.geo +needed 7.7064368724823 seconds +generate sculpture.geo +needed 0.6283819675445557 seconds +generate shaft.geo +needed 2.921243190765381 seconds +generate shell.geo +generate sphere.geo +needed 0.18424725532531738 seconds +generate sphereincube.geo +needed 0.6060984134674072 seconds +generate square.in2d +needed 0.021883487701416016 seconds +generate squarecircle.in2d +needed 0.04081606864929199 seconds +generate squarehole.in2d +needed 0.03681302070617676 seconds +generate torus.geo +needed 6.590093612670898 seconds +generate trafo.geo +needed 3.2712368965148926 seconds +generate twobricks.geo +needed 0.13849091529846191 seconds +generate twocubes.geo +needed 0.13361692428588867 seconds +generate twocyl.geo +needed 0.8036918640136719 seconds +generate plane.stl +needed 15.712460041046143 seconds +done +sin (must not be 0) = 0.447214sin (must not be 0) = 0.447214 \ No newline at end of file diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index e7c4d81a..f6e3c6df 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -72,6 +72,8 @@ def getMeshingparameters(filename): return standard[:-1] if filename == "screw.step": return standard[3:] # coarser meshes don't work here + if filename == "cylinder.geo": + return standard[0:-1] # very fine gives inconsistent reults if filename == "cylsphere.geo": return standard[0:2] + standard[3:] # coarse gives inconsistent reults (other mesh on MacOS) if filename == "part1.stl":