2 # -*- coding: utf-8 -*-
3 """Tests des adaptations par MGAdapt en standalone
10 __revision__ = "V04.03"
12 #========================= Les imports - Début ===================================
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 #========================== Paramétrage - Fin ====================================
45 class MGAdaptTest (object):
47 """Test de l'adaptation par MGAdapt
51 Le(s) nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
59 affiche_aide_globale = 0
68 #=========================== Début de la méthode =================================
70 def __init__ ( self, liste_option ):
72 """Le constructeur de la classe MGAdaptTest"""
76 for option in liste_option :
81 if saux in ( "-H", "-HELP" ):
82 self.affiche_aide_globale = 1
85 elif saux == "-VMAX" :
89 self.l_cas.append(option)
93 self.l_cas.append(cle)
97 print ("Liste des cas : {}".format(self.l_cas))
99 #=========================== Fin de la méthode ==================================
101 #=========================== Début de la méthode =================================
104 """A la suppression de l'instance de classe"""
105 if self._verbose_max:
106 print ("Suppression de l'instance de la classe.")
108 #=========================== Fin de la méthode ==================================
110 #=========================== Début de la méthode =================================
112 def _add_file_in (self, objet_adapt):
113 """Ajout du fichier med d'entrée
116 :objet_adapt: l'objet du module
118 if self._verbose_max:
119 print ("_add_file_in pour {}".format(self.nro_cas))
121 ficmed = os.path.join (REPDATA, "test_{}.med".format(D_DATA[self.nro_cas]))
122 if self._verbose_max:
123 print ("Fichier {}".format(ficmed))
124 if not os.path.isfile(ficmed):
126 message = "Le fichier {} est inconnu.".format(ficmed)
128 objet_adapt.setMEDFileIn(ficmed)
132 return erreur, message
134 #=========================== Fin de la méthode ==================================
136 #=========================== Début de la méthode =================================
138 def _add_file_out (self, objet_adapt):
139 """Ajout du fichier de sortie
142 :objet_adapt: l'objet du module
144 if self._verbose_max:
145 print ("_add_file_out pour {}".format(self.nro_cas))
147 ficmed = os.path.join (REPDATA, "test_{}.adapt.tui.med".format(self.nro_cas))
148 if os.path.isfile(ficmed):
151 objet_adapt.setMEDFileOut(ficmed)
154 print (". Maillage adapté dans le fichier {}".format(ficmed))
158 #=========================== Fin de la méthode ==================================
160 #=========================== Début de la méthode =================================
162 def _add_file_bkg (self, objet_adapt):
163 """Ajout du fichier med de fond
166 :objet_adapt: l'objet du module
168 if self._verbose_max:
169 print ("_add_file_bkg pour {}".format(self.nro_cas))
171 ficmed = os.path.join (REPDATA, "test_{}_bg.med".format(D_DATA[self.nro_cas]))
172 if self._verbose_max:
173 print ("Fichier {}".format(ficmed))
174 if not os.path.isfile(ficmed):
176 message = "Le fichier {} est inconnu.".format(ficmed)
178 objet_adapt.setMEDFileBackground(ficmed)
182 return erreur, message
184 #=========================== Fin de la méthode ==================================
186 #=========================== Début de la méthode =================================
188 def _hypo_creation (self, maptype, option, niveau=3):
189 """Création d'une hypothèse
192 :maptype: type de carte : "Local", "Background", "Constant"
193 :option: nom du champ si "Local" ou "Background", valeur si "Constant"
194 :niveau: niveau de verbosité
197 :hypo: l'objet hypothèse
199 if self._verbose_max:
200 print ("_hypo_creation pour {} avec {}".format(maptype,option))
207 #--- Création de l'hypothèse ---
208 hypo = smesh.CreateAdaptationHypothesis()
211 if ( maptype in ("Local", "Background", "Constant") ):
212 hypo.setSizeMapType(maptype)
214 message = "Le type de carte {} est inconnu.".format(maptype)
219 if ( maptype in ("Local", "Background") ):
220 hypo.setSizeMapFieldName(option)
222 hypo.setConstantSize(option)
225 self._hypo_verbose (hypo, niveau)
229 return erreur, message, hypo
230 #=========================== Fin de la méthode ==================================
232 #=========================== Début de la méthode =================================
234 def _hypo_verbose (self, hypo, niveau=10):
235 """Débogage des hypothèses
238 :niveau: niveau de verbosité
241 :hypo: l'objet hypothèse
244 hypo.setVerbosityLevel(niveau)
246 if self._verbose_max:
248 hypo.setPrintLogInFile(True)
249 hypo.setKeepWorkingFiles(True)
250 hypo.setRemoveOnSuccess(False)
253 #=========================== Fin de la méthode ==================================
255 #=========================== Début de la méthode =================================
257 def _calcul (self, objet_adapt, hypo):
261 :objet_adapt: l'objet du module
262 :hypo: l'objet hypothèse
265 #--- association de l'hypothese à l'objet de l'adaptation
266 objet_adapt.AddHypothesis(hypo)
269 if self._verbose_max:
270 print (hypo.getCommandToRun())
271 erreur = objet_adapt.Compute(False)
273 message = "Echec dans l'adaptation."
277 return erreur, message
279 #=========================== Fin de la méthode ==================================
281 #=========================== Début de la méthode =================================
283 def _test_00 (self, objet_adapt):
287 :objet_adapt: l'objet du module
295 #--- les fichiers MED ---#
296 erreur, message = self._add_file_in (objet_adapt)
299 self._add_file_out (objet_adapt)
300 if self.nro_cas in ("02", "08"):
301 erreur, message = self._add_file_bkg (objet_adapt)
305 #--- Création de l'hypothèse ---
306 if self.nro_cas in ("01", "04", "05", "06", "07", "10"):
309 elif self.nro_cas in ("02", "08"):
310 maptype = "Background"
312 elif self.nro_cas in ("03",):
315 if self.nro_cas in ("11",):
317 option = "Taille de maille"
320 elif self._verbose_max:
324 erreur, message, hypo = self._hypo_creation(maptype, option, niveau)
328 #-- Ajout des options
329 if self.nro_cas in ("04", "06", "07", "08", "10", "11"):
330 hypo.setTimeStepRankLast()
331 elif self.nro_cas in ("05",):
332 hypo.setTimeStepRank(1,1)
334 # options facultatives
335 if self.nro_cas in ("03",):
336 hypo.setOptionValue("adaptation", "surface")
340 erreur, message = self._calcul (objet_adapt, hypo)
343 message = "Erreur dans le calcul par SMESH"
347 return erreur, message
349 #=========================== Fin de la méthode ==================================
351 #=========================== Début de la méthode =================================
353 def _traitement_cas (self ):
354 """Traitement d'un cas
358 :erreur: code d'erreur
359 :message: message d'erreur
362 nom_fonction = __name__ + "/_traitement_cas"
363 blabla = "\nDans {} :".format(nom_fonction)
365 if self._verbose_max:
373 print ("Passage du cas '{}'".format(self.nro_cas))
375 if ( self.nro_cas in ("01", "02", "03", "04", "05", "06", "07", "08", "10" , "11") ):
376 objet_adapt = smesh.Adaptation('MG_Adapt')
377 erreur, message = self._test_00 (objet_adapt)
382 message = "Le cas '{}' est inconnu.".format(self.nro_cas)
384 return erreur, message
386 #=========================== Fin de la méthode ==================================
388 #=========================== Début de la méthode =================================
390 def lancement (self):
395 :erreur: code d'erreur
396 :message: message d'erreur
399 nom_fonction = __name__ + "/lancement"
400 blabla = "\nDans {} :".format(nom_fonction)
405 if self._verbose_max:
408 for nom_cas in self.l_cas:
409 self.nro_cas = nom_cas
410 erreur_t, message_t = self._traitement_cas ()
413 message += "\nErreur n°{} pour le cas {} :\n".format(erreur_t,nom_cas)
416 if ( erreur and self._verbose_max ):
417 print (blabla, message)
419 return erreur, message
421 #=========================== Fin de la méthode ==================================
423 #========================== Fin de la classe ====================================
425 #==================================================================================
427 #==================================================================================
429 if __name__ == "__main__" :
434 #L_OPTIONS.append("-h")
435 #L_OPTIONS.append("-v")
436 #L_OPTIONS.append("-vmax")
437 #L_OPTIONS.append("01")
438 #L_OPTIONS.append("02")
439 #L_OPTIONS.append("03")
440 #L_OPTIONS.append("07")
441 #L_OPTIONS.append("10")
442 #L_OPTIONS.append("11")
443 #L_OPTIONS.append("04")
444 #L_OPTIONS.append("05")
445 #L_OPTIONS.append("06")
446 #L_OPTIONS.append("08")
448 # 2. Lancement de la classe
450 #print ("L_OPTIONS :", L_OPTIONS)
451 MGADAPT_TEST = MGAdaptTest(L_OPTIONS)
452 if MGADAPT_TEST.affiche_aide_globale:
453 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
455 ERREUR, MESSAGE_ERREUR = MGADAPT_TEST.lancement()
457 sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
458 MESSAGE_ERREUR += "\n {} erreur(s)\n".format(ERREUR)
459 sys.stderr.write(MESSAGE_ERREUR)
460 #raise Exception(MESSAGE_ERREUR)