#include <SMESH_Gen.hxx>
#include <SMESH_Mesh.hxx>
-#include <SMESH_ParallelMesh.hxx>
#include <SMESH_MesherHelper.hxx>
#include <SMESH_DriverShape.hxx>
#include <SMESH_DriverMesh.hxx>
SMESH_Hypothesis::Hypothesis_Status hypStatus;
NETGENPlugin_NETGEN_3D::CheckHypothesis(aMesh, aShape, hypStatus);
}
- SMESH_ParallelMesh& aParMesh = dynamic_cast<SMESH_ParallelMesh&>(aMesh);
+
// Temporary folder for run
#ifdef WIN32
- fs::path tmp_folder = aParMesh.GetTmpFolder() / fs::path("Volume-%%%%-%%%%");
+ // On windows mesh does not have GetTmpFolder
+ fs::path tmp_folder = fs::path("Volume-%%%%-%%%%");
#else
- fs::path tmp_folder = aParMesh.GetTmpFolder() / fs::unique_path(fs::path("Volume-%%%%-%%%%"));
+ fs::path tmp_folder = aMesh.GetTmpFolder() / fs::unique_path(fs::path("Volume-%%%%-%%%%"));
#endif
fs::create_directories(tmp_folder);
// Using MESH2D generated after all triangles where created.
- fs::path mesh_file=aParMesh.GetTmpFolder() / fs::path("Mesh2D.med");
+#ifdef WIN32
+ fs::path mesh_file=fs::path("Mesh2D.med");
+#else
+ fs::path mesh_file=aMesh.GetTmpFolder() / fs::path("Mesh2D.med");
+#endif
fs::path element_orientation_file=tmp_folder / fs::path("element_orientation.dat");
fs::path new_element_file=tmp_folder / fs::path("new_elements.dat");
fs::path tmp_mesh_file=tmp_folder / fs::path("tmp_mesh.med");
fs::path shape_file=tmp_folder / fs::path("shape.brep");
fs::path param_file=tmp_folder / fs::path("netgen3d_param.txt");
fs::path log_file=tmp_folder / fs::path("run.log");
- fs::path cmd_file=tmp_folder / fs::path("cmd.txt");
- // TODO: See if we can retreived name from aMesh ?
+ fs::path cmd_file=tmp_folder / fs::path("cmd.log");
std::string mesh_name = "MESH";
{
}
// Calling run_mesher
- // Path to mesher script
- fs::path mesher_launcher = fs::path(std::getenv("SMESH_ROOT_DIR"))/
- fs::path("bin")/
- fs::path("salome")/
- fs::path("mesher_launcher.py");
-
-
- std::string s_program="python3";
- std::list<std::string> params;
- params.push_back(mesher_launcher.string());
- params.push_back("NETGEN3D");
- params.push_back(mesh_file.string());
- params.push_back(shape_file.string());
- params.push_back(param_file.string());
- params.push_back("--elem-orient-file=" + element_orientation_file.string());
- params.push_back("--new-element-file=" + new_element_file.string());
-
- // Parallelism method parameters
- int method = aParMesh.GetParallelismMethod();
- if(method == ParallelismMethod::MultiThread){
- params.push_back("--method=local");
- } else if (method == ParallelismMethod::MultiNode){
- // TODO :See what parameters to handle in the end
- params.push_back("--method=cluster");
- params.push_back("--resource="+aParMesh.GetResource());
- params.push_back("--wc-key="+aParMesh.GetWcKey());
- params.push_back("--nb-proc=1");
- params.push_back("--nb-proc-per-node="+to_string(aParMesh.GetNbProcPerNode()));
- params.push_back("--nb-node="+to_string(aParMesh.GetNbNode()));
- } else {
- throw SALOME_Exception("Unknown parallelism method "+method);
- }
- std::string cmd = "";
- cmd += s_program;
- for(auto arg: params){
- cmd += " " + arg;
- }
- MESSAGE("Running command: ");
- MESSAGE(cmd);
- // Writing command in cmd.log
+ std::string cmd;
+ fs::path run_mesher_exe =
+ fs::path(std::getenv("NETGENPLUGIN_ROOT_DIR"))/
+ fs::path("bin")/
+ fs::path("salome")/
+#ifdef WIN32
+ fs::path("NETGENPlugin_Runner.exe");
+#else
+ fs::path("NETGENPlugin_Runner");
+#endif
+
+ cmd = run_mesher_exe.string() +
+ " NETGEN3D " + mesh_file.string() + " "
+ + shape_file.string() + " "
+ + param_file.string() + " "
+ + element_orientation_file.string() + " "
+ + new_element_file.string() + " "
+ + "NONE";
+ // Writing command in log
{
std::ofstream flog(cmd_file.string());
flog << cmd << endl;
+ flog << endl;
}
+ MESSAGE("Running command: ");
+ MESSAGE(cmd);
+
// Building arguments for QProcess
- QString program = QString::fromStdString(s_program);
+ QString program = run_mesher_exe.string().c_str();
QStringList arguments;
- for(auto arg : params){
- arguments << arg.c_str();
- }
-
+ arguments << "NETGEN3D";
+ arguments << mesh_file.string().c_str();
+ arguments << shape_file.string().c_str();
+ arguments << param_file.string().c_str();
+ arguments << element_orientation_file.string().c_str();
+ arguments << new_element_file.string().c_str();
+ arguments << "NONE";
QString out_file = log_file.string().c_str();
QProcess myProcess;
- myProcess.setProcessChannelMode(QProcess::MergedChannels);
myProcess.setStandardOutputFile(out_file);
myProcess.start(program, arguments);
// Waiting for process to finish (argument -1 make it wait until the end of
// the process otherwise it just waits 30 seconds)
- bool finished = myProcess.waitForFinished(-1);
- int ret = myProcess.exitCode();
+ myProcess.waitForFinished(-1);
+ int ret = myProcess.exitStatus();
- if(ret != 0 || !finished){
+ if(ret != 0){
// Run crahed
- std::string msg = "Issue with mesh_launcher: \n";
+ std::string msg = "Issue with command: \n";
msg += "See log for more details: " + log_file.string() + "\n";
msg += cmd + "\n";
throw SALOME_Exception(msg);