2 # -*- coding: utf-8 -*-
3 """Tests des adaptations par MGAdapt en standalone
10 __revision__ = "V04.02"
12 #========================= Les imports - Début ===================================
21 l=list(os.environ.keys())
26 from salome.smesh import smeshBuilder
27 smesh = smeshBuilder.New()
29 #========================== Les imports - Fin ====================================
31 #========================= Paramétrage - Début ===================================
32 # 1. REPDATA = répertoire du cas
33 HOME = os.environ["HOME"]
34 REPDATA = os.path.join(HOME, "MAILLAGE", "TEST_REMAILLAGE", "MGAdapt_med_files")
35 PATH_SMESH = os.getenv("SMESH_ROOT_DIR")
37 PATH_SMESH = os.getenv("TEST_INSTALL_DIRECTORY")
39 REPDATA = os.path.join(PATH_SMESH, "MGAdapt_med_files")
42 # 2. Repérage des données
54 #========================== Paramétrage - Fin ====================================
56 class MGAdaptTest (object):
58 """Test de l'adaptation par MGAdapt
62 Le(s) nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
70 affiche_aide_globale = 0
79 #=========================== Début de la méthode =================================
81 def __init__ ( self, liste_option ):
83 """Le constructeur de la classe MGAdaptTest"""
87 for option in liste_option :
92 if saux in ( "-H", "-HELP" ):
93 self.affiche_aide_globale = 1
96 elif saux == "-VMAX" :
100 self.l_cas.append(option)
103 for cle in D_DATA.keys():
104 self.l_cas.append(cle)
107 if self._verbose_max:
108 print ("Liste des cas : {}".format(self.l_cas))
110 #=========================== Fin de la méthode ==================================
112 #=========================== Début de la méthode =================================
115 """A la suppression de l'instance de classe"""
116 if self._verbose_max:
117 print ("Suppression de l'instance de la classe.")
119 #=========================== Fin de la méthode ==================================
121 #=========================== Début de la méthode =================================
123 def _add_file_in (self, objet_adapt):
124 """Ajout du fichier med d'entrée
127 :objet_adapt: l'objet du module
129 if self._verbose_max:
130 print ("_add_file_in pour {}".format(self.nro_cas))
132 ficmed = os.path.join (REPDATA, "test_{}.med".format(D_DATA[self.nro_cas]))
133 if self._verbose_max:
134 print ("Fichier {}".format(ficmed))
135 if not os.path.isfile(ficmed):
137 message = "Le fichier {} est inconnu.".format(ficmed)
139 objet_adapt.setMEDFileIn(ficmed)
143 return erreur, message
145 #=========================== Fin de la méthode ==================================
147 #=========================== Début de la méthode =================================
149 def _add_file_out (self, objet_adapt):
150 """Ajout du fichier de sortie
153 :objet_adapt: l'objet du module
155 if self._verbose_max:
156 print ("_add_file_out pour {}".format(self.nro_cas))
158 ficmed = os.path.join (REPDATA, "test_{}.adapt.tui.med".format(self.nro_cas))
159 if os.path.isfile(ficmed):
162 objet_adapt.setMEDFileOut(ficmed)
165 print (". Maillage adapté dans le fichier {}".format(ficmed))
169 #=========================== Fin de la méthode ==================================
171 #=========================== Début de la méthode =================================
173 def _add_file_bkg (self, objet_adapt):
174 """Ajout du fichier med de fond
177 :objet_adapt: l'objet du module
179 if self._verbose_max:
180 print ("_add_file_bkg pour {}".format(self.nro_cas))
182 ficmed = os.path.join (REPDATA, "test_{}_bg.med".format(D_DATA[self.nro_cas]))
183 if self._verbose_max:
184 print ("Fichier {}".format(ficmed))
185 if not os.path.isfile(ficmed):
187 message = "Le fichier {} est inconnu.".format(ficmed)
189 objet_adapt.setMEDFileBackground(ficmed)
193 return erreur, message
195 #=========================== Fin de la méthode ==================================
197 #=========================== Début de la méthode =================================
199 def _hypo_creation (self, maptype, option, niveau=3):
200 """Création d'une hypothèse
203 :maptype: type de carte : "Local", "Background", "Constant"
204 :option: nom du champ si "Local" ou "Background", valeur si "Constant"
205 :niveau: niveau de verbosité
208 :hypo: l'objet hypothèse
210 if self._verbose_max:
211 print ("_hypo_creation pour {} avec {}".format(maptype,option))
218 #--- Création de l'hypothèse ---
219 hypo = smesh.CreateAdaptationHypothesis()
222 if ( maptype in ("Local", "Background", "Constant") ):
223 hypo.setSizeMapType(maptype)
225 message = "Le type de carte {} est inconnu.".format(maptype)
230 if ( maptype in ("Local", "Background") ):
231 hypo.setSizeMapFieldName(option)
233 hypo.setConstantSize(option)
236 self._hypo_verbose (hypo, niveau)
240 return erreur, message, hypo
241 #=========================== Fin de la méthode ==================================
243 #=========================== Début de la méthode =================================
245 def _hypo_verbose (self, hypo, niveau=10):
246 """Débogage des hypothèses
249 :niveau: niveau de verbosité
252 :hypo: l'objet hypothèse
255 hypo.setVerbosityLevel(niveau)
257 if self._verbose_max:
259 hypo.setPrintLogInFile(True)
260 hypo.setKeepWorkingFiles(True)
261 hypo.setRemoveOnSuccess(False)
264 #=========================== Fin de la méthode ==================================
266 #=========================== Début de la méthode =================================
268 def _calcul (self, objet_adapt, hypo):
272 :objet_adapt: l'objet du module
273 :hypo: l'objet hypothèse
276 #--- association de l'hypothese à l'objet de l'adaptation
277 objet_adapt.AddHypothesis(hypo)
280 if self._verbose_max:
281 print (hypo.getCommandToRun())
282 erreur = objet_adapt.Compute(False)
284 message = "Echec dans l'adaptation."
288 return erreur, message
290 #=========================== Fin de la méthode ==================================
292 #=========================== Début de la méthode =================================
294 def _test_00 (self, objet_adapt):
298 :objet_adapt: l'objet du module
306 #--- les fichiers MED ---#
307 erreur, message = self._add_file_in (objet_adapt)
310 self._add_file_out (objet_adapt)
311 if self.nro_cas in ("02", "08"):
312 erreur, message = self._add_file_bkg (objet_adapt)
316 #--- Création de l'hypothèse ---
317 if self.nro_cas in ("01", "04", "05", "06", "07", "10"):
320 elif self.nro_cas in ("02", "08"):
321 maptype = "Background"
323 elif self.nro_cas in ("03",):
326 if self.nro_cas in ("11",):
328 option = "Taille de maille"
331 elif self._verbose_max:
335 erreur, message, hypo = self._hypo_creation(maptype, option, niveau)
339 #-- Ajout des options
340 if self.nro_cas in ("04", "06", "07", "08", "10", "11"):
341 hypo.setTimeStepRankLast()
342 elif self.nro_cas in ("05",):
343 hypo.setTimeStepRank(1,1)
345 # options facultatives
346 if self.nro_cas in ("03",):
347 hypo.setOptionValue("adaptation", "surface")
351 erreur, message = self._calcul (objet_adapt, hypo)
354 message = "Erreur dans le calcul par SMESH"
358 return erreur, message
360 #=========================== Fin de la méthode ==================================
362 #=========================== Début de la méthode =================================
364 def _traitement_cas (self ):
365 """Traitement d'un cas
369 :erreur: code d'erreur
370 :message: message d'erreur
373 nom_fonction = __name__ + "/_traitement_cas"
374 blabla = "\nDans {} :".format(nom_fonction)
376 if self._verbose_max:
384 print ("Passage du cas '{}'".format(self.nro_cas))
386 if ( self.nro_cas in ("01", "02", "03", "04", "05", "06", "07", "08", "10" , "11") ):
387 objet_adapt = smesh.Adaptation('MG_Adapt')
388 erreur, message = self._test_00 (objet_adapt)
393 message = "Le cas '{}' est inconnu.".format(self.nro_cas)
395 return erreur, message
397 #=========================== Fin de la méthode ==================================
399 #=========================== Début de la méthode =================================
401 def lancement (self):
406 :erreur: code d'erreur
407 :message: message d'erreur
410 nom_fonction = __name__ + "/lancement"
411 blabla = "\nDans {} :".format(nom_fonction)
416 if self._verbose_max:
419 for nom_cas in self.l_cas:
420 self.nro_cas = nom_cas
421 erreur_t, message_t = self._traitement_cas ()
424 message += "\nErreur n°{} pour le cas {} :\n".format(erreur_t,nom_cas)
427 if ( erreur and self._verbose_max ):
428 print (blabla, message)
430 return erreur, message
432 #=========================== Fin de la méthode ==================================
434 #========================== Fin de la classe ====================================
436 #==================================================================================
438 #==================================================================================
440 if __name__ == "__main__" :
445 #L_OPTIONS.append("-h")
446 #L_OPTIONS.append("-v")
447 #L_OPTIONS.append("-vmax")
448 #L_OPTIONS.append("01")
449 #L_OPTIONS.append("02")
450 #L_OPTIONS.append("03")
451 #L_OPTIONS.append("07")
452 #L_OPTIONS.append("10")
453 #L_OPTIONS.append("11")
454 #L_OPTIONS.append("04")
455 #L_OPTIONS.append("05")
456 #L_OPTIONS.append("06")
457 #L_OPTIONS.append("08")
459 # 2. Lancement de la classe
461 #print ("L_OPTIONS :", L_OPTIONS)
462 MGADAPT_TEST = MGAdaptTest(L_OPTIONS)
463 if MGADAPT_TEST.affiche_aide_globale:
464 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
466 ERREUR, MESSAGE_ERREUR = MGADAPT_TEST.lancement()
468 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
469 MESSAGE_ERREUR += "\n {} erreur(s)\n".format(ERREUR)
470 sys.stderr.write(MESSAGE_ERREUR)
471 raise Exception(MESSAGE_ERREUR)