Salome HOME
Creating Remote and SA NETGEN_3D plugins
[plugins/netgenplugin.git] / src / NETGENPlugin / NETGENPlugin_Runner_main.cxx
1 // Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 //  File   : NETGENplugin_Runnner_main.cxx
24 //  Author : Yoann AUDOUIN, EDF
25 //  Module : NETGEN
26 //
27
28 #include "NETGENPlugin_NETGEN_3D_SA.hxx"
29
30 #include <stdio.h>
31 #include <string.h>
32 #include <iostream>
33 #include <chrono>
34
35 /**
36  * @brief Main function
37  *
38  * @param argc Number of arguments
39  * @param argv Arguments
40  *
41  * @return error code
42  */
43 int main(int argc, char *argv[]){
44
45   if(argc!=9||(argc==2 && (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help")==0))){
46     std::cout << "Error in number of arguments "<< argc<<" given expected 8" <<std::endl;
47     std::cout << "Syntax:"<<std::endl;
48     std::cout << "run_mesher MESHER INPUT_MESH_FILE SHAPE_FILE HYPO_FILE" << std::endl;
49     std::cout << "           ELEM_ORIENT_FILE NB_THREADS" << std::endl;
50     std::cout << "           NEW_ELEMENT_FILE OUTPUT_MESH_FILE" << std::endl;
51     std::cout << std::endl;
52     std::cout << " Set argument to NONE to ignore them " << std::endl;
53     std::cout << std::endl;
54     std::cout << "Args:" << std::endl;
55     std::cout << "  MESHER: mesher to use from (NETGEN3D, NETGEN2D)" << std::endl;
56     std::cout << "  INPUT_MESH_FILE: MED File containing lower-dimension-elements already meshed" << std::endl;
57     std::cout << "  SHAPE_FILE: STEP file containing the shape to mesh" << std::endl;
58     std::cout << "  HYPO_FILE: Ascii file containint the list of parameters" << std::endl;
59     std::cout << "  (optional) ELEM_ORIENT_FILE: binary file containing the list of element from INPUT_MESH_FILE associated to the shape and their orientation" << std::endl;
60     std::cout << "  NB_THREADS: Number of thread to use for the mesher" << std::endl;
61     std::cout << "  (optional) NEW_ELEMENT_FILE: (out) contains elements and nodes added by the meshing" << std::endl;
62     std::cout << "  (optional) OUTPUT_MESH_FILE: (out) MED File containing the mesh after the run of the mesher" << std::endl;
63     return 0;
64   }
65   std::string mesher=argv[1];
66   std::string input_mesh_file=argv[2];
67   std::string shape_file=argv[3];
68   std::string hypo_file=argv[4];
69   std::string element_orientation_file=argv[5];
70   int nbThreads=std::stoi(argv[6]);
71   std::string new_element_file=argv[7];
72   std::string output_mesh_file=argv[8];
73
74   //std::string thing;
75   //std::cin >> thing;
76
77   if (output_mesh_file == "NONE")
78     output_mesh_file = "";
79   if (element_orientation_file == "NONE")
80     element_orientation_file = "";
81   if (new_element_file == "NONE")
82     new_element_file = "";
83
84   if (mesher=="NETGEN3D"){
85     auto begin = std::chrono::high_resolution_clock::now();
86     NETGENPlugin_NETGEN_3D_SA myplugin;
87     myplugin.run(input_mesh_file,
88              shape_file,
89              hypo_file,
90              element_orientation_file,
91              new_element_file,
92              output_mesh_file,
93              nbThreads);
94     auto end = std::chrono::high_resolution_clock::now();
95     auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
96     std::cout << "Time elapsed: " << elapsed.count()*1e-9 << std::endl;
97   } else {
98     std::cerr << "Unknown mesher:" << mesher << std::endl;
99   }
100   return 0;
101 }