From c466fe8d07980ea6d1b19ab7f5eb4c965d453f13 Mon Sep 17 00:00:00 2001 From: Joachim Schoeberl Date: Fri, 27 Dec 2024 10:51:58 +0100 Subject: [PATCH] more PointIndex --- libsrc/meshing/classifyhpel.hpp | 94 ++++++++++++++++----------------- libsrc/meshing/delaunay2d.cpp | 49 +++++++++-------- libsrc/meshing/delaunay2d.hpp | 10 ++-- libsrc/meshing/hprefinement.cpp | 6 +-- libsrc/meshing/meshtype.hpp | 1 + 5 files changed, 82 insertions(+), 78 deletions(-) diff --git a/libsrc/meshing/classifyhpel.hpp b/libsrc/meshing/classifyhpel.hpp index ae66fe02..d4f86f69 100644 --- a/libsrc/meshing/classifyhpel.hpp +++ b/libsrc/meshing/classifyhpel.hpp @@ -1,6 +1,6 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint) { int ep1(0), ep2(0), ep3(0), ep4(0), cp1(0), cp2(0), cp3(0), cp4(0), fp1, fp2, fp3, fp4; int isedge1(0), isedge2(0), isedge3(0), isedge4(0), isedge5(0), isedge6(0); @@ -56,12 +56,12 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges cp3 = cornerpoint.Test (el.pnums[pi3]); cp4 = cornerpoint.Test (el.pnums[pi4]); - isedge1 = edges.Used (INDEX_2::Sort (el.pnums[j], el.pnums[k])); - isedge2 = edges.Used (INDEX_2::Sort (el.pnums[j], el.pnums[pi3])); - isedge3 = edges.Used (INDEX_2::Sort (el.pnums[j], el.pnums[pi4])); - isedge4 = edges.Used (INDEX_2::Sort (el.pnums[k], el.pnums[pi3])); - isedge5 = edges.Used (INDEX_2::Sort (el.pnums[k], el.pnums[pi4])); - isedge6 = edges.Used (INDEX_2::Sort (el.pnums[pi3], el.pnums[pi4])); + isedge1 = edges.Used (PointIndices<2>::Sort (el.pnums[j], el.pnums[k])); + isedge2 = edges.Used (PointIndices<2>::Sort (el.pnums[j], el.pnums[pi3])); + isedge3 = edges.Used (PointIndices<2>::Sort (el.pnums[j], el.pnums[pi4])); + isedge4 = edges.Used (PointIndices<2>::Sort (el.pnums[k], el.pnums[pi3])); + isedge5 = edges.Used (PointIndices<2>::Sort (el.pnums[k], el.pnums[pi4])); + isedge6 = edges.Used (PointIndices<2>::Sort (el.pnums[pi3], el.pnums[pi4])); if (debug) { @@ -76,13 +76,13 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges for (int j = 0; j < 4; j++) isface[j] = false; for (int l = 0; l < 4; l++) { - INDEX_3 i3(0,0,0); + PointIndices<3> i3(PointIndex::INVALID, PointIndex::INVALID, PointIndex::INVALID); switch (l) { - case 0: i3.I1() = el.pnums[k]; i3.I2() = el.pnums[pi3]; i3.I3() = el.pnums[pi4]; break; - case 1: i3.I1() = el.pnums[j]; i3.I2() = el.pnums[pi3]; i3.I3() = el.pnums[pi4]; break; - case 2: i3.I1() = el.pnums[j]; i3.I2() = el.pnums[k]; i3.I3() = el.pnums[pi4]; break; - case 3: i3.I1() = el.pnums[j]; i3.I2() = el.pnums[k]; i3.I3() = el.pnums[pi3]; break; + case 0: i3[0] = el.pnums[k]; i3[1] = el.pnums[pi3]; i3[2] = el.pnums[pi4]; break; + case 1: i3[0] = el.pnums[j]; i3[1] = el.pnums[pi3]; i3[2] = el.pnums[pi4]; break; + case 2: i3[0] = el.pnums[j]; i3[1] = el.pnums[k]; i3[2] = el.pnums[pi4]; break; + case 3: i3[0] = el.pnums[j]; i3[1] = el.pnums[k]; i3[2] = el.pnums[pi3]; break; } i3.Sort(); if (faces.Used (i3)) @@ -102,15 +102,15 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges isfedge1 = isfedge2 = isfedge3 = isfedge4 = isfedge5 = isfedge6 = 0; for (int l = 0; l < 6; l++) { - INDEX_2 i2(0,0); + PointIndices<2> i2(PointIndex::INVALID, PointIndex::INVALID); switch (l) { - case 0: i2.I1() = el.pnums[j]; i2.I2() = el[k]; break; - case 1: i2.I1() = el.pnums[j]; i2.I2() = el.pnums[pi3]; break; - case 2: i2.I1() = el.pnums[j]; i2.I2() = el.pnums[pi4]; break; - case 3: i2.I1() = el.pnums[k]; i2.I2() = el.pnums[pi3]; break; - case 4: i2.I1() = el.pnums[k]; i2.I2() = el.pnums[pi4]; break; - case 5: i2.I1() = el.pnums[pi3]; i2.I2() = el.pnums[pi4]; break; + case 0: i2[0] = el.pnums[j]; i2[1] = el[k]; break; + case 1: i2[0] = el.pnums[j]; i2[1] = el.pnums[pi3]; break; + case 2: i2[0] = el.pnums[j]; i2[1] = el.pnums[pi4]; break; + case 3: i2[0] = el.pnums[k]; i2[1] = el.pnums[pi3]; break; + case 4: i2[0] = el.pnums[k]; i2[1] = el.pnums[pi4]; break; + case 5: i2[0] = el.pnums[pi3]; i2[1] = el.pnums[pi4]; break; } i2.Sort(); if (face_edges.Used (i2)) @@ -142,7 +142,7 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges fp1 = fp2 = fp3 = fp4 = 0; for (int l = 0; l < 4; l++) { - int pti(0); + PointIndex pti = PointIndex::INVALID; switch (l) { case 0: pti = el.pnums[j]; break; @@ -548,7 +548,7 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges if (type != HP_NONE) { - int pnums[4]; + PointIndex pnums[4]; pnums[0] = el.pnums[j]; pnums[1] = el.pnums[k]; pnums[2] = el.pnums[pi3]; @@ -588,7 +588,7 @@ HPREF_ELEMENT_TYPE ClassifyTet(HPRefElement & el, INDEX_2_HASHTABLE & edges HPREF_ELEMENT_TYPE ClassifyPrism(HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint) { HPREF_ELEMENT_TYPE type = HP_NONE; @@ -622,7 +622,7 @@ HPREF_ELEMENT_TYPE ClassifyPrism(HPRefElement & el, INDEX_2_HASHTABLE & edg const ELEMENT_EDGE * eledges = MeshTopology::GetEdges1 (PRISM); for(int k=0;k<9;k++) { - INDEX_2 i2 = INDEX_2 :: Sort(el.PNum(p[eledges[k][0]-1]),el.PNum(p[eledges[k][1]-1])); + PointIndices<2> i2 = PointIndices<2> :: Sort(el.PNum(p[eledges[k][0]-1]),el.PNum(p[eledges[k][1]-1])); if (edges.Used(i2)) edge_sing[k] = 2; else edge_sing[k] = face_edges.Used(i2); } @@ -630,16 +630,17 @@ HPREF_ELEMENT_TYPE ClassifyPrism(HPRefElement & el, INDEX_2_HASHTABLE & edg const ELEMENT_FACE * elfaces = MeshTopology::GetFaces1 (PRISM); for (int k=0;k<5;k++) { - INDEX_3 i3; + PointIndices<3> i3; if(k<2) - i3 = INDEX_3::Sort(el.pnums[p[elfaces[k][0]-1]-1], el.pnums[p[elfaces[k][1]-1]-1], - el.pnums[p[elfaces[k][2]-1]-1]); + i3 = PointIndices<3>::Sort(el.pnums[p[elfaces[k][0]-1]-1], el.pnums[p[elfaces[k][1]-1]-1], + el.pnums[p[elfaces[k][2]-1]-1]); else { - INDEX_4 i4 = INDEX_4(el.pnums[p[elfaces[k][0]-1]-1], el.pnums[p[elfaces[k][1]-1]-1], el.pnums[p[elfaces[k][2]-1]-1],el.pnums[p[elfaces[k][3]-1]-1]); + PointIndices<4> i4 (el.pnums[p[elfaces[k][0]-1]-1], el.pnums[p[elfaces[k][1]-1]-1], + el.pnums[p[elfaces[k][2]-1]-1],el.pnums[p[elfaces[k][3]-1]-1]); i4.Sort(); - i3 = INDEX_3(i4.I1(), i4.I2(), i4.I3()); + i3 = PointIndices<3>(i4[0], i4[1], i4[2]); } if (faces.Used (i3)) @@ -809,7 +810,7 @@ HPREF_ELEMENT_TYPE ClassifyPrism(HPRefElement & el, INDEX_2_HASHTABLE & edg if(type != HP_NONE) { - int pnums[6]; + PointIndex pnums[6]; for(int j=0;j<6;j++) pnums[j] = el.PNum (p[j]); for(int k=0;k<6;k++) el.pnums[k] = pnums[k]; } @@ -825,15 +826,15 @@ HPREF_ELEMENT_TYPE ClassifyPrism(HPRefElement & el, INDEX_2_HASHTABLE & edg // #ifdef SABINE HPREF_ELEMENT_TYPE ClassifyTrig(HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint, int dim, const FaceDescriptor & fd) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint, int dim, const FaceDescriptor & fd) { HPREF_ELEMENT_TYPE type = HP_NONE; - int pnums[3]; + PointIndex pnums[3]; int p[3]; - INDEX_3 i3 (el.pnums[0], el.pnums[1], el.pnums[2]); + PointIndices<3> i3 (el.pnums[0], el.pnums[1], el.pnums[2]); i3.Sort(); bool sing_face = faces.Used (i3); @@ -882,7 +883,7 @@ HPREF_ELEMENT_TYPE ClassifyTrig(HPRefElement & el, INDEX_2_HASHTABLE & edge { int ep1=p[eledges[k][0]-1]; int ep2=p[eledges[k][1]-1]; - INDEX_2 i2(el.PNum(ep1),el.PNum(ep2)); + PointIndices<2> i2(el.PNum(ep1),el.PNum(ep2)); if(edges.Used(i2)) { @@ -925,7 +926,7 @@ HPREF_ELEMENT_TYPE ClassifyTrig(HPRefElement & el, INDEX_2_HASHTABLE & edge int ep1=p[eledges[k][0]-1]; int ep2=p[eledges[k][1]-1]; - INDEX_2 i2 = INDEX_2::Sort(el.PNum(ep1),el.PNum(ep2)); + PointIndices<2> i2 = PointIndices<2>::Sort(el.PNum(ep1),el.PNum(ep2)); if(edges.Used(i2)) { @@ -950,8 +951,8 @@ HPREF_ELEMENT_TYPE ClassifyTrig(HPRefElement & el, INDEX_2_HASHTABLE & edge (dim==3 || edgepoint_dom.Used(INDEX_2(fd.SurfNr(),pnums[k])) || edgepoint_dom.Used(INDEX_2(-1,pnums[k])))) //edgepoint, but not member of sing_edge on trig -> cp { - INDEX_2 i2a=INDEX_2::Sort(el.PNum(p[k]), el.PNum(p[(k+1)%3])); - INDEX_2 i2b=INDEX_2::Sort(el.PNum(p[k]), el.PNum(p[(k+2)%3])); + PointIndices<2> i2a = PointIndices<2>::Sort(el.PNum(p[k]), el.PNum(p[(k+1)%3])); + PointIndices<2> i2b = PointIndices<2>::Sort(el.PNum(p[k]), el.PNum(p[(k+2)%3])); if(!edges.Used(i2a) && !edges.Used(i2b)) point_sing[p[k]-1] = 3; @@ -1302,7 +1303,7 @@ HPREF_ELEMENT_TYPE ClassifyTrig(HPRefElement & el, INDEX_2_HASHTABLE & edge #endif HPREF_ELEMENT_TYPE ClassifyQuad(HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint, int dim, const FaceDescriptor & fd) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint, int dim, const FaceDescriptor & fd) { HPREF_ELEMENT_TYPE type = HP_NONE; @@ -1320,10 +1321,10 @@ HPREF_ELEMENT_TYPE ClassifyQuad(HPRefElement & el, INDEX_2_HASHTABLE & edge if (dim == 2) { - ep1 = edgepoint_dom.Used (INDEX_2 (el.GetIndex(), el.PNumMod(j))); - ep2 = edgepoint_dom.Used (INDEX_2 (el.GetIndex(), el.PNumMod(j+1))); - ep3 = edgepoint_dom.Used (INDEX_2 (el.GetIndex(), el.PNumMod(j+2))); - ep4 = edgepoint_dom.Used (INDEX_2 (el.GetIndex(), el.PNumMod(j+3))); + ep1 = edgepoint_dom.Used (PointIndices<2>(el.GetIndex(), el.PNumMod(j))); + ep2 = edgepoint_dom.Used (PointIndices<2>(el.GetIndex(), el.PNumMod(j+1))); + ep3 = edgepoint_dom.Used (PointIndices<2>(el.GetIndex(), el.PNumMod(j+2))); + ep4 = edgepoint_dom.Used (PointIndices<2>(el.GetIndex(), el.PNumMod(j+3))); } cp1 = cornerpoint.Test (el.PNumMod (j)); @@ -1351,8 +1352,7 @@ HPREF_ELEMENT_TYPE ClassifyQuad(HPRefElement & el, INDEX_2_HASHTABLE & edge if(dim ==3) { - INDEX_2 i2; - i2 = INDEX_2(el.PNumMod (j), el.PNumMod (j+1)); + PointIndices<2> i2 = PointIndices<2>(el.PNumMod (j), el.PNumMod (j+1)); // i2.Sort(); isedge1 = edges.Used (i2); i2.Sort(); @@ -1652,7 +1652,7 @@ HPREF_ELEMENT_TYPE ClassifyQuad(HPRefElement & el, INDEX_2_HASHTABLE & edge HPREF_ELEMENT_TYPE ClassifyHex(HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint) { HPREF_ELEMENT_TYPE type = HP_NONE; @@ -1758,7 +1758,7 @@ HPREF_ELEMENT_TYPE ClassifyHex(HPRefElement & el, INDEX_2_HASHTABLE & edges HPREF_ELEMENT_TYPE ClassifyHex7 (HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint) { // HPREF_ELEMENT_TYPE type = HP_NONE; @@ -1798,7 +1798,7 @@ HPREF_ELEMENT_TYPE ClassifyHex7 (HPRefElement & el, INDEX_2_HASHTABLE & edg HPREF_ELEMENT_TYPE ClassifySegm(HPRefElement & hpel, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint) { int cp1 = cornerpoint.Test (hpel[0]); @@ -1842,7 +1842,7 @@ HPREF_ELEMENT_TYPE ClassifySegm(HPRefElement & hpel, INDEX_2_HASHTABLE & ed HPREF_ELEMENT_TYPE ClassifyPyramid(HPRefElement & el, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint) { // *testout << "classify pyramid, pnums = "; // for (int i = 0; i < 5; i++) *testout << el.pnums[i] << " "; diff --git a/libsrc/meshing/delaunay2d.cpp b/libsrc/meshing/delaunay2d.cpp index 8a58ba57..bd0b974d 100644 --- a/libsrc/meshing/delaunay2d.cpp +++ b/libsrc/meshing/delaunay2d.cpp @@ -38,7 +38,7 @@ namespace netgen if(p1 hash = {p0,p1}; + PointIndices<2> hash = {p0,p1}; auto pos = edge_to_trig.Position(hash); if (pos == -1) return -1; @@ -53,7 +53,7 @@ namespace netgen if(p1 hash = {p0,p1}; + PointIndices<2> hash = {p0,p1}; auto pos = edge_to_trig.Position(hash); if (pos == -1) edge_to_trig[hash] = {eli, -1}; @@ -80,7 +80,7 @@ namespace netgen if(p1 hash = {p0,p1}; + PointIndices<2> hash = {p0,p1}; auto pos = edge_to_trig.Position(hash); auto i2 = edge_to_trig.GetData(pos); @@ -93,7 +93,7 @@ namespace netgen } - void DelaunayMesh::AppendTrig( int pi0, int pi1, int pi2 ) + void DelaunayMesh::AppendTrig( PointIndex pi0, PointIndex pi1, PointIndex pi2 ) { DelaunayTrig el; el[0] = pi0; @@ -174,7 +174,8 @@ namespace netgen { const auto trig = trigs[i_trig]; - if(trig[0]==-1) + // if(trig[0]==-1) + if(!trig[0].IsValid()) continue; double rad2 = trig.Radius2(); @@ -254,9 +255,9 @@ namespace netgen const DelaunayTrig & trig = trigs[j]; for (int k = 0; k < 3; k++) { - int p1 = trig[k]; - int p2 = trig[(k+1)%3]; - IVec<2> edge{p1,p2}; + PointIndex p1 = trig[k]; + PointIndex p2 = trig[(k+1)%3]; + PointIndices<2> edge{p1,p2}; edge.Sort(); bool found = false; for (int l = 0; l < edges.Size(); l++) @@ -309,9 +310,9 @@ namespace netgen for (int j : intersecting) { UnsetNeighbours(j); - trigs[j][0] = -1; - trigs[j][1] = -1; - trigs[j][2] = -1; + trigs[j][0] = PointIndex::INVALID; + trigs[j][1] = PointIndex::INVALID; + trigs[j][2] = PointIndex::INVALID; } for (auto edge : edges) @@ -331,7 +332,8 @@ namespace netgen for (DelaunayTrig & trig : trigs) { - if (trig[0] < 0) continue; + // if (trig[0] < 0) continue; + if (!trig[0].IsValid()) continue; Vec<3> n = Cross (P3(points[trig[1]])-P3(points[trig[0]]), P3(points[trig[2]])-P3(points[trig[0]])); @@ -587,7 +589,7 @@ namespace netgen t2.Start(); Array old_points; - BitArray add_point(mesh.Points().Size()+1); + TBitArray add_point(mesh.Points().Size()+1); Array addpoints; add_point.Clear(); /* @@ -708,7 +710,8 @@ namespace netgen for (auto & trig : dmesh.GetElements()) { - if (trig[0] < 0) continue; + // if (trig[0] < 0) continue; + if (!trig[0].IsValid()) continue; Element2d el(trig[0], trig[1], trig[2]); el.SetIndex (1); @@ -719,7 +722,7 @@ namespace netgen while(!conforming) { conforming = true; - BitArray marked_points(tempmesh.Points().Size()+1); + TBitArray marked_points(tempmesh.Points().Size()+1); marked_points = false; // Check for trigs cutting a boundary edge (non-conforming mesh) auto point_to_trigs = tempmesh.CreatePoint2SurfaceElementTable( 0 ); @@ -776,7 +779,7 @@ namespace netgen auto & el0 = tempmesh[cutting_trigs[0]]; auto & el1 = tempmesh[cutting_trigs[1]]; - pi1 = el1[0]+el1[1]+el1[2] - pi2-pi3; + pi1 = el1[0]-pi2+el1[1]-pi3+el1[2]; if(marked_points.Test(pi1)) continue; @@ -801,16 +804,16 @@ namespace netgen // Mark edges and trigs as inside or outside, starting with boundary edges enum POSITION { UNKNOWN, BOUNDARY, INSIDE, OUTSIDE }; Array trig_pos(tempmesh.SurfaceElements().Size()); - ngcore::ClosedHashTable, POSITION> edge_pos(3*tempmesh.SurfaceElements().Size()); + ngcore::ClosedHashTable, POSITION> edge_pos(3*tempmesh.SurfaceElements().Size()); trig_pos = UNKNOWN; for (auto & seg : tempmesh.LineSegments()) { ArrayMem els; - IVec<2> edge{seg[0], seg[1]}; + PointIndices<2> edge{seg[0], seg[1]}; edge.Sort(); edge_pos[edge] = BOUNDARY; - + for(auto sei : point_to_trigs[seg[0]]) for( auto i : Range(3)) if(tempmesh[sei][i] == seg[1]) @@ -828,8 +831,8 @@ namespace netgen else pos = OUTSIDE; - IVec<2> e1{seg[0], pi2}; - IVec<2> e2{seg[1], pi2}; + PointIndices<2> e1{seg[0], pi2}; + PointIndices<2> e2{seg[1], pi2}; e1.Sort(); e2.Sort(); if(!edge_pos.Used(e1)) @@ -857,7 +860,7 @@ namespace netgen // any edge of unknown trig already marked? for(auto i : IntRange(3)) { - IVec<2> edge{el[(i+1)%3], el[(i+2)%3]}; + PointIndices<2> edge{el[(i+1)%3], el[(i+2)%3]}; edge.Sort(); if(edge_pos.Used(edge) && edge_pos[edge]!=BOUNDARY) { @@ -871,7 +874,7 @@ namespace netgen if(trig_pos[sei] != UNKNOWN) for(auto i : IntRange(3)) { - IVec<2> edge{el[(i+1)%3], el[(i+2)%3]}; + PointIndices<2> edge{el[(i+1)%3], el[(i+2)%3]}; edge.Sort(); if(!edge_pos.Used(edge) || edge_pos[edge]==BOUNDARY) edge_pos[edge] = trig_pos[sei]; diff --git a/libsrc/meshing/delaunay2d.hpp b/libsrc/meshing/delaunay2d.hpp index 52b3d952..137c10f7 100644 --- a/libsrc/meshing/delaunay2d.hpp +++ b/libsrc/meshing/delaunay2d.hpp @@ -22,7 +22,7 @@ namespace netgen double r; double rad2; DelaunayTrig () = default; - DelaunayTrig (int p1, int p2, int p3) + DelaunayTrig (PointIndex p1, PointIndex p2, PointIndex p3) { pnums[0] = p1; pnums[1] = p2; @@ -38,19 +38,19 @@ namespace netgen double Radius2() const { return rad2; } Box<2> BoundingBox() const { return Box<2> (c-Vec<2>(r,r), c+Vec<2>(r,r)); } - mutable PointIndex visited_pi = -1; + mutable PointIndex visited_pi = PointIndex::INVALID; // -1; }; class DelaunayMesh { - ngcore::ClosedHashTable, IVec<2>> edge_to_trig; + ngcore::ClosedHashTable, IVec<2>> edge_to_trig; Array trigs; unique_ptr> tree; Array, PointIndex> & points; Array closeels; Array intersecting; - Array> edges; + Array> edges; int GetNeighbour( int eli, int edge ); @@ -58,7 +58,7 @@ namespace netgen void UnsetNeighbours( int eli ); - void AppendTrig( int pi0, int pi1, int pi2 ); + void AppendTrig( PointIndex pi0, PointIndex pi1, PointIndex pi2 ); public: DelaunayMesh( Array, PointIndex> & points_, Box<2> box ); diff --git a/libsrc/meshing/hprefinement.cpp b/libsrc/meshing/hprefinement.cpp index 5b3e4152..d66b1598 100644 --- a/libsrc/meshing/hprefinement.cpp +++ b/libsrc/meshing/hprefinement.cpp @@ -605,7 +605,7 @@ namespace netgen bool CheckSingularities(Mesh & mesh, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoiclt_dom, NgBitArray & cornerpoint, NgBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint, int & levels, int & act_ref); + INDEX_2_HASHTABLE & surf_edges, Array & facepoint, int & levels, int & act_ref); bool ClassifyHPElements (Mesh & mesh, NgArray & elements, SplittingType split, int & act_ref, int & levels); @@ -1634,7 +1634,7 @@ namespace netgen bool CheckSingularities(Mesh & mesh, INDEX_2_HASHTABLE & edges, INDEX_2_HASHTABLE & edgepoint_dom, TBitArray & cornerpoint, TBitArray & edgepoint, INDEX_3_HASHTABLE & faces, INDEX_2_HASHTABLE & face_edges, - INDEX_2_HASHTABLE & surf_edges, NgArray & facepoint, int & levels, int & act_ref) + INDEX_2_HASHTABLE & surf_edges, Array & facepoint, int & levels, int & act_ref) { bool sing = 0; if (mesh.GetDimension() == 3) @@ -1902,7 +1902,7 @@ namespace netgen INDEX_3_HASHTABLE faces(mesh.GetNSE()+1); INDEX_2_HASHTABLE face_edges(mesh.GetNSE()+1); INDEX_2_HASHTABLE surf_edges(mesh.GetNSE()+1); - NgArray facepoint(mesh.GetNP()); + Array facepoint(mesh.GetNP()); bool sing = CheckSingularities(mesh, edges, edgepoint_dom, cornerpoint, edgepoint, faces, face_edges, diff --git a/libsrc/meshing/meshtype.hpp b/libsrc/meshing/meshtype.hpp index 9c0d1415..4700d447 100644 --- a/libsrc/meshing/meshtype.hpp +++ b/libsrc/meshing/meshtype.hpp @@ -257,6 +257,7 @@ namespace netgen void DoArchive (Archive & ar) { ar & i; } }; + /* inline PointIndex operator+ (PointIndex pi, int i) { return PointIndex(pi.i+i); } inline PointIndex operator+ (PointIndex pi, size_t i) { return PointIndex(pi.i+i); }