diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index 9acfacaa..0405881d 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -4995,6 +4995,10 @@ namespace netgen // netgen::Point<3> pmin = p - Vec<3> (pointtol, pointtol, pointtol); // netgen::Point<3> pmax = p + Vec<3> (pointtol, pointtol, pointtol); + if ( (dimension == 2 && !GetNSE()) || + (dimension == 3 && !GetNE() && !GetNSE()) ) + return -1; + if (dimension == 2 || (dimension==3 && !GetNE() && GetNSE())) { int ne; diff --git a/libsrc/meshing/parallelmesh.cpp b/libsrc/meshing/parallelmesh.cpp index 7b1248a6..45d6f98b 100644 --- a/libsrc/meshing/parallelmesh.cpp +++ b/libsrc/meshing/parallelmesh.cpp @@ -745,6 +745,38 @@ namespace netgen MPI_Barrier(comm); + PrintMessage( 3, "Clean up local memory"); + + auto & self = const_cast(*this); + self.points = T_POINTS(0); + self.surfelements = T_SURFELEMENTS(0); + self.volelements = T_VOLELEMENTS(0); + self.segments = Array(0); + self.lockedpoints = Array(0); + auto cleanup_ptr = [](auto & ptr) { + if (ptr != nullptr) { + delete ptr; + ptr = nullptr; + } + }; + cleanup_ptr(self.boundaryedges); + cleanup_ptr(self.boundaryedges); + cleanup_ptr(self.segmentht); + cleanup_ptr(self.surfelementht); + self.openelements = Array(0); + self.opensegments = Array(0); + self.numvertices = 0; + self.mlbetweennodes = Array,PointIndex::BASE> (0); + self.mlparentelement = Array(0); + self.mlparentsurfaceelement = Array(0); + self.topology.Update(); + self.curvedelems = new CurvedElements (self); + self.clusters = new AnisotropicClusters (self); + self.ident = new Identifications (self); + self.BuildElementSearchTree(); + + // const_cast(*this).DeleteMesh(); + PrintMessage( 3, "send mesh complete"); }