Salome HOME
9a4a12526bf313f43ee0e5c80a19f96ef1cad19a
[modules/homard.git] / doc / files / yacs_script_test.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 # Copyright (C) 2013-2019  CEA/DEN, EDF R&D
4 #
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
9 #
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 # Lesser General Public License for more details.
14 #
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #
21
22 """
23 Pseudo-lancement d'un calcul pour valider les tests
24 """
25 __revision__ = "V2.2"
26 #
27 import sys
28 import os
29 #
30 class Script :
31 #
32   """
33 Mode d'emploi :
34 ==============
35 yacs_script_test --rep_calc=rep_calc --mesh_file=mesh_file --num=nro [-h|-help] [-v] [-v_max]
36
37 Arguments obligatoires :
38 ------------------------
39 --rep_calc=rep_calc : le repertoire du calcul.
40 --mesh_file=mesh_file : le fichier contenant le maillage sur lequel on veut calculer. Le nom est absolu ou relatif par rapport au repertoire de calcul ou a $HOME.
41 --num=nro : le numero du calcul, depuis 0.
42
43 Exemples :
44 ----------
45 ./yacs_script_test.py --rep_calc=`pwd` --mesh_file=maill.00.med --num=0
46   """
47 #
48 #====
49 # 0. Les defauts
50 #====
51 #
52   affiche_aide_globale = 0
53   verbose = 0
54   verbose_max = 0
55 #
56   message_info = "\n"
57 #
58 #
59 #========================= Debut de la fonction ==================================
60 #
61   def __init__ ( self, liste_arg ) :
62 #
63     """
64 Le constructeur de la classe Script
65     """
66 #
67 # 1. Decodage des arguments
68 #
69     self.rep_calc = None
70     self.numero = None
71     self.mesh_file = None
72 #
73     for argu in liste_arg :
74 #
75       #print argu
76       l_aux = argu.split("=")
77       #print l_aux
78       if len(l_aux) == 2 :
79         #print l_aux[0]
80         #print l_aux[1]
81         if l_aux[0] == "--rep_calc" :
82           self.rep_calc = l_aux[1]
83         elif l_aux[0] == "--num" :
84           self.numero = int(l_aux[1])
85         elif l_aux[0] == "--mesh_file" :
86           self.mesh_file = l_aux[1]
87       else :
88         saux = argu.upper()
89         if saux in ( "-H", "-HELP" ) :
90           self.affiche_aide_globale = 1
91         elif saux == "-V" :
92           self.verbose = 1
93         elif saux in ( "-V_MAX", "-VMAX" ) :
94           self.verbose = 1
95           self.verbose_max = 1
96 #
97 # 2. Les paramètres de base
98 #
99     self.dico = {}
100 #
101     if self.verbose_max :
102       nom_fonction = __name__ + "/__init__"
103       print("\nDans " + nom_fonction + ",")
104       print(". rep_calc       :", self.rep_calc)
105       print(". mesh_file      :", self.mesh_file)
106       print(". numero         :", self.numero)
107 #
108 #=========================  Fin de la fonction ===================================
109 #
110 #========================= Debut de la fonction ==================================
111 #
112   def compute ( self ) :
113 #
114     """
115 Lancement d'un calcul
116     """
117 #
118     nom_fonction = __name__ + "/compute"
119     blabla = "\nDans " + nom_fonction + ","
120 #
121     erreur = 0
122     message_erreur = " "
123 #
124     dico_resu = {}
125 #
126     while not erreur :
127 #
128 # 1. Controles des arguments
129 #
130       #print "\n==== self.controle_argument () ===="
131       erreur, message_erreur = self.controle_argument()
132       if erreur :
133         break
134 #
135 # 2. Pseudo-Calcul
136 #
137       #print "\n==== self.calcul () ===="
138       dico_resu["FileName"] = self.mesh_file
139       dico_resu["V_TEST"] = 1./float(self.numero+1)
140 #
141       break
142 #
143     if self.verbose_max :
144       print(blabla)
145       print(". erreur :", erreur)
146 #
147     return erreur, message_erreur, dico_resu
148 #
149 #=========================  Fin de la fonction ===================================
150 #
151 #========================= Debut de la fonction ==================================
152 #
153   def controle_argument ( self ) :
154 #
155     """
156 Controle les arguments et stockage de quelques informations
157     """
158 #
159     messages_erreur = { 0 : None,
160                        -1 : "Quel repertoire de calcul ?",
161                        -3 : "Quel fichier de maillage ?",
162                        -4 : "Ce repertoire est inconnu.",
163                        -5 : "Ce fichier est inconnu.",
164                        -9 : "Quel numero de calcul ?" }
165 #
166     nom_fonction = __name__ + "/controle_argument"
167     blabla = "\nDans " + nom_fonction + ","
168 #
169     erreur = 0
170     message_erreur = " "
171 #
172     if self.verbose_max :
173       print(blabla)
174       print(". rep_calc       :", self.rep_calc)
175       print(". mesh_file      :", self.mesh_file)
176       print(". numero         :", self.numero)
177 #
178     while not erreur :
179 #
180 # 1. Les repertoire et fichier
181 # 1.1. Il y a bien eu une donnee
182 #
183       if self.rep_calc == None :
184         erreur = -1
185       elif self.mesh_file == None :
186         erreur = -3
187       if erreur < 0 :
188         self.message_info += "Relancer avec -h pour avoir le mode d'emploi."
189         break
190 #
191 # 1.2. Le repertoire de calcul
192 #
193       if "HOME" in os.environ :
194         HOME = os.environ ["HOME"]
195       else :
196         HOME = "/local/home/salome"
197 #
198       if ( self.rep_calc[:1] == "~" ) :
199         self.rep_calc = os.path.join(HOME, self.rep_calc[2:])
200       if not os.path.isdir(self.rep_calc) :
201         self.message_info += "Repertoire " + self.rep_calc
202         erreur = -4
203         break
204       else :
205         aux = os.path.join(os.getcwd(), self.rep_calc)
206         self.rep_calc = os.path.normpath(aux)
207 #
208 # 1.3. Les fichiers
209 #
210       fic = self.mesh_file
211 #
212       if ( fic[:1] == "~" ) :
213         fic = os.path.join(HOME, fic[2:])
214       if not os.path.isfile(fic) :
215         aux = os.path.join(self.rep_calc, fic)
216         if not os.path.isfile(aux) :
217           self.message_info += "Fichier : " + fic
218           erreur = -5
219           break
220         else :
221           fic = os.path.normpath(aux)
222       aux = os.path.join(os.getcwd(), fic)
223 #
224       self.mesh_file = os.path.normpath(aux)
225 #
226 # 2. Le numero du calcul
227 #
228       if self.numero == None :
229         erreur = -9
230 #
231       break
232 #
233     if erreur :
234       message_erreur = messages_erreur[erreur]
235 #
236     if self.verbose_max :
237       print(". rep_calc  :", self.rep_calc)
238       print(". mesh_file :", self.mesh_file)
239 #
240     return erreur, message_erreur
241 #
242 #=========================  Fin de la fonction ===================================
243 #
244 #
245 if __name__ == "__main__" :
246 #
247   #print "Arguments a l'entree de",  sys.argv[0], ":", sys.argv[1:], "\n"
248 #
249   Script_A = Script(sys.argv[1:])
250 #
251   if Script_A.affiche_aide_globale :
252     Script_A.message_info = Script_A.__doc__
253     erreur_m = 0
254     message_erreur_m = ""
255   else :
256     dico_resu_m = {}
257     erreur_m, message_erreur_m, dico_resu_m = Script_A.compute ()
258 #
259   sys.stdout.write(Script_A.message_info+"\n")
260   sys.stderr.write(message_erreur_m+"\n")
261   sys.exit(erreur_m)