]> SALOME platform Git repositories - plugins/netgenplugin.git/commitdiff
Salome HOME
Corrections for parallel smesh
authorYoann Audouin <yoann.audouin@edf.fr>
Mon, 24 Oct 2022 14:26:57 +0000 (16:26 +0200)
committerYoann Audouin <yoann.audouin@edf.fr>
Mon, 24 Oct 2022 14:26:57 +0000 (16:26 +0200)
Was crashing one of the testbase NRT_GRIDS_SMESH_BUGS_08_I1.
Issue was that input info must be sorted to ensure the same number of
volumes in one process.
Also ensure that netgen::mparam parameters are all initialised.

src/NETGENPlugin/NETGENPlugin_Mesher.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx
src/NETGENPlugin/NETGENPlugin_NETGEN_3D_SA.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_3D_SA.hxx

index 44535f283b569bf4d69d41ad4e76728a1aa43b88..2d9ff3bd5f70281c8e6a65eefc4571a5c206ec0a 100644 (file)
@@ -599,6 +599,8 @@ void NETGENPlugin_Mesher::SetDefaultParameters()
   _fineness               = NETGENPlugin_Hypothesis::GetDefaultFineness();
   mparams.uselocalh       = NETGENPlugin_Hypothesis::GetDefaultSurfaceCurvature();
   netgen::merge_solids    = NETGENPlugin_Hypothesis::GetDefaultFuseEdges();
+  // Unused argument but set 0 to initialise it
+  mparams.elementorder = 0;
 
 #ifdef NETGEN_V6
 
@@ -612,6 +614,7 @@ void NETGENPlugin_Mesher::SetDefaultParameters()
 #endif
 }
 
+
 //=============================================================================
 /*!
  * Pass parameters to NETGEN
@@ -4496,6 +4499,9 @@ int NETGENPlugin_NetgenLibWrapper::GenerateMesh( netgen::OCCGeometry& occgeo,
   if ( !ngMesh )
     ngMesh = new netgen::Mesh;
 
+  // To dump mparam
+  // netgen::mparam.Print(std::cerr);
+
 #ifdef NETGEN_V6
 
   ngMesh->SetGeometry( shared_ptr<netgen::NetgenGeometry>( &occgeo, &NOOP_Deleter ));
index d4712aaa56a84c209657f44d1069958ae0a8b56d..8435688dc96c3851ce51a3455f9d75c47e903d9f 100644 (file)
@@ -218,7 +218,7 @@ bool NETGENPlugin_NETGEN_3D::getSurfaceElements(
     SMESH_ProxyMesh::Ptr proxyMesh,
     NETGENPlugin_Internals &internals,
     SMESH_MesherHelper &helper,
-    std::map<const SMDS_MeshElement*, tuple<bool, bool>>& listElements
+    std::map<const SMDS_MeshElement*, tuple<bool, bool>, TIDCompare>& listElements
 )
 {
   SMESHDS_Mesh* meshDS = aMesh.GetMeshDS();
@@ -309,6 +309,8 @@ bool NETGENPlugin_NETGEN_3D::computeFillNgMesh(
     SMESH::Controls::TSequenceOfXYZ nodesCoords;
 
     // maps nodes to ng ID
+    // map must be sorted by ID to ensure that we will have the same number of
+    // 3D element if we recompute
     typedef map< const SMDS_MeshNode*, int, TIDCompare > TNodeToIDMap;
     typedef TNodeToIDMap::value_type                     TN2ID;
     TNodeToIDMap nodeToNetgenID;
@@ -338,7 +340,9 @@ bool NETGENPlugin_NETGEN_3D::computeFillNgMesh(
       proxyMesh.reset( Adaptor );
     }
 
-    std::map<const SMDS_MeshElement*, tuple<bool, bool>> listElements;
+    // map must be sorted by ID to ensure that we will have the same number of
+    // 3D element if we recompute
+    std::map<const SMDS_MeshElement*, tuple<bool, bool>, TIDCompare> listElements;
     bool ret = getSurfaceElements(aMesh, aShape, proxyMesh, internals, helper, listElements);
     if(ret)
       return ret;
index af987461f5b3908dd9bd02dc37f469e942195be2..f7ebf13179dc477f366243c98c76996913da60fd 100644 (file)
@@ -107,7 +107,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_NETGEN_3D: public SMESH_3D_Algo
     SMESH_ProxyMesh::Ptr proxyMesh,
     NETGENPlugin_Internals &internals,
     SMESH_MesherHelper &helper,
-    std::map<const SMDS_MeshElement*, std::tuple<bool, bool>>& listElements);
+    std::map<const SMDS_MeshElement*, std::tuple<bool, bool>, TIDCompare>& listElements);
 
   bool compute(SMESH_Mesh&                          mesh,
                SMESH_MesherHelper&                  helper,
index 1ea0ad7048af72e95083c846d23d2255739ef4e1..39b809bd8ae6085f686f18f19b6d8214aae9768a 100644 (file)
@@ -322,7 +322,7 @@ bool NETGENPlugin_NETGEN_3D_SA::getSurfaceElements(
     SMESH_ProxyMesh::Ptr proxyMesh,
     NETGENPlugin_Internals &internals,
     SMESH_MesherHelper &helper,
-    std::map<const SMDS_MeshElement*, tuple<bool, bool>>& listElements
+    std::map<const SMDS_MeshElement*, tuple<bool, bool>, TIDCompare>& listElements
     )
 {
   // To remove compilation warnings
index 0a6a6fc7b342af180e2f695a9ed46b24e0dc84cf..dc7919df1e2d4df305ca7b7d397f96876a9b9aac 100644 (file)
@@ -72,7 +72,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_NETGEN_3D_SA: public NETGENPlugin_NETGEN_
     SMESH_ProxyMesh::Ptr proxyMesh,
     NETGENPlugin_Internals &internals,
     SMESH_MesherHelper &helper,
-    std::map<const SMDS_MeshElement*, tuple<bool, bool>>& listElements
+    std::map<const SMDS_MeshElement*, tuple<bool, bool>, TIDCompare>& listElements
     ) override;
 
    std::string _element_orientation_file="";