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.02"
22 """Lancement des cas-tests de blocFissure
24 Temps par type de matériel :
25 . cubeAngle : 24s ["cubeAngle", "cubeAngle_2"])
26 . cubeFin : 42s ["cubeCoin", "cubeMilieu", "cubeTransverse"]
27 . decoupeCylindre : 8s ["cylindre", "cylindre_2"]
28 . disquePerce (+ ellipse_disque) : 9s ["disquePerce"]
29 . fissureGauche : 26s ["faceGauche"]
30 . fissureGauche_2 (+ ellipse + ellipse_probleme): 22s ["ellipse_1", "ellipse_2", "faceGauche_2"]
31 . eprouvetteCourbe : 22s ["eprouvetteCourbe"]
32 . eprouvetteDroite : 31s ["eprouvetteDroite", "eprouvetteDroite_2"]
35 . sans matériel : 66s ["fissureCoude_1", "fissureCoude_2", "fissureCoude_3", "fissureCoude_4", "fissureCoude_5"]
36 . sans matériel : 69s ["fissureCoude_6", "fissureCoude_7", "fissureCoude_8", "fissureCoude_9", "fissureCoude_10"]
37 . sans matériel : 28s ["fissure_Coude", "fissure_Coude_4"]
46 from blocFissure.gmu import initLog
47 from blocFissure.gmu.casStandard import casStandard
49 # -----------------------------------------------------------------------------------------------
50 LOGFILE = tempfile.NamedTemporaryFile().name + "_blocFissure.log"
51 #initLog.setDebug(LOGFILE) # debug = 10
52 #initLog.setVerbose(LOGFILE) # info = 20
53 #initLog.setRelease(LOGFILE) # warning = 30
54 #initLog.setPerfTests(LOGFILE) # critical = 50
55 #initLog.setAlways(LOGFILE) # critical = 50
57 # Les cas qui marchent ...
58 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
59 # 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
62 TORUNPB.append((IAUX+1)%2)
63 print ("TORUN = {} # OK".format(TORUNOK))
64 print ("TORUN = {} # PB".format(TORUNPB))
66 # Numéro de référence associé à chaque problème défini par le nom de son fichier dans le répertoire CasTests
68 NREF_PB["cubeAngle"] = 0
69 NREF_PB["cubeAngle_2"] = 1
70 NREF_PB["cubeCoin"] = 2
71 NREF_PB["cubeMilieu"] = 3
72 NREF_PB["cubeTransverse"] = 4
73 NREF_PB["cylindre"] = 5
74 NREF_PB["cylindre_2"] = 6
75 NREF_PB["disquePerce"] = 7
76 NREF_PB["ellipse_1"] = 8
77 NREF_PB["ellipse_2"] = 9
78 NREF_PB["eprouvetteCourbe"] = 10
79 NREF_PB["eprouvetteDroite"] = 11
80 NREF_PB["eprouvetteDroite_2"] = 12
81 NREF_PB["faceGauche"] = 13
82 NREF_PB["faceGauche_2"] = 14
83 NREF_PB["fissureCoude_1"] = 15
84 NREF_PB["fissureCoude_2"] = 16
85 NREF_PB["fissureCoude_3"] = 17
86 NREF_PB["fissureCoude_4"] = 18
87 NREF_PB["fissureCoude_5"] = 19
88 NREF_PB["fissureCoude_6"] = 20
89 NREF_PB["fissureCoude_7"] = 21
90 NREF_PB["fissureCoude_8"] = 22
91 NREF_PB["fissureCoude_9"] = 23
92 NREF_PB["fissureCoude_10"] = 24
93 NREF_PB["fissure_Coude"] = 25
94 NREF_PB["fissure_Coude_4"] = 26
98 #========================= Début de la classe ===================================
100 class blocFissureTest (object):
102 """Test de blocFissure
106 Le(s) numéro/nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
114 affiche_aide_globale = 0
120 d_nom_probleme = None
123 #=========================== Début de la méthode =================================
125 def __init__ ( self, liste_option ):
127 """Le constructeur de la classe blocFissureTest"""
132 for option in liste_option :
134 #print (option, type(option))
135 if isinstance(option, str):
136 saux = option.upper()
140 # Options générales de pilotage
141 if saux in ( "-H", "-HELP" ):
142 self.affiche_aide_globale = 1
145 elif saux == "-VMAX" :
147 self._verbose_max = 1
150 # Options du traitement
151 if isinstance(option, int):
152 self.l_cas.append(option)
153 elif ( option in NREF_PB ):
154 self.l_cas.append(NREF_PB[option])
156 print ("Option inconnue : {}".format(option))
159 # Si aucun cas n'est donné, on prend tous ceux par défaut
161 for i_aux, valeur in enumerate(TORUNOK):
163 self.l_cas.append(i_aux)
168 if self._verbose_max:
169 print ("Liste des cas : {}".format(self.l_cas))
171 if self._verbose_max:
172 initLog.setVerbose(LOGFILE) # info = 20
174 #=========================== Fin de la méthode ==================================
176 #=========================== Début de la méthode =================================
179 """A la suppression de l'instance de classe"""
180 if self._verbose_max:
181 print ("Suppression de l'instance de la classe.")
183 #=========================== Fin de la méthode ==================================
185 #=========================== Début de la méthode =================================
187 def caract_l_problemes (self):
188 """Caractérisation des problèmes"""
189 self.d_nom_probleme = dict()
190 self.l_problemes = list()
191 self.l_materiels = list()
194 if n_cas in self.l_cas:
195 from blocFissure.CasTests.cubeAngle import cubeAngle
196 self.l_problemes.append(cubeAngle(n_cas))
197 self.l_materiels.append("cubeAngle")
200 if n_cas in self.l_cas:
201 from blocFissure.CasTests.cubeAngle_2 import cubeAngle_2
202 self.l_problemes.append(cubeAngle_2(n_cas))
203 self.l_materiels.append("cubeAngle")
206 if n_cas in self.l_cas:
207 from blocFissure.CasTests import cubeCoin
208 self.l_problemes.append(casStandard(cubeCoin.dicoParams, cubeCoin.referencesMaillageFissure, n_cas))
209 self.d_nom_probleme[n_cas] = "cubeCoin"
210 self.l_materiels.append("cubeFin")
213 if n_cas in self.l_cas:
214 from blocFissure.CasTests import cubeMilieu
215 self.l_problemes.append(casStandard(cubeMilieu.dicoParams, cubeMilieu.referencesMaillageFissure, n_cas))
216 self.d_nom_probleme[n_cas] = "cubeMilieu"
217 self.l_materiels.append("cubeFin")
220 if n_cas in self.l_cas:
221 from blocFissure.CasTests import cubeTransverse
222 self.l_problemes.append(casStandard(cubeTransverse.dicoParams, cubeTransverse.referencesMaillageFissure, n_cas))
223 self.d_nom_probleme[n_cas] = "cubeTransverse"
224 self.l_materiels.append("cubeFin")
227 if n_cas in self.l_cas:
228 from blocFissure.CasTests.cylindre import cylindre
229 self.l_problemes.append(cylindre(n_cas))
230 self.l_materiels.append("decoupeCylindre")
233 if n_cas in self.l_cas:
234 from blocFissure.CasTests.cylindre_2 import cylindre_2
235 self.l_problemes.append(cylindre_2(n_cas))
236 self.l_materiels.append("decoupeCylindre")
239 if n_cas in self.l_cas:
240 from blocFissure.CasTests import disquePerce
241 self.l_problemes.append(casStandard(disquePerce.dicoParams, disquePerce.referencesMaillageFissure, n_cas))
242 self.d_nom_probleme[n_cas] = "disquePerce"
243 self.l_materiels.append("disquePerce")
244 self.l_materiels.append("ellipse_disque")
247 if n_cas in self.l_cas:
248 from blocFissure.CasTests.ellipse_1 import ellipse_1
249 self.l_problemes.append(ellipse_1(n_cas))
250 self.l_materiels.append("ellipse")
251 self.l_materiels.append("fissureGauche_2")
254 if n_cas in self.l_cas:
255 from blocFissure.CasTests.ellipse_2 import ellipse_2
256 self.l_problemes.append(ellipse_2(n_cas))
257 self.l_materiels.append("ellipse_probleme")
258 self.l_materiels.append("fissureGauche_2")
261 if n_cas in self.l_cas:
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 from blocFissure.CasTests.eprouvetteDroite import eprouvetteDroite
269 self.l_problemes.append(eprouvetteDroite(n_cas))
270 self.l_materiels.append("eprouvetteDroite")
273 if n_cas in self.l_cas:
274 from blocFissure.CasTests.eprouvetteDroite_2 import eprouvetteDroite_2
275 self.l_problemes.append(eprouvetteDroite_2(n_cas))
276 self.l_materiels.append("eprouvetteDroite")
279 if n_cas in self.l_cas:
280 from blocFissure.CasTests.faceGauche import faceGauche
281 self.l_problemes.append(faceGauche(n_cas))
282 self.l_materiels.append("fissureGauche")
285 if n_cas in self.l_cas:
286 from blocFissure.CasTests.faceGauche_2 import faceGauche_2
287 self.l_problemes.append(faceGauche_2(n_cas))
288 self.l_materiels.append("fissureGauche_2")
291 if n_cas in self.l_cas:
292 from blocFissure.CasTests.fissureCoude_1 import fissureCoude_1
293 self.l_problemes.append(fissureCoude_1(n_cas))
296 if n_cas in self.l_cas:
297 from blocFissure.CasTests.fissureCoude_2 import fissureCoude_2
298 self.l_problemes.append(fissureCoude_2(n_cas))
301 if n_cas in self.l_cas:
302 from blocFissure.CasTests.fissureCoude_3 import fissureCoude_3
303 self.l_problemes.append(fissureCoude_3(n_cas))
306 if n_cas in self.l_cas:
307 from blocFissure.CasTests.fissureCoude_4 import fissureCoude_4
308 self.l_problemes.append(fissureCoude_4(n_cas))
311 if n_cas in self.l_cas:
312 from blocFissure.CasTests.fissureCoude_5 import fissureCoude_5
313 self.l_problemes.append(fissureCoude_5(n_cas))
316 if n_cas in self.l_cas:
317 from blocFissure.CasTests.fissureCoude_6 import fissureCoude_6
318 self.l_problemes.append(fissureCoude_6(n_cas))
321 if n_cas in self.l_cas:
322 from blocFissure.CasTests.fissureCoude_7 import fissureCoude_7
323 self.l_problemes.append(fissureCoude_7(n_cas))
326 if n_cas in self.l_cas:
327 from blocFissure.CasTests.fissureCoude_8 import fissureCoude_8
328 self.l_problemes.append(fissureCoude_8(n_cas))
331 if n_cas in self.l_cas:
332 from blocFissure.CasTests.fissureCoude_9 import fissureCoude_9
333 self.l_problemes.append(fissureCoude_9(n_cas))
336 if n_cas in self.l_cas:
337 from blocFissure.CasTests.fissureCoude_10 import fissureCoude_10
338 self.l_problemes.append(fissureCoude_10(n_cas))
341 if n_cas in self.l_cas:
342 from blocFissure.CasTests.fissure_Coude import fissure_Coude
343 self.l_problemes.append(fissure_Coude(n_cas))
346 if n_cas in self.l_cas:
347 from blocFissure.CasTests.fissure_Coude_4 import fissure_Coude_4
348 self.l_problemes.append(fissure_Coude_4(n_cas))
351 if n_cas in self.l_cas:
352 # genereMateriel : vis
353 from blocFissure.CasTests.vis_1 import vis_1
354 self.l_problemes.append(vis_1(n_cas))
355 self.l_materiels.append("vis")
358 if n_cas in self.l_cas:
359 # genereMateriel : tube
360 from blocFissure.CasTests.tube import tube
361 self.l_problemes.append(tube(n_cas))
362 self.l_materiels.append("tube")
363 #"Mesh_13" has not been computed:
364 #- "algo2d_facePeau_0" failed on "FACE_12 to mesh". Error: Algorithm failed. NgException at Surface meshing: Problem in Surface mesh generation
365 #- "algo1d_cercle1_0" failed on EDGE #20. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
366 #- "algo1d_cercle1_0" failed on EDGE #17. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
367 #- "algo1d_cercle1_0" failed on EDGE #15. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
368 #- "algo1d_cercle1_0" failed on EDGE #12. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
372 #=========================== Fin de la méthode ==================================
374 #=========================== Début de la méthode =================================
376 def cree_materiels (self):
377 """Création des matériels"""
379 if "cubeAngle" in self.l_materiels:
380 from blocFissure.materielCasTests import cubeAngle
382 if "cubeFin" in self.l_materiels:
383 from blocFissure.materielCasTests import cubeFin
385 if "decoupeCylindre" in self.l_materiels:
386 from blocFissure.materielCasTests import decoupeCylindre
388 if "disquePerce" in self.l_materiels:
389 from blocFissure.materielCasTests import disquePerce
391 if "ellipse_disque" in self.l_materiels:
392 from blocFissure.materielCasTests import ellipse_disque
394 if "ellipse_probleme" in self.l_materiels:
395 from blocFissure.materielCasTests import ellipse_probleme
397 if "ellipse" in self.l_materiels:
398 from blocFissure.materielCasTests import ellipse
400 if "fissureGauche" in self.l_materiels:
401 from blocFissure.materielCasTests import fissureGauche
403 if "fissureGauche_2" in self.l_materiels:
404 from blocFissure.materielCasTests import fissureGauche_2
406 if "eprouvetteCourbe" in self.l_materiels:
407 from blocFissure.materielCasTests import eprouvetteCourbe
409 if "eprouvetteDroite" in self.l_materiels:
410 from blocFissure.materielCasTests import eprouvetteDroite
412 if "vis" in self.l_materiels:
413 from blocFissure.materielCasTests import vis
415 if "tube" in self.l_materiels:
416 from blocFissure.materielCasTests import tube
420 #=========================== Fin de la méthode ==================================
422 #=========================== Début de la méthode =================================
424 def calcul_cas (self, n_cas, cas, ligne):
425 """Calcul d'un cas"""
427 if n_cas in self.d_nom_probleme:
428 nom = self.d_nom_probleme[n_cas]
430 nom = cas.nomProbleme
431 texte_a = "\n=== Exécution du cas n° {}, '{}'".format(NREF_PB[nom],nom)
432 logging.critical((ligne+texte_a).encode('utf-8'))
435 ok_maillage = cas.executeProbleme()
437 traceback.print_exc()
440 texte = "Problème avec le cas n° {}, '{}'\n".format(NREF_PB[nom],nom)
443 return ok_maillage, texte
445 #=========================== Fin de la méthode ==================================
447 #=========================== Début de la méthode =================================
449 def calcul_tout (self):
450 """Calcul de tous les cas"""
452 ligne = "---------------------------------------------------------------------"
456 for n_cas, cas in enumerate(self.l_problemes):
457 #print ("Cas n° {}, '{}'".format(n_cas,cas.nomProbleme))
458 ok_maillage, texte_a = self.calcul_cas (n_cas, cas, ligne)
466 nb_cas = nb_cas_nook + nb_cas_ok
469 texte += ". Nombre de cas_tests OK : {}\n".format(nb_cas_ok)
470 texte += ". Nombre de cas_tests NOOK : {}\n".format(nb_cas_nook)
472 texte += "Les {} tests se sont bien passés.\n".format(nb_cas)
473 print ((texte+ligne).encode('utf-8'))
474 logging.critical((ligne+texte).encode('utf-8'))
478 #=========================== Fin de la méthode ==================================
480 #=========================== Début de la méthode =================================
482 def lancement (self):
483 """Lancement général"""
486 self.caract_l_problemes ()
488 # Création des matériels
489 self.cree_materiels ()
491 # Calcul des fissures
492 texte = self.calcul_tout ()
496 #=========================== Fin de la méthode ==================================
498 #========================== Fin de la classe ====================================
500 #==================================================================================
502 #==================================================================================
504 if __name__ == "__main__" :
508 L_OPTIONS = sys.argv[1:]
509 L_OPTIONS.append("-v")
511 # 2. Lancement de la classe
513 #print ("L_OPTIONS :", L_OPTIONS)
514 BLOCFISSURE_TEST = blocFissureTest(L_OPTIONS)
516 if BLOCFISSURE_TEST.affiche_aide_globale:
517 sys.stdout.write(BLOCFISSURE_TEST.__doc__+"\n")
519 TEXTE = BLOCFISSURE_TEST.lancement()
520 sys.stdout.write(TEXTE)