]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Adding walltime for multinode + keeping temporary folder with environement variable
authorYOANN AUDOUIN <B61570@dsp1062659>
Thu, 7 Sep 2023 08:25:11 +0000 (10:25 +0200)
committerYOANN AUDOUIN <B61570@dsp1062659>
Thu, 7 Sep 2023 08:25:11 +0000 (10:25 +0200)
idl/SMESH_Mesh.idl
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_ParallelMesh.cxx
src/SMESH/SMESH_ParallelMesh.hxx
src/SMESH_I/SMESH_ParallelMesh_i.cxx
src/SMESH_I/SMESH_ParallelMesh_i.hxx
src/SMESH_SWIG/mesher_launcher.py
src/SMESH_SWIG/smeshBuilder.py

index 81c472b7924871f99197605a5a16d84a7fbe61c2..8ef9a454b0fb7018dc6e1278cff14c83e0e923c2 100644 (file)
@@ -1128,6 +1128,9 @@ module SMESH
 
     string GetWcKey();
     void SetWcKey(in string wcKey);
+
+    string GetWalltime();
+    void SetWalltime(in string walltime);
   };
 
 };
index f5bff50586aeb53f7ce890c0fba4c79e5857f2e4..deab14abc804e34be0d308bb6d4588e83265c4e1 100644 (file)
@@ -453,6 +453,9 @@ bool SMESH_Gen::parallelComputeSubMeshes(
 
   aMesh.GetMeshDS()->Modified();
 
+  // Cleanup done here as in Python the destructor is not called
+  aParMesh.cleanup();
+
   return ret;
 #endif
 };
index ef75ab21feb127674c7967243341892c44fe47f7..237dad6be6132d6a5f1b6878aafb4b4681e27631 100644 (file)
@@ -43,12 +43,6 @@ namespace fs=boost::filesystem;
 
 #include <utilities.h>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 1;
-#else
-static int MYDEBUG = 0;
-#endif
-
 SMESH_ParallelMesh::SMESH_ParallelMesh(int               theLocalId,
                        SMESH_Gen*        theGen,
                        bool              theIsEmbeddedMode,
@@ -62,12 +56,47 @@ SMESH_ParallelMesh::SMESH_ParallelMesh(int               theLocalId,
 };
 
 SMESH_ParallelMesh::~SMESH_ParallelMesh()
+{
+  cleanup();
+};
+
+void SMESH_ParallelMesh::cleanup()
 {
   DeletePoolThreads();
-  if(!MYDEBUG)
+  std::cout << "Keeping tmp folder" << keepingTmpFolfer() << std::endl;
+  if(!keepingTmpFolfer())
+  {
+    MESSAGE("Set SMESH_KEEP_TMP to > 0 to keep temporary folders")
     DeleteTmpFolder();
+  }
 };
 
+//=============================================================================
+/*!
+ * \brief Checking if we should keep the temporary folder
+ *        They are kept if the variable SMESH_KEEP_TMP is set to higher than 0
+ */
+//=============================================================================
+bool SMESH_ParallelMesh::keepingTmpFolfer()
+{
+  const char* envVar = std::getenv("SMESH_KEEP_TMP");
+  std::cout << "smesh_keep_tmp: " << envVar << std::endl;
+
+  if (envVar && (envVar[0] != '\0'))
+  {
+    try
+    {
+      const long long numValue = std::stoll(envVar);
+      return numValue > 0;
+    }
+    catch(const std::exception& e)
+    {
+      std::cerr << e.what() << '\n';
+    }
+  }
+
+  return false;
+};
 
 
 //=============================================================================
@@ -92,6 +121,7 @@ void SMESH_ParallelMesh::CreateTmpFolder()
 void SMESH_ParallelMesh::DeleteTmpFolder()
 {
 #ifndef WIN32
+    MESSAGE("Deleting temporary folder" << tmp_folder.string());
     fs::remove_all(tmp_folder);
 #endif
 }
index 7deb3210cefecd9da646d078eda8d9c816e8e0a0..a531bdb8549a3926826f2d80d1e92b68b2dc818c 100644 (file)
@@ -46,7 +46,7 @@ class SMESH_EXPORT SMESH_ParallelMesh: public SMESH_Mesh
                        bool              theIsEmbeddedMode,
                        SMESHDS_Document* theDocument);
 
-  virtual ~SMESH_ParallelMesh();
+  ~SMESH_ParallelMesh();
 
   // Locking mechanism
   void Lock() override {_my_lock.lock();};
@@ -66,9 +66,11 @@ class SMESH_EXPORT SMESH_ParallelMesh: public SMESH_Mesh
   int GetPoolNbThreads();
 
   // Temporary folder
+  bool keepingTmpFolfer();
   void CreateTmpFolder();
   void DeleteTmpFolder();
   boost::filesystem::path GetTmpFolder() {return tmp_folder;};
+  void cleanup();
 
   //
   bool IsParallel() override {return true;};
@@ -97,6 +99,9 @@ class SMESH_EXPORT SMESH_ParallelMesh: public SMESH_Mesh
   std::string GetWcKey() {return _wcKey;};
   void SetWcKey(std::string wcKey) {_wcKey = wcKey;};
 
+  std::string GetWalltime() {return _walltime;};
+  void SetWalltime(std::string walltime) {_walltime = walltime;};
+
   // Parallel computation
   bool ComputeSubMeshes(
             SMESH_Gen* gen,
@@ -131,5 +136,6 @@ class SMESH_EXPORT SMESH_ParallelMesh: public SMESH_Mesh
   int _nbNode = 1;
   std::string _resource = "";
   std::string _wcKey = "P11N0:SALOME";
+  std::string _walltime = "01:00:00";
 };
 #endif
index c816311b4eb627f1b02adde8f8d9ac396745e58e..6e8bad1a6f84cd3ea61e257e740dd00588d15f33 100644 (file)
@@ -188,3 +188,21 @@ char* SMESH_ParallelMesh_i::GetWcKey(){
 void SMESH_ParallelMesh_i::SetWcKey(const char* wcKey){
   DownCast()->SetWcKey(std::string(wcKey));
 }
+
+//=============================================================================
+/*!
+ * \brief Get the walltime to use on ressource
+ */
+//=============================================================================
+char* SMESH_ParallelMesh_i::GetWalltime(){
+  return CORBA::string_dup(DownCast()->GetWalltime().c_str());
+}
+
+//=============================================================================
+/*!
+ * \brief Set the walltime to use on ressource
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetWalltime(const char* walltime){
+  DownCast()->SetWalltime(std::string(walltime));
+}
index 5386dc7bb41ce1654a48c30fbc6eec902fb7e4a4..51ae0c93f4291ba471ecdfcfe94fd79bd85100c6 100644 (file)
@@ -71,6 +71,9 @@ class SMESH_I_EXPORT SMESH_ParallelMesh_i:
   char* GetWcKey();
   void SetWcKey(const char* wcKey);
 
+  char* GetWalltime();
+  void SetWalltime(const char* walltime);
+
   private:
   ::SMESH_ParallelMesh* DownCast();
 };
index f29e4b5a74d20b774bb8cde0cd3c79b4da0b1bd9..65de1492524de673752903464625ddddd0e01aa3 100644 (file)
@@ -22,7 +22,6 @@
 """
 File to run mesher from command line
 """
-#TODO: Make the execution path independant (output files are written in current directory)
 from os import environ, path
 import sys
 import subprocess as sp
@@ -157,6 +156,7 @@ def run_pylauncher(args):
     job_params.resource_required.nb_proc = args.nb_proc
     job_params.resource_required.nb_proc_per_node = args.nb_proc_per_node
     job_params.resource_required.nb_node = args.nb_node
+    job_params.maximum_duration = args.walltime
 
     # job_params.pre_command = pre_command # command to run on frontal
     # script to run in batch mode
@@ -241,6 +241,13 @@ def run_pylauncher(args):
     launcher.getJobResults(job_id, "")
 
     # Delete remote working dir
+    del_tmp_folder = True
+    try:
+       val = int(environ.get("SMESH_KEEP_TMP", "0"))
+       del_tmp_folder = val > 0
+    except Exception as e:
+        del_tmp_folder = True
+
     launcher.clearJobWorkingDir(job_id)
 
 def def_arg():
@@ -291,6 +298,9 @@ def def_arg():
                            default=1,
                            type=int,
                            help="Number of node")
+    run_param.add_argument("--walltime",
+                           default="01:00:00",
+                           help="walltime for job submission HH:MM:SS (default 01:00:00)")
     run_param.add_argument("--wc-key",
                            default="P11N0:SALOME",
                            help="wc-key for job submission (default P11N0:SALOME)")
index 5fe13bd85175dc88c6cc1c16841d4d1ffd8e024f..781137a69ee78affe699ec55ec91639da1a4ed45 100644 (file)
@@ -7755,6 +7755,14 @@ class MNParallelismSettings(ParallelismSettings):
         """ Get Number of Node """
         return self._mesh.mesh.GetWcKey()
 
+    def SetWalltime(self, walltime):
+        """ Set the number of Node for multinode """
+        self._mesh.mesh.SetWalltime(walltime)
+
+    def GetWalltime(self):
+        """ Get Number of Node """
+        return self._mesh.mesh.GetWalltime()
+
     def __str__(self):
         """ str conversion """
         string = "\nParameter for MultiNode parallelism:\n"
@@ -7763,6 +7771,7 @@ class MNParallelismSettings(ParallelismSettings):
         string += "NbProcPerNode: {}\n".format(self.GetNbProcPerNode())
         string += "NbNode: {}\n".format(self.GetNbNode())
         string += "WcKey: {}\n".format(self.GetWcKey())
+        string += "Walltime: {}\n".format(self.GetWalltime())
 
         return string