1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2021 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 __revision__ = "V03.01"
22 """Lancement des cas-tests de blocFissure"""
30 from blocFissure.gmu import initLog
31 from blocFissure.gmu.casStandard import casStandard
33 # -----------------------------------------------------------------------------------------------
34 LOGFILE = os.path.join(tempfile.gettempdir(),"blocFissure.log")
35 #initLog.setDebug(LOGFILE) # debug = 10
36 #initLog.setVerbose(LOGFILE) # info = 20
37 #initLog.setRelease(LOGFILE) # warning = 30
38 #initLog.setPerfTests(LOGFILE) # critical = 50
39 #initLog.setAlways(LOGFILE) # critical = 50
41 # Les cas qui marchent ...
42 TORUNOK = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] # OK 19/04/2021
43 # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
46 TORUNPB.append((IAUX+1)%2)
47 print ("TORUN = {} # OK".format(TORUNOK))
48 print ("TORUN = {} # PB".format(TORUNPB))
50 # Numéro de référence associé à chaque problème
52 NREF_PB["cubeAngle"] = 0
53 NREF_PB["cubeAngle2"] = 1
54 NREF_PB["cubeCoin"] = 2
55 NREF_PB["cubeMilieu"] = 3
56 NREF_PB["cubeTransverse"] = 4
57 NREF_PB["cylindre"] = 5
58 NREF_PB["cylindre2"] = 6
59 NREF_PB["disquePerce"] = 7
60 NREF_PB["ellipse1"] = 8
61 NREF_PB["ellipse2"] = 9
62 NREF_PB["eprouvetteCourbe"] = 10
63 NREF_PB["eprouvetteDroite"] = 11
64 NREF_PB["eprouvetteDroite_2"] = 12
65 NREF_PB["faceGauche"] = 13
66 NREF_PB["faceGauche_2"] = 14
67 NREF_PB["fissureCoude_1"] = 15
68 NREF_PB["fissureCoude_2"] = 16
69 NREF_PB["fissureCoude_3"] = 17
70 NREF_PB["fissureCoude_4"] = 18
71 NREF_PB["fissureCoude_5"] = 19
72 NREF_PB["fissureCoude_6"] = 20
73 NREF_PB["fissureCoude_7"] = 21
74 NREF_PB["fissureCoude_8"] = 22
75 NREF_PB["fissureCoude_9"] = 23
76 NREF_PB["fissureCoude_10"] = 24
77 NREF_PB["fissure_Coude"] = 25
78 NREF_PB["fissure_Coude_4"] = 26
82 #========================= Début de la classe ===================================
84 class blocFissureTest (object):
86 """Test de blocFissure
90 Le(s) numéro/nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
98 affiche_aide_globale = 0
104 d_nom_probleme = None
107 #=========================== Début de la méthode =================================
109 def __init__ ( self, liste_option ):
111 """Le constructeur de la classe blocFissureTest"""
116 for option in liste_option :
118 #print (option, type(option))
119 if isinstance(option, str):
120 saux = option.upper()
124 # Options générales de pilotage
125 if saux in ( "-H", "-HELP" ):
126 self.affiche_aide_globale = 1
129 elif saux == "-VMAX" :
131 self._verbose_max = 1
134 # Options du traitement
135 if isinstance(option, int):
136 self.l_cas.append(option)
137 elif ( option in NREF_PB ):
138 self.l_cas.append(NREF_PB[option])
140 print ("Option inconnue : {}".format(option))
143 # Si aucun cas n'est donné, on prend tous ceux par défaut
145 for i_aux, valeur in enumerate(TORUNOK):
147 self.l_cas.append(i_aux)
152 if self._verbose_max:
153 print ("Liste des cas : {}".format(self.l_cas))
155 if self._verbose_max:
156 initLog.setVerbose(LOGFILE) # info = 20
157 #if self._verbose_max:
158 #initLog.setDebug(LOGFILE) # debug = 10
160 #=========================== Fin de la méthode ==================================
162 #=========================== Début de la méthode =================================
165 """A la suppression de l'instance de classe"""
166 if self._verbose_max:
167 print ("Suppression de l'instance de la classe.")
169 #=========================== Fin de la méthode ==================================
171 #=========================== Début de la méthode =================================
173 def caract_l_problemes (self):
174 """Caractérisation des problèmes"""
175 self.d_nom_probleme = dict()
176 self.l_problemes = list()
177 self.l_materiels = list()
180 if n_cas in self.l_cas:
181 # genereMateriel : cubeAngle
182 from blocFissure.CasTests.cubeAngle import cubeAngle
183 self.l_problemes.append(cubeAngle(n_cas))
184 self.l_materiels.append("cubeAngle")
187 if n_cas in self.l_cas:
188 # genereMateriel : cubeAngle
189 from blocFissure.CasTests.cubeAngle2 import cubeAngle2
190 self.l_problemes.append(cubeAngle2(n_cas))
191 self.l_materiels.append("cubeAngle")
194 if n_cas in self.l_cas:
195 # genereMateriel : cubeFin
196 from blocFissure.CasTests import cubeCoin
197 self.l_problemes.append(casStandard(cubeCoin.dicoParams, cubeCoin.referencesMaillageFissure, n_cas))
198 self.d_nom_probleme[n_cas] = "cubeCoin"
199 self.l_materiels.append("cubeFin")
202 if n_cas in self.l_cas:
203 # genereMateriel : cubeFin
204 from blocFissure.CasTests import cubeMilieu
205 self.l_problemes.append(casStandard(cubeMilieu.dicoParams, cubeMilieu.referencesMaillageFissure, n_cas))
206 self.d_nom_probleme[n_cas] = "cubeMilieu"
207 self.l_materiels.append("cubeFin")
210 if n_cas in self.l_cas:
211 # genereMateriel : cubeFin
212 from blocFissure.CasTests import cubeTransverse
213 self.l_problemes.append(casStandard(cubeTransverse.dicoParams, cubeTransverse.referencesMaillageFissure, n_cas))
214 self.d_nom_probleme[n_cas] = "cubeTransverse"
215 self.l_materiels.append("cubeFin")
218 if n_cas in self.l_cas:
219 # genereMateriel : decoupeCylindre
220 from blocFissure.CasTests.cylindre import cylindre
221 self.l_problemes.append(cylindre(n_cas))
222 self.l_materiels.append("decoupeCylindre")
225 if n_cas in self.l_cas:
226 # genereMateriel : decoupeCylindre
227 from blocFissure.CasTests.cylindre_2 import cylindre_2
228 self.l_problemes.append(cylindre_2(n_cas))
229 self.l_materiels.append("decoupeCylindre")
232 if n_cas in self.l_cas:
233 # genereMateriel : disque_perce
234 # genereMateriel : ellipse_disque
235 from blocFissure.CasTests import disquePerce
236 self.l_problemes.append(casStandard(disquePerce.dicoParams, disquePerce.referencesMaillageFissure, n_cas))
237 self.d_nom_probleme[n_cas] = "disquePerce"
238 self.l_materiels.append("disque_perce")
239 self.l_materiels.append("ellipse_disque")
242 if n_cas in self.l_cas:
243 # genereMateriel: ellipse
244 # genereMateriel : fissureGauche2
245 from blocFissure.CasTests.ellipse_1 import ellipse_1
246 self.l_problemes.append(ellipse_1(n_cas))
247 self.l_materiels.append("ellipse")
248 self.l_materiels.append("fissureGauche2")
251 if n_cas in self.l_cas:
252 # genereMateriel: ellipse_probleme
253 # genereMateriel : fissureGauche2
254 from blocFissure.CasTests.ellipse_2 import ellipse_2
255 self.l_problemes.append(ellipse_2(n_cas))
256 self.l_materiels.append("ellipse_probleme")
257 self.l_materiels.append("fissureGauche2")
260 if n_cas in self.l_cas:
261 # genereMateriel : eprouvetteCourbe
262 from blocFissure.CasTests.eprouvetteCourbe import eprouvetteCourbe
263 self.l_problemes.append(eprouvetteCourbe(n_cas))
264 self.l_materiels.append("eprouvetteCourbe")
267 if n_cas in self.l_cas:
268 # genereMateriel : eprouvetteDroite
269 from blocFissure.CasTests.eprouvetteDroite import eprouvetteDroite
270 self.l_problemes.append(eprouvetteDroite(n_cas))
271 self.l_materiels.append("eprouvetteDroite")
274 if n_cas in self.l_cas:
275 # genereMateriel : eprouvetteDroite
276 from blocFissure.CasTests.eprouvetteDroite_2 import eprouvetteDroite_2
277 self.l_problemes.append(eprouvetteDroite_2(n_cas))
278 self.l_materiels.append("eprouvetteDroite")
281 if n_cas in self.l_cas:
282 # genereMateriel : fissureGauche
283 from blocFissure.CasTests.faceGauche import faceGauche
284 self.l_problemes.append(faceGauche(n_cas))
285 self.l_materiels.append("fissureGauche")
288 if n_cas in self.l_cas:
289 # genereMateriel : fissureGauche2
290 from blocFissure.CasTests.faceGauche_2 import faceGauche_2
291 self.l_problemes.append(faceGauche_2(n_cas))
292 self.l_materiels.append("fissureGauche2")
295 if n_cas in self.l_cas:
296 # genereMateriel : aucun
297 from blocFissure.CasTests.fissureCoude_1 import fissureCoude_1
298 self.l_problemes.append(fissureCoude_1(n_cas))
301 if n_cas in self.l_cas:
302 # genereMateriel : aucun
303 from blocFissure.CasTests.fissureCoude_2 import fissureCoude_2
304 self.l_problemes.append(fissureCoude_2(n_cas))
307 if n_cas in self.l_cas:
308 # genereMateriel : aucun
309 from blocFissure.CasTests.fissureCoude_3 import fissureCoude_3
310 self.l_problemes.append(fissureCoude_3(n_cas))
313 if n_cas in self.l_cas:
314 # genereMateriel : aucun
315 from blocFissure.CasTests.fissureCoude_4 import fissureCoude_4
316 self.l_problemes.append(fissureCoude_4(n_cas))
319 if n_cas in self.l_cas:
320 # genereMateriel : aucun
321 from blocFissure.CasTests.fissureCoude_5 import fissureCoude_5
322 self.l_problemes.append(fissureCoude_5(n_cas))
325 if n_cas in self.l_cas:
326 # genereMateriel : aucun
327 from blocFissure.CasTests.fissureCoude_6 import fissureCoude_6
328 self.l_problemes.append(fissureCoude_6(n_cas))
331 if n_cas in self.l_cas:
332 # genereMateriel : aucun
333 from blocFissure.CasTests.fissureCoude_7 import fissureCoude_7
334 self.l_problemes.append(fissureCoude_7(n_cas))
337 if n_cas in self.l_cas:
338 # genereMateriel : aucun
339 from blocFissure.CasTests.fissureCoude_8 import fissureCoude_8
340 self.l_problemes.append(fissureCoude_8(n_cas))
343 if n_cas in self.l_cas:
344 # genereMateriel : aucun
345 from blocFissure.CasTests.fissureCoude_9 import fissureCoude_9
346 self.l_problemes.append(fissureCoude_9(n_cas))
349 if n_cas in self.l_cas:
350 # genereMateriel : aucun
351 from blocFissure.CasTests.fissureCoude_10 import fissureCoude_10
352 self.l_problemes.append(fissureCoude_10(n_cas))
355 if n_cas in self.l_cas:
356 # genereMateriel : aucun
357 from blocFissure.CasTests.fissure_Coude import fissure_Coude
358 self.l_problemes.append(fissure_Coude(n_cas))
361 if n_cas in self.l_cas:
362 # genereMateriel : aucun
363 from blocFissure.CasTests.fissure_Coude_4 import fissure_Coude_4
364 self.l_problemes.append(fissure_Coude_4(n_cas))
367 if n_cas in self.l_cas:
368 # genereMateriel : vis
369 from blocFissure.CasTests.vis_1 import vis_1
370 self.l_problemes.append(vis_1(n_cas))
371 self.l_materiels.append("vis")
374 if n_cas in self.l_cas:
375 # genereMateriel : tube
376 from blocFissure.CasTests.tube import tube
377 self.l_problemes.append(tube(n_cas))
378 self.l_materiels.append("tube")
379 #"Mesh_13" has not been computed:
380 #- "algo2d_facePeau_0" failed on "FACE_12 to mesh". Error: Algorithm failed. NgException at Surface meshing: Problem in Surface mesh generation
381 #- "algo1d_cercle1_0" failed on EDGE #20. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
382 #- "algo1d_cercle1_0" failed on EDGE #17. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
383 #- "algo1d_cercle1_0" failed on EDGE #15. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
384 #- "algo1d_cercle1_0" failed on EDGE #12. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
388 #=========================== Fin de la méthode ==================================
390 #=========================== Début de la méthode =================================
392 def cree_materiels (self):
393 """Création des matériels"""
395 if "cubeAngle" in self.l_materiels:
396 from blocFissure.materielCasTests import cubeAngle
398 if "cubeFin" in self.l_materiels:
399 from blocFissure.materielCasTests import cubeFin
401 if "decoupeCylindre" in self.l_materiels:
402 from blocFissure.materielCasTests import decoupeCylindre
404 if "disque_perce" in self.l_materiels:
405 from blocFissure.materielCasTests import disque_perce
407 if "ellipse_disque" in self.l_materiels:
408 from blocFissure.materielCasTests import ellipse_disque
410 if "ellipse" in self.l_materiels:
411 from blocFissure.materielCasTests import ellipse
413 if "fissureGauche" in self.l_materiels:
414 from blocFissure.materielCasTests import fissureGauche
416 if "fissureGauche2" in self.l_materiels:
417 from blocFissure.materielCasTests import fissureGauche2
419 if "eprouvetteCourbe" in self.l_materiels:
420 from blocFissure.materielCasTests import eprouvetteCourbe
422 if "eprouvetteDroite" in self.l_materiels:
423 from blocFissure.materielCasTests import eprouvetteDroite
425 if "vis" in self.l_materiels:
426 from blocFissure.materielCasTests import vis
428 if "tube" in self.l_materiels:
429 from blocFissure.materielCasTests import tube
433 #=========================== Fin de la méthode ==================================
435 #=========================== Début de la méthode =================================
437 def calcul_cas (self, n_cas, cas, ligne):
438 """Calcul d'un cas"""
440 if n_cas in self.d_nom_probleme:
441 nom = self.d_nom_probleme[n_cas]
443 nom = cas.nomProbleme
444 texte_a = "\n=== Exécution du cas n° {}, '{}'".format(NREF_PB[nom],nom)
445 logging.critical(ligne+texte_a)
448 ok_maillage = cas.executeProbleme()
450 traceback.print_exc()
453 texte = "Problème avec le cas n° {}, '{}'\n".format(NREF_PB[nom],nom)
456 return ok_maillage, texte
458 #=========================== Fin de la méthode ==================================
460 #=========================== Début de la méthode =================================
462 def calcul_tout (self):
463 """Calcul de tous les cas"""
465 ligne = "---------------------------------------------------------------------"
469 for n_cas, cas in enumerate(self.l_problemes):
470 #print ("Cas n° {}, '{}'".format(n_cas,cas.nomProbleme))
471 ok_maillage, texte_a = self.calcul_cas (n_cas, cas, ligne)
479 nb_cas = nb_cas_nook + nb_cas_ok
482 texte += ". Nombre de cas_tests OK : {}\n".format(nb_cas_ok)
483 texte += ". Nombre de cas_tests NOOK : {}\n".format(nb_cas_nook)
485 texte += "Les {} tests se sont bien passés.\n".format(nb_cas)
487 logging.critical(ligne+texte)
491 #=========================== Fin de la méthode ==================================
493 #=========================== Début de la méthode =================================
495 def lancement (self):
496 """Lancement général"""
499 self.caract_l_problemes ()
501 # Création des matériels
502 self.cree_materiels ()
504 # Calcul des fissures
505 texte = self.calcul_tout ()
509 #=========================== Fin de la méthode ==================================
511 #========================== Fin de la classe ====================================
513 #==================================================================================
515 #==================================================================================
517 if __name__ == "__main__" :
521 L_OPTIONS = sys.argv[1:]
522 L_OPTIONS.append("-v")
524 # 2. Lancement de la classe
526 #print ("L_OPTIONS :", L_OPTIONS)
527 BLOCFISSURE_TEST = blocFissureTest(L_OPTIONS)
529 if BLOCFISSURE_TEST.affiche_aide_globale:
530 sys.stdout.write(BLOCFISSURE_TEST.__doc__+"\n")
532 TEXTE = BLOCFISSURE_TEST.lancement()
533 sys.stdout.write(TEXTE)