Salome HOME
Ajout d'un test de non régression pour blocFissure
[modules/smesh.git] / src / Tools / blocFissure / CasTests / execution_Cas.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2021  EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """Lancement des cas-tests de blocFissure"""
21
22 import logging
23 import os
24 import tempfile
25 import traceback
26
27 from blocFissure.gmu import initLog
28 from blocFissure.gmu.casStandard import casStandard
29
30 # -----------------------------------------------------------------------------------------------
31 LOGFILE = os.path.join(tempfile.gettempdir(),"blocFissure.log")
32 #initLog.setDebug(LOGFILE)     # debug = 10
33 #initLog.setVerbose(LOGFILE)   # info = 20
34 #initLog.setRelease(LOGFILE)   # warning = 30
35 #initLog.setPerfTests(LOGFILE) # critical = 50
36 #initLog.setAlways(LOGFILE)    # critical = 50
37
38 # ---tous les cas en séquence, ou les cas sélectionnés ...
39 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
40 #           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
41 #RUNALL = False
42 RUNALL = True
43 if RUNALL:
44   TORUN = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
45 #           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   TORUN = TORUNOK
47 else:
48   TORUNPB = list()
49   for IAUX in TORUNOK:
50     TORUNPB.append((IAUX+1)%2)
51   print ("TORUN = {} # OK".format(TORUNOK))
52   print ("TORUN = {} # PB".format(TORUNPB))
53 #                                                                                                    genereMateriel
54   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] # aucun
55   TORUN = [ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # cubeAngle
56   TORUN = [ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # cubeFin
57   TORUN = [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # decoupeCylindre
58   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # disque_perce + ellipse_disque
59   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # ellipse + fissureGauche2
60   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # ellipse_probleme + fissureGauche2
61   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # eprouvetteCourbe
62   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # eprouvetteDroite
63   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # fissureGauche
64   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # fissureGauche2
65   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] # vis
66   TORUN = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] # tube
67 #           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
68   TORUN = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] #  OK
69 # -----------------------------------------------------------------------------------------------
70
71 def caract_l_problemes ():
72   """Caractérisation des problèmes"""
73   d_aux = dict()
74   l_problemes = list()
75
76   n_cas = 0
77   # genereMateriel : cubeAngle
78   from blocFissure.CasTests.cubeAngle import cubeAngle
79   l_problemes.append(cubeAngle(n_cas))
80
81   n_cas = 1
82   # genereMateriel : cubeAngle
83   from blocFissure.CasTests.cubeAngle2 import cubeAngle2
84   l_problemes.append(cubeAngle2(n_cas))
85
86   n_cas = 2
87   # genereMateriel : cubeFin
88   from blocFissure.CasTests import cubeCoin
89   l_problemes.append(casStandard(cubeCoin.dicoParams, cubeCoin.referencesMaillageFissure, n_cas))
90   d_aux[n_cas] = "cubeCoin"
91
92   n_cas = 3
93   # genereMateriel : cubeFin
94   from blocFissure.CasTests import cubeMilieu
95   l_problemes.append(casStandard(cubeMilieu.dicoParams, cubeMilieu.referencesMaillageFissure, n_cas))
96   d_aux[n_cas] = "cubeMilieu"
97
98   n_cas = 4
99   # genereMateriel : cubeFin
100   from blocFissure.CasTests import cubeTransverse
101   l_problemes.append(casStandard(cubeTransverse.dicoParams, cubeTransverse.referencesMaillageFissure, n_cas))
102   d_aux[n_cas] = "cubeTransverse"
103
104   n_cas = 5
105   # genereMateriel : decoupeCylindre
106   from blocFissure.CasTests.cylindre import cylindre
107   l_problemes.append(cylindre(n_cas))
108
109   n_cas = 6
110   # genereMateriel : decoupeCylindre
111   from blocFissure.CasTests.cylindre_2 import cylindre_2
112   l_problemes.append(cylindre_2(n_cas))
113
114   n_cas = 7
115   # genereMateriel : disque_perce
116   # genereMateriel : ellipse_disque
117   from blocFissure.CasTests import disquePerce
118   l_problemes.append(casStandard(disquePerce.dicoParams, disquePerce.referencesMaillageFissure, n_cas))
119   d_aux[n_cas] = "disquePerce"
120
121   n_cas = 8
122   # genereMateriel: ellipse
123   # genereMateriel : fissureGauche2
124   from blocFissure.CasTests.ellipse_1 import ellipse_1
125   l_problemes.append(ellipse_1(n_cas))
126
127   n_cas = 9
128   # genereMateriel: ellipse_probleme
129   # genereMateriel : fissureGauche2
130   from blocFissure.CasTests.ellipse_2 import ellipse_2
131   l_problemes.append(ellipse_2(n_cas))
132
133   n_cas = 10
134   # genereMateriel : eprouvetteCourbe
135   from blocFissure.CasTests.eprouvetteCourbe import eprouvetteCourbe
136   l_problemes.append(eprouvetteCourbe(n_cas))
137
138   n_cas = 11
139   # genereMateriel : eprouvetteDroite
140   from blocFissure.CasTests.eprouvetteDroite import eprouvetteDroite
141   l_problemes.append(eprouvetteDroite(n_cas))
142
143   n_cas = 12
144   # genereMateriel : eprouvetteDroite
145   from blocFissure.CasTests.eprouvetteDroite_2 import eprouvetteDroite_2
146   l_problemes.append(eprouvetteDroite_2(n_cas))
147
148   n_cas = 13
149   # genereMateriel : fissureGauche
150   from blocFissure.CasTests.faceGauche import faceGauche
151   l_problemes.append(faceGauche(n_cas))
152
153   n_cas = 14
154   # genereMateriel : fissureGauche2
155   from blocFissure.CasTests.faceGauche_2 import faceGauche_2
156   l_problemes.append(faceGauche_2(n_cas))
157
158   n_cas = 15
159   # genereMateriel : aucun
160   from blocFissure.CasTests.fissureCoude_1 import fissureCoude_1
161   l_problemes.append(fissureCoude_1(n_cas))
162
163   n_cas = 16
164   # genereMateriel : aucun
165   from blocFissure.CasTests.fissureCoude_2 import fissureCoude_2
166   l_problemes.append(fissureCoude_2(n_cas))
167
168   n_cas = 17
169   # genereMateriel : aucun
170   from blocFissure.CasTests.fissureCoude_3 import fissureCoude_3
171   l_problemes.append(fissureCoude_3(n_cas))
172
173   n_cas = 18
174   # genereMateriel : aucun
175   from blocFissure.CasTests.fissureCoude_4 import fissureCoude_4
176   l_problemes.append(fissureCoude_4(n_cas))
177
178   n_cas = 19
179   # genereMateriel : aucun
180   from blocFissure.CasTests.fissureCoude_5 import fissureCoude_5
181   l_problemes.append(fissureCoude_5(n_cas))
182
183   n_cas = 20
184   # genereMateriel : aucun
185   from blocFissure.CasTests.fissureCoude_6 import fissureCoude_6
186   l_problemes.append(fissureCoude_6(n_cas))
187
188   n_cas = 21
189   # genereMateriel : aucun
190   from blocFissure.CasTests.fissureCoude_7 import fissureCoude_7
191   l_problemes.append(fissureCoude_7(n_cas))
192
193   n_cas = 22
194   # genereMateriel : aucun
195   from blocFissure.CasTests.fissureCoude_8 import fissureCoude_8
196   l_problemes.append(fissureCoude_8(n_cas))
197
198   n_cas = 23
199   # genereMateriel : aucun
200   from blocFissure.CasTests.fissureCoude_9 import fissureCoude_9
201   l_problemes.append(fissureCoude_9(n_cas))
202
203   n_cas = 24
204   # genereMateriel : aucun
205   from blocFissure.CasTests.fissureCoude_10 import fissureCoude_10
206   l_problemes.append(fissureCoude_10(n_cas))
207
208   n_cas = 25
209   # genereMateriel : aucun
210   from blocFissure.CasTests.fissure_Coude import fissure_Coude
211   l_problemes.append(fissure_Coude(n_cas))
212
213   n_cas = 26
214   # genereMateriel : aucun
215   from blocFissure.CasTests.fissure_Coude_4 import fissure_Coude_4
216   l_problemes.append(fissure_Coude_4(n_cas))
217
218   n_cas = 27
219   # genereMateriel : vis
220   from blocFissure.CasTests.vis_1 import vis_1
221   l_problemes.append(vis_1(n_cas))
222
223   n_cas = 28
224   # genereMateriel : tube
225   from blocFissure.CasTests.tube import tube
226   l_problemes.append(tube(n_cas))
227   #"Mesh_13" has not been computed:
228   #-  "algo2d_facePeau_0" failed on "FACE_12 to mesh". Error: Algorithm failed. NgException at Surface meshing: Problem in Surface mesh generation
229   #-  "algo1d_cercle1_0" failed on EDGE #20. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
230   #-  "algo1d_cercle1_0" failed on EDGE #17. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
231   #-  "algo1d_cercle1_0" failed on EDGE #15. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
232   #-  "algo1d_cercle1_0" failed on EDGE #12. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
233
234   return l_problemes, d_aux
235 #=============================================================
236 def calcul_cas (n_cas, cas, d_aux, ligne):
237   """Calcul d'un cas"""
238   texte = ""
239   if n_cas in d_aux:
240     nom = d_aux[n_cas]
241   else:
242     nom = cas.nomProbleme
243   texte_a = "\n=== Exécution du cas n° {}, '{}'".format(n_cas,nom)
244   logging.critical(ligne+texte_a)
245
246   try:
247     ok_maillage = cas.executeProbleme()
248   except:
249     traceback.print_exc()
250     ok_maillage = False
251   if not ok_maillage:
252     texte = "Problème avec le cas n° {}, '{}'\n".format(n_cas,nom)
253   print(ligne)
254
255   return ok_maillage, texte
256 #=============================================================
257 def calcul_tout (l_problemes, d_aux):
258   """Calcul de tous les cas"""
259
260   ligne = "---------------------------------------------------------------------"
261   texte = "\n"
262   nb_cas_ok = 0
263   nb_cas_nook = 0
264   for n_cas, cas in enumerate(l_problemes):
265     #print ("Cas n° {}, '{}'".format(n_cas,cas.nomProbleme))
266     if TORUN[n_cas]:
267       ok_maillage, texte_a = calcul_cas (n_cas, cas, d_aux, ligne)
268       texte += texte_a
269       if ok_maillage:
270         nb_cas_ok += 1
271       else:
272         nb_cas_nook += 1
273       print(ligne)
274
275   nb_cas = nb_cas_nook + nb_cas_ok
276   if ( nb_cas > 1):
277     if nb_cas_nook:
278       texte += ". Nombre de cas_tests OK   : {}\n".format(nb_cas_ok)
279       texte += ". Nombre de cas_tests NOOK : {}\n".format(nb_cas_nook)
280     else:
281       texte += "Les {} tests se sont bien passés.\n".format(nb_cas)
282   print (texte+ligne)
283   logging.critical(ligne+texte)
284
285   return
286 #=============================================================
287 #=============================================================
288
289 while True:
290
291   L_PROBLEMES, D_AUX = caract_l_problemes()
292
293   if ( len(L_PROBLEMES) != len(TORUN) ):
294     TEXTE  = "\nNombre de problèmes définis  : {}\n".format(len(L_PROBLEMES))
295     TEXTE += "Longueur de la liste 'TORUN' : {}\n".format(len(TORUN))
296     TEXTE += "\t==> Incohérence de programmation à corriger dans {}".format(__name__)
297     print (TEXTE)
298     break
299
300   calcul_tout (L_PROBLEMES, D_AUX)
301
302   break