2 # -*- coding: utf-8 -*-
3 """Tests des adaptations par MGAdapt en standalone
10 __revision__ = "V04.04"
12 #========================= Les imports - Début ===================================
22 salome.salome_init_without_session()
25 from salome.smesh import smeshBuilder
26 smesh = smeshBuilder.New()
28 #========================== Les imports - Fin ====================================
30 #========================= Paramétrage - Début ===================================
31 # 1. REPDATA = répertoire du cas
32 REPDATA = os.path.abspath(os.path.join(os.path.dirname(inspect.getfile(lambda: None)), 'data'))
34 # 2. Repérage des données
36 D_DATA["01"] = "01" # 2D plan ; carte locale
37 D_DATA["02"] = "02" # 2D plan ; carte en arrière-plan
38 D_DATA["03"] = "01" # 2D plan ; taille constante
39 D_DATA["04"] = "04" # 3D ; carte locale et dernier pas de temps
40 D_DATA["05"] = "04" # 3D ; carte locale et pas de temps n°1
41 D_DATA["06"] = "06" # 2D non plan; carte locale
42 D_DATA["07"] = "07" # 2D plan ; carte locale anisotrope
43 D_DATA["08"] = "08" # 3D ; carte en arrière-plan anisotrope
44 D_DATA["10"] = "10" # 2D plan ; carte locale et maillage initial quadratique
45 D_DATA["11"] = "11" # 2D plan ; carte locale et maillage initial en quadrangles
46 D_DATA["13"] = "13" # 3D ; carte locale en simple précision et dernier pas de temps
47 #========================== Paramétrage - Fin ====================================
49 class MGAdaptTest (object):
51 """Test de l'adaptation par MGAdapt
55 Le(s) nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
63 affiche_aide_globale = 0
72 #=========================== Début de la méthode =================================
74 def __init__ ( self, liste_option ):
76 """Le constructeur de la classe MGAdaptTest"""
81 for option in liste_option :
86 if saux in ( "-H", "-HELP" ):
87 self.affiche_aide_globale = 1
90 elif saux == "-VMAX" :
94 self.l_cas.append(option)
98 self.l_cas.append(cle)
101 if self._verbose_max:
102 print ("Liste des cas : {}".format(self.l_cas))
104 #=========================== Fin de la méthode ==================================
106 #=========================== Début de la méthode =================================
109 """A la suppression de l'instance de classe"""
110 if self._verbose_max:
111 print ("Suppression de l'instance de la classe.")
113 #=========================== Fin de la méthode ==================================
115 #=========================== Début de la méthode =================================
117 def _add_file_in (self, objet_adapt):
118 """Ajout du fichier med d'entrée
121 :objet_adapt: l'objet du module
123 if self._verbose_max:
124 print ("_add_file_in pour {}".format(self.nro_cas))
126 ficmed = os.path.join (REPDATA, "test_{}.med".format(D_DATA[self.nro_cas]))
127 if self._verbose_max:
128 print ("Fichier {}".format(ficmed))
129 if not os.path.isfile(ficmed):
131 message = "Le fichier {} est inconnu.".format(ficmed)
133 objet_adapt.setMEDFileIn(ficmed)
137 return erreur, message
139 #=========================== Fin de la méthode ==================================
141 #=========================== Début de la méthode =================================
143 def _add_file_out (self, objet_adapt):
144 """Ajout du fichier de sortie
147 :objet_adapt: l'objet du module
149 if self._verbose_max:
150 print ("_add_file_out pour {}".format(self.nro_cas))
153 self.repout = tempfile.mkdtemp()
155 ficmed = os.path.join (self.repout, "test_{}.adapt.tui.med".format(self.nro_cas))
156 if os.path.isfile(ficmed):
159 objet_adapt.setMEDFileOut(ficmed)
162 print (". Maillage adapté dans le fichier {}".format(ficmed))
166 #=========================== Fin de la méthode ==================================
168 #=========================== Début de la méthode =================================
170 def _add_file_bkg (self, objet_adapt):
171 """Ajout du fichier med de fond
174 :objet_adapt: l'objet du module
176 if self._verbose_max:
177 print ("_add_file_bkg pour {}".format(self.nro_cas))
179 ficmed = os.path.join (REPDATA, "test_{}_bg.med".format(D_DATA[self.nro_cas]))
180 if self._verbose_max:
181 print ("Fichier {}".format(ficmed))
182 if not os.path.isfile(ficmed):
184 message = "Le fichier {} est inconnu.".format(ficmed)
186 objet_adapt.setMEDFileBackground(ficmed)
190 return erreur, message
192 #=========================== Fin de la méthode ==================================
194 #=========================== Début de la méthode =================================
196 def _hypo_creation (self, maptype, option, niveau=3):
197 """Création d'une hypothèse
200 :maptype: type de carte : "Local", "Background", "Constant"
201 :option: nom du champ si "Local" ou "Background", valeur si "Constant"
202 :niveau: niveau de verbosité
205 :hypo: l'objet hypothèse
207 if self._verbose_max:
208 print ("_hypo_creation pour {} avec {}".format(maptype,option))
215 #--- Création de l'hypothèse ---
216 hypo = smesh.CreateAdaptationHypothesis()
219 if ( maptype in ("Local", "Background", "Constant") ):
220 hypo.setSizeMapType(maptype)
222 message = "Le type de carte {} est inconnu.".format(maptype)
227 if ( maptype in ("Local", "Background") ):
228 hypo.setSizeMapFieldName(option)
230 hypo.setConstantSize(option)
233 self._hypo_verbose (hypo, niveau)
237 return erreur, message, hypo
238 #=========================== Fin de la méthode ==================================
240 #=========================== Début de la méthode =================================
242 def _hypo_verbose (self, hypo, niveau=10):
243 """Débogage des hypothèses
246 :niveau: niveau de verbosité
249 :hypo: l'objet hypothèse
252 hypo.setVerbosityLevel(niveau)
254 if self._verbose_max:
256 hypo.setPrintLogInFile(True)
257 hypo.setKeepWorkingFiles(True)
258 hypo.setRemoveOnSuccess(False)
261 #=========================== Fin de la méthode ==================================
263 #=========================== Début de la méthode =================================
265 def _calcul (self, objet_adapt, hypo):
269 :objet_adapt: l'objet du module
270 :hypo: l'objet hypothèse
273 #--- association de l'hypothese à l'objet de l'adaptation
274 objet_adapt.AddHypothesis(hypo)
277 if self._verbose_max:
278 print (hypo.getCommandToRun())
279 erreur = objet_adapt.Compute(False)
281 message = "Echec dans l'adaptation."
285 return erreur, message
287 #=========================== Fin de la méthode ==================================
289 #=========================== Début de la méthode =================================
291 def _test_00 (self, objet_adapt):
295 :objet_adapt: l'objet du module
303 #--- les fichiers MED ---#
304 erreur, message = self._add_file_in (objet_adapt)
307 self._add_file_out (objet_adapt)
308 if self.nro_cas in ("02", "08"):
309 erreur, message = self._add_file_bkg (objet_adapt)
313 #--- Création de l'hypothèse ---
314 if self.nro_cas in ("01", "04", "05", "06", "07", "10", "11", "13"):
316 if self.nro_cas in ("01", "04", "05", "06", "07", "10"):
318 elif self.nro_cas in ("11",):
319 option = "Taille de maille"
320 elif self.nro_cas in ("13",):
322 elif self.nro_cas in ("02", "08"):
323 maptype = "Background"
325 elif self.nro_cas in ("03",):
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)
344 elif self.nro_cas in ("13",):
345 hypo.setTimeStepRank(0,0)
347 # options facultatives
348 if self.nro_cas in ("03",):
349 hypo.setOptionValue("adaptation", "surface")
353 erreur, message = self._calcul (objet_adapt, hypo)
356 message = "Erreur dans le calcul par SMESH"
360 return erreur, message
362 #=========================== Fin de la méthode ==================================
364 #=========================== Début de la méthode =================================
366 def _traitement_cas (self ):
367 """Traitement d'un cas
371 :erreur: code d'erreur
372 :message: message d'erreur
375 nom_fonction = __name__ + "/_traitement_cas"
376 blabla = "\nDans {} :".format(nom_fonction)
378 if self._verbose_max:
386 print ("Passage du cas '{}'".format(self.nro_cas))
388 if ( self.nro_cas in ("01", "02", "03", "04", "05", "06", "07", "08", "10" ,"11" ,"13") ):
389 objet_adapt = smesh.Adaptation('MG_Adapt')
390 erreur, message = self._test_00 (objet_adapt)
395 message = "Le cas '{}' est inconnu.".format(self.nro_cas)
397 return erreur, message
399 #=========================== Fin de la méthode ==================================
401 #=========================== Début de la méthode =================================
403 def lancement (self):
408 :erreur: code d'erreur
409 :message: message d'erreur
412 nom_fonction = __name__ + "/lancement"
413 blabla = "\nDans {} :".format(nom_fonction)
418 if self._verbose_max:
421 for nom_cas in self.l_cas:
422 self.nro_cas = nom_cas
423 erreur_t, message_t = self._traitement_cas ()
426 message += "\nErreur n° {} pour le cas {} :\n".format(erreur_t,nom_cas)
429 if ( erreur and self._verbose_max ):
430 print (blabla, message)
433 shutil.rmtree(self.repout)
435 return erreur, message
437 #=========================== Fin de la méthode ==================================
439 #========================== Fin de la classe ====================================
441 #==================================================================================
443 #==================================================================================
445 if __name__ == "__main__" :
450 #L_OPTIONS.append("-h")
451 #L_OPTIONS.append("-v")
452 #L_OPTIONS.append("-vmax")
453 L_OPTIONS.append("01")
454 L_OPTIONS.append("02")
455 L_OPTIONS.append("03")
456 L_OPTIONS.append("07")
457 L_OPTIONS.append("10")
458 L_OPTIONS.append("11")
459 L_OPTIONS.append("04")
460 L_OPTIONS.append("05")
461 L_OPTIONS.append("06")
462 L_OPTIONS.append("08")
463 L_OPTIONS.append("13")
465 # 2. Lancement de la classe
467 #print ("L_OPTIONS :", L_OPTIONS)
468 MGADAPT_TEST = MGAdaptTest(L_OPTIONS)
469 if MGADAPT_TEST.affiche_aide_globale:
470 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
472 ERREUR, MESSAGE_ERREUR = MGADAPT_TEST.lancement()
474 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
475 MESSAGE_ERREUR += "\n {} erreur(s)\n".format(ERREUR)
476 sys.stderr.write(MESSAGE_ERREUR)
477 #raise Exception(MESSAGE_ERREUR)