1 #@ MODIF macr_adap_mail_ops Macro DATE 24/11/2008 AUTEUR GNICOLAS G.NICOLAS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20 # RESPONSABLE GNICOLAS G.NICOLAS
23 Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
27 def macr_adap_mail_ops ( self,
28 INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE,
31 Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
34 # 1. args est le dictionnaire des arguments
35 # args.keys() est la liste des mots-cles
36 # args.keys()[0] est la premiere valeur de cette liste
37 # args.keys()[1:] est la liste des valeurs suivantes dans cette liste
38 # args.keys(mot_cle) represente le contenu de la variable mot_cle dans la macro appelante.
42 ### if len (args.keys())>0 : print args.keys()[0]
43 ### print args["MAILLAGE"]
45 # 2. Les caracteristiques d'un passage sont conservees dans un dictionnaire. Il y a autant de
46 # dictionnaires que de sollicitations pour une serie d'adaptation. L'ensemble de ces dictionnaires
47 # est conserve dans la liste Liste_Passages. Cette liste est necessairement globale pour pouvoir
48 # la retrouver e chaque nouveau passage.
49 # Description du dictionnaire de passages :
50 # dico["Maillage_0"] = o ; string ; nom du concept du maillage initial de la serie d'adaptation
51 # dico["Maillage_NP1"] = o ; string ; nom du concept du dernier maillage adapte
52 # dico["Rep_Calc_HOMARD_global"] = o ; string ; Nom global du repertoire de calcul pour HOMARD
53 # dico["Rep_Calc_HOMARD_local"] = o ; string ; Nom local du repertoire de calcul pour HOMARD
54 # depuis le repertoire de calcul pour ASTER
55 # dico["niter"] = o ; entier ; numero d'iteration
57 # 3. Les caracteristiques d'un maillage sont conservees dans un dictionnaire. Il y a autant de
58 # dictionnaires que de maillages manipules. L'ensemble de ces dictionnaires est conserve
59 # dans la liste liste_maillages.
60 # Description du dictionnaire de maillages :
61 # dico["Type_Maillage"] = o ; string ; "MAILLAGE_N", "MAILLAGE_NP1", "MAILLAGE_NP1_ANNEXE" ou "MAILLAGE_FRONTIERE"
62 # dico["Nom_ASTER"] = o ; concept ASTER associe
63 # dico["Action"] = o ; string ; "A_ecrire" ou "A_lire"
64 # dico["NOM_MED"] = o ; string ; Nom MED du maillage
66 # 4. Les caracteristiques d'un champ sont conservees dans un dictionnaire. Il y a autant de
67 # dictionnaires que de champs manipules. L'ensemble de ces dictionnaires est conserve
68 # dans la liste liste_champs.
69 # Description du dictionnaire de champs :
70 # dico["Type_Champ"] = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
71 # dico["RESULTAT"] = f ; concept ASTER du resutat associe
72 # dico["NOM_CHAM"] = f ; string ; Nom ASTER du champ
73 # dico["CHAM_GD"] = f ; concept ASTER du champ de grandeur associee
74 # dico["COMPOSANTE"] = f ; string ; Nom ASTER de la composante (dans le cas de l'indicateur)
75 # dico["NUME_ORDRE"] = f ; entier ; Numero d'ordre du champ
76 # dico["INST"] = f ; entier ; Instant du champ
77 # dico["PRECISION"] = f ; entier ; Precision sur l'instant du champ
78 # dico["CRITERE"] = f ; entier ; Critere de precision sur l'instant du champ
79 # dico["CHAM_MAJ"] = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
80 # dico["NOM_MED"] = o ; string ; Nom MED du champ
81 # dico["SENSIBILITE"] = f ; string ; Nom du parametre sensible associe
83 # 5. Signification de INFO
84 # INFO = 1 : aucun message
85 # INFO = 2 : les messages des commandes annexes (DEFI_FICHIER, IMPR_RESU, LIRE_MAILLAGE, LIRE_CHAMP)
86 # INFO = 3 : aucun message pour les commandes annexes
87 # 1er niveau de message pour l'execution de HOMARD
88 # INFO = 4 : aucun message pour les commandes annexes
89 # 2nd niveau de message pour l'execution de HOMARD
92 from Macro import creation_donnees_homard
93 from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
101 #====================================================================
103 #====================================================================
105 # 1.1. ==> La macro compte pour 1 dans la numerotation des commandes
109 # 1.2. ==> Numero du passage dans cette macro
112 self.jdc.indice_macro_homard = self.jdc.indice_macro_homard + 1
114 self.jdc.indice_macro_homard = 1
116 numero_passage_fonction = self.jdc.indice_macro_homard
117 ### print "numero_passage_fonction = ",numero_passage_fonction
119 # 1.3. ==> On importe les definitions des commandes a utiliser dans la macro
121 DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
122 IMPR_RESU = self.get_cmd("IMPR_RESU")
123 EXEC_LOGICIEL = self.get_cmd("EXEC_LOGICIEL")
124 LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
125 LIRE_CHAMP = self.get_cmd("LIRE_CHAMP")
127 # 1.4. ==> Le nom du programme HOMARD e lancer
129 repertoire_outils = aster.repout()
130 homard = repertoire_outils + "homard"
132 # 1.5. ==> Initialisations
135 Rep_Calc_ASTER = os.getcwd()
142 LISTE_ADAPTATION_LIBRE = ("RAFF_DERA" , "RAFFINEMENT" , "DERAFFINEMENT")
151 #====================================================================
152 # 2. Decodage des arguments de la macro-commande
153 #====================================================================
154 # 2.1. ==> Donnees de pilotage de l'adaptation
156 if ( self.nom == "MACR_ADAP_MAIL" ) :
160 # 2.1.1. ==> Les concepts "maillage"
162 #gn print "\n.. Debut de 2.1.1"
163 # for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1"] :
164 for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1" , "MAILLAGE_NP1_ANNEXE"] :
165 #gn print "\nmot_cle = ",mot_cle
167 dico["Type_Maillage"] = mot_cle
168 if ( args[mot_cle] != None ) :
169 #gn print "==> args[",mot_cle,"] = ",args[mot_cle]
170 dico["Nom_ASTER"] = args[mot_cle]
171 if ( mot_cle == "MAILLAGE_N" ) :
172 dico["Action"] = "A_ecrire"
174 dico["Action"] = "A_lire"
176 dico["Action"] = "Rien"
177 #gn print "dico = ",dico
178 liste_maillages.append(dico)
180 # 2.1.2. ==> L'eventuel indicateur d'erreur
182 #gn print "\n.. Debut de 2.1.2"
183 #gn print "args = ", args
184 if args["ADAPTATION"] in LISTE_ADAPTATION_LIBRE :
186 dico["Type_Champ"] = "INDICATEUR"
187 if ( args["RESULTAT_N"] != None ) :
189 dico["RESULTAT"] = args["RESULTAT_N"]
190 noresu = dico["RESULTAT"].nom
191 dico["NOM_CHAM"] = args["INDICATEUR"]
192 nomsym = dico["NOM_CHAM"]
193 if ( args["NUME_ORDRE"] != None ) :
194 dico["NUME_ORDRE"] = args["NUME_ORDRE"]
195 if ( args["INST"] != None ) :
196 dico["INST"] = args["INST"]
197 for cle in [ "PRECISION", "CRITERE" ] :
198 if ( args[cle] != None ) :
199 dico[cle] = args[cle]
200 if ( args["SENSIBILITE"] != None ) :
201 dico["SENSIBILITE"] = args["SENSIBILITE"]
204 dico["CHAM_GD"] = args["CHAM_GD"]
205 noresu = dico["CHAM_GD"].nom
207 #gn print "dico = ", dico
209 if dico.has_key("SENSIBILITE") :
210 nopase = dico["SENSIBILITE"].nom
213 #gn print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
214 dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
215 #gn print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
216 dico["COMPOSANTE"] = args["NOM_CMP_INDICA"]
217 liste_champs.append(dico)
221 # 2.1.3. ==> Les champs e mettre e jour
223 #gn print "\n.. Debut de 2.1.3."
225 if args.has_key("MAJ_CHAM") :
227 if args["MAJ_CHAM"] is None :
230 les_champs = args["MAJ_CHAM"]
232 for maj_cham in les_champs :
234 #gn print type(maj_cham)
237 dico["Type_Champ"] = "CHAMP_MAJ"
238 liste_aux = [ "CHAM_MAJ", "TYPE_CHAM" ]
239 if ( maj_cham["RESULTAT"] != None ) :
241 liste_aux.append("RESULTAT")
242 liste_aux.append("NOM_CHAM")
243 if ( maj_cham["NUME_ORDRE"] != None ) :
244 dico["NUME_ORDRE"] = maj_cham["NUME_ORDRE"]
245 elif ( maj_cham["INST"] != None ) :
246 dico["INST"] = maj_cham["INST"]
247 for cle in [ "PRECISION", "CRITERE" ] :
248 if ( maj_cham[cle] != None ) :
249 dico[cle] = maj_cham[cle]
250 noresu = maj_cham["RESULTAT"].nom
251 nomsym = maj_cham["NOM_CHAM"]
252 if ( maj_cham["SENSIBILITE"] != None ) :
253 dico["SENSIBILITE"] = maj_cham["SENSIBILITE"]
256 liste_aux.append("CHAM_GD")
257 noresu = maj_cham["CHAM_GD"].nom
259 for cle in liste_aux :
260 dico[cle] = maj_cham[cle]
261 #gn print "dico = ", dico
263 if dico.has_key("SENSIBILITE") :
264 nopase = dico["SENSIBILITE"].nom
267 #gn print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
268 dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
269 #gn print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
272 liste_champs.append(dico)
274 # 2.1.4. ==> Les zones de raffinement
276 ### print "\n.. Debut de 2.1.4."
278 if args.has_key("ZONE") :
280 if args["ZONE"] is not None :
281 les_zones = args["ZONE"]
283 for zone in les_zones :
287 for aux in ['X_MINI', 'X_MAXI', 'Y_MINI', 'Y_MAXI', 'Z_MINI', 'Z_MAXI', 'X_CENTRE', 'Y_CENTRE', 'Z_CENTRE', 'RAYON'] :
288 if ( zone[aux] != None ) :
289 dico[aux] = zone[aux]
291 liste_zones.append(dico)
293 ### print liste_zones
295 # 2.2. ==> Donnees de pilotage de l'information
302 dico["Type_Maillage"] = "MAILLAGE_N"
303 dico["Nom_ASTER"] = args["MAILLAGE"]
304 dico["Action"] = "A_ecrire"
305 liste_maillages.append(dico)
307 # 2.3. ==> Suivi de frontiere
309 #gn print "\n.. Debut de 2.3."
311 if ( MAILLAGE_FRONTIERE != None ) :
314 dico["Type_Maillage"] = "MAILLAGE_FRONTIERE"
315 dico["Nom_ASTER"] = MAILLAGE_FRONTIERE
316 dico["Action"] = "A_ecrire"
317 liste_maillages.append(dico)
319 # 2.4. ==> Le numero de version de HOMARD
320 # Remarque : dans la donnee de la version de HOMARD, il faut remplacer
321 # le _ de la donnee par un ., qui est interdit dans la
322 # syntaxe du langage de commandes ASTER
323 # Remarque : il faut remplacer le N majuscule de la donnee par
324 # un n minuscule, qui est interdit dans la syntaxe du langage
327 #gn print "\n.. Debut de 2.4. avec VERSION_HOMARD = ", VERSION_HOMARD
328 VERSION_HOMARD = string.replace(VERSION_HOMARD,"_" , ".")
329 VERSION_HOMARD = string.replace(VERSION_HOMARD,"N" , "n")
331 if ( VERSION_HOMARD[-6:]==".PERSO" ):
332 VERSION_HOMARD = VERSION_HOMARD[:-6]
336 #gn print ".... VERSION_HOMARD = ", VERSION_HOMARD
337 #gn print ".... version_perso = ", version_perso
339 #====================================================================
340 # 3. Preparation du lancement des commandes
341 #====================================================================
343 # 3.1. ==> . Elaboration des noms MED des concepts de maillage
344 # . Memorisation des noms ASTER du maillage en entree et en sortie (sous forme string)
346 # On cree une nouvelle liste des dictionnaires decrivant les maillages
347 # et e la fin on ecrase l'ancienne liste par cette nouvelle.
349 #gn print "\n.. Debut de 3.1."
351 Nom_Concept_Maillage_NP1_ANNEXE = None
353 for dico in liste_maillages :
354 #gn print "\ndico avant = ",dico
355 if ( dico["Action"] != "Rien" ) :
356 dico["NOM_MED"] = aster.mdnoma(dico["Nom_ASTER"].nom)
358 if ( dico["Type_Maillage"] == "MAILLAGE_N" ) :
359 Nom_Concept_Maillage_N = dico["Nom_ASTER"].nom
360 elif ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
361 Nom_Concept_Maillage_NP1 = dico["Nom_ASTER"].nom
362 elif ( dico["Type_Maillage"] == "MAILLAGE_NP1_ANNEXE" ) :
363 Nom_Concept_Maillage_NP1_ANNEXE = dico["Nom_ASTER"].nom
364 #gn print "\ndico apres = ",dico
365 liste_maillages = l_aux
367 # 3.2. ==> Recherche du numero d'iteration et du repertoire de travail
369 # 3.2.1. ==> Par defaut :
370 # . le numero d'iteration est nul
371 # . le nom du repertoire de lancement de HOMARD est construit sur le nom
372 # du maillage en entree et le numero de passage dans la fonction
374 #gn print "\.. Debut de 3.2.1."
377 Nom_Rep_local = Nom_Concept_Maillage_N + "_" + mode_homard + "_" + str(numero_passage_fonction)
378 Rep_Calc_HOMARD_local = os.path.join(".", Nom_Rep_local)
379 Rep_Calc_HOMARD_global = os.path.join(Rep_Calc_ASTER, Nom_Rep_local)
380 ### print "Rep_Calc_HOMARD_local = ", Rep_Calc_HOMARD_local
381 ### print "Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
383 # 3.2.2. ==> En adaptation : il faut repartir du repertoire de l'iteration precedente
385 #gn print "\.. Debut de 3.2.2."
387 if ( mode_homard == "ADAP" ) :
389 # 3.2.2.1. ==> On recherche si dans les passages deje effectues, il en existe un
390 # dont le maillage d'arrivee etait l'actuel maillage d'entree. Si c'est
391 # le cas, cela veut dire que l'adaptation en cours est la suite d'une
392 # precedente. On doit donc utiliser le meme repertoire. Le numero
393 # d'iteration est celui de l'adaptation precedente augmente de 1.
395 #gn print "\.. Debut de 3.2.2.1."
397 for dico in Liste_Passages :
398 if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
399 niter = dico["niter"] + 1
400 Rep_Calc_HOMARD_local = dico["Rep_Calc_HOMARD_local"]
401 Rep_Calc_HOMARD_global = dico["Rep_Calc_HOMARD_global"]
403 # 3.2.2.2. ==> Memorisation de ce passage
405 #gn print "\.. Debut de 3.2.2.2."
407 # 3.2.2.2.1. ==> Enregistrement d'un nouveau cas de figure
411 dico["Maillage_0"] = Nom_Concept_Maillage_N
412 dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
413 dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
414 dico["Rep_Calc_HOMARD_local"] = Rep_Calc_HOMARD_local
415 dico["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
416 dico["niter"] = niter
417 Liste_Passages.append(dico)
419 # 3.2.2.2.2. ==> Modification du cas en cours
423 for dico in Liste_Passages :
424 if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
425 dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
426 dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
427 dico["niter"] = niter
429 Liste_Passages = l_aux
431 ### print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
433 # 3.2.3. Creation du repertoire pour homard
434 # attention : on ne fait cette creation qu'une seule fois par cas
435 # d'adaptation ou d'information
437 #gn print "\.. Debut de 3.2.3."
442 os.mkdir(Rep_Calc_HOMARD_global)
443 except os.error,codret_partiel :
444 self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
445 UTMESS("F",'HOMARD0_4',valk=Rep_Calc_HOMARD_global)
447 #====================================================================
448 # 4. Ecriture des commandes de creation des donnees MED
449 #====================================================================
451 #gn print "\.. Debut de 4."
453 # On doit ecrire : le maillage,
454 # le champ d'indicateur d'erreur
455 # les champs e convertir
456 # Remarque : on met tout dans le meme fichier
458 # Chacune de ces ecritures est optionnelle selon le contexte.
460 # 4.1. ==> Noms des fichiers d'ASTER vers HOMARD et eventuellement de HOMARD vers ASTER
461 # Remarque : aujourd'hui, les ecritures ou les lectures au format MED se font obligatoirement sur
462 # un fichier de nom fort.n, place dans le repertoire de calcul
464 # 4.1.1. ==> D'ASTER vers HOMARD
466 unite_fichier_aster_vers_homard = 1787 + 2*numero_passage_fonction
467 fichier_aster_vers_homard = os.path.join(Rep_Calc_ASTER,"fort." + str(unite_fichier_aster_vers_homard))
468 ### print "fichier_aster_vers_homard = ",fichier_aster_vers_homard
470 # 4.1.2. ==> De HOMARD vers ASTER
472 if ( mode_homard == "ADAP" ) :
473 unite_fichier_homard_vers_aster = unite_fichier_aster_vers_homard + 1
474 fichier_homard_vers_aster = os.path.join(Rep_Calc_ASTER,"fort." + str(unite_fichier_homard_vers_aster))
475 ### print "fichier_homard_vers_aster = ",fichier_homard_vers_aster
477 # 4.2. La definition du fichier de ASTER vers HOMARD
479 DEFI_FICHIER ( ACTION= "ASSOCIER",
480 UNITE = unite_fichier_aster_vers_homard,
484 # 4.3. Le(s) maillage(s)
485 # Le maillage de calcul et l'eventuel maillage de la frontiere sont ecrits
486 # dans le meme fichier MED
487 # En fait, on pourrait s'en passer au dela de la 1ere iteration
488 # car HOMARD a memorise. Mais des que l'on ecrit un champ,
489 # les conventions MED imposent la presence du maillage dans le fichier.
490 # Donc on va toujours ecrire.
492 for dico in liste_maillages :
493 if ( dico["Action"] == "A_ecrire" ) :
495 motscsi["MAILLAGE"] = dico["Nom_ASTER"]
497 motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
500 IMPR_RESU ( INFO = infocomm,
501 FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
504 # 4.4. Le(s) champ(s)
505 # Attention : il se peut que l'on demande la mise e jour du champ qui a servi comme
506 # indicateur d'erreur. Si c'est le cas, il ne faut pas demander son
507 # impression sinon il y a plantage d'IMPR_RESU qui ne sait pas substituer
508 # deux champs. D'ailleurs, c'est plus economique ainsi !
509 # Remarque : pour l'adaptation, on ne demande a priori qu'une composante du champ d'indicateur.
510 # s'il y a demande de mise e jour, toutes les composantes sont concernees. Il faut
511 # donc dans ce cas imprimer le champ total.
512 # dico["Type_Champ"] = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
513 # dico["RESULTAT"] = f ; concept ASTER du resutat associe
514 # dico["NOM_CHAM"] = f ; string ; Nom ASTER du champ
515 # dico["CHAM_GD"] = f ; concept ASTER du champ de grandeur associee
516 # dico["COMPOSANTE"] = f ; string ; Nom ASTER de la composante (dans le cas de l'indicateur)
517 # dico["NUME_ORDRE"] = f ; entier ; Numero d'ordre du champ
518 # dico["INST"] = f ; entier ; Instant du champ
519 # dico["PRECISION"] = f ; entier ; Precision sur l'instant du champ
520 # dico["CRITERE"] = f ; entier ; Critere de precision sur l'instant du champ
521 # dico["CHAM_MAJ"] = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
522 # dico["NOM_MED"] = o ; string ; Nom MED du champ
523 # dico["SENSIBILITE"] = f ; string ; Nom du parametre sensible associe
525 # 4.4.1. Recherche d'un doublon eventuel sur le champ d'indicateur d'erreur
527 #gn print "dico_indi = ",dico_indi
528 if len(dico_indi) > 0 :
529 indic_est_deja_imprime = 0
530 if dico_indi.has_key("RESULTAT") :
531 liste_aux = [ "RESULTAT", "NOM_CHAM" ]
533 liste_aux = [ "CHAM_GD" ]
535 indic_est_deja_imprime = 1
537 #gn print ".. Au debut de la boucle, liste_aux = ",liste_aux
538 #gn print ".. Au debut de la boucle, indic_est_deja_imprime = ",indic_est_deja_imprime
540 liste_champs_imprime = []
541 for dico in liste_champs :
542 ### print "\n.... dico = ",dico
543 # Pour un champ e mettre e jour, on a toujours impression
544 if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
545 liste_champs_imprime.append(dico)
546 # Si le champ d'indicateur n'a toujours pas ete repere comme champ e mettre e jour :
547 if not indic_est_deja_imprime :
548 # Est-ce le meme champ ?
550 for cle in liste_aux :
551 if ( dico.has_key(cle) ) :
552 ### print "...... dico_indi[cle] = ",dico_indi[cle]
553 ### print "...... dico[cle] = ",dico[cle]
554 if ( dico_indi[cle] != dico[cle] ) :
560 # Si oui, est-ce un champ sensible ou non ?
563 if dico.has_key(cle) :
564 if ( dico[cle] != None ) :
565 if dico_indi.has_key(cle) :
566 if ( dico_indi[cle] != dico[cle] ) :
572 # Si oui, est-ce au meme moment ? (remarque : si rien n'est designe, c'est qu'il n'y a qu'un
573 # seul instant ... donc c'est le meme ! En revanche, on ne sait pas comparer une donnee
574 # en numero d'ordre et une donnee en instant. On croise les doigts.)
576 for cle in [ "NUME_ORDRE", "INST" ] :
577 if dico.has_key(cle) :
578 if ( dico[cle] != None ) :
579 if dico_indi.has_key(cle) :
580 if ( dico_indi[cle] != dico[cle] ) :
584 indic_est_deja_imprime = 1
585 ### print "\n\nFin de la boucle .. indic_est_deja_imprime = ",indic_est_deja_imprime
586 # Si le champ d'indicateur n'a pas ete repere comme champ e mettre e jour, il faut
587 # l'inclure dans les champs e imprimer
588 if not indic_est_deja_imprime :
589 liste_champs_imprime.append(dico_indi)
591 # 4.4.2. Impressions apres le filtrage precedent
592 #gn print "\n.... Debut de 4.2.4.2."
594 for dico in liste_champs_imprime :
596 for cle in [ "RESULTAT", "NOM_CHAM", "CHAM_GD", "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
597 if dico.has_key(cle) :
598 if ( dico[cle] != None ) :
599 motscsi[cle] = dico[cle]
600 if dico.has_key("COMPOSANTE") :
601 motscsi["NOM_CMP"] = dico["COMPOSANTE"]
602 if dico.has_key("SENSIBILITE") :
603 motscsi["SENSIBILITE"] = dico["SENSIBILITE"]
605 motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
608 #gn print ".. motscfa = ",motscfa
610 IMPR_RESU ( INFO = infocomm,
611 FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
614 #====================================================================
615 # 5. ==> Creation des fichiers de donnees pour HOMARD
616 #====================================================================
618 #gn print "\.. Debut de 5."
620 dico_configuration = {}
622 # 5.1. ==> Les generalites
624 dico_configuration["INFO"] = INFO
626 dico_configuration["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
627 dico_configuration["VERSION_HOMARD"] = VERSION_HOMARD
628 dico_configuration["version_perso"] = version_perso
630 dico_configuration["niter"] = niter
631 dico_configuration["Fichier_ASTER_vers_HOMARD"] = fichier_aster_vers_homard
632 if ( mode_homard == "ADAP" ) :
633 dico_configuration["Fichier_HOMARD_vers_ASTER"] = fichier_homard_vers_aster
635 # 5.2. ==> Les noms med des maillages
637 for dico in liste_maillages :
638 #gn print "Nom MED de " + dico["Type_Maillage"] + " = " + dico["NOM_MED"]
639 dico_configuration[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
640 #gn print dico_configuration
642 # 5.3. ==> Les caracteristiques de l'eventuel indicateur d'erreur
644 for dico in liste_champs :
646 if ( dico["Type_Champ"] == "INDICATEUR" ) :
647 liste_aux = [ "NOM_MED", "COMPOSANTE" ]
648 if dico.has_key("NUME_ORDRE") :
649 liste_aux.append("NUME_ORDRE")
650 for cle in liste_aux :
651 if ( dico[cle] != None ) :
652 dico_aux[cle] = dico[cle]
653 dico_configuration["Indicateur"] = dico_aux
654 #gn if dico_configuration.has_key("Indicateur") :
655 #gn print "dico_configuration[Indicateur] = ", dico_configuration["Indicateur"]
657 # 5.4. ==> Les eventuelles zones de raffinement
660 for dico in liste_zones :
665 l_aux = dico_configuration["Zones"]
667 dico_configuration["Zones"] = l_aux
668 ### if dico_configuration.has_key("Zones") :
669 ### print "dico_configuration[Zones] = ", dico_configuration["Zones"]
671 # 5.5. ==> La mise e jour de champs
674 for dico in liste_champs :
676 if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
677 liste_aux = [ "NOM_MED", "COMPOSANTE" ]
678 if dico.has_key("NUME_ORDRE") :
679 liste_aux.append("NUME_ORDRE")
681 for cle in [ "RESULTAT", "NOM_CHAM", "INST", "PRECISION", "CRITERE" ] :
682 liste_aux.append(cle)
683 for cle in liste_aux :
684 if dico.has_key(cle) :
685 if ( dico[cle] != None ) :
686 dico_aux[cle] = dico[cle]
692 l_aux = dico_configuration["Champs"]
693 l_aux.append(dico_aux)
694 dico_configuration["Champs"] = l_aux
695 #gn if dico_configuration.has_key("Champs") :
696 #gn print "dico_configuration[Champs] = ", dico_configuration["Champs"]
698 # 5.6. ==> Appel de la fonction de creation
700 donnees_homard = creation_donnees_homard.creation_donnees_homard ( self.nom, args, dico_configuration )
702 donnees_homard.quel_mode ( )
703 fic_homard_niter, fic_homard_niterp1 = donnees_homard.creation_configuration ( )
704 donnees_homard.ecrire_fichier_configuration ( )
705 if ( mode_homard == "INFO" ) :
706 Nom_Fichier_Donnees = donnees_homard.ecrire_fichier_donnees ( )
708 Nom_Fichier_Donnees = "0"
710 # 5.7. ==> Impression eventuelle des fichiers crees
712 #gn print "Repertoire ",Rep_Calc_HOMARD_global
713 #gn os.system("ls -la "+Rep_Calc_HOMARD_global)
715 l_aux = ["HOMARD.Donnees" , "HOMARD.Configuration"]
718 for nomfic in l_aux :
719 fic = os.path.join(Rep_Calc_HOMARD_global, nomfic)
720 if os.path.isfile (fic) :
721 print "\n\n=============================================================="
722 print "Contenu de", nomfic
723 fichier = open (fic,"r")
724 les_lignes = fichier.readlines()
726 for ligne in les_lignes :
728 print "==============================================================\n"
729 #gn if ( mode_homard == "ADAP" ) :
730 #gn if args.has_key("MAJ_CHAM") :
731 #gn if args["MAJ_CHAM"] is not None :
735 #====================================================================
736 # 6. Ecriture de la commande d'execution de homard
737 #====================================================================
740 #gn print "\.. Debut de 6."
741 #gn os.system("cp " + Rep_Calc_HOMARD_global + "/../fort.17* $HOME/aster")
742 #gn os.system("cp " + Rep_Calc_HOMARD_global + "/HOMARD.Configuration $HOME/aster/HOMARD.Configuration"+str(niter))
743 #gn fichier_aster_vers_homard_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_aster_vers_homard))
744 #gn shutil.copyfile(fichier_aster_vers_homard, fichier_aster_vers_homard_2)
747 EXEC_LOGICIEL ( ARGUMENT = (Rep_Calc_HOMARD_global, # nom du repertoire
748 VERSION_HOMARD, # version de homard
749 str(iaux), # niveau d information
750 Nom_Fichier_Donnees, # fichier de donnees HOMARD
751 str(version_perso), # version personnelle de homard ?
759 #gn if ( mode_homard == "ADAP" ) :
760 #gn fichier_homard_vers_aster_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster))
761 #gn shutil.copyfile(fichier_homard_vers_aster, fichier_homard_vers_aster_2)
762 #gn fichier_homard_vers_aster_2_1 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".1")
763 #gn os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_1+"</tmp/donn1")
764 #gn fichier_homard_vers_aster_2_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".2")
765 #gn os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_2+"</tmp/donn2")
767 #====================================================================
768 # 7. ==> Ecriture de la commande de lecture des resultats med
770 # La fonction self.DeclareOut(a,b) fonctionne ainsi :
771 # a est une chaine de caracteres
772 # b est la variable declaree dans la commande
773 # le but est de associer le contenu de b e la variable locale qui sera designee par a
775 # self.DeclareOut("maillage_a_lire",args["MAILLAGE_NP1"])
776 # ==> la variable maillage_a_lire est identifiee e l'argument "MAILLAGE_NP1"
777 #====================================================================
779 if ( mode_homard == "ADAP" ) :
781 # 7.1. ==> Le maillage
782 # On inhibe l'alarme MODELISA5_49 qui apparait car on fait VERIF=NON
784 #gn print "args = ",args
785 for dico in liste_maillages :
787 if ( dico["Action"] == "A_lire" ) :
789 MasquerAlarme('MODELISA5_49')
791 self.DeclareOut("maillage_a_lire", dico["Nom_ASTER"])
792 maillage_a_lire = LIRE_MAILLAGE ( UNITE = unite_fichier_homard_vers_aster,
794 NOM_MED = dico["NOM_MED"],
795 VERI_MAIL = _F(VERIF="NON"), INFO_MED = infocomm, INFO = infocomm )
797 RetablirAlarme('MODELISA5_49')
799 #gn print "MAILLAGE = ",maillage_a_lire
800 #gn print "NOM_MED = ",dico["NOM_MED"]
801 if ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
802 maillage_np1 = maillage_a_lire
803 maillage_np1_nom_med = dico["NOM_MED"]
805 # 7.2. ==> Les champs
809 for dico in liste_champs :
810 if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
812 self.DeclareOut("champ_maj", dico["CHAM_MAJ"])
814 for cle in [ "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
815 if dico.has_key(cle) :
816 if ( dico[cle] != None ) :
817 motscsi[cle] = dico[cle]
818 if dico.has_key("NUME_ORDRE") :
819 motscsi["NUME_PT"] = dico["NUME_ORDRE"]
820 #gn print "MAILLAGE = ",maillage_np1
821 #gn print "NOM_MAIL_MED = ",maillage_np1_nom_med
822 #gn print "NOM_MED = ",dico["NOM_MED"]
823 #gn print "TYPE_CHAM =", dico["TYPE_CHAM"]
824 champ_maj = LIRE_CHAMP ( UNITE = unite_fichier_homard_vers_aster, FORMAT = "MED",
825 MAILLAGE = maillage_np1, NOM_MAIL_MED=maillage_np1_nom_med,
826 NOM_MED = dico["NOM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
827 INFO = infocomm, **motscsi )
829 #====================================================================
830 # 8. Menage des fichiers devenus inutiles
831 # On doit imperativement garder le dernier fichier homard produit
832 # En mode d'information, on garde egalement les fichiers textes
833 #====================================================================
835 liste_aux = [fichier_aster_vers_homard]
836 liste_aux_bis = os.listdir(Rep_Calc_HOMARD_global)
837 for fic in liste_aux_bis :
838 fic_total = os.path.join(Rep_Calc_HOMARD_global, fic)
839 liste_aux.append(fic_total)
841 if ( mode_homard == "ADAP" ) :
842 liste_aux.append(fichier_homard_vers_aster)
843 fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niterp1)
844 liste_aux_bis.append(fic)
845 #gn os.system("cp " + Rep_Calc_HOMARD_global + "/* $HOME/aster")
847 for fic in liste_aux :
848 if fic not in liste_aux_bis :
850 print "Destruction du fichier ", fic
851 if os.path.isfile(fic) :
854 except os.error,codret_partiel :
855 self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
856 UTMESS("F",'HOMARD0_5',valk=fic)
857 #gn print "Repertoire ",Rep_Calc_HOMARD_global
858 #gn os.system("ls -la "+Rep_Calc_HOMARD_global)
859 #gn print "Repertoire ",Rep_Calc_ASTER
860 #gn os.system("ls -la "+Rep_Calc_ASTER)
861 #gn print os.listdir(Rep_Calc_HOMARD_global)
863 #====================================================================
865 #====================================================================
867 ### if ( mode_homard == "ADAP" and niter == 3 ) :
868 ### if ( niter == 2 ) :