2 # -*- coding: utf-8 -*-
3 """Tests des adaptations par MGAdapt en standalone
10 __revision__ = "V04.04"
12 #========================= Les imports - Début ===================================
19 salome.salome_init_without_session()
22 from salome.smesh import smeshBuilder
23 smesh = smeshBuilder.New()
25 #========================== Les imports - Fin ====================================
27 #========================= Paramétrage - Début ===================================
28 # 1. REPDATA = répertoire du cas
29 REPDATA = "MGAdapt_med_files"
31 # 2. Repérage des données
33 D_DATA["01"] = "01" # 2D plan ; carte locale
34 D_DATA["02"] = "02" # 2D plan ; carte en arrière-plan
35 D_DATA["03"] = "01" # 2D plan ; taille constante
36 D_DATA["04"] = "04" # 3D ; carte locale et dernier pas de temps
37 D_DATA["05"] = "04" # 3D ; carte locale et pas de temps n°1
38 D_DATA["06"] = "06" # 2D non plan; carte locale
39 D_DATA["07"] = "07" # 2D plan ; carte locale anisotrope
40 D_DATA["08"] = "08" # 3D ; carte en arrière-plan anisotrope
41 D_DATA["10"] = "10" # 2D plan ; carte locale et maillage initial quadratique
42 D_DATA["11"] = "11" # 2D plan ; carte locale et maillage initial en quadrangles
43 D_DATA["13"] = "13" # 3D ; carte locale en simple précision et dernier pas de temps
44 #========================== Paramétrage - Fin ====================================
46 class MGAdaptTest (object):
48 """Test de l'adaptation par MGAdapt
52 Le(s) nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
60 affiche_aide_globale = 0
69 #=========================== Début de la méthode =================================
71 def __init__ ( self, liste_option ):
73 """Le constructeur de la classe MGAdaptTest"""
77 for option in liste_option :
82 if saux in ( "-H", "-HELP" ):
83 self.affiche_aide_globale = 1
86 elif saux == "-VMAX" :
90 self.l_cas.append(option)
94 self.l_cas.append(cle)
98 print ("Liste des cas : {}".format(self.l_cas))
100 #=========================== Fin de la méthode ==================================
102 #=========================== Début de la méthode =================================
105 """A la suppression de l'instance de classe"""
106 if self._verbose_max:
107 print ("Suppression de l'instance de la classe.")
109 #=========================== Fin de la méthode ==================================
111 #=========================== Début de la méthode =================================
113 def _add_file_in (self, objet_adapt):
114 """Ajout du fichier med d'entrée
117 :objet_adapt: l'objet du module
119 if self._verbose_max:
120 print ("_add_file_in pour {}".format(self.nro_cas))
122 ficmed = os.path.join (REPDATA, "test_{}.med".format(D_DATA[self.nro_cas]))
123 if self._verbose_max:
124 print ("Fichier {}".format(ficmed))
125 if not os.path.isfile(ficmed):
127 message = "Le fichier {} est inconnu.".format(ficmed)
129 objet_adapt.setMEDFileIn(ficmed)
133 return erreur, message
135 #=========================== Fin de la méthode ==================================
137 #=========================== Début de la méthode =================================
139 def _add_file_out (self, objet_adapt):
140 """Ajout du fichier de sortie
143 :objet_adapt: l'objet du module
145 if self._verbose_max:
146 print ("_add_file_out pour {}".format(self.nro_cas))
148 ficmed = os.path.join (REPDATA, "test_{}.adapt.tui.med".format(self.nro_cas))
149 if os.path.isfile(ficmed):
152 objet_adapt.setMEDFileOut(ficmed)
155 print (". Maillage adapté dans le fichier {}".format(ficmed))
159 #=========================== Fin de la méthode ==================================
161 #=========================== Début de la méthode =================================
163 def _add_file_bkg (self, objet_adapt):
164 """Ajout du fichier med de fond
167 :objet_adapt: l'objet du module
169 if self._verbose_max:
170 print ("_add_file_bkg pour {}".format(self.nro_cas))
172 ficmed = os.path.join (REPDATA, "test_{}_bg.med".format(D_DATA[self.nro_cas]))
173 if self._verbose_max:
174 print ("Fichier {}".format(ficmed))
175 if not os.path.isfile(ficmed):
177 message = "Le fichier {} est inconnu.".format(ficmed)
179 objet_adapt.setMEDFileBackground(ficmed)
183 return erreur, message
185 #=========================== Fin de la méthode ==================================
187 #=========================== Début de la méthode =================================
189 def _hypo_creation (self, maptype, option, niveau=3):
190 """Création d'une hypothèse
193 :maptype: type de carte : "Local", "Background", "Constant"
194 :option: nom du champ si "Local" ou "Background", valeur si "Constant"
195 :niveau: niveau de verbosité
198 :hypo: l'objet hypothèse
200 if self._verbose_max:
201 print ("_hypo_creation pour {} avec {}".format(maptype,option))
208 #--- Création de l'hypothèse ---
209 hypo = smesh.CreateAdaptationHypothesis()
212 if ( maptype in ("Local", "Background", "Constant") ):
213 hypo.setSizeMapType(maptype)
215 message = "Le type de carte {} est inconnu.".format(maptype)
220 if ( maptype in ("Local", "Background") ):
221 hypo.setSizeMapFieldName(option)
223 hypo.setConstantSize(option)
226 self._hypo_verbose (hypo, niveau)
230 return erreur, message, hypo
231 #=========================== Fin de la méthode ==================================
233 #=========================== Début de la méthode =================================
235 def _hypo_verbose (self, hypo, niveau=10):
236 """Débogage des hypothèses
239 :niveau: niveau de verbosité
242 :hypo: l'objet hypothèse
245 hypo.setVerbosityLevel(niveau)
247 if self._verbose_max:
249 hypo.setPrintLogInFile(True)
250 hypo.setKeepWorkingFiles(True)
251 hypo.setRemoveOnSuccess(False)
254 #=========================== Fin de la méthode ==================================
256 #=========================== Début de la méthode =================================
258 def _calcul (self, objet_adapt, hypo):
262 :objet_adapt: l'objet du module
263 :hypo: l'objet hypothèse
266 #--- association de l'hypothese à l'objet de l'adaptation
267 objet_adapt.AddHypothesis(hypo)
270 if self._verbose_max:
271 print (hypo.getCommandToRun())
272 erreur = objet_adapt.Compute(False)
274 message = "Echec dans l'adaptation."
278 return erreur, message
280 #=========================== Fin de la méthode ==================================
282 #=========================== Début de la méthode =================================
284 def _test_00 (self, objet_adapt):
288 :objet_adapt: l'objet du module
296 #--- les fichiers MED ---#
297 erreur, message = self._add_file_in (objet_adapt)
300 self._add_file_out (objet_adapt)
301 if self.nro_cas in ("02", "08"):
302 erreur, message = self._add_file_bkg (objet_adapt)
306 #--- Création de l'hypothèse ---
307 if self.nro_cas in ("01", "04", "05", "06", "07", "10", "11", "13"):
309 if self.nro_cas in ("01", "04", "05", "06", "07", "10"):
311 elif self.nro_cas in ("11",):
312 option = "Taille de maille"
313 elif self.nro_cas in ("13",):
315 elif self.nro_cas in ("02", "08"):
316 maptype = "Background"
318 elif self.nro_cas in ("03",):
324 elif self._verbose_max:
328 erreur, message, hypo = self._hypo_creation(maptype, option, niveau)
332 #-- Ajout des options
333 if self.nro_cas in ("04", "06", "07", "08", "10", "11"):
334 hypo.setTimeStepRankLast()
335 elif self.nro_cas in ("05",):
336 hypo.setTimeStepRank(1,1)
337 elif self.nro_cas in ("13",):
338 hypo.setTimeStepRank(0,0)
340 # options facultatives
341 if self.nro_cas in ("03",):
342 hypo.setOptionValue("adaptation", "surface")
346 erreur, message = self._calcul (objet_adapt, hypo)
349 message = "Erreur dans le calcul par SMESH"
353 return erreur, message
355 #=========================== Fin de la méthode ==================================
357 #=========================== Début de la méthode =================================
359 def _traitement_cas (self ):
360 """Traitement d'un cas
364 :erreur: code d'erreur
365 :message: message d'erreur
368 nom_fonction = __name__ + "/_traitement_cas"
369 blabla = "\nDans {} :".format(nom_fonction)
371 if self._verbose_max:
379 print ("Passage du cas '{}'".format(self.nro_cas))
381 if ( self.nro_cas in ("01", "02", "03", "04", "05", "06", "07", "08", "10" ,"11" ,"13") ):
382 objet_adapt = smesh.Adaptation('MG_Adapt')
383 erreur, message = self._test_00 (objet_adapt)
388 message = "Le cas '{}' est inconnu.".format(self.nro_cas)
390 return erreur, message
392 #=========================== Fin de la méthode ==================================
394 #=========================== Début de la méthode =================================
396 def lancement (self):
401 :erreur: code d'erreur
402 :message: message d'erreur
405 nom_fonction = __name__ + "/lancement"
406 blabla = "\nDans {} :".format(nom_fonction)
411 if self._verbose_max:
414 for nom_cas in self.l_cas:
415 self.nro_cas = nom_cas
416 erreur_t, message_t = self._traitement_cas ()
419 message += "\nErreur n° {} pour le cas {} :\n".format(erreur_t,nom_cas)
422 if ( erreur and self._verbose_max ):
423 print (blabla, message)
425 return erreur, message
427 #=========================== Fin de la méthode ==================================
429 #========================== Fin de la classe ====================================
431 #==================================================================================
433 #==================================================================================
435 if __name__ == "__main__" :
440 #L_OPTIONS.append("-h")
441 #L_OPTIONS.append("-v")
442 #L_OPTIONS.append("-vmax")
443 L_OPTIONS.append("01")
444 L_OPTIONS.append("02")
445 L_OPTIONS.append("03")
446 L_OPTIONS.append("07")
447 L_OPTIONS.append("10")
448 L_OPTIONS.append("11")
449 L_OPTIONS.append("04")
450 L_OPTIONS.append("05")
451 L_OPTIONS.append("06")
452 L_OPTIONS.append("08")
453 #L_OPTIONS.append("13")
455 # 2. Lancement de la classe
457 #print ("L_OPTIONS :", L_OPTIONS)
458 MGADAPT_TEST = MGAdaptTest(L_OPTIONS)
459 if MGADAPT_TEST.affiche_aide_globale:
460 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
462 ERREUR, MESSAGE_ERREUR = MGADAPT_TEST.lancement()
464 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
465 MESSAGE_ERREUR += "\n {} erreur(s)\n".format(ERREUR)
466 sys.stderr.write(MESSAGE_ERREUR)
467 #raise Exception(MESSAGE_ERREUR)