Salome HOME
Merge branch 'master' into gni/evolution
[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 traceback
23
24 import logging
25
26 from blocFissure import gmu
27 from blocFissure.gmu import initLog
28 from blocFissure.gmu import geomsmesh
29 from blocFissure.gmu.casStandard import casStandard
30
31 # -----------------------------------------------------------------------------------------------
32 #initLog.setDebug()
33 #initLog.setVerbose()
34 #initLog.setRelease()
35 #initLog.setPerfTests()
36
37 # ---tous les cas en séquence, ou les cas sélectionnés ...
38 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, 0, 0] # OK
39 #           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
40 #RUNALL = False
41 RUNALL = True
42 if RUNALL:
43   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]
44 #             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
45 else:
46   TORUNPB = list()
47   for IAUX in TORUNOK:
48     TORUNPB.append((IAUX+1)%2)
49   print ("TORUN = {} # OK".format(TORUNOK))
50   print ("TORUN = {} # PB".format(TORUNPB))
51 #                                                                                                    genereMateriel
52   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
53   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
54   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
55   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
56   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
57   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
58   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
59   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
60   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
61   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
62   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 fissureGauche2
63   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
64   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
65 #           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
66   TORUN = [ 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, 0, 0] #  OK
67 # -----------------------------------------------------------------------------------------------
68
69 def caract_l_problemes ():
70   """Caractérisation des problèmes"""
71   d_aux = dict()
72   l_problemes = list()
73
74   n_cas = 0
75   # genereMateriel : cubeAngle
76   from blocFissure.CasTests.cubeAngle import cubeAngle
77   l_problemes.append(cubeAngle(n_cas))
78
79   n_cas = 1
80   # genereMateriel : cubeAngle
81   from blocFissure.CasTests.cubeAngle2 import cubeAngle2
82   l_problemes.append(cubeAngle2(n_cas))
83
84   n_cas = 2
85   # genereMateriel : cubeFin
86   from blocFissure.CasTests import cubeCoin
87   l_problemes.append(casStandard(cubeCoin.dicoParams, cubeCoin.referencesMaillageFissure, n_cas))
88   d_aux[n_cas] = "cubeCoin"
89
90   n_cas = 3
91   # genereMateriel : cubeFin
92   from blocFissure.CasTests import cubeMilieu
93   l_problemes.append(casStandard(cubeMilieu.dicoParams, cubeMilieu.referencesMaillageFissure, n_cas))
94   d_aux[n_cas] = "cubeMilieu"
95
96   n_cas = 4
97   # genereMateriel : cubeFin
98   from blocFissure.CasTests import cubeTransverse
99   l_problemes.append(casStandard(cubeTransverse.dicoParams, cubeTransverse.referencesMaillageFissure, n_cas))
100   d_aux[n_cas] = "cubeTransverse"
101
102   n_cas = 5
103   # genereMateriel : decoupeCylindre
104   from blocFissure.CasTests.cylindre import cylindre
105   l_problemes.append(cylindre(n_cas))
106
107   n_cas = 6
108   # genereMateriel : decoupeCylindre
109   from blocFissure.CasTests.cylindre_2 import cylindre_2
110   l_problemes.append(cylindre_2(n_cas))
111
112   n_cas = 7
113   # genereMateriel : disque_perce
114   # genereMateriel : ellipse_disque
115   from blocFissure.CasTests import disquePerce
116   l_problemes.append(casStandard(disquePerce.dicoParams, disquePerce.referencesMaillageFissure, n_cas))
117   d_aux[n_cas] = "disquePerce"
118
119   n_cas = 8
120   # genereMateriel: ellipse
121   # genereMateriel : fissureGauche2
122   from blocFissure.CasTests.ellipse_1 import ellipse_1
123   l_problemes.append(ellipse_1(n_cas))
124
125   n_cas = 9
126   # genereMateriel: ellipse_probleme
127   # genereMateriel : fissureGauche2
128   from blocFissure.CasTests.ellipse_2 import ellipse_2
129   l_problemes.append(ellipse_2(n_cas))
130
131   n_cas = 10
132   # genereMateriel : eprouvetteCourbe
133   from blocFissure.CasTests.eprouvetteCourbe import eprouvetteCourbe
134   l_problemes.append(eprouvetteCourbe(n_cas))
135
136   n_cas = 11
137   # genereMateriel : eprouvetteDroite
138   from blocFissure.CasTests.eprouvetteDroite import eprouvetteDroite
139   l_problemes.append(eprouvetteDroite(n_cas))
140
141   n_cas = 12
142   # genereMateriel : eprouvetteDroite
143   from blocFissure.CasTests.eprouvetteDroite_2 import eprouvetteDroite_2
144   l_problemes.append(eprouvetteDroite_2(n_cas))
145
146   n_cas = 13
147   # genereMateriel : fissureGauche
148   from blocFissure.CasTests.faceGauche import faceGauche
149   l_problemes.append(faceGauche(n_cas))
150
151   n_cas = 14
152   # genereMateriel : fissureGauche2
153   from blocFissure.CasTests.faceGauche_2 import faceGauche_2
154   l_problemes.append(faceGauche_2(n_cas))
155   #th. 140348470327040 - Trace /home/D68518/salome-dev/DEV_package/modules/src/SMESH/src/SMESH/SMESH_subMesh.cxx [2051] : MG-Tetra failed on sub-shape #1 with error COMPERR_ALGO_FAI
156   #LED "Presumably, the surface mesh is not compatible with the domain being processed (warning).
157   #An edge is unique (i.e., bounds a hole in the surface).
158   #The surface mesh includes at least one hole. The domain is not well defined.
159   #See /tmp/GHS3D_6406_1149841264.log for more information"
160   #5845 construitFissureGenerale_c[89] Erreur au calcul du maillage.
161   #meshBoiteDefaut.Compute
162   #Traceback (most recent call last):
163     #File "/local01/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/CasTests/execution_Cas.py", line 278, in calcul_cas
164       #ok_maillage = cas.executeProbleme()
165     #File "/local01/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/gmu/fissureGenerique.py", line 137, in executeProbleme
166       #elementsDefaut, step, mailleur)
167     #File "/local01/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/CasTests/faceGauche_2.py", line 118, in genereMaillageFissure
168       #step, mailleur, self.numeroCas)
169     #File "/local01/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/gmu/construitFissureGenerale.py", line 227, in construitFissureGenerale
170       #mailleur, nro_cas )
171     #File "/local01/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/gmu/construitFissureGenerale_c.py", line 90, in construitFisureGenerale_c
172
173   n_cas = 15
174   # genereMateriel : aucun
175   from blocFissure.CasTests.fissureCoude_1 import fissureCoude_1
176   l_problemes.append(fissureCoude_1(n_cas))
177
178   n_cas = 16
179   # genereMateriel : aucun
180   from blocFissure.CasTests.fissureCoude_2 import fissureCoude_2
181   l_problemes.append(fissureCoude_2(n_cas))
182
183   n_cas = 17
184   # genereMateriel : aucun
185   from blocFissure.CasTests.fissureCoude_3 import fissureCoude_3
186   l_problemes.append(fissureCoude_3(n_cas))
187
188   n_cas = 18
189   # genereMateriel : aucun
190   from blocFissure.CasTests.fissureCoude_4 import fissureCoude_4
191   l_problemes.append(fissureCoude_4(n_cas))
192
193   n_cas = 19
194   # genereMateriel : aucun
195   from blocFissure.CasTests.fissureCoude_5 import fissureCoude_5
196   l_problemes.append(fissureCoude_5(n_cas))
197
198   n_cas = 20
199   # genereMateriel : aucun
200   from blocFissure.CasTests.fissureCoude_6 import fissureCoude_6
201   l_problemes.append(fissureCoude_6(n_cas))
202
203   n_cas = 21
204   # genereMateriel : aucun
205   from blocFissure.CasTests.fissureCoude_7 import fissureCoude_7
206   l_problemes.append(fissureCoude_7(n_cas))
207
208   n_cas = 22
209   # genereMateriel : aucun
210   from blocFissure.CasTests.fissureCoude_8 import fissureCoude_8
211   l_problemes.append(fissureCoude_8(n_cas))
212
213   n_cas = 23
214   # genereMateriel : aucun
215   from blocFissure.CasTests.fissureCoude_9 import fissureCoude_9
216   l_problemes.append(fissureCoude_9(n_cas))
217
218   n_cas = 24
219   # genereMateriel : aucun
220   from blocFissure.CasTests.fissureCoude_10 import fissureCoude_10
221   l_problemes.append(fissureCoude_10(n_cas))
222
223   n_cas = 25
224   # genereMateriel : aucun
225   from blocFissure.CasTests.fissure_Coude import fissure_Coude
226   l_problemes.append(fissure_Coude(n_cas))
227
228   n_cas = 26
229   # genereMateriel : aucun
230   from blocFissure.CasTests.fissure_Coude_4 import fissure_Coude_4
231   l_problemes.append(fissure_Coude_4(n_cas))
232
233   n_cas = 27
234   # genereMateriel : vis
235   from blocFissure.CasTests.vis_1 import vis_1
236   l_problemes.append(vis_1(n_cas))
237   #"Mesh_22" has not been computed:
238   #-  "algo2d_faceFiss" failed on FACE #2. Error: Algorithm failed. NgException at Surface meshing: Problem in Surface mesh generation
239   #-  "algo1d_edgeFissPeau" failed on EDGE #9. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
240   #Traceback (most recent call last):
241     #File "/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/CasTests/execution_Cas.py", line 233, in <module>
242       #ok_maillage = cas.executeProbleme()
243     #File "/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/gmu/fissureGenerique.py", line 122, in executeProbleme
244       #self.maillageFissureParams, elementsDefaut, step)
245     #File "/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/CasTests/vis_1.py", line 116, in genereMaillageFissure
246       #maillageFissureParams, elementsDefaut, step)
247     #File "/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/gmu/construitFissureGenerale.py", line 282, in construitFissureGenerale
248       #meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad)
249     #File "/home/D68518/salome-dev/DEV_package/appli_DEV_package/lib/python3.6/site-packages/salome/blocFissure/gmu/mailleFacesFissure.py", line 69, in mailleFacesFissure
250       #raise Exception(text)
251   #Exception: Erreur au calcul du maillage.
252
253   n_cas = 28
254   # genereMateriel : tube
255   from blocFissure.CasTests.tube import tube
256   l_problemes.append(tube(n_cas))
257   #"Mesh_13" has not been computed:
258   #-  "algo2d_facePeau_0" failed on "FACE_12 to mesh". Error: Algorithm failed. NgException at Surface meshing: Problem in Surface mesh generation
259   #-  "algo1d_cercle1_0" failed on EDGE #20. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
260   #-  "algo1d_cercle1_0" failed on EDGE #17. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
261   #-  "algo1d_cercle1_0" failed on EDGE #15. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
262   #-  "algo1d_cercle1_0" failed on EDGE #12. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
263
264   return l_problemes, d_aux
265 #=============================================================
266 def calcul_cas (n_cas, cas, d_aux, ligne):
267   """Calcul d'un cas"""
268   texte = ""
269   if n_cas in d_aux:
270     nom = d_aux[n_cas]
271   else:
272     nom = cas.nomProbleme
273   texte_a = "\n=== Exécution du cas n° {}, '{}'".format(n_cas,nom)
274   logging.critical(ligne+texte_a)
275   try:
276     ok_maillage = cas.executeProbleme()
277   except:
278     traceback.print_exc()
279     texte = "Problème avec le cas n° {}, '{}'\n".format(n_cas,nom)
280     ok_maillage = False
281   print(ligne)
282   return ok_maillage, texte
283 #=============================================================
284 def calcul_tout (l_problemes, d_aux):
285   """Calcul de tous les cas"""
286
287   ligne = "---------------------------------------------------------------------"
288   texte = ""
289   nb_cas_ok = 0
290   nb_cas_nook = 0
291   for n_cas, cas in enumerate(l_problemes):
292     #print ("Cas n° {}, '{}'".format(n_cas,cas.nomProbleme))
293     if TORUN[n_cas]:
294       ok_maillage, texte_a = calcul_cas (n_cas, cas, d_aux, ligne)
295       texte += texte_a
296       if ok_maillage:
297         nb_cas_ok += 1
298       else:
299         nb_cas_nook += 1
300       print(ligne)
301
302   nb_cas = nb_cas_nook + nb_cas_ok
303   if ( nb_cas > 1):
304     if nb_cas_nook:
305       texte += ". Nombre de cas_tests OK   : {}\n".format(nb_cas_ok)
306       texte += ". Nombre de cas_tests NOOK : {}\n".format(nb_cas_nook)
307     else:
308       texte += "Les {} tests se sont bien passés.\n".format(nb_cas)
309   print (texte+ligne)
310
311   return
312 #=============================================================
313 #=============================================================
314
315 while True:
316
317   L_PROBLEMES, D_AUX = caract_l_problemes()
318
319   if ( len(L_PROBLEMES) != len(TORUN) ):
320     TEXTE  = "\nNombre de problèmes définis  : {}\n".format(len(L_PROBLEMES))
321     TEXTE += "Longueur de la liste 'TORUN' : {}\n".format(len(TORUN))
322     TEXTE += "\t==> Incohérence de programmation à corriger dans {}".format(__name__)
323     print (TEXTE)
324     break
325
326   calcul_tout (L_PROBLEMES, D_AUX)
327
328   break