]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
mise a niveau aster 8.2.22
authorChristian Caremoli <>
Mon, 29 May 2006 07:48:38 +0000 (07:48 +0000)
committerChristian Caremoli <>
Mon, 29 May 2006 07:48:38 +0000 (07:48 +0000)
Aster/Cata/cataSTA81/Macro/creation_donnees_homard.py [new file with mode: 0644]
Aster/Cata/cataSTA81/Macro/macr_adap_mail_ops.py
Aster/Cata/cataSTA81/Macro/macr_ascouf_calc_ops.py
Aster/Cata/cataSTA81/Macro/macr_ascouf_mail_ops.py
Aster/Cata/cataSTA81/Macro/macr_aspic_mail_ops.py
Aster/Cata/cataSTA81/Macro/post_k1_k2_k3_ops.py
Aster/Cata/cataSTA81/Macro/test_fichier_ops.py
Aster/Cata/cataSTA81/cata.py
Noyau/N_SENSIBILITE.py
Validation/V_MCCOMPO.py

diff --git a/Aster/Cata/cataSTA81/Macro/creation_donnees_homard.py b/Aster/Cata/cataSTA81/Macro/creation_donnees_homard.py
new file mode 100644 (file)
index 0000000..3c41ecc
--- /dev/null
@@ -0,0 +1,522 @@
+#@ MODIF creation_donnees_homard Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE MCOURTOI M.COURTOIS
+__all__ = [ ]
+"""
+Cette classe crée le fichier de configuration permettant de lancer HOMARD depuis Code_Aster.
+"""
+__revision__ = "V1.0"
+import os
+import os.path
+
+try:
+  from Utilitai.Utmess import UTMESS
+except ImportError:
+  def UTMESS(code, sprg, texte) :
+    """Clone de utmess si on ne reussit pas à le charger
+    """
+    fmt = '\n <%s> <%s> %s\n\n'
+    print fmt % (code, sprg, texte)
+
+# ------------------------------------------------------------------------------
+class creation_donnees_homard:
+  """Cette classe crée les données permettant de lancer HOMARD depuis Code_Aster.
+      Ce sont :
+      . le fichier de configuration
+      . le fichier des données dans le cas d'information
+   
+   Arguments (stockés en tant qu'attribut) :
+      . nom_macro : nom de la macro-commande qui appelle :
+                      'MACR_ADAP_MAIL' pour une adaptation
+                      'MACR_INFO_MAIL' pour une information sur un maillage
+      . mots_cles : mots-clés de la macro-commande
+      . dico_configuration : dictionnaire des options
+
+   Attributs :
+      . Nom_Fichier_Configuration : nom du fichier de configuration (immuable)
+      . Nom_Fichier_Donnees : nom du fichier de données (immuable)
+      . mode_homard : le mode pour filtrer ici ("ADAP" ou "INFO")
+      . ModeHOMA : le mode pour HOMARD (1 ou 2)
+      . mode_homard_texte : le mode d'utilisation, en francais ("ADAPTATION" ou "INFORMATION")
+      . elements_incompatibles : que faire des éléments incompatibles avec HOMARD
+   """
+# ------------------------------------------------------------------------------
+  def __init__(self, nom_macro, mots_cles, dico_configuration ) :
+    """Construction + valeurs par défaut des attributs
+    """
+#
+# 1. Vérification de la macro qui appelle
+#
+    d_aux = {}
+    d_aux["MACR_ADAP_MAIL"] = ( "ADAP", 1, "ADAPTATION" )
+    d_aux["MACR_INFO_MAIL"] = ( "INFO", 2, "INFORMATION" )
+    if d_aux.has_key(nom_macro) :
+      self.mode_homard = d_aux[nom_macro][0]
+      self.ModeHOMA = d_aux[nom_macro][1]
+      self.mode_homard_texte = d_aux[nom_macro][2]
+    else :
+      UTMESS("F", nom_macro, "Cette macro commande est inconnue.")
+#
+# 2. Données générales de cette initialisation
+#
+#gn    for mot_cle in mots_cles.keys() :
+#gn      print "mots_cles[", mot_cle, "] = ", mots_cles[mot_cle]
+#gn    for mot_cle in dico_configuration.keys() :
+#gn      print "dico_configuration[", mot_cle, "] = ", dico_configuration[mot_cle]
+#
+    self.nom_macro = nom_macro
+    self.mots_cles = mots_cles
+    self.dico_configuration = dico_configuration
+#
+# 3. Quel type de traitement des elemenst incompatibles
+#
+    if mots_cles.has_key("ELEMENTS_NON_HOMARD") :
+      d_aux = {}
+      d_aux["REFUSER"] = "TOUS"
+      d_aux["IGNORER"] = "IGNORE_QUAD"
+      self.elements_incompatibles = d_aux[mots_cles["ELEMENTS_NON_HOMARD"]]
+    else :
+      self.elements_incompatibles = None
+#
+# 4. Attributs immuables
+#
+    self.Nom_Fichier_Configuration = "HOMARD.Configuration"
+    self.Nom_Fichier_Donnees = "HOMARD.Donnees"
+#
+# ------------------------------------------------------------------------------
+  def int_to_str2 (self, entier) :
+    """
+    Transforme un entier compris entre 0 et 99 en une chaine sur deux caractères
+    """
+#    print "\nArguments a l'entree de", __name__, ":", entier
+#
+    try:
+       la_chaine = '%02d' % entier
+    except TypeError:
+       la_chaine = None
+#
+    return la_chaine
+# ------------------------------------------------------------------------------
+  def quel_mode (self) :
+    """Informe sur le mode de lancement de HOMARD
+    """
+###    print self.mode_homard_texte
+    print "Lancement de creation_donnees_homard en mode", self.mode_homard_texte
+    return
+# ------------------------------------------------------------------------------
+  def creation_configuration (self) :
+    """Crée les données nécessaires à la configuration
+    """
+#
+    message_erreur = None
+#
+    while message_erreur is None :
+#
+#     1. Les chaines liées aux numéros d'itération
+#
+      if self.mode_homard == "ADAP" :
+        niter = self.dico_configuration["niter"]
+        self.str_niter = self.int_to_str2 (niter)
+        self.str_niterp1 = self.int_to_str2 (niter+1)
+        self.niter_vers_niterp1 = self.str_niter + ".vers." + self.str_niterp1
+#
+#     2. La liste standard
+#
+      if self.mode_homard == "INFO" :
+        aux = "Liste.info"
+      else :
+        aux = "Liste." + self.niter_vers_niterp1
+      self.ListeStd = aux
+#
+#     3. Le type de bilan : il faut convertir la donnée textuelle en un entier,
+#        produit de nombres premiers.
+#        Si rien n'est demandé, on met 0.
+#
+      aux = 1
+      dico_aux = {}
+      dico_aux["INTERPENETRATION"] = 3
+      dico_aux["NOMBRE"] = 7
+      dico_aux["QUALITE"] = 5
+      dico_aux["CONNEXITE"] = 11
+      dico_aux["TAILLE"] = 13
+      l_aux = dico_aux.keys()
+      for choix in l_aux :
+        if self.mots_cles.has_key(choix) :
+          if self.mots_cles[choix] == "OUI" :
+            aux = aux * dico_aux[choix]
+      if aux == 1 :
+        aux = 0
+      self.TypeBila = aux
+#
+#     4. Les entrées/sorties au format MED
+#
+      self.CCNoMN__ = self.dico_configuration["NOM_MED_MAILLAGE_N"]
+      if self.mode_homard == "ADAP" :
+        self.CCNoMNP1 = self.dico_configuration["NOM_MED_MAILLAGE_NP1"]
+        if self.dico_configuration.has_key("NOM_MED_MAILLAGE_NP1_ANNEXE") :
+          self.CCMaiAnn = self.dico_configuration["NOM_MED_MAILLAGE_NP1_ANNEXE"]
+#
+#     5. Les entrées/sorties au format HOMARD
+#
+      if self.mode_homard == "ADAP" :
+        self.fic_homard_niter   = "M_" + self.str_niter   + ".hom"
+        self.fic_homard_niterp1 = "M_" + self.str_niterp1 + ".hom"
+      else :
+        self.fic_homard_niter = None
+#
+#     6.1. Le pilotage de l'adaptation
+#
+      if self.mode_homard == "ADAP" :
+#
+#     6.1. Le type d'adaptation
+#
+        if self.mots_cles["ADAPTATION"] == "RAFFINEMENT" or self.mots_cles["ADAPTATION"] == "RAFFINEMENT_ZONE" :
+          self.TypeRaff = "libre"
+          self.TypeDera = "non"
+        elif self.mots_cles["ADAPTATION"] == "DERAFFINEMENT" :
+          self.TypeRaff = "non"
+          self.TypeDera = "libre"
+        elif self.mots_cles["ADAPTATION"] == "RAFF_DERA" :
+          self.TypeRaff = "libre"
+          self.TypeDera = "libre"
+        elif self.mots_cles["ADAPTATION"] == "RAFFINEMENT_UNIFORME" :
+          self.TypeRaff = "uniforme"
+          self.TypeDera = "non"
+        elif self.mots_cles["ADAPTATION"] == "DERAFFINEMENT_UNIFORME" :
+          self.TypeRaff = "non"
+          self.TypeDera = "uniforme"
+        elif self.mots_cles["ADAPTATION"] == "RIEN" :
+          self.TypeRaff = "non"
+          self.TypeDera = "non"
+#gn        print "... self.TypeRaff = ",self.TypeRaff
+#gn        print "... self.TypeDera = ",self.TypeDera
+#
+#     6.2. L'éventuel seuil de raffinement
+#
+        if self.TypeRaff == "libre" and self.mots_cles["ADAPTATION"] != "RAFFINEMENT_ZONE" :
+          d_aux = {}
+          d_aux["CRIT_RAFF_ABS"] = ("SeuilHau",   1)
+          d_aux["CRIT_RAFF_REL"] = ("SeuilHRe", 100)
+          d_aux["CRIT_RAFF_PE" ] = ("SeuilHPE", 100)
+          l_aux = d_aux.keys()
+          for mot_cle in l_aux :
+            if self.mots_cles[mot_cle] is not None :
+              aux = self.mots_cles[mot_cle]*d_aux[mot_cle][1]
+              self.critere_raffinement = (d_aux[mot_cle][0], aux)
+        else :
+          self.critere_raffinement = None
+#gn          print "... self.critere_raffinement = ", self.critere_raffinement
+#
+#       6.3. L'éventuel seuil de déraffinement
+#
+        if self.TypeDera == "libre" :
+          d_aux = {}
+          d_aux["CRIT_DERA_ABS"] = ("SeuilBas",   1)
+          d_aux["CRIT_DERA_REL"] = ("SeuilBRe", 100)
+          d_aux["CRIT_DERA_PE" ] = ("SeuilBPE", 100)
+          l_aux = d_aux.keys()
+          for mot_cle in l_aux :
+            if self.mots_cles[mot_cle] is not None :
+              aux = self.mots_cles[mot_cle]*d_aux[mot_cle][1]
+              self.critere_deraffinement = (d_aux[mot_cle][0], aux)
+        else :
+          self.critere_deraffinement = None
+#gn          print "... self.critere_deraffinement = ", self.critere_deraffinement
+#
+#       6.4. Les niveaux extremes
+#
+        self.niveau = []
+        for mot_cle in [ "NIVE_MIN", "NIVE_MAX" ] :
+          if self.mots_cles.has_key(mot_cle) :
+            if self.mots_cles[mot_cle] is not None :
+              if mot_cle == "NIVE_MIN" :
+                aux = "NiveauMi"
+              else :
+                aux = "NiveauMa"
+              self.niveau.append((aux, self.mots_cles[mot_cle]))
+        if len(self.niveau) == 2 :
+#gn          print self.mots_cles["NIVE_MIN"]
+#gn          print self.mots_cles["NIVE_MAX"]
+          if self.mots_cles["NIVE_MIN"] >= self.mots_cles["NIVE_MAX"] :
+            message_erreur = "Le niveau mini ,"+str(self.mots_cles["NIVE_MIN"])+\
+                             ", doit etre < au niveau maxi, "+str(self.mots_cles["NIVE_MAX"])+"."
+            break
+#
+#       6.5. Les éventuelles zones de raffinement
+#
+        if self.dico_configuration.has_key("Zones") :
+          iaux = 0
+          for zone in self.dico_configuration["Zones"] :
+            iaux = iaux + 1
+            s_aux_1 = "Zone numero "+str(iaux)+" : "
+            s_aux_2 = ", doit etre < au "
+            if zone.has_key("X_MINI") :
+              if zone["X_MINI"] >= zone["X_MAXI"] :
+                message_erreur = s_aux_1+"X mini ,"+str(zone["X_MINI"])+s_aux_2+"X maxi, "+str(zone["X_MAXI"])+"."
+              if zone["Y_MINI"] >= zone["Y_MAXI"] :
+                message_erreur = s_aux_1+"Y mini ,"+str(zone["Y_MINI"])+s_aux_2+"Y maxi, "+str(zone["Y_MAXI"])+"."
+            if zone.has_key("Z_MINI") :
+              if zone["Z_MINI"] >= zone["Z_MAXI"] :
+                message_erreur = s_aux_1+"Z mini ,"+str(zone["Z_MINI"])+s_aux_2+"Z maxi, "+str(zone["Z_MAXI"])+"."
+#
+      break
+#
+    if message_erreur is not None :
+      UTMESS("F", self.nom_macro, message_erreur)
+#
+    return self.fic_homard_niter
+# ------------------------------------------------------------------------------
+  def ouvre_fichier (self, nomfic_local) :
+    """Ouvre en écriture un fichier après l'avoir éventuellement détruit
+    """
+    codret_partiel = [0]
+###    print nomfic_local
+    Rep_Calc_HOMARD_global = self.dico_configuration["Rep_Calc_HOMARD_global"]
+    nomfic = os.path.join ( Rep_Calc_HOMARD_global , nomfic_local )
+#
+    if os.path.isfile (nomfic) :
+      try :
+        os.remove (nomfic)
+      except os.error, codret_partiel :
+        print "Probleme au remove, erreur numéro ", codret_partiel[0], ":", codret_partiel[1]
+        UTMESS("F", self.nom_macro, "Impossible de tuer le fichier "+nomfic)
+#
+    fichier = open (nomfic,"w")
+    self.fichier = fichier
+#
+    return fichier, nomfic
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_0 (self, commentaire) :
+    """Ecrit une ligne de commentaires du fichier de configuration
+   Arguments :
+      . commentaire : le commentaire à écrire
+    """
+#
+    ligne = "#\n"
+    ligne = ligne + "# " + commentaire + "\n"
+    ligne = ligne + "#\n"
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_2 (self, motcle, valeur) :
+    """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur
+   Arguments :
+      . motcle : le mot-clé HOMARD à écrire
+      . valeur : la valeur associée
+    """
+#
+    ligne = motcle + " " + str(valeur) + "\n"
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_3 (self, motcle, valeur1, valeur2) :
+    """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur1 + valeur2
+   Arguments :
+      . motcle : le mot-clé HOMARD à écrire
+      . valeur : la valeur associée
+    """
+#
+    ligne = motcle + " " + str(valeur1) + " " + str(valeur2) + "\n"
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_fichier_configuration (self) :
+    """Ecrit le fichier de configuration
+    """
+    message_erreur = None
+#
+    while message_erreur is None :
+#
+#     1. Ouverture du fichier
+#
+      fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Configuration)
+#
+#     2. Généralités
+#
+      self.ecrire_ligne_configuration_0("Generalites")
+      self.ecrire_ligne_configuration_2("ModeHOMA", self.ModeHOMA)
+      self.ecrire_ligne_configuration_2("ListeStd", self.ListeStd)
+      self.ecrire_ligne_configuration_2("TypeBila", self.TypeBila)
+      self.ecrire_ligne_configuration_2("CCAssoci", "MED")
+      self.ecrire_ligne_configuration_2("NumeIter", self.dico_configuration["niter"])
+#
+#     3. Les fichiers externes
+#
+      self.ecrire_ligne_configuration_0("Les fichiers au format MED")
+      self.ecrire_ligne_configuration_2("CCNoMN__", self.CCNoMN__)
+      self.ecrire_ligne_configuration_2("CCMaiN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+      if self.mode_homard == "ADAP" :
+        self.ecrire_ligne_configuration_2("CCNoMNP1", self.CCNoMNP1)
+        self.ecrire_ligne_configuration_2("CCMaiNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+#
+      self.ecrire_ligne_configuration_0("Les fichiers de bilan")
+      self.ecrire_ligne_configuration_2("PPBasFic", "info")
+#
+#     4. Les fichiers HOMARD
+#
+      self.ecrire_ligne_configuration_0("Les fichiers au format HOMARD")
+      if self.mode_homard == "ADAP" :
+        self.ecrire_ligne_configuration_3("HOMaiN__", "M_"+self.str_niter  , self.fic_homard_niter )
+        self.ecrire_ligne_configuration_3("HOMaiNP1", "M_"+self.str_niterp1, self.fic_homard_niterp1)
+        aux = "oui"
+      else :
+        aux = "non"
+      self.ecrire_ligne_configuration_2("EcriFiHO", aux)
+#
+#     5. Le pilotage de l'adaptation
+#
+      if self.mode_homard == "ADAP" :
+        self.ecrire_ligne_configuration_0("Le pilotage de l'adaptation")
+#
+#     5.1. Type d'adaptation
+#
+        self.ecrire_ligne_configuration_2("TypeRaff", self.TypeRaff)
+        if self.critere_raffinement is not None :
+          self.ecrire_ligne_configuration_2(self.critere_raffinement[0], self.critere_raffinement[1])
+        self.ecrire_ligne_configuration_2("TypeDera", self.TypeDera)
+        if self.critere_deraffinement is not None :
+          self.ecrire_ligne_configuration_2(self.critere_deraffinement[0], self.critere_deraffinement[1])
+#
+#     5.2. L'eventuel indicateur d'erreur
+#
+        if self.dico_configuration.has_key("Indicateur") :
+#
+          self.ecrire_ligne_configuration_0("L'indicateur d'erreur")
+          self.ecrire_ligne_configuration_2("CCIndica", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+          self.ecrire_ligne_configuration_2("CCNoChaI", self.dico_configuration["Indicateur"]["NOM_MED"])
+          self.ecrire_ligne_configuration_2("CCCoChaI", self.dico_configuration["Indicateur"]["COMPOSANTE"])
+          if self.dico_configuration["Indicateur"].has_key("NUME_ORDRE") :
+            self.ecrire_ligne_configuration_2("CCNumOrI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
+            self.ecrire_ligne_configuration_2("CCNumPTI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
+#
+#     5.3. Les niveaux extremes
+#
+        for aux in self.niveau :
+          self.ecrire_ligne_configuration_2(aux[0], aux[1])
+#
+#     6. Les éventuelles zones de raffinement
+#
+      if self.dico_configuration.has_key("Zones") :
+        iaux = 0
+        for zone in self.dico_configuration["Zones"] :
+          iaux = iaux + 1
+          self.ecrire_ligne_configuration_0("Zone de raffinement numéro "+str(iaux))
+          if zone.has_key("X_MINI") :
+            self.ecrire_ligne_configuration_3("ZoRaXmin", iaux, zone["X_MINI"])
+            self.ecrire_ligne_configuration_3("ZoRaXmax", iaux, zone["X_MAXI"])
+            self.ecrire_ligne_configuration_3("ZoRaYmin", iaux, zone["Y_MINI"])
+            self.ecrire_ligne_configuration_3("ZoRaYmax", iaux, zone["Y_MAXI"])
+          if zone.has_key("Z_MINI") :
+            self.ecrire_ligne_configuration_3("ZoRaZmin", iaux, zone["Z_MINI"])
+            self.ecrire_ligne_configuration_3("ZoRaZmax", iaux, zone["Z_MAXI"])
+          if zone.has_key("X_CENTRE") :
+            self.ecrire_ligne_configuration_3("ZoRaXCen", iaux, zone["X_CENTRE"])
+            self.ecrire_ligne_configuration_3("ZoRaYCen", iaux, zone["Y_CENTRE"])
+            self.ecrire_ligne_configuration_3("ZoRaRayo", iaux, zone["RAYON"])
+          if zone.has_key("Z_CENTRE") :
+            self.ecrire_ligne_configuration_3("ZoRaZCen", iaux, zone["Z_CENTRE"])
+#
+#     7. Les éventuels champs à mettre à jour
+#
+      if self.dico_configuration.has_key("Champs") :
+        self.ecrire_ligne_configuration_0("Champs à mettre à jour")
+        self.ecrire_ligne_configuration_2("CCSolN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+        self.ecrire_ligne_configuration_2("CCSolNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+        iaux = 0
+        for maj_champ in self.dico_configuration["Champs"] :
+          iaux = iaux + 1
+          self.ecrire_ligne_configuration_0("Mise à jour du champ numéro "+str(iaux))
+          self.ecrire_ligne_configuration_3("CCChaNom", iaux, maj_champ["NOM_MED"])
+          if maj_champ.has_key("NUME_ORDRE") :
+            self.ecrire_ligne_configuration_3("CCChaNuO", iaux, maj_champ["NUME_ORDRE"])
+            self.ecrire_ligne_configuration_3("CCChaPdT", iaux, maj_champ["NUME_ORDRE"])
+          elif maj_champ.has_key("INST") :
+            self.ecrire_ligne_configuration_3("CCChaIns", iaux, maj_champ["INST"])
+#
+#     8. L'éventuel maillage de frontière
+#
+      if self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") :
+        self.ecrire_ligne_configuration_0("Maillage de frontière")
+        self.ecrire_ligne_configuration_2("SuivFron", "oui")
+        self.ecrire_ligne_configuration_2("CCFronti", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+        self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"])
+        if self.mots_cles.has_key("GROUP_MA") :
+          if self.mots_cles["GROUP_MA"] is not None :
+            for group_ma in self.mots_cles["GROUP_MA"] :
+              self.ecrire_ligne_configuration_2("CCGroFro", group_ma)
+#
+#     9. L'usage des éléments incompatibles avec HOMARD
+#
+      if self.elements_incompatibles is not None :
+        self.ecrire_ligne_configuration_0("Les éléments incompatibles avec HOMARD")
+        self.ecrire_ligne_configuration_2("TypeElem", self.elements_incompatibles)
+#
+#     10. Options particulières
+#
+      self.ecrire_ligne_configuration_0("Autres options")
+      if self.mots_cles.has_key("LANGUE") :
+        self.ecrire_ligne_configuration_2("Langue", self.mots_cles["LANGUE"])
+      self.ecrire_ligne_configuration_2("MessInfo", self.dico_configuration["INFO"])
+      if self.dico_configuration["version_perso"] :
+        VERSION_HOMARD = self.dico_configuration["VERSION_HOMARD"]
+        self.ecrire_ligne_configuration_2("DicoOSGM", "$HOMARD_USER/"+VERSION_HOMARD+"/CONFIG/typobj.stu")
+#
+#     11. Fermeture du fichier
+#
+      fichier.close()
+      break
+#
+    if message_erreur is not None :
+      message_erreur = "Ecriture de "+nomfic_global+". "+message_erreur
+      UTMESS("F", self.nom_macro, message_erreur)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_fichier_donnees (self) :
+    """Ecrit le fichier des donnees dans le cas d'une demande d'information
+    """
+    message_erreur = None
+#
+    while message_erreur is None :
+#
+#     1. Ouverture du fichier
+#
+      fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Donnees)
+#
+#     2. On ne demande rien pour le moment
+#
+      fichier.write("0\n")
+      fichier.write("0\n")
+      fichier.write("0\n")
+      fichier.write("q\n")
+#
+#     n. Fermeture du fichier
+#
+      fichier.close()
+      break
+#
+    if message_erreur is not None :
+      UTMESS("F", self.nom_macro, message_erreur)
+#
+    return nomfic_global
index 6c7afabb69224be98ec5ed02df558026b2fb33a3..0d1234c483d6972c71df51608a5cdf8911054573 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_adap_mail_ops Macro  DATE 04/07/2005   AUTEUR GNICOLAS G.NICOLA
+#@ MODIF macr_adap_mail_ops Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOI
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 #
 def macr_adap_mail_ops ( self,
-                         INFO, VERSION_HOMARD, LANGUE,
-                         NOMBRE, QUALITE, CONNEXITE, TAILLE, INTERPENETRATION,
-                         NON_SIMPLEXE, MAILLAGE_FRONTIERE,
+                         INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE,
                          **args):
   """
-     Ecriture des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
-     Remarque : on ne mentionne explicitement que les mots-clés communs aux
-                deux macros. Les autres sont dans le dictionnaire args
+     Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
   """
 #
 #  1. args est le dictionnaire des arguments
@@ -57,7 +53,7 @@ def macr_adap_mail_ops ( self,
 #     dictionnaires que de maillages manipulés. L'ensemble de ces dictionnaires est conservé
 #     dans la liste Liste_Maillages.
 #     Description du dictionnaire de maillages :
-#        dico["Type_Maillage"] = o ; string ; "MAILLAGE_N", "MAILLAGE_NP1" ou "MAILLAGE_FRONTIERE"
+#        dico["Type_Maillage"] = o ; string ; "MAILLAGE_N", "MAILLAGE_NP1", "MAILLAGE_NP1_ANNEXE" ou "MAILLAGE_FRONTIERE"
 #        dico["Nom_ASTER"]     = o ; concept ASTER associé
 #        dico["Action"]        = o ; string ; "A_ecrire" ou "A_lire"
 #        dico["NOM_MED"]       = o ; string ; Nom MED du maillage
@@ -79,17 +75,18 @@ def macr_adap_mail_ops ( self,
 #        dico["NOM_MED"]      = o ; string ; Nom MED du champ
 #
   from Accas import _F
+  from Macro import creation_donnees_homard 
+  from Utilitai.Utmess     import UTMESS
   import aster 
   import string
-  import types
   import os
-  import shutil
+#gn  import shutil
 #
   global Liste_Passages
 #
-#--------------------------------------------------------------------
+#====================================================================
 # 1. Préalables
-#--------------------------------------------------------------------
+#====================================================================
 #
 # 1.1. ==> La macro compte pour 1 dans la numerotation des commandes
 #
@@ -102,18 +99,16 @@ def macr_adap_mail_ops ( self,
   except :
     self.jdc.indice_macro_homard = 1
     Liste_Passages = []
-  Numero_Passage_Fonction = self.jdc.indice_macro_homard
-###  print "Numero_Passage_Fonction = ",Numero_Passage_Fonction
+  numero_passage_fonction = self.jdc.indice_macro_homard
+###  print "numero_passage_fonction = ",numero_passage_fonction
 #
 # 1.3. ==> On importe les definitions des commandes a utiliser dans la macro
 #
   DEFI_FICHIER    = self.get_cmd("DEFI_FICHIER")
   IMPR_RESU       = self.get_cmd("IMPR_RESU")
   EXEC_LOGICIEL   = self.get_cmd("EXEC_LOGICIEL")
-  IMPR_FICO_HOMA  = self.get_cmd("IMPR_FICO_HOMA")
   LIRE_MAILLAGE   = self.get_cmd("LIRE_MAILLAGE")
   LIRE_CHAMP      = self.get_cmd("LIRE_CHAMP")
-  DETRUIRE        = self.get_cmd('DETRUIRE')
 #
 # 1.4. ==> Le nom du programme HOMARD à lancer
 #
@@ -122,65 +117,67 @@ def macr_adap_mail_ops ( self,
 #
 # 1.5. ==> Initialisations
 #
-  codret = 0
   codret_partiel = [0]
   Rep_Calc_ASTER = os.getcwd()
 #
   Liste_Maillages = []
   Liste_Champs    = []
+  Liste_Zones     = []
   dico_indi = {}
 #
-  ADAPTATION = None
-  MAJ_CHAM = None
+  LISTE_ADAPTATION_LIBRE = ("RAFF_DERA" , "RAFFINEMENT" , "DERAFFINEMENT")
 #
-  unite = 71
-#
-#--------------------------------------------------------------------
+#====================================================================
 # 2. Décodage des arguments de la macro-commande
-#--------------------------------------------------------------------
+#====================================================================
 # 2.1. ==> Données de pilotage de l'adaptation
 #
   if ( self.nom == "MACR_ADAP_MAIL" ) :
 #
-    modhom = "ADAP"
-#
-    ADAPTATION = args["ADAPTATION"]
-    if args.has_key("MAJ_CHAM") :
-      MAJ_CHAM = args["MAJ_CHAM"]
+    mode_homard = "ADAP"
 #
 # 2.1.1. ==> Les concepts "maillage"
 #
-    for mot_cle in ["MAILLAGE_N","MAILLAGE_NP1"] :
+#gn    print "\n.. Debut de 2.1.1"
+#    for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1"] :
+    for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1" , "MAILLAGE_NP1_ANNEXE"] :
+#gn      print "\nmot_cle = ",mot_cle
       dico = {}
       dico["Type_Maillage"] = mot_cle
-      dico["Nom_ASTER"]     = ADAPTATION[mot_cle]
-      if ( mot_cle == "MAILLAGE_N" ) :
-        dico["Action"] = "A_ecrire"
+      if ( args[mot_cle] != None ) :
+#gn        print "==> args[",mot_cle,"] = ",args[mot_cle]
+        dico["Nom_ASTER"] = args[mot_cle]
+        if ( mot_cle == "MAILLAGE_N" ) :
+          dico["Action"] = "A_ecrire"
+        else :
+          dico["Action"] = "A_lire"
       else :
-        dico["Action"] = "A_lire"
+        dico["Action"] = "Rien"
+#gn      print "dico = ",dico
       Liste_Maillages.append(dico)
 #
 # 2.1.2. ==> L'éventuel indicateur d'erreur
 #
-    if ADAPTATION["LIBRE"] != None :
+#gn   print "\n.. Debut de 2.1.2"
+    if args["ADAPTATION"] in LISTE_ADAPTATION_LIBRE :
       dico = {}
       dico["Type_Champ"] = "INDICATEUR"
-      if ( ADAPTATION["RESULTAT_N"] != None ) :
+      if ( args["RESULTAT_N"] != None ) :
         lresu = 1
-        dico["RESULTAT"]   = ADAPTATION["RESULTAT_N"]
+        dico["RESULTAT"]   = args["RESULTAT_N"]
         noresu = dico["RESULTAT"].nom
-        dico["NOM_CHAM"]   = ADAPTATION["INDICATEUR"]
+        dico["NOM_CHAM"]   = args["INDICATEUR"]
         nomsym = dico["NOM_CHAM"]
-        if ( ADAPTATION["NUME_ORDRE"] != None ) :
-          dico["NUME_ORDRE"] = ADAPTATION["NUME_ORDRE"]
-        if ( ADAPTATION["INST"] != None ) :
-          dico["INST"] = ADAPTATION["INST"]
+        if ( args["NUME_ORDRE"] != None ) :
+          dico["NUME_ORDRE"] = args["NUME_ORDRE"]
+        if ( args["INST"] != None ) :
+          dico["INST"] = args["INST"]
           for cle in [ "PRECISION", "CRITERE" ] :
-            if ( ADAPTATION[cle] != None ) :
-              dico[cle] = ADAPTATION[cle]
+            if ( args[cle] != None ) :
+              dico[cle] = args[cle]
       else :
         lresu = 0
-        dico["CHAM_GD"] = ADAPTATION["CHAM_GD"]
+        dico["CHAM_GD"] = args["CHAM_GD"]
         noresu = dico["CHAM_GD"].nom
         nomsym = " "
       nopase = " "
@@ -188,19 +185,25 @@ def macr_adap_mail_ops ( self,
 ###      print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
       dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
 ###      print "dico[\"NOM_MED\"] = ", dico["NOM_MED"]
-      dico["COMPOSANTE"] = ADAPTATION["NOM_CMP_INDICA"]
+      dico["COMPOSANTE"] = args["NOM_CMP_INDICA"]
       Liste_Champs.append(dico)
       dico_indi = dico
 ###      print dico
 #
 # 2.1.3. ==> Les champs à mettre à jour
 #
-###    print ".. Debut de 2.1.3."
+#gn     print "\n.. Debut de 2.1.3."
+#
+    if args.has_key("MAJ_CHAM") :
 #
-    if ( MAJ_CHAM != None ) :
+      if args["MAJ_CHAM"] is None :
+        les_champs = []
+      else :
+        les_champs = args["MAJ_CHAM"]
 #
-      for maj_cham in MAJ_CHAM :
-###        print maj_cham
+      for maj_cham in les_champs :
+#gn        print maj_cham
+#gn        print type(maj_cham)
 #
         dico = {}
         dico["Type_Champ"] = "CHAMP_MAJ"
@@ -231,11 +234,34 @@ def macr_adap_mail_ops ( self,
 ###        print dico
         Liste_Champs.append(dico)
 #
+# 2.1.4. ==> Les zones de raffinement
+#
+###    print "\n.. Debut de 2.1.4."
+#
+    if args.has_key("ZONE") :
+#
+      if args["ZONE"] is None :
+        les_zones = []
+      else :
+        les_zones = args["ZONE"]
+#
+      for zone in les_zones :
+###        print zone
+###        print type(zone)
+        dico = {}
+        for aux in ['X_MINI','X_MAXI','Y_MINI','Y_MAXI','Z_MINI','Z_MAXI','X_CENTRE','Y_CENTRE','Z_CENTRE','RAYON'] :
+          if ( zone[aux] != None ) :
+            dico[aux] = zone[aux]
+###        print dico
+        Liste_Zones.append(dico)
+#
+###    print Liste_Zones
+#
 # 2.2. ==> Données de pilotage de l'information
 #
   else :
 #
-    modhom = "INFO"
+    mode_homard = "INFO"
 #
     dico = {}
     dico["Type_Maillage"] = "MAILLAGE_N"
@@ -245,7 +271,7 @@ def macr_adap_mail_ops ( self,
 #
 # 2.3. ==> Suivi de frontière
 #
-###  print ".. Debut de 2.3."
+#gn   print "\n.. Debut de 2.3."
 #
   if ( MAILLAGE_FRONTIERE != None ) :
 #
@@ -255,26 +281,53 @@ def macr_adap_mail_ops ( self,
     dico["Action"]        = "A_ecrire"
     Liste_Maillages.append(dico)
 #
-#--------------------------------------------------------------------
+# 2.4. ==> Le numéro de version de HOMARD
+#    Remarque : dans la donnée de la version de HOMARD, il faut remplacer
+#               le _ de la donnee par un ., qui est interdit dans la
+#               syntaxe du langage de commandes ASTER
+#    Remarque : il faut remplacer le N majuscule de la donnee par
+#               un n minuscule, qui est interdit dans la syntaxe du langage
+#               de commandes ASTER
+#
+#gn  print "\n.. Debut de 2.4. avec VERSION_HOMARD = ", VERSION_HOMARD
+  VERSION_HOMARD = string.replace(VERSION_HOMARD,"_" , ".")
+  VERSION_HOMARD = string.replace(VERSION_HOMARD,"N" , "n")
+#
+  if ( VERSION_HOMARD[-6:]==".PERSO" ):
+    VERSION_HOMARD = VERSION_HOMARD[:-6]
+    version_perso = 1
+  else :
+    version_perso = 0
+#gn  print ".... VERSION_HOMARD = ", VERSION_HOMARD
+#gn  print ".... version_perso  = ", version_perso
+#
+#====================================================================
 # 3. Préparation du lancement des commandes
-#--------------------------------------------------------------------
+#====================================================================
 #
 # 3.1. ==> . Elaboration des noms MED des concepts de maillage
 #          . Memorisation des noms ASTER du maillage en entrée et en sortie (sous forme string)
+#
 #          On crée une nouvelle liste des dictionnaires décrivant les maillages
 #          et à la fin on écrase l'ancienne liste par cette nouvelle.
 #
-###  print ".. Debut de 3.1."
+#gn  print "\n.. Debut de 3.1."
 #
-  L = []
+  Nom_Concept_Maillage_NP1_ANNEXE = None
+  l_aux = []
   for dico in Liste_Maillages :
-    dico["NOM_MED"] = aster.mdnoma(dico["Nom_ASTER"].nom)
-    L.append(dico)
-    if ( dico["Type_Maillage"] == "MAILLAGE_N" ) :
-      Nom_Concept_Maillage_N = dico["Nom_ASTER"].nom
-    elif ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
-      Nom_Concept_Maillage_NP1 = dico["Nom_ASTER"].nom
-  Liste_Maillages = L
+#gn     print "\ndico avant = ",dico
+    if ( dico["Action"] != "Rien" ) :
+      dico["NOM_MED"] = aster.mdnoma(dico["Nom_ASTER"].nom)
+      l_aux.append(dico)
+      if ( dico["Type_Maillage"] == "MAILLAGE_N" ) :
+        Nom_Concept_Maillage_N = dico["Nom_ASTER"].nom
+      elif ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
+        Nom_Concept_Maillage_NP1 = dico["Nom_ASTER"].nom
+      elif ( dico["Type_Maillage"] == "MAILLAGE_NP1_ANNEXE" ) :
+        Nom_Concept_Maillage_NP1_ANNEXE = dico["Nom_ASTER"].nom
+#gn     print "\ndico apres = ",dico
+  Liste_Maillages = l_aux
 #
 # 3.2. ==> Recherche du numéro d'itération et du répertoire de travail
 #
@@ -283,24 +336,28 @@ def macr_adap_mail_ops ( self,
 #            . le nom du répertoire de lancement de HOMARD est construit sur le nom
 #              du maillage en entrée et le numéro de passage dans la fonction
 #
-###  print ".. Debut de 3.2.1."
+#gn  print "\.. Debut de 3.2.1."
 #
   niter = 0
-  Nom_Rep_local = Nom_Concept_Maillage_N + "_" + modhom + "_" + str(Numero_Passage_Fonction)
-  Rep_Calc_HOMARD_local = os.path.join(".",Nom_Rep_local)
-  Rep_Calc_HOMARD_global = os.path.join(Rep_Calc_ASTER,Nom_Rep_local)
+  Nom_Rep_local = Nom_Concept_Maillage_N + "_" + mode_homard + "_" + str(numero_passage_fonction)
+  Rep_Calc_HOMARD_local = os.path.join(".", Nom_Rep_local)
+  Rep_Calc_HOMARD_global = os.path.join(Rep_Calc_ASTER, Nom_Rep_local)
 ###  print "Rep_Calc_HOMARD_local  = ", Rep_Calc_HOMARD_local
 ###  print "Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
 #
-# 3.2.2. ==> En adaptation :
+# 3.2.2. ==> En adaptation : il faut repartir du répertoire de l'itération précédente
+#
+#gn  print "\.. Debut de 3.2.2."
 #
-  if ( modhom == "ADAP" ) :
+  if ( mode_homard == "ADAP" ) :
 #
 # 3.2.2.1. ==> On recherche si dans les passages déjà effectués, il en existe un
 #              dont le maillage d'arrivée était l'actuel maillage d'entrée. Si c'est
 #              le cas, cela veut dire que l'adaptation en cours est la suite d'une
 #              précédente. On doit donc utiliser le meme répertoire. Le numéro
 #              d'itération est celui de l'adaptation précédente augmenté de 1.
+#
+#gn     print "\.. Debut de 3.2.2.1."
 #
     for dico in Liste_Passages :
       if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
@@ -310,12 +367,15 @@ def macr_adap_mail_ops ( self,
 #
 # 3.2.2.2. ==> Memorisation de ce passage
 #
+#gn     print "\.. Debut de 3.2.2.2."
+#
 # 3.2.2.2.1. ==> Enregistrement d'un nouveau cas de figure
 #
     if ( niter == 0 ) :
       dico = {}
       dico["Maillage_0"]   = Nom_Concept_Maillage_N
       dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
+      dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
       dico["Rep_Calc_HOMARD_local"]  = Rep_Calc_HOMARD_local
       dico["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
       dico["niter"]        = niter
@@ -324,23 +384,22 @@ def macr_adap_mail_ops ( self,
 # 3.2.2.2.2. ==> Modification du cas en cours
 #
     else :
-      L = []
+      l_aux = []
       for dico in Liste_Passages :
         if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
           dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
+          dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
           dico["niter"]        = niter
-        L.append(dico)
-      Liste_Passages = L
+        l_aux.append(dico)
+      Liste_Passages = l_aux
 #
 ###  print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
 #
-#--------------------------------------------------------------------
-# 4. Ecriture des commandes
-#--------------------------------------------------------------------
+# 3.2.3. Création du répertoire pour homard
+#        attention : on ne fait cette creation qu'une seule fois par cas
+#                    d'adaptation ou d'information
 #
-# 4.1. ==> Création du répertoire pour homard
-#          attention : on ne fait cette creation qu'une seule fois par cas
-#                      d'adaptation ou d'information
+#gn  print "\.. Debut de 3.2.3."
 #
   if ( niter == 0 ) :
 #
@@ -348,10 +407,13 @@ def macr_adap_mail_ops ( self,
       os.mkdir(Rep_Calc_HOMARD_global)
     except os.error,codret_partiel :
       self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-      self.cr.fatal("<F> <MACR_ADAP_MAIL> Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD_global)
-      codret = codret + 1
+      UTMESS("F", self.nom, "Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD_global)
+#
+#====================================================================
+# 4. Ecriture des commandes de creation des donnees MED
+#====================================================================
 #
-# 4.2. ==> Ecriture des commandes de creation des donnees MED
+#gn  print "\.. Debut de 4."
 #
 #  On doit écrire : le maillage,
 #                   le champ d'indicateur d'erreur
@@ -360,53 +422,36 @@ def macr_adap_mail_ops ( self,
 #
 #  Chacune de ces écritures est optionnelle selon le contexte.
 #
-  if ( INFO > 1 ) : infomail = "OUI"
-  else :            infomail = "NON"
-#
-# 4.2.1. ==> Noms des fichiers d'ASTER vers HOMARD et éventuellement de HOMARD vers ASTER
-#            Remarque : aujourd'hui, les écritures ou les lectures au format MED se font obligatoirement sur
-#                       un fichier de nom fort.n, placé dans le répertoire de calcul
-#                       Dans le fichier de configuration, on donne comme nom MAILL.(niter).MED en entrée et
-#                       MAILL.(niter+1).MED en sortie (cf. adhc00)
-#                       Tant que les E/S MED n'ont pas évolué, on fait un lien pour assurer la cohérence.
+  if ( INFO > 1 ) :
+    infomail = "OUI"
+  else :
+    infomail = "NON"
 #
-# 4.2.1.1. ==> D'ASTER vers HOMARD
+# 4.1. ==> Noms des fichiers d'ASTER vers HOMARD et éventuellement de HOMARD vers ASTER
+#          Remarque : aujourd'hui, les écritures ou les lectures au format MED se font obligatoirement sur
+#                     un fichier de nom fort.n, placé dans le répertoire de calcul
+##
+# 4.1.1. ==> D'ASTER vers HOMARD
 #
-  Unite_Fichier_ASTER_vers_HOMARD = 1787 + 2*Numero_Passage_Fonction
+  Unite_Fichier_ASTER_vers_HOMARD = 1787 + 2*numero_passage_fonction
   Fichier_ASTER_vers_HOMARD = os.path.join(Rep_Calc_ASTER,"fort." + str(Unite_Fichier_ASTER_vers_HOMARD))
-  Fichier_HOMARD_Entree = os.path.join(Rep_Calc_HOMARD_global,"MAILL."+str(niter)+".MED")
 ###  print "Fichier_ASTER_vers_HOMARD = ",Fichier_ASTER_vers_HOMARD
-###  print "Fichier_HOMARD_Entree = ",Fichier_HOMARD_Entree
-  try :
-    os.symlink(Fichier_ASTER_vers_HOMARD,Fichier_HOMARD_Entree)
-  except os.error,codret_partiel :
-    self.cr.warn("Code d'erreur de symlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-    self.cr.fatal("<F> <MACR_ADAP_MAIL> Probleme au lien entre " + Fichier_ASTER_vers_HOMARD + " et " + Fichier_HOMARD_Entree)
-    codret = codret + 1
 #
-# 4.2.1.2. ==> De HOMARD vers ASTER
+# 4.1.2. ==> De HOMARD vers ASTER
 #  
-  if ( modhom == "ADAP" ) :
+  if ( mode_homard == "ADAP" ) :
     Unite_Fichier_HOMARD_vers_ASTER = Unite_Fichier_ASTER_vers_HOMARD + 1
     Fichier_HOMARD_vers_ASTER = os.path.join(Rep_Calc_ASTER,"fort." + str(Unite_Fichier_HOMARD_vers_ASTER))
-    Fichier_HOMARD_Sortie = os.path.join(Rep_Calc_HOMARD_global,"MAILL."+str(niter+1)+".MED")
 ###    print "Fichier_HOMARD_vers_ASTER = ",Fichier_HOMARD_vers_ASTER
-###    print "Fichier_HOMARD_Sortie = ",Fichier_HOMARD_Sortie
-    try :
-      os.symlink(Fichier_HOMARD_vers_ASTER,Fichier_HOMARD_Sortie)
-    except os.error,codret_partiel :
-      self.cr.warn("Code d'erreur de symlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-      self.cr.fatal("<F> <MACR_ADAP_MAIL> Probleme au lien entre " + Fichier_HOMARD_vers_ASTER + " et " + Fichier_HOMARD_Sortie)
-      codret = codret + 1
 #
-# 4.2.2. La définition du fichier de ASTER vers HOMARD
+# 4.2. La définition du fichier de ASTER vers HOMARD
 # 
   DEFI_FICHIER ( ACTION= "ASSOCIER",
                  UNITE = Unite_Fichier_ASTER_vers_HOMARD,
                  TYPE = "LIBRE",
                  INFO = INFO )
 #
-# 4.2.3. Le(s) maillage(s)
+# 4.3. Le(s) maillage(s)
 # Le maillage de calcul et l'éventuel maillage de la frontiere sont écrits
 # dans le meme fichier MED
 # En fait, on pourrait s'en passer au dela de la 1ère itération
@@ -416,17 +461,17 @@ def macr_adap_mail_ops ( self,
 #
   for dico in Liste_Maillages :
     if ( dico["Action"] == "A_ecrire" ) :
-      motscsi={}
+      motscsi = {}
       motscsi["MAILLAGE"] = dico["Nom_ASTER"]
-      motscfa={}
-      motscfa["RESU"]=_F( INFO_MAILLAGE=infomail,
+      motscfa = {}
+      motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
                           **motscsi )
 #
       IMPR_RESU ( INFO = INFO, 
                   FORMAT ='MED', UNITE = Unite_Fichier_ASTER_vers_HOMARD,
                   **motscfa )
 #
-# 4.2.4. Le(s) champ(s)
+# 4.4. Le(s) champ(s)
 #        Attention : il se peut que l'on demande la mise à jour du champ qui a servi comme
 #                    indicateur d'erreur. Si c'est le cas, il ne faut pas demander son
 #                    impression sinon il y a plantage d'IMPR_RESU qui ne sait pas substituer
@@ -446,7 +491,7 @@ def macr_adap_mail_ops ( self,
 #        dico["CHAM_MAJ"]     = f ; string ; Nom ASTER du champ interpolé sur le nouveau maillage
 #        dico["NOM_MED"]      = o ; string ; Nom MED du champ
 #
-# 4.2.4.1. Recherche d'un doublon éventuel sur le champ d'indicateur d'erreur
+# 4.4.1. Recherche d'un doublon éventuel sur le champ d'indicateur d'erreur
 #
 ###  print "dico_indi = ",dico_indi
   if len(dico_indi) > 0 :
@@ -470,47 +515,49 @@ def macr_adap_mail_ops ( self,
 #     Si le champ d'indicateur n'a toujours pas été repéré comme champ à mettre à jour :
       if not indic_est_deja_imprime :
 #       Est-ce le meme champ ?
-        ok = 1
+        on_a_le_champ = 1
         for cle in Liste_aux :
           if ( dico.has_key(cle) ) :
 ###            print "...... dico_indi[cle] = ",dico_indi[cle]
 ###            print "...... dico[cle]      = ",dico[cle]
             if ( dico_indi[cle] != dico[cle] ) :
-              ok = 0
+              on_a_le_champ = 0
               break
           else :
-            ok = 0
+            on_a_le_champ = 0
             break
 #       Si oui, est-ce au meme moment ? (remarque : si rien n'est désigné, c'est qu'il n'y a qu'un
 #       seul instant ... donc c'est le meme ! En revanche, on ne sait pas comparer une donnée
 #       en numéro d'ordre et une donnée en instant. On croise les doigts.)
-        if ok :
+        if on_a_le_champ :
           for cle in [ "NUME_ORDRE", "INST" ] :
             if dico.has_key(cle) :
               if ( dico[cle] != None ) :
                 if dico_indi.has_key(cle) :
                   if ( dico_indi[cle] != dico[cle] ) :
-                    ok = 0
+                    on_a_le_champ = 0
                     break
-        if ok : indic_est_deja_imprime = 1
+        if on_a_le_champ :
+          indic_est_deja_imprime = 1
 ###  print "\n\nFin de la boucle .. indic_est_deja_imprime = ",indic_est_deja_imprime
 #   Si le champ d'indicateur n'a pas été repéré comme champ à mettre à jour, il faut
 #   l'inclure dans les champs à imprimer
-  if not indic_est_deja_imprime : Liste_Champs_imprime.append(dico_indi)
+  if not indic_est_deja_imprime :
+    Liste_Champs_imprime.append(dico_indi)
 #
-# 4.2.4.2. Impressions après le filtrage précédent
-###  print ".. Debut de 4.2.4.2."
+# 4.4.2. Impressions après le filtrage précédent
+#gn  print "\n.... Debut de 4.2.4.2."
 #
   for dico in Liste_Champs_imprime :
-    motscsi={}
+    motscsi = {}
     for cle in [ "RESULTAT", "NOM_CHAM", "CHAM_GD", "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
       if dico.has_key(cle) :
         if ( dico[cle] != None ) :
           motscsi[cle] = dico[cle]
     if dico.has_key("COMPOSANTE") :
       motscsi["NOM_CMP"] = dico["COMPOSANTE"]
-    motscfa={}
-    motscfa["RESU"]=_F( INFO_MAILLAGE=infomail,
+    motscfa = {}
+    motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
                         **motscsi
                       )
 ###    print ".. motscfa = ",motscfa
@@ -519,104 +566,67 @@ def macr_adap_mail_ops ( self,
                 FORMAT ='MED', UNITE = Unite_Fichier_ASTER_vers_HOMARD,
                 **motscfa )
 #
-# 4.3. ==> Ecriture de la commande d'écriture des fichiers de données pour HOMARD
+#====================================================================
+# 5. ==> Création des fichiers de données pour HOMARD
+#====================================================================
 #
-  motscfa={}
-#  
-# 4.3.1. ==> Le traitement
+#gn  print "\.. Debut de 5."
 #
-  motscsi={}
+  dico_configuration = {}
 #
-# 4.3.1.1. ==> Le type de traitement
+# 5.1. ==> Les généralités
 #
-  if ( modhom == "ADAP" ) :
-    if ( ADAPTATION["UNIFORME"] != None ) :
-      motscsi["UNIFORME"] = ADAPTATION["UNIFORME"]
-    else :
-      motscsi["ADAPTATION"] = ADAPTATION["LIBRE"]
-  else :
-    motscsi["INFORMATION"] = "OUI"
+  dico_configuration["INFO"] = INFO
 #
-# 4.3.1.2. ==> Les noms med des maillages
+  dico_configuration["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
+  dico_configuration["VERSION_HOMARD"] = VERSION_HOMARD
+  dico_configuration["version_perso"] = version_perso
+#
+  dico_configuration["niter"] = niter
+  dico_configuration["Fichier_ASTER_vers_HOMARD"] = Fichier_ASTER_vers_HOMARD
+  if ( mode_homard == "ADAP" ) :
+    dico_configuration["Fichier_HOMARD_vers_ASTER"] = Fichier_HOMARD_vers_ASTER
+#  
+# 5.2. ==> Les noms med des maillages
 #
   for dico in Liste_Maillages :
-###    print "Nom MED de " + dico["Type_Maillage"] + " = " + dico["NOM_MED"]
-    motscsi[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
+#gn    print "Nom MED de " + dico["Type_Maillage"] + " = " + dico["NOM_MED"]
+    dico_configuration[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
 #
-# 4.3.1.3. ==> Les caracteristiques de l'éventuel indicateur d'erreur
+# 5.3. ==> Les caracteristiques de l'éventuel indicateur d'erreur
 #
   for dico in Liste_Champs :
+    dico_aux = {}
     if ( dico["Type_Champ"] == "INDICATEUR" ) :
       Liste_aux = [ "NOM_MED", "COMPOSANTE" ]
       if dico.has_key("NUME_ORDRE") :
         Liste_aux.append("NUME_ORDRE")
-      else :
-        for cle in [ "RESULTAT", "NOM_CHAM", "INST", "PRECISION", "CRITERE" ] :
-          Liste_aux.append(cle)
       for cle in Liste_aux :
-        if dico.has_key(cle) :
-          if ( dico[cle] != None ) :
-            motscsi[cle] = dico[cle]
+        if ( dico[cle] != None ) :
+          dico_aux[cle] = dico[cle]
+      dico_configuration["Indicateur"] = dico_aux
+#gn  if dico_configuration.has_key("Indicateur") :
+#gn    print "dico_configuration[Indicateur] = ", dico_configuration["Indicateur"]
 #
-# 4.3.1.4. ==> Les critères de raffinement et les niveaux extremes
+# 5.4. ==> Les zones de raffinement
 #
-  if ( modhom == "ADAP" ) :
-    Liste_aux = [ ]
-    if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "RAFFINEMENT" ) :
-      Liste_aux.append("CRIT_RAFF_ABS")
-      Liste_aux.append("CRIT_RAFF_REL")
-      Liste_aux.append("CRIT_RAFF_PE")
-    if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "DERAFFINEMENT" ) :
-      Liste_aux.append("CRIT_DERA_ABS")
-      Liste_aux.append("CRIT_DERA_REL")
-      Liste_aux.append("CRIT_DERA_PE")
-    niveau = 0
-    if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "RAFFINEMENT" or ADAPTATION["UNIFORME"] == "RAFFINEMENT" ) :
-      Liste_aux.append("NIVE_MAX")
-      niveau = niveau + 1
-    if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "DERAFFINEMENT" or ADAPTATION["UNIFORME"] == "DERAFFINEMENT" ) :
-      Liste_aux.append("NIVE_MIN")
-      niveau = niveau + 2
-    for mot_cle in Liste_aux :
-      if ( ADAPTATION[mot_cle] != None ) :
-        motscsi[mot_cle] = ADAPTATION[mot_cle]
-#
-    if ( niveau == 2 ) : 
-      if ( ADAPTATION["NIVE_MIN"] > ADAPTATION["NIVE_MAX"] ) :
-        self.cr.fatal("<F> <MACR_ADAP_MAIL> Le niveau minimum doit etre inferieur au niveau maximum.")
-        codret = codret + 1
-#
-# 4.3.1.5. ==> Numéro d'itération
-#
-  if ( modhom == "ADAP" ) :
-    motscsi["NITER"] = niter
-#
-# 4.3.1.6. ==> Suivi de la frontiere
-#
-  if args.has_key("GROUP_MA") :
-    if ( args["GROUP_MA"] != None ) :
-      motscsi["GROUP_MA"] = args["GROUP_MA"]
-#
-# 4.3.1.7. ==> Bilan
-#
-  motscfa["TRAITEMENT"] = _F(**motscsi)
-#
-# 4.3.2. ==> L'analyse
-#
-  motscsi={}
-  if ( NOMBRE != None )           : motscsi["NOMBRE" ]           = NOMBRE
-  if ( QUALITE != None )          : motscsi["QUALITE" ]          = QUALITE
-  if ( CONNEXITE != None )        : motscsi["CONNEXITE" ]        = CONNEXITE
-  if ( TAILLE != None )           : motscsi["TAILLE" ]           = TAILLE
-  if ( INTERPENETRATION != None ) : motscsi["INTERPENETRATION" ] = INTERPENETRATION
-#
-  motscfa["ANALYSE"] = _F(**motscsi)
-#
-# 4.3.3. ==> La mise à jour de champs
+  prem = 1
+  for dico in Liste_Zones :
+    if prem :
+      l_aux = [dico]
+      prem = 0
+    else :
+      l_aux = dico_configuration["Zones"]
+      l_aux.append(dico)
+    dico_configuration["Zones"] = l_aux
+###  if dico_configuration.has_key("Zones") :
+###    print "dico_configuration[Zones] = ", dico_configuration["Zones"]
+#
+# 5.5. ==> La mise à jour de champs
 #
   prem = 1
   for dico in Liste_Champs :
-    motscsi={}
+    dico_aux = {}
     if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
       Liste_aux = [ "NOM_MED", "COMPOSANTE" ]
       if dico.has_key("NUME_ORDRE") :
@@ -627,79 +637,62 @@ def macr_adap_mail_ops ( self,
       for cle in Liste_aux :
         if dico.has_key(cle) :
           if ( dico[cle] != None ) :
-            motscsi[cle] = dico[cle]
-###      print motscsi
+            dico_aux[cle] = dico[cle]
+#gn      print dico_aux
       if prem :
-        motscfa["MAJ_CHAM"] = [_F(**motscsi),]
+        l_aux = [dico_aux]
         prem = 0
       else :
-        motscfa["MAJ_CHAM"].append(_F(**motscsi))
-#
-# 4.3.4. ==> La commande
-#
-# 4.3.4.1. ==> Les fichiers annexes
-#
-  dico = {}
-#
-  Nom_Fichier_Configuration = "HOMARD.Configuration"
-  Fichier_Configuration = os.path.join(Rep_Calc_HOMARD_global,Nom_Fichier_Configuration)
-  dico[Fichier_Configuration] = ("HOMARD_CONFIG","UNITE_CONF",unite)
-#
-  if ( modhom != "ADAP" ) :
-    unite = unite + 1
-    Nom_Fichier_Donnees = "HOMARD.Donnees"
-    Fichier_Donnees = os.path.join(Rep_Calc_HOMARD_global,Nom_Fichier_Donnees)
-#                             1234567890123456
-    dico[Fichier_Donnees] = ("HOMARD_DONN","UNITE_DONN",unite)
-#
-# 4.3.4.2. ==> L'ouverture de ces fichiers
-#
-  for fic in dico.keys() :
-    DEFI_FICHIER ( ACTION= "ASSOCIER", FICHIER = fic, UNITE = dico[fic][2],
-                   TYPE = "ASCII", ACCES = "NEW", INFO = INFO )
-    motscfa[dico[fic][1]] = dico[fic][2]
-#
-# 4.3.4.3. ==> Ecriture
-#
-###  print motscfa
-  IMPR_FICO_HOMA ( INFO=INFO, LANGUE = LANGUE, NON_SIMPLEXE = NON_SIMPLEXE, **motscfa )
-#
-###  for fic in dico.keys() :
-###    print "\nContenu de ", fic
-###    fichier = open (fic,"r")
-###    les_lignes = fichier.readlines()
-###    fichier.close()
-###    for ligne in les_lignes :
-###      print ligne[:-1]
-#
-# 4.3.4.4. ==> La fermeture des fichiers locaux
-#              Remarque : il faut le faire ici pour que le gestionnaire de DEFI_FICHIER soit à jour
-#              Remarque : aujourd'hui on est obligé de passer par le numéro d'unité logique
-#
-  for fic in dico.keys() :
-    DEFI_FICHIER ( ACTION= "LIBERER", UNITE = dico[fic][2], INFO = INFO )
+        l_aux = dico_configuration["Champs"]
+        l_aux.append(dico_aux)
+      dico_configuration["Champs"] = l_aux
+#gn  if dico_configuration.has_key("Champs") :
+#gn   print "dico_configuration[Champs] = ", dico_configuration["Champs"]
+#
+# 5.6. ==> Appel de la fonction de création
+#
+  donnees_homard = creation_donnees_homard.creation_donnees_homard ( self.nom, args, dico_configuration )
+  if ( INFO > 1 ) :
+    donnees_homard.quel_mode ( )
+  fic_homard_niter = donnees_homard.creation_configuration ( )
+  donnees_homard.ecrire_fichier_configuration ( )
+  if ( mode_homard == "INFO" ) :
+    Nom_Fichier_Donnees = donnees_homard.ecrire_fichier_donnees ( )
+  else :
+    Nom_Fichier_Donnees = "0"
 #
-# 4.4. ==> Ecriture de la commande d'exécution de homard
-#    Remarque : dans la donnée de la version de HOMARD, il faut remplacer
-#               le _ de la donnee par un ., qui
-#               est interdit dans la syntaxe du langage de commandes ASTER
-#    Remarque : il faut remplacer le N majuscule de la donnee par
-#               un n minuscule, qui est interdit dans la syntaxe du langage
-#               de commandes ASTER
-#    Remarque : pour le nommage des fichiers d'échange entre ASTER et HOMARD, on utilise
-#               la convention implicite du fort.n des entrees/sorties au format MED
+# 5.7. ==> Impression eventuelle des fichiers créés
 #
-###  Fichier_ASTER_vers_HOMARD_2 = os.path.join("/home/gnicolas","fort." + str(Unite_Fichier_ASTER_vers_HOMARD))
+#gn#gn  print "Répertoire ",Rep_Calc_HOMARD_global
+  os.system("ls -la "+Rep_Calc_HOMARD_global)
+  if ( INFO > 1 ) :
+    L_aux = ["HOMARD.Donnees" , "HOMARD.Configuration"]
+  else :
+    L_aux = [ ]
+  for nomfic in L_aux :
+    fic = os.path.join(Rep_Calc_HOMARD_global, nomfic)
+    if os.path.isfile (fic) :
+      print "\n\n=============================================================="
+      print "Contenu de", nomfic
+      fichier = open (fic,"r")
+      les_lignes = fichier.readlines()
+      fichier.close()
+      for ligne in les_lignes :
+        print ligne[:-1]
+      print "==============================================================\n"
+#gn  if ( mode_homard == "ADAP" ) :
+#gn    if args.has_key("MAJ_CHAM") :
+#gn      if args["MAJ_CHAM"] is not None :
+#gn        os.system("sleep 1000")
+#
+#====================================================================
+# 6. Ecriture de la commande d'exécution de homard
+#====================================================================
+#
+#
+#gn  print "\.. Debut de 7."
+###  Fichier_ASTER_vers_HOMARD_2 = os.path.join("/home/gnicolas" , "fort." + str(Unite_Fichier_ASTER_vers_HOMARD))
 ###  shutil.copyfile(Fichier_ASTER_vers_HOMARD,Fichier_ASTER_vers_HOMARD_2)
-#
-  VERSION_HOMARD=string.replace(VERSION_HOMARD,"_",".")
-  VERSION_HOMARD=string.replace(VERSION_HOMARD,"N","n")
-  if ( VERSION_HOMARD[-6:]=="_PERSO" ):
-#    motscsi["ARGUMENT"]=_F("TYPEXE"="-PERSO")
-    VERSION_HOMARD=VERSION_HOMARD[:-6]
-#
-  if ( modhom == "ADAP" ) :
-    Nom_Fichier_Donnees = "0"
 #
   EXEC_LOGICIEL ( ARGUMENT = (_F(NOM_PARA=Rep_Calc_HOMARD_global), # nom du repertoire
                               _F(NOM_PARA=VERSION_HOMARD),  # version de homard
@@ -709,39 +702,45 @@ def macr_adap_mail_ops ( self,
                   LOGICIEL = homard
                 )
 #
-###  if ( modhom == "ADAP" ) :
-###    Fichier_HOMARD_vers_ASTER_2 = os.path.join("/home/gnicolas","fort." + str(Unite_Fichier_HOMARD_vers_ASTER))
+###  if ( mode_homard == "ADAP" ) :
+###    Fichier_HOMARD_vers_ASTER_2 = os.path.join("/home/gnicolas" , "fort." + str(Unite_Fichier_HOMARD_vers_ASTER))
 ###    shutil.copyfile(Fichier_HOMARD_vers_ASTER,Fichier_HOMARD_vers_ASTER_2)
 #
-# 4.5. ==> Ecriture de la commande de lecture des resultats med
-#          Remarque :
-#          La fonction self.DeclareOut(a,b) focntionne ainsi :
-#          a est une chaine de caracteres
-#          b est la variable déclarée dans la commande
-#          le but est de associer le contenu de b à la variable locale qui sera désignée par a
-#          Exemple :
-#          self.DeclareOut("maillage_np1",ADAPTATION["MAILLAGE_NP1"])
-#          ==> la variable maillage_np1 est identifiée à l'argument "MAILLAGE_NP1" du mot-clé ADAPTATION
+#====================================================================
+# 7. ==> Ecriture de la commande de lecture des resultats med
+#        Remarque :
+#        La fonction self.DeclareOut(a,b) fonctionne ainsi :
+#        a est une chaine de caracteres
+#        b est la variable déclarée dans la commande
+#        le but est de associer le contenu de b à la variable locale qui sera désignée par a
+#        Exemple :
+#        self.DeclareOut("maillage_a_lire",args["MAILLAGE_NP1"])
+#        ==> la variable maillage_a_lire est identifiée à l'argument "MAILLAGE_NP1"
+#====================================================================
 #
-  if ( modhom == "ADAP" ) :
+  if ( mode_homard == "ADAP" ) :
 #
-# 4.5.1. ==> Le maillage
+# 7.1. ==> Le maillage
 #
-    self.DeclareOut("maillage_np1",ADAPTATION["MAILLAGE_NP1"])
+#gn    print "args = ",args
     for dico in Liste_Maillages :
+#gn      print dico
       if ( dico["Action"] == "A_lire" ) :
-        maillage_np1 = LIRE_MAILLAGE ( UNITE = Unite_Fichier_HOMARD_vers_ASTER,
+        self.DeclareOut("maillage_a_lire", dico["Nom_ASTER"])
+        maillage_a_lire = LIRE_MAILLAGE ( UNITE = Unite_Fichier_HOMARD_vers_ASTER,
                                        FORMAT = "MED",
                                        NOM_MED = dico["NOM_MED"],
                                        VERI_MAIL = _F(VERIF="NON"), INFO_MED = INFO, INFO = INFO )
+        if ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
+          maillage_np1 = maillage_a_lire
 #
-# 4.5.2. ==> Les champs
+# 7.2. ==> Les champs
 #
     for dico in Liste_Champs :
       if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
-###        print dico
-        self.DeclareOut("champ_maj",dico["CHAM_MAJ"])
-        motscsi={}
+#gn        print dico
+        self.DeclareOut("champ_maj", dico["CHAM_MAJ"])
+        motscsi = {}
         for cle in [ "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
           if dico.has_key(cle) :
             if ( dico[cle] != None ) :
@@ -753,37 +752,36 @@ def macr_adap_mail_ops ( self,
                                  NOM_MED = dico["NOM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
                                  INFO = INFO, **motscsi )
 #
-#--------------------------------------------------------------------
-# 5. Menage des fichiers MED et HOMARD devenus inutiles
-#--------------------------------------------------------------------
+#====================================================================
+# 8. Menage des fichiers MED et HOMARD devenus inutiles
+#====================================================================
 #
-  fic = os.path.join(Rep_Calc_HOMARD_global,"MAILL."+str(niter)+".HOM")
-  Liste_aux = [ Fichier_ASTER_vers_HOMARD, Fichier_HOMARD_Entree, fic ]
-  if ( modhom == "ADAP" ) :
+  Liste_aux = [ Fichier_ASTER_vers_HOMARD ]
+  if ( mode_homard == "ADAP" ) :
     Liste_aux.append(Fichier_HOMARD_vers_ASTER)
-    Liste_aux.append(Fichier_HOMARD_Sortie)
+    fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niter)
+    Liste_aux.append(fic)
+#gn  print "Liste_aux = ",Liste_aux
 #
   for fic in Liste_aux :
-    if ( INFO > 1 ) : print "Destruction du fichier ", fic
-    if os.path.islink(fic) :
-      try :
-        os.unlink(fic)
-      except os.error,codret_partiel :
-        self.cr.warn("Code d'erreur de unlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-        self.cr.warn("Impossible d'enlever le lien sur le fichier : "+fic)
-        codret = codret + 1
+    if ( INFO > 1 ) :
+      print "Destruction du fichier ", fic
     if os.path.isfile(fic) :
       try :
         os.remove(fic)
       except os.error,codret_partiel :
         self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-        self.cr.warn("Impossible de détruire le fichier : "+fic)
-        codret = codret + 1
-###  print os.listdir(Rep_Calc_ASTER)
-###  print os.listdir(Rep_Calc_HOMARD_global)
+        UTMESS("F", self.nom, "Impossible de détruire le fichier : "+fic)
+#gn  print "Répertoire ",Rep_Calc_HOMARD_global
+#gn  os.system("ls -la "+Rep_Calc_HOMARD_global)
+#gn  print "Répertoire ",Rep_Calc_ASTER
+#gn  os.system("ls -la "+Rep_Calc_ASTER)
+#
+#====================================================================
+#  C'est fini !
+#====================================================================
 #
-#--------------------------------------------------------------------
-# 6. C'est fini !
-#--------------------------------------------------------------------
+#gn  if ( mode_homard == "ADAP" ) :
+#gn    os.system("sleep 1")
 #
-  return codret
+  return
index 1d48ecf9f66db410c5736610a54922064b32dabb..fcb37351f3820f19e89cd49c79678e3e53a15ef0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_calc_ops Macro  DATE 09/05/2006   AUTEUR REZETTE C.REZETTE 
+#@ MODIF macr_ascouf_calc_ops Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -616,7 +616,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
     fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
                           LEVRE_SUP=_F(GROUP_MA='FACE1'),
                           LEVRE_INF=_F(GROUP_MA='FACE2'),
-                          INFO=2,**motscles
+                          INFO=INFO,**motscles
                           );
     if THETA_3D!=None :
       for thet in THETA_3D:
index 8aae3f8244d006e19f2c841882d3a554f48d676a..3495d88d785a060f11f564b5148d3771cc70e677 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_mail_ops Macro  DATE 05/09/2005   AUTEUR DURAND C.DURAND 
+#@ MODIF macr_ascouf_mail_ops Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -19,7 +19,7 @@
 # ======================================================================
 
 
-
+import os.path
 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
 import aster
 import string
@@ -1484,8 +1484,7 @@ def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
   texte=texte+'nivmag   = '+str(NIVMAG)       +POIVIR
   texte=texte+'*\n'
   texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'ascouf_fiss_v4.datg'+"';\n"
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_fiss_v4.datg'), 'r').read()
   fdgib=open(nomFichierDATG,'w')
   fdgib.write(texte)
   fdgib.close()
@@ -1602,8 +1601,7 @@ def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
      texte=texte+" sousep .                      1  = 'non'"+POIVIR
   texte=texte+'*\n'
   texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'ascouf_ssep_mono_v1.datg'+"'"+POIVIR
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mono_v1.datg'), 'r').read()
   fdgib=open(nomFichierDATG,'w')
   fdgib.write(texte)
   fdgib.close()
@@ -1744,8 +1742,7 @@ def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
   texte=texte+'axisym  = table '+POIVIR
   texte=texte+'sousep  = table '+POIVIR
   texte=texte+'* \n'     
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'ascouf_ssep_mult_v1.datg'+"';\n"
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mult_v1.datg'), 'r').read()
   fdgib=open(nomFichierDATG,'w')
   fdgib.write(texte)
   fdgib.close()
@@ -2013,8 +2010,7 @@ def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SU
   texte=texte+'nzgv     = '+str(NZGV)         +POIVIR
   texte=texte+'*\n'
   texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'ascouf_regl_v1.datg'+"';\n"
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_regl_v1.datg'), 'r').read()
   fdgib=open(nomFichierDATG,'w')
   fdgib.write(texte)
   fdgib.close()
index 11af02c8893d91f386b8d702f643bfa742a472db..783db3abb89ae12eeb38f7864669da40757fa00a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_aspic_mail_ops Macro  DATE 19/09/2005   AUTEUR DURAND C.DURAND 
+#@ MODIF macr_aspic_mail_ops Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 
-
-from math import sqrt,cos,sin,pi,pow,tan
+import os.path
+from math import sqrt, cos, sin, pi, pow, tan
 
 # Ecriture du fichier GIBI principal (dgib) - ASPID0
 def write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
                            ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
-                           ITYPSO, DPENE, NIVMAG, loc_datg) :
-
+                           ITYPSO, DPENE, NIVMAG, loc_datg):
   import aster
 # Ouverture du fichier d'entrée de commandes
   fdgib=open(nomFichierDATG,'w')
-  POIVIR = ' ;                                         \n'
-  texte='****************************************************************\n'
-  texte=texte+'opti echo 0 ;                                                   \n'
-  texte=texte+'epT1   = '+str(EPT1)         +POIVIR
-  texte=texte+'DeT1   = '+str(DET1)         +POIVIR
-  texte=texte+'d1     = '+str(D1)           +POIVIR
-  texte=texte+'d2     = '+str(D2)           +POIVIR
-  texte=texte+'epT2   = '+str(EPT2)         +POIVIR
-  texte=texte+'DeT2   = '+str(DET2)         +POIVIR
-  texte=texte+'Zmax   = '+str(ZMAX)         +POIVIR
-  texte=texte+'type_s = '+str(ITYPSO)       +POIVIR
-  texte=texte+'d_pene = '+str(DPENE)        +POIVIR
-  texte=texte+'h      = '+str(H)            +POIVIR
-  texte=texte+'angl_s = '+str(ALPHA)        +POIVIR
-  texte=texte+'jeu    = '+str(JEU)          +POIVIR
-  texte=texte+'epC    = '+str(EPC)          +POIVIR
-  texte=texte+'DeC    = '+str(DEC)          +POIVIR
-  texte=texte+'Xmax   = '+str(XMAX)         +POIVIR
-  texte=texte+'typmai =  MOT '+TYPMAI       +POIVIR
-  texte=texte+'theta  = '+str(THETA)        +POIVIR
-  texte=texte+'typele =  MOT '+TYPELE       +POIVIR
-  texte=texte+'typ_eque = MOT '+'SAINE'     +POIVIR
-  texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
-  texte=texte+'*                                                               \n'
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'aspic.datg'+"';\n"
-  aster.affiche('MESSAGE',texte)
+  texte = """
+****************************************************************
+opti echo 0;
+epT1     = %s;
+DeT1     = %s;
+d1       = %s;
+d2       = %s;
+epT2     = %s;
+DeT2     = %s;
+Zmax     = %s;
+type_s   = %s;
+d_pene   = %s;
+h        = %s;
+angl_s   = %s;
+jeu      = %s;
+epC      = %s;
+DeC      = %s;
+Xmax     = %s;
+typmai   = MOT %s;
+theta    = %s;
+typele   = MOT %s;
+typ_eque = MOT SAINE;
+nivmag   = %s;
+****************************************************************
+""" % (EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, ITYPSO, DPENE, H,
+       ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE, NIVMAG)
+  aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
+  texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
   fdgib.write(texte)
   fdgib.close()
 
@@ -105,9 +105,8 @@ def write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2,
   texte=texte+'typ_eque = MOT '+'FISS_LON'  +POIVIR
   texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
   texte=texte+'*                                                               \n'
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'aspic_v2.datg'+"';\n"
-  aster.affiche('MESSAGE',texte)
+  aster.affiche('MESSAGE',texte + ' + aspic_v2.datg...\n')
+  texte = texte + open(os.path.join(loc_datg, 'aspic_v2.datg'), 'r').read()
   fdgib.write(texte)
   fdgib.close()
 
@@ -396,9 +395,8 @@ def write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2,
   texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
   texte=texte+'*                                                               \n'
   texte=texte+'list epc ;\n'
-  texte=texte+'opti donn '
-  texte=texte+"'"+loc_datg+'aspic.datg'+"';\n"
-  aster.affiche('MESSAGE',texte)
+  aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
+  texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
   fdgib.write(texte)
   fdgib.close()
 
index d621503af1b72ac3cbed7d9cfbe90562a1456821..5f3f55331237e8ba850e90b30b08754773f83880 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF post_k1_k2_k3_ops Macro  DATE 09/05/2006   AUTEUR GALENNE E.GALENN
+#@ MODIF post_k1_k2_k3_ops Macro  DATE 22/05/2006   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -704,9 +704,9 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,MATER,RESULTAT,
 #   ---------- CALCUL PROP. MATERIAU AVEC TEMPERATURE -----------  
         if Tempe3D :
            tempeno=tabtemp.NOEUD==Lnofon[ino]
-           tempeno=tempeno.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
+           tempeno=tempeno.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
            nompar = ('TEMP',)
-           valpar = (tempeno.values(),)
+           valpar = (tempeno.TEMP.values()[0],)
            nomres=['E','NU']
            valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
            e = valres[0]
index 878b87832884eabeeaffd58a237298f7f8fd4529..35d34da1ae782470a49e6f73da8ef825a85b2ed7 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF test_fichier_ops Macro  DATE 13/03/2006   AUTEUR CIBHHLV L.VIVAN 
+#@ MODIF test_fichier_ops Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -21,8 +21,8 @@
 import sys
 import os.path
 import re
-import string
-import math
+from math import floor, log10
+from types import StringType
 import md5
 
 #-------------------------------------------------------------------------------
@@ -32,9 +32,7 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
      'a une tolerance' pres pour les nombres reels en calculant
      le md5sum.
    """
-   import aster
-   from Accas import _F
-   ier=0
+   ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
 
@@ -44,17 +42,14 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
    DETRUIRE        = self.get_cmd('DETRUIRE')
    CREA_TABLE      = self.get_cmd('CREA_TABLE')
    TEST_TABLE      = self.get_cmd('TEST_TABLE')
-
-   import os.path
-   import re
-   from types import StringType
    
    import aster
+   from Accas import _F
    from Macro.test_fichier_ops import md5file
    from Utilitai.Utmess import UTMESS
 
    # vérifie la syntaxe des expressions régulières fournies
-   l_regexp=[]
+   l_regexp = []
    if args['EXPR_IGNORE']:
       if type(args['EXPR_IGNORE']) is StringType:
          lexp = [args['EXPR_IGNORE']]
@@ -62,22 +57,19 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
          lexp = args['EXPR_IGNORE']
       for exp in lexp:
          try:
-            obj=re.compile(exp)
+            obj = re.compile(exp)
          except re.error, s:
             UTMESS('F', 'TEST_FICHIER',
                    '<INVALID_REGEXP> %s pour %s' % (str(s), repr(exp)))
          else:
             l_regexp.append(exp)
-      if len(l_regexp) < len(lexp):
-         self.cr.fatal(' <F> <TEST_FICHIER> Expression régulière invalide (voir <INVALID_REGEXP>)')
-
 
-   is_ok=0
+   is_ok = 0
 
    # vérifier que le fichier a été fermé
    tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER)
    
-   if tinfo__['ETAT_UNITE',1].find('OUVERT')>-1:
+   if tinfo__['ETAT_UNITE', 1].find('OUVERT')>-1:
       UTMESS('A',  'TEST_FICHIER',
              "LE FICHIER N'A PAS ETE FERME :\n%s" % FICHIER)
 
@@ -86,28 +78,28 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
       # calcule le md5sum du fichier
       ier, mdsum = md5file(FICHIER, NB_CHIFFRE, EPSILON, l_regexp, INFO)
       if ier != 0:
-         if ier==4:
-            texte_erreur='Fichier inexistant : '+FICHIER
+         if ier == 4:
+            texte_erreur = 'Fichier inexistant : '+FICHIER
          else:
-            texte_erreur='Erreur dans md5file, code retour = '+str(ier)
-         texte_erreur='<S> <TEST_FICHIER> '+texte_erreur
+            texte_erreur = 'Erreur dans md5file, code retour = '+str(ier)
+         texte_erreur = '<S> <TEST_FICHIER> '+texte_erreur
          # aujourd'hui, je ne sais pas déclencher autre chose que <F>...
          self.cr.fatal(texte_erreur)
          return ier
 
       # comparaison a la reference
       if INFO > 0 :
-         aster.affiche('MESSAGE',' %-20s : %32s\n' % ('REFERENCE',VALE_K))
+         aster.affiche('MESSAGE', ' %-20s : %32s\n' % ('REFERENCE', VALE_K))
 
       if mdsum == VALE_K:
-         is_ok=1
+         is_ok = 1
 
    # produit le TEST_TABLE
-   tab1__=CREA_TABLE(LISTE=(_F(PARA='TEST',
-                               TYPE_K='K8',
-                               LISTE_K='VALEUR  ',),
-                            _F(PARA='BOOLEEN',
-                               LISTE_I=is_ok,),),)
+   tab1__ = CREA_TABLE(LISTE=(_F(PARA='TEST',
+                                 TYPE_K='K8',
+                                 LISTE_K='VALEUR  ',),
+                              _F(PARA='BOOLEEN',
+                                 LISTE_I=is_ok,),),)
    if args['REFERENCE'] == 'NON_REGRESSION':
       TEST_TABLE(TABLE=tab1__,
                  FILTRE=_F(NOM_PARA='TEST',
@@ -134,7 +126,33 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
 
 
 #-------------------------------------------------------------------------------
-def md5file(fich, nbch, epsi, regexp_ignore=[], info=0, output=None):
+def sign(x):
+   return int(x/abs(x))
+
+def _round(x, n, exp):
+   v = x * 10**(-exp+n)
+   val = int(v + sign(x)*0.4999)
+   return val
+
+def entier_ini(x, nbch, exp=None):
+   #if exp is None:
+      #exp = int(floor(log10(abs(x))))
+   val = _round(x, nbch-1, exp)
+   return val, exp-nbch+1
+
+def entier_triple(x, nbch, exp_epsi):
+   #if abs(x) <= 10**exp_epsi:
+      #return '0'
+   y = _round(x * 10**(-exp_epsi), 0, 0) * 10**exp_epsi
+   exp = int(floor(log10(abs(y))))
+   z1, e1 = entier_ini(y,           nbch+2, exp)
+   z2, e2 = entier_ini(z1 * 10**e1, nbch+1, exp)
+   z3, e3 = entier_ini(z2 * 10**e2, nbch,   exp)
+   return '%sE%d' % (z3, e3)
+
+#-------------------------------------------------------------------------------
+def md5file(fich, nbch, epsi,
+            regexp_ignore=[], info=0, output=None, format_func=entier_triple):
    """
    Cette methode retourne le md5sum d'un fichier en arrondissant les nombres
    reels a la valeur significative.
@@ -145,7 +163,10 @@ def md5file(fich, nbch, epsi, regexp_ignore=[], info=0, output=None):
       regexp_ignore : liste d'expressions régulières permettant d'ignorer
          certaines lignes
       output        : pour rediriger l'interprétation du fichier (INFO=2)
-         dans le fichier de nom `output`.
+         dans le fichier de nom `output`,
+      info          : on affiche le résumé si info>0
+      format_func   : on peut préciser une autre fonction pour formatter 
+         les réels...
    OUT :
       code retour : 0 si ok, >0 sinon
       md5sum
@@ -153,69 +174,73 @@ def md5file(fich, nbch, epsi, regexp_ignore=[], info=0, output=None):
          NE PAS AJOUTER D'IMPORT QUI RENDRAIT CETTE FONCTION
                INUTILISABLE EN DEHORS DE CODE_ASTER.
    """   
-   if output<>None:
+   if output != None:
       try:
-         sys.stdout=open(output, 'w')
+         sys.stdout = open(output, 'w')
       except IOError, msg:
-         print "Erreur d'écriture sur %s : %s" % (fout, msg)
+         print "Erreur d'écriture sur %s : %s" % (output, msg)
    
    #      1 Mo   10 Mo   100 Mo
    # v0   2.6 s  20.4 s  196.6 s
    # v1   2.0 s  10.3 s  94.9 s (pas de distinction entier/reel)
    # remplacer le try/except par if re.search(...), 80% plus lent
+   # v2  10.7 s
    if not os.path.isfile(fich):
       return 4, ''
-   f=open(fich,'r')
-   format_float='%'+str(nbch+7)+'.'+str(nbch)+'g'
-   m=md5.new()
-   i=0
+   f = open(fich,'r')
+   m = md5.new()
+   exp_epsi = int(floor(log10(abs(epsi))))
+   i = 0
    for ligne in f:
-      i=i+1
-      if info>=2:
-         print 'LIGNE',i,
-      keep=True
+      i = i+1
+      if info >= 2:
+         print 'LIGNE', i,
+      keep = True
       for exp in regexp_ignore:
-         if re.search(exp,ligne):
-            keep=False
-            if info>=2:
+         if re.search(exp, ligne):
+            keep = False
+            if info >= 2:
                print ' >>>>>>>>>> IGNOREE <<<<<<<<<<',
             break
       if keep:
          # découpe des nombres collés : 1.34E-142-1.233D+09
-         ligne=re.sub('([0-9]+)\-','\g<1> -',ligne)
+         ligne = re.sub('([0-9]+)\-', '\g<1> -', ligne)
          # conversion des DOUBLE fortran en 'E'
-         ligne=re.sub('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)','\g<1>E\g<2>',ligne)
-         r=string.split(ligne)
+         ligne = re.sub('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)', '\g<1>E\g<2>', ligne)
+         r = ligne.split()
          for x in r:
             try:
-               if abs(float(x))<epsi:
-                  s='0'
+               xv = float(x)
+               if abs(xv)<epsi:
+                  s = '0'
                else:
-                  s=format_float % float(x)
+                  #s = format_float % float(x)
+                  s = format_func(xv, nbch, exp_epsi)
             except ValueError:
-               s=x
-            if info>=2:
+               s = x
+            if info >= 2:
                print (' %'+str(nbch+7)+'s') % s,
             m.update(s)
-      if info>=2:
+      if info >= 2:
          print
    f.close()
-   md5sum=m.hexdigest()
+   md5sum = m.hexdigest()
    
-   affich_resu=True
-   if info>=1:
+   affich_resu = True
+   if info >= 1:
       while affich_resu:
-         form=' %-20s : %32s'
-         print form % ('Fichier',fich)
-         print form % ('Nombre de lignes',str(i))
-         print form % ('Format des reels',format_float)
-         print form % ('Epsilon',str(epsi))
-         print form % ('md5sum',md5sum)
-         if output==None:
-            affich_resu=False
+         form = ' %-20s : %32s'
+         print form % ('Fichier', fich)
+         print form % ('Nombre de lignes', str(i))
+         #print form % ('Format des reels',format_float)
+         print form % ('Nombre de chiffres', str(nbch))
+         print form % ('Epsilon', str(epsi))
+         print form % ('md5sum', md5sum)
+         if output == None:
+            affich_resu = False
          else:
-            sys.stdout=sys.__stdout__
-            output=None
+            sys.stdout = sys.__stdout__
+            output = None
    return 0, md5sum
 
 
@@ -223,13 +248,16 @@ def md5file(fich, nbch, epsi, regexp_ignore=[], info=0, output=None):
 if __name__ == '__main__':
    from optparse import OptionParser, OptionGroup
 
-   p=OptionParser(usage='usage: %s a_tester [options]' % sys.argv[0])
+   p = OptionParser(usage='usage: %s a_tester [options]' % sys.argv[0])
    p.add_option('-n', '--nbch',
       action='store', dest='nbch', type='int', default=6,
       help='nombre de chiffres significatifs')
    p.add_option('-e', '--epsilon',
       action='store', dest='epsi', type='float', default=1.e-14,
       help='epsilon en dessous duquel on considère les nombres nuls')
+   p.add_option('--expr_ignore',
+      action='store', dest='exp', type='string',
+      help='expression régulière à ignorer')
    p.add_option('-o', '--output',
       action='store', dest='output', type='string', default='output.txt',
       help='fichier de sortie')
@@ -238,6 +266,12 @@ if __name__ == '__main__':
    if len(args)<1:
       p.print_usage()
       sys.exit(1)
+   if opts.exp is None:
+      exp = []
+   else:
+      exp = [opts.exp]
 
    print 'Lignes retenues dans %s' % opts.output
-   iret = md5file(args[0], opts.nbch, opts.epsi, info=2, output=opts.output)
+   iret = md5file(args[0], opts.nbch, opts.epsi,
+                  regexp_ignore=exp, info=2, output=opts.output)
+
index ad2f62f18fb9fa09e8e49dc85dfc7e52cee63b2d..62014c235f25189d4ca2da506bdc36a1f8e045ee 100755 (executable)
@@ -1,4 +1,4 @@
-#& MODIF ENTETE  DATE 16/05/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF ENTETE  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -49,13 +49,38 @@ class entier   (ASSD):
    def __init__(self,valeur=None,**args):
       ASSD.__init__(self,**args)
       self.valeur=valeur
+
+   def __adapt__(self,validator):
+      if validator.name == "list":
+          #validateur liste,cardinalité
+          return (self,)
+      elif validator.name == "type":
+          #validateur type
+          return validator.adapt(self.valeur or 0)
+      else:
+          #validateur into et valid
+          return self
+
 class reel(ASSD):
    def __init__(self,valeur=None,**args):
       ASSD.__init__(self,**args)
       self.valeur=valeur
+
    def __call__(self):
       return self.valeur
 
+   def __adapt__(self,validator):
+      if validator.name == "list":
+          #validateur liste,cardinalité
+          return (self,)
+      elif validator.name == "type":
+          #validateur type
+          return validator.adapt(self.valeur or 0.)
+      else:
+          #validateur into et valid
+          return self
+
+
 # -----------------------------------------------------------------------------
 # Type geometriques
 class no  (GEOM):pass
@@ -13670,304 +13695,6 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,
          POSITION        =SIMP(statut='f',typ='I',defaut=1),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
 )  ;
-#& MODIF COMMANDE  DATE 04/07/2005   AUTEUR GNICOLAS G.NICOLAS 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-# ======================================================================
-# RESPONSABLE GNICOLAS G.NICOLAS
-IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
-            UIinfo={"groupes":("Fonction",)},
-                    fr="Imprime le fichier de configuration de HOMARD.",
-                    ang="Writes the configuration file for HOMARD.",
-#
-# 1. Le niveau d'information
-#
-         INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
-#
-# 2. Langue des messages issus de HOMARD
-#
-         LANGUE =SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
-                      into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
-                      fr="Langue des messages issus de HOMARD.",
-                      ang="Language for HOMARD messages." ),
-#
-# 3. Le nom local du fichier de configuration HOMARD
-#
-         UNITE_CONF    =SIMP(statut='o',typ='I'),
-#
-# 4. Le nom local du fichier de données HOMARD
-#
-         UNITE_DONN    =SIMP(statut='f',typ='I'),
-#
-# 5. Gestion des éléments autres que des simplexes
-#       0 : autres elements refuses (defaut)
-#       1 : raffinement sur les simplexes, mais autres acceptes
-#       2 : tous
-#
-         NON_SIMPLEXE   = SIMP(statut='f',typ='I',defaut=0,into=(0,1,2),
-                          fr="Type d'éléments acceptés.",
-                          ang="Type of authorized elements." ),
-#
-# 6. Le type de traitement :
-#
-         TRAITEMENT      =FACT(statut='o',
-#
-# 6.1. TROIS CHOIX EXCLUSIFS :
-#
-#      A. ADAPTATION PAR UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
-#         . RAFFINEMENT ET DERAFFINEMENT
-#         . RAFFINEMENT SEUL
-#         . DERAFFINEMENT SEUL
-#      B. ADAPTATION UNIFORME, AVEC DEUX VARIANTES :
-#         . RAFFINEMENT SEUL
-#         . DERAFFINEMENT SEUL
-#         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
-#      C. INFORMATION SUR UN MAILLAGE
-#
-           regles=( UN_PARMI('ADAPTATION','UNIFORME','INFORMATION'),),
-           ADAPTATION      =SIMP(statut='f',typ='TXM',     
-                                 fr="Adaptation libre",
-                                 ang="Free adaptation",
-                                 into=("RAFFINEMENT","DERAFFINEMENT","RAFF_DERA") ),
-           UNIFORME        =SIMP(statut='f',typ='TXM',     
-                                 fr="Adaptation uniforme",
-                                 ang="Uniforme adaptation",
-                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN") ),
-           INFORMATION     =SIMP(statut='f',typ='TXM',
-                                 fr="Information sur un maillage",
-                                 ang="Information on a mesh",
-                                 into=("OUI",) ),
-#
-# 6.2. LES CONTRAINTES :
-#
-# 6.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT :
-#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
-#      B. LE NOM MED DU MAILLAGE D'ENTREE
-#      C. LE NOM MED DE L'INDICATEUR D'ERREUR
-#      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
-#      E. LA MISE A JOUR DE SOLUTION
-#      F. LE NOM MED DU MAILLAGE DE SORTIE
-#      REMARQUE : IL FAUT DES CRITERES, MAIS ON NE SAIT PAS LESQUELS
-#
-# 6.2.2. POUR DE L'ADAPTATION UNIFORME
-#          IL FAUT :
-#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
-#      B. LE NOM MED DU MAILLAGE DE SORTIE
-#          IL NE FAUT PAS :
-#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
-#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
-#      C. LES CRITERES
-#      REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION,
-#                 IL FAUT LE NOM MED DU MAILLAGE D'ENTREE
-#
-# 6.2.3. POUR DE L'INFORMATION :
-#          IL FAUT :
-#      A. LE NOM MED DU MAILLAGE D'ENTREE
-#          IL NE FAUT PAS :
-#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
-#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
-#      C. LES CRITERES
-#      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
-#      E. LA MISE A JOUR DE SOLUTION
-#
-           b_maillage_initial =BLOC(condition = "( INFORMATION != None ) or ( ADAPTATION != None ) ",
-                           fr="Nom MED du maillage en entrée",
-                           ang="MED name of the in-mesh",
-                           NOM_MED_MAILLAGE_N   =SIMP(statut='o',typ='TXM',),
-                           ) ,
-#
-           b_maillage_initial_uniforme =BLOC(condition = "( UNIFORME != None ) ",
-                           fr="Nom MED du maillage en entrée",
-                           ang="MED name of the in-mesh",
-                           NOM_MED_MAILLAGE_N   =SIMP(statut='f',typ='TXM',),
-                           ) ,
-#
-           b_iteration =BLOC(condition = "( UNIFORME != None ) or ( ADAPTATION != None ) ",
-                           fr="Nom MED du maillage en sortie, numero d'iteration",
-                           ang="MED name of the out-mesh, iteration rank",
-                           NITER                =SIMP(statut='o',typ='I',
-                           fr="Numéro d'itération.",
-                           ang="Iteration number." ),
-                           NOM_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM',
-                           fr="Nom MED du maillage en sortie",
-                           ang="MED name of the out-mesh" ),
-                           ) ,
-#
-           b_indicateur_d_erreur  =BLOC(condition = "ADAPTATION != None",
-                           fr="Indicateur d'erreur",
-                           ang="Error indicator",
-                           regles=(EXCLUS('NUME_ORDRE','INST'),
-                                   EXCLUS('NUME_ORDRE','RESULTAT'),
-                                   PRESENT_PRESENT('RESULTAT','NOM_CHAM'),),
-                           NOM_MED  =SIMP(statut='o',typ='TXM',
-                           fr="Nom MED de l'indicateur d'erreur.",
-                           ang="MED name of error indicator.",),
-                           COMPOSANTE  =SIMP(statut='o',typ='TXM',
-                           fr="Nom de la composante de l'indicateur d'erreur retenue.",
-                           ang="Name of the selected component of the error indicator.",),
-                           NUME_ORDRE  =SIMP(statut='f',typ='I',
-                           fr="Numero d'ordre de l'indicateur.",
-                           ang="Rank number of the error indicator.",),
-                           INST        =SIMP(statut='f',typ='R',
-                           fr="Instant de l'indicateur.",
-                           ang="Instant of the error indicator.",),
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),),
-                           RESULTAT  =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
-                           fr="Concept contenant l'indicateur.",
-                           ang="Conceipt wich contains the error indicator.",),
-                           NOM_CHAM  =SIMP(statut='f',typ='TXM',
-                           fr="Nom du champ dans le résultat de l'indicateur.",
-                           ang="Name of the field of the error indicator.",),
-                           ) ,
-#
-           b_critere_de_raffinement =BLOC( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' )" ,
-                           fr="Critère de raffinement.",
-                           ang="Refinement threshold.",
-                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
-                           CRIT_RAFF_ABS   =SIMP(statut='f',typ='R',
-                                                 fr="Critère absolu",
-                                                 ang="Absolute threshold"  ),
-                           CRIT_RAFF_REL   =SIMP(statut='f',typ='R',
-                                                 fr="Critère relatif",
-                                                 ang="Relative threshold" ),
-                           CRIT_RAFF_PE    =SIMP(statut='f',typ='R',
-                                                 fr="Pourcentage d'éléments",
-                                                 ang="Percentage of elements" ),
-                           ) ,
-#
-           b_critere_de_deraffinement =BLOC ( condition = "( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' )" ,
-                           fr="Critère de déraffinement.",
-                           ang="Unrefinement threshold.",
-                           regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
-                           CRIT_DERA_ABS   =SIMP(statut='f',typ='R' ,
-                                                 fr="Critère absolu",
-                                                 ang="Absolute threshold" ),
-                           CRIT_DERA_REL   =SIMP(statut='f',typ='R',
-                                                 fr="Critère relatif",
-                                                 ang="Relative threshold" ),
-                           CRIT_DERA_PE    =SIMP(statut='f',typ='R',
-                                                 fr="Pourcentage d'éléments",
-                                                 ang="Percentage of elements" ),
-                           ) ,
-#
-           b_niveau_maximum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' ) or \
-                                                  ( UNIFORME == 'RAFFINEMENT' )" ,
-                           NIVE_MAX        =SIMP(statut='f',typ='I',
-                                                 fr="Niveau maximum de profondeur de raffinement",
-                                                 ang="Maximum level for refinement"),
-                           ) ,
-#
-           b_niveau_minimum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' ) or \
-                                                  ( UNIFORME == 'DERAFFINEMENT' )" ,
-                           NIVE_MIN        =SIMP(statut='f',typ='I',
-                                                 fr="Niveau minimum de déraffinement",
-                                                 ang="Minimum level for unrefinement" ),
-                           ) ,
-#
-# 6.3. Le suivi de frontiere eventuel :
-#
-         NOM_MED_MAILLAGE_FRONTIERE =SIMP(statut='f',typ='TXM',
-                           fr="Nom MED du maillage de la frontiere à suivre",
-                           ang="MED name of the boundary mesh" ),
-#
-         b_frontiere_1 =BLOC ( condition = "NOM_MED_MAILLAGE_FRONTIERE != None" ,
-                           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
-                                                 fr="Groupes définissant la frontière",
-                                                 ang="Groups which define the boundary" ),
-                               ) ,
-#
-         ),
-#
-# 7. Mise à jour de champs sur le nouveau maillage
-#
-         MAJ_CHAM        =FACT(statut='f',max='**',
-                           fr="Mise à jour de champs sur le nouveau maillage.",
-                           ang="Updating of fields over the new mesh.",
-                           regles=(EXCLUS('NUME_ORDRE','INST'),
-                                   EXCLUS('NUME_ORDRE','RESULTAT'),
-                                   PRESENT_PRESENT('RESULTAT','NOM_CHAM'),),
-                           NOM_MED  =SIMP(statut='o',typ='TXM',
-                           fr="Nom MED du champ à mettre à jour.",
-                           ang="MED name of field.",),
-                           NUME_ORDRE  =SIMP(statut='f',typ='I',
-                           fr="Numero d'ordre du champ à mettre à jour.",
-                           ang="Rank number of field.",),
-                           INST        =SIMP(statut='f',typ='R',
-                           fr="Instant du champ à mettre à jour.",
-                           ang="Instant of field.",),
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),),
-                           RESULTAT  =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
-                           fr="Concept contenant le champ à mettre à jour.",
-                           ang="Conceipt wich contains the field.",),
-                           NOM_CHAM  =SIMP(statut='f',typ='TXM',
-                           fr="Nom du champ dans le résultat du champ à mettre à jour.",
-                           ang="Name of the field.",),
-         ),
-#
-# 8. L'ANALYSE DU MAILLAGE
-#
-         ANALYSE         =FACT(statut='f',
-                               fr="Analyse du maillage.",
-                               ang="Mesh analysis.",
-#
-#    5 CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) :
-#    A. NOMBRE DES ELEMENTS
-#    B. QUALITE DES ELEMENTS
-#    C. INTERPENETRATION DES ELEMENTS
-#    D. CONNEXITE DU MAILLAGE
-#    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
-#
-           regles=(AU_MOINS_UN('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'),),
-#
-         NOMBRE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Nombre de noeuds et éléments du maillage",
-                          ang="Number of nodes and elements in the mesh" ),
-#
-         QUALITE         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Qualité du maillage",
-                          ang="Mesh quality" ),
-#
-         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Controle de la non interpénétration des éléments.",
-                          ang="Overlapping checking." ),
-#
-         CONNEXITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Connexité du maillage.",
-                          ang="Mesh connexity." ),
-#
-         TAILLE          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Tailles des sous-domaines du maillage.",
-                          ang="Sizes of mesh sub-domains." ),
-#
-         ),
-#
-)  ;
 #& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETTE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -15210,7 +14937,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15234,8 +14961,16 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
 from Macro.macr_adap_mail_ops import macr_adap_mail_ops
 
 def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
-  maillage_np1=ADAPTATION['MAILLAGE_NP1']
+#
+# 0. Typage des structures produites
+#
+  maillage_np1=args['MAILLAGE_NP1']
   self.type_sdprod(maillage_np1,maillage_sdaster)
+#
+  if ( args['MAILLAGE_NP1_ANNEXE'] is not None ) :
+    maillage_np1_annexe=args['MAILLAGE_NP1_ANNEXE']
+    self.type_sdprod(maillage_np1_annexe,maillage_sdaster)
+#
   if MAJ_CHAM == None:return None
 # Remarque : la liste qui suit doit etre conforme à son homologue de LIRE_CHAMP
   for ch in MAJ_CHAM:
@@ -15252,312 +14987,395 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
 # 1. Le niveau d'information
 #
-         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+  INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 #
 # 2. Version de HOMARD
 #
-         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V7_7",
-                               into=("V7_7", "V7_N", "V7_N_PERSO", "V8_N"),
-                           fr="Version de HOMARD",
-                           ang="HOMARD release"),
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_2",
+                        into=("V8_2", "V8_N", "V8_N_PERSO"),
+                        fr="Version de HOMARD",
+                        ang="HOMARD release"),
 #
-# 3. Langue des messages issus de HOMARD
+# 3. Langue des messages produits par HOMARD
 #
-         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
-                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
-                           fr="Langue des messages issus de HOMARD.",
-                           ang="Language for HOMARD messages." ),
+  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                fr="Langue des messages produits par HOMARD.",
+                ang="Language for HOMARD messages." ),
 #
-# 4. Gestion des éléments autres que des simplexes
-#       0 : autres elements refuses
-#       1 : raffinement sur les simplexes, mais autres acceptes
-#       2 : tous (defaut)
+# 4. Les maillages
+# 4.1. Quel que soit le type de traitement, il faut donner  :
+#      A. Le concept du maillage initial (entree)
+#      B. Le concept du maillage final (sortie)
 #
-         NON_SIMPLEXE   = SIMP(statut='f',typ='I',defaut=2,into=(0,1,2),
-                          fr="Type d'éléments acceptés.",
-                          ang="Type of authorized elements." ),
+  MAILLAGE_N   = SIMP(statut='o',typ=maillage_sdaster,
+                      fr="Maillage avant adaptation",
+                      ang="Mesh before adaptation" ),
 #
-# 5. Le type de traitement :
+  MAILLAGE_NP1 = SIMP(statut='o',typ=CO,
+                      fr="Maillage apres adaptation",
+                      ang="Mesh after adaptation" ),
 #
-         ADAPTATION      =FACT(statut='o',
-                           fr="Type d'adaptation",
-                           ang="Type of adaptation",
+# 4.2. Eventuellement, on peut produire un maillage annexe
+#      Actuellement, c'est le maillage n+1, mais de degré différent.
 #
-# 5.1. Deux choix d'adaptation exclusifs :
+  MAILLAGE_NP1_ANNEXE = SIMP(statut='f',typ=CO,
+                             fr="Maillage annexe apres adaptation",
+                             ang="Additional mesh after adaptation" ),
 #
-# 5.1.
-#      A. Pilote par une consigne, avec trois variantes :
-#         . Raffinement et deraffinement
-#         . Raffinement seul
-#         . Deraffinement seul
-#      B. Uniforme, avec trois variantes :
-#         . Raffinement seul
-#         . Deraffinement seul
-#         . Rien : le maillage est le meme a la sortie et a l'entree
+# 5. Le pilotage de l'adaptation, avec les variantes suivantes :
+#  . Raffinement et deraffinement, selon un champ d'indicateurs d'erreur
+#  . Raffinement seul, selon un champ d'indicateurs d'erreur
+#  . Deraffinement seul, selon un champ d'indicateurs d'erreur
+#  . Raffinement uniforme : toutes les mailles sont divisées
+#  . Deraffinement uniforme : toutes les mailles sont regroupées
+#  . Rien : le maillage est le meme a la sortie et a l'entree
 #
-           regles=(
-                   UN_PARMI('LIBRE','UNIFORME'),
-                  ),
-           LIBRE          = SIMP(statut='f',typ='TXM',
-                                 into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT"),    
-                           fr="Adaptation selon un indicateur d'erreur.",
-                           ang="Adaptation among an error indicator" ),
-           UNIFORME       = SIMP(statut='f',typ='TXM',
-                                 into=("RAFFINEMENT","DERAFFINEMENT","RIEN"),    
-                           fr="Adaptation uniforme.",
-                           ang="Uniform adaptation" ),
+  ADAPTATION = SIMP(statut='f',typ='TXM',
+                    into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT","RAFFINEMENT_ZONE", \
+                          "RAFFINEMENT_UNIFORME","DERAFFINEMENT_UNIFORME","RIEN"),    
+                    fr="Pilotage de l'adaptation : selon un indicateur d'erreur ou uniforme.",
+                    ang="Adaptation control : among an error indicator or uniform" ),
 #
-# 5.2. Quel que soit le type de traitement, il faut donner  :
-#      A. Le concept du maillage initial
-#      B. Le concept du maillage final
+# 6. Pour de l'adaptation libre, il faut un indicateur d'erreur
 #
-           MAILLAGE_N     = SIMP(statut='o',typ=maillage_sdaster,
-                           fr="Maillage avant adaptation",
-                           ang="Mesh before adaptation" ),
-           MAILLAGE_NP1   = SIMP(statut='o',typ=CO,
-                           fr="Maillage apres adaptation",
-                           ang="Mesh after adaptation" ),
+  b_indicateur_d_erreur = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                              (ADAPTATION == 'RAFFINEMENT') or \
+                                              (ADAPTATION == 'DERAFFINEMENT') " ,
+                                fr="Pour une adaptation libre, choix de l'indicateur d'erreur ou d'une zone à raffiner",
+                                ang="For free adaptation, selection of error indicator or zone",
 #
-# 5.3. Pour de l'adaptation libre, il faut un indicateur d'erreur et/ou des definitions de zones
+    regles=(UN_PARMI('CHAM_GD','RESULTAT_N')),
 #
-           b_indicateur_d_erreur   =BLOC( condition = " LIBRE != None " ,
-                           fr="Choix de l'indicateur d'erreur",
-                           ang="Selection of error indicator",
+# 6.1. Repérage de la zone à raffiner à l'aide d'un indicateur
 #
-# 5.3.1. L'indicateur
+# 6.1.1. Sous forme de champ de grandeur
 #
-                           regles=(UN_PARMI('CHAM_GD','RESULTAT_N')),
+    CHAM_GD    = SIMP(statut='f',typ=cham_gd_sdaster,
+                      fr="Champ de grandeur Code_Aster contenant l'indicateur d'erreur",
+                      ang="Code_Aster champ de grandeur with error indicator" ),
 #
-# 5.3.1.1. Sous forme de champ de grandeur
+# 6.1.2. Sous forme de concept resultat_sdaster
 #
-                           CHAM_GD        =SIMP(statut='f',typ=cham_gd_sdaster,
-                           fr="Champ de grandeur Code_Aster contenant l'indicateur d'erreur",
-                           ang="Champ de grandeur with error indicator" ),
+    RESULTAT_N = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ,
+                      fr="Concept resultat Code_Aster contenant l'indicateur d'erreur",
+                      ang="Code_Aster result with error indicator" ),
 #
-# 5.3.1.2. Sous forme de concept resultat_sdaster
+    b_champ_indicateur = BLOC(condition="(RESULTAT_N != None)",
+      INDICATEUR = SIMP(statut='o',typ='TXM',     
+                        fr="Champ de l'indicateur d'erreur dans le résultat",
+                        ang="Error indicator field in the result structure" ),
+    ),
 #
-                           RESULTAT_N     = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ,
-                           fr="Concept resultat Code_Aster contenant l'indicateur d'erreur",
-                           ang="Result with error indicator" ),
+# 6.1.3. La composante retenue
 #
-                           b_champ_indicateur     =BLOC(condition="(RESULTAT_N != None)",
-                             INDICATEUR     = SIMP(statut='o',typ='TXM',     
-                             fr="Champ de l'indicateur d'erreur",
-                             ang="Error indicator field" ),
-                                                       ),
+    b_composante = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                        fr="Choix de la composante pour l'indicateur",
+                        ang="Component selection for error indicator",
 #
-# 5.3.2. La composante retenue
+      NOM_CMP_INDICA = SIMP(statut='o',typ='TXM',
+                            fr="Composante retenue pour l'indicateur d'erreur",
+                            ang="Selected component for error indicator" ),
 #
-                           NOM_CMP_INDICA = SIMP(statut='o',typ='TXM',
-                           fr="Composante retenue",
-                           ang="Selected component" ),
+    ),
 #
-# 5.3.3. Le paramètre temporel pour l'indicateur
+# 6.1.4. Le paramètre temporel pour l'indicateur
 #
-                           b_parametre_temporel     =BLOC(condition="(RESULTAT_N != None)",
+    b_parametre_temporel = BLOC(condition="(RESULTAT_N != None)",
+                                fr="Choix éventuel du paramètre temporel pour l'indicateur",
+                                ang="Time selection for error indicator (option)",
 #
-                           regles=(EXCLUS('NUME_ORDRE','INST'),),
+      regles=(EXCLUS('NUME_ORDRE','INST'),),
 #
-# 5.3.3.1. Soit le numero d'ordre
+# 6.1.4.1. Soit le numero d'ordre
 #
-                           NUME_ORDRE     = SIMP(statut='f',typ='I',
-                           fr="Numero d ordre",
-                           ang="Rank" ),  
+      NUME_ORDRE = SIMP(statut='f',typ='I',
+                        fr="Numero d ordre",
+                        ang="Rank" ),  
 #
-# 5.3.3.2. Soit l'instant
-# 5.3.3.2.1. Sa valeur
+# 6.1.4.2. Soit l'instant
+# 6.1.4.2.1. Sa valeur
 #
-                           INST           = SIMP(statut='f',typ='R',
-                           fr="Instant associé",
-                           ang="Instant" ),
+      INST       = SIMP(statut='f',typ='R',
+                        fr="Instant associé",
+                        ang="Instant" ),
 #
-# 5.3.3.2.2. La précision du choix de l'instant
+# 6.1.4.2.2. La précision du choix de l'instant
 #
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),
-                                                ),
+      b_precision = BLOC(condition="(INST != None)",
+                         fr="Choix de la précision du choix de l'instant",
+                         ang="Selection for instant choice",
+        PRECISION = SIMP(statut='f',typ='R',defaut=1.0E-3,
+                         fr="Précision sur le choix de l'instant associé",
+                         ang="Accuracy over instant choice" ),
+        CRITERE   = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
+                         fr="Critère de précision sur le choix de l'instant associé",
+                         ang="Accuracy criterium over instant choice" ),
+      ),
 #
-                                                         ),
+    ),
 #
-                           ) ,
+  ) ,
 #
-# 5.4. Les criteres pour de l'adaptation libre :
+# 7. Les criteres pour de l'adaptation libre avec un indicateur d'erreur :
 #        absolu, relatif, en proportion d'entite
-# 5.4.1. Pour le raffinement :
-#
-           b_critere_de_raffinement =BLOC( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) " ,
-                           fr="Critère de raffinement.",
-                           ang="Refinement threshold.",
-                           regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
-                           CRIT_RAFF_ABS  = SIMP(statut='f',typ='R',
-                                                   fr="Critère absolu",
-                                                   ang="Absolute threshold" ),  
-                           CRIT_RAFF_REL  = SIMP(statut='f',typ='R',
-                                                   fr="Critère relatif : fraction entre 0 et 1",
-                                                   ang="Relative threshold : ratio between 0 and 1" ),  
-                           CRIT_RAFF_PE   = SIMP(statut='f',typ='R',
-                                                   fr="Pourcentage d'éléments : fraction entre 0 et 1",
-                                                   ang="Percentage of elements : ratio between 0 and 1" ),  
-                           ) ,
-#
-# 5.4.2. Pour le deraffinement :
-#
-           b_critere_de_deraffinement =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) " ,
-                           fr="Critère de déraffinement.",
-                           ang="Unrefinement threshold.",
-                           regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
-                           CRIT_DERA_ABS  = SIMP(statut='f',typ='R' ,
-                                                 fr="Critère absolu",
-                                                 ang="Absolute threshold" ),  
-                           CRIT_DERA_REL  = SIMP(statut='f',typ='R',
-                                                 fr="Critère relatif : fraction entre 0 et 1",
-                                                 ang="Relative threshold : ratio between 0 and 1" ),  
-                           CRIT_DERA_PE   = SIMP(statut='f',typ='R',
-                                                 fr="Pourcentage d'éléments : fraction entre 0 et 1",
-                                                 ang="Percentage of elements : ratio between 0 and 1" ),  
-                           ) ,
-#
-# 5.5. Les niveaux extremes pour le maillage adapte
-# 5.5.1. Pour le raffinement :
-#
-           b_niveau_maximum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) or \
-                                                  ( UNIFORME == 'RAFFINEMENT' ) " ,
+# 7.1. Pour le raffinement :
+#
+  b_critere_de_raffinement = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                 (ADAPTATION == 'RAFFINEMENT') " ,
+                                fr="Critère de raffinement.",
+                                ang="Refinement threshold.",
+#
+    regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+#
+    CRIT_RAFF_ABS = SIMP(statut='f',typ='R',
+                         fr="Critère absolu",
+                         ang="Absolute threshold" ),  
+    CRIT_RAFF_REL = SIMP(statut='f',typ='R',
+                         fr="Critère relatif : fraction réelle entre 0. et 1.",
+                         ang="Relative threshold : ratio between 0. and 1." ),  
+    CRIT_RAFF_PE  = SIMP(statut='f',typ='R',
+                         fr="Pourcentage d'éléments : fraction réelle entre 0. et 1.",
+                         ang="Percentage of elements : ratio between 0. and 1." ),  
+  ) ,
+#
+# 7.2. Pour le deraffinement :
+#
+  b_critere_de_deraffinement = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT') " ,
+                                     fr="Critère de déraffinement.",
+                                     ang="Unrefinement threshold.",
+#
+    regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+#
+    CRIT_DERA_ABS = SIMP(statut='f',typ='R' ,
+                         fr="Critère absolu",
+                         ang="Absolute threshold" ),  
+    CRIT_DERA_REL = SIMP(statut='f',typ='R',
+                         fr="Critère relatif : fraction réelle entre 0. et 1.",
+                         ang="Relative threshold : ratio between 0. and 1." ),  
+    CRIT_DERA_PE  = SIMP(statut='f',typ='R',
+                         fr="Pourcentage d'éléments : fraction réelle entre 0. et 1.",
+                         ang="Percentage of elements : ratio between 0. and 1." ),  
+  ) ,
+#
+# 8. Pour de l'adaptation par zone, définitions des zones
+# Remarque : on impose le 3D
+#
+  b_zone = BLOC( condition = " (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+                                fr="Pour une adaptation selon une zone à raffiner",
+                                ang="For adaptation among zone",
+    ZONE = FACT(statut='f',max='**',
+                  fr="Définition de zones à raffiner.",
+                  ang="Refined zone definition.",
+#
+      regles=(AU_MOINS_UN('X_MINI','X_CENTRE'),
+              EXCLUS('X_MINI','X_CENTRE',),
+              PRESENT_PRESENT('X_MINI','X_MAXI','Y_MINI','Y_MAXI','Z_MINI','Z_MAXI'),
+              PRESENT_PRESENT('X_CENTRE','Y_CENTRE','Z_CENTRE','RAYON'),),
+#
+# 6.2.1. Une boite parallelepipedique
+#
+      X_MINI = SIMP(statut='f',typ='R',
+                    fr="Abscisse minimum de la boite",
+                    ang="Minimum X for the box"),
+      X_MAXI = SIMP(statut='f',typ='R',
+                    fr="Abscisse maximum de la boite",
+                    ang="Maximum X for the box"),
+#
+      Y_MINI = SIMP(statut='f',typ='R',
+                    fr="Orodnnée minimum de la boite",
+                    ang="Minimum Y for the box"),
+      Y_MAXI = SIMP(statut='f',typ='R',
+                    fr="Abscisse maximum de la boite",
+                    ang="Maximum Y for the box"),
+#
+      Z_MINI = SIMP(statut='f',typ='R',
+                    fr="Cote minimum de la boite",
+                    ang="Minimum Z for the box"),
+      Z_MAXI = SIMP(statut='f',typ='R',
+                    fr="Cote maximum de la boite",
+                    ang="Maximum Z for the box"),
+#
+# 6.2.2. Une sphere
+#
+      X_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Abscisse du centre de la sphere",
+                      ang="X for the center of the sphere"),
+      Y_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Ordonnee du centre de la sphere",
+                      ang="Y for the center of the sphere"),
+      Z_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Cote du centre de la sphere",
+                      ang="Z for the center of the sphere"),
+      RAYON = SIMP(statut='f',typ='R',
+                   fr="Rayon de la sphere",
+                   ang="Radius of the sphere"),
+#
+    ) ,
+#
+  ) ,
+#
+# 9. Les niveaux extremes pour le maillage adapte
+# 9.1. Pour le raffinement :
+#
+  b_niveau_maximum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                         (ADAPTATION == 'RAFFINEMENT') or \
+                                         (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+                                         (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
                            fr="Niveau maximum de profondeur de raffinement",
                            ang="Maximum level for refinement",
-                           NIVE_MAX       = SIMP(statut='f',typ='I' ),
-                           ) ,
+    NIVE_MAX = SIMP(statut='f',typ='I',
+                    fr="Niveau maximum de profondeur de raffinement",
+                    ang="Maximum level for refinement"),
+  ) ,
 #
-# 5.5.2. Pour le deraffinement :
+# 9.2. Pour le deraffinement :
 #
-           b_niveau_minimum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) or \
-                                                  ( UNIFORME == 'DERAFFINEMENT' ) " ,
+  b_niveau_minimum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                         (ADAPTATION == 'DERAFFINEMENT') or \
+                                         (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
                            fr="Niveau minimum de profondeur de déraffinement",
                            ang="Minimum level for unrefinement",
-                           NIVE_MIN       = SIMP(statut='f',typ='I' ),
-                           ) ,
+    NIVE_MIN = SIMP(statut='f',typ='I',
+                    fr="Niveau minimum de profondeur de déraffinement",
+                    ang="Minimum level for unrefinement"),
+  ) ,
 #
-         ),
+# 10. Suivi d'une frontiere
 #
-# 6. Suivi d'une frontiere
-#
-         MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+  MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
                            fr="Maillage de la frontiere à suivre",
                            ang="Boundary mesh" ),
 #
-         b_frontiere   =BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
-                           fr="Groupes définissant la frontière",
-                           ang="Groups which define the boundary",
-                           GROUP_MA       = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
-                           ) ,
+  b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière",
+                      ang="Further information about boundary",
 #
-# 7. Mise à jour de champs sur le nouveau maillage
+    GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles définissant la frontière",
+                    ang="Mesh groups which define the boundary" ),
 #
-         MAJ_CHAM        =FACT(statut='f',max='**',
-                           fr="Mise à jour de champs sur le nouveau maillage.",
-                           ang="Updating of fields over the new mesh.",
+  ) ,
 #
-# 7.1. Le nom du champ qui contiendra le resultat de la mise a jour
+# 11. Mise à jour de champs sur le nouveau maillage
 #
-           CHAM_MAJ       = SIMP(statut='o',typ=CO,
-                           fr="Nom du champ qui contiendra le champ mis à jour",
-                           ang="Name of the field for the updated field"),
+  MAJ_CHAM = FACT(statut='f',max='**',
+                  fr="Mise à jour de champs sur le nouveau maillage.",
+                  ang="Updating of fields over the new mesh.",
 #
-# 7.2. Le type du champ qui contiendra le resultat de la mise a jour
+# 11.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour
 #
-           TYPE_CHAM      = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(),
-                           fr="Type du champ qui contiendra le champ mis à jour",
-                           ang="Type of the field for the updated field" ),
+    CHAM_MAJ = SIMP(statut='o',typ=CO,
+                    fr="Nom du champ de grandeur qui contiendra le champ mis à jour",
+                    ang="Name of the field for the updated field"),
 #
-# 7.3. Le champ a interpoler
+# 11.2. Le type du champ qui contiendra le resultat de la mise a jour
 #
-           regles=(UN_PARMI('CHAM_GD','RESULTAT')),
+    TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(),
+                     fr="Type du champ qui contiendra le champ mis à jour",
+                     ang="Type of the field for the updated field" ),
 #
-# 7.3.1. Sous forme de champ de grandeur
+# 11.3. Le champ a interpoler
 #
-           CHAM_GD        =SIMP(statut='f',typ=cham_gd_sdaster,
-                           fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour",
-                           ang="Champ de grandeur with field to be updated" ),
+    regles=(UN_PARMI('CHAM_GD','RESULTAT')),
 #
-# 7.3.2. Le nom du resultat du champ a interpoler
+# 11.3.1. Sous forme de champ de grandeur
 #
-           RESULTAT       = SIMP(statut='f',
-                                 typ=(evol_elas,evol_noli,evol_ther),
-                           fr="Resultat contenant le champ à mettre à jour",
-                           ang="Result with field to be updated" ),
+    CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster,
+                   fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour",
+                   ang="Champ de grandeur with field to be updated" ),
 #
-           NOM_CHAM       = SIMP(statut='f',typ='TXM',
-                           fr="Nom du champ à mettre à jour",
-                           ang="Name of the field to be updated" ),
+# 11.3.2. Sous forme de champ dans un resultat
 #
-# 7.4. Le paramètre temporel pour le champ a interpoler
+    RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
+                    fr="Resultat contenant le champ à mettre à jour",
+                    ang="Result with field to be updated" ),
 #
-                           b_parametre_temporel     =BLOC(condition="(RESULTAT != None)",
+    NOM_CHAM = SIMP(statut='f',typ='TXM',
+                    fr="Nom du champ à mettre à jour",
+                    ang="Name of the field to be updated" ),
 #
-                           regles=(EXCLUS('NUME_ORDRE','INST'),),
+# 11.4. Le paramètre temporel pour le champ a interpoler
 #
-# 7.4.1. Soit le numero d'ordre
+    b_parametre_temporel = BLOC(condition="(RESULTAT != None)",
+                                fr="Choix éventuel du paramètre temporel pour l'indicateur",
+                                ang="Time selection for error indicator (option)",
 #
-           NUME_ORDRE     = SIMP(statut='f',typ='I',
-                           fr="Numero d ordre du champ à mettre à jour",
-                           ang="Rank of the field to be updated" ),
+      regles=(EXCLUS('NUME_ORDRE','INST'),),
 #
-# 7.4.2. Soit l'instant
-# 7.4.2.1. Sa valeur
+# 11.4.1. Soit le numero d'ordre
 #
-           INST           = SIMP(statut='f',typ='R',
-                           fr="Instant associé",
-                           ang="Instant" ),
+      NUME_ORDRE = SIMP(statut='f',typ='I',
+                        fr="Numero d ordre du champ à mettre à jour",
+                        ang="Rank of the field to be updated" ),
 #
-# 7.4.2.2. La précision du choix de l'instant
+# 11.4.2. Soit l'instant
+# 11.4.2.1. Sa valeur
 #
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),),
+      INST = SIMP(statut='f',typ='R',
+                  fr="Instant associé",
+                  ang="Instant" ),
 #
-                                                         ),
-         ),
+# 11.4.2.2. La précision du choix de l'instant
 #
-# 8. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
-# 8.1. Nombre de noeuds et éléments
+      b_precision = BLOC(condition="(INST != None)",
+                         fr="Choix de la précision du choix de l'instant",
+                         ang="Selection for instant choice",
 #
-         NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+        PRECISION = SIMP(statut='f',typ='R',defaut=1.0E-3,
+                         fr="Précision sur le choix de l'instant associé",
+                         ang="Accuracy over instant choice" ),
+#
+        CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
+                       fr="Critère de précision sur le choix de l'instant associé",
+                       ang="Accuracy criterium over instant choice" ),
+#
+      ),
+#
+    ),
+  ),
+#
+# 12. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
+# 12.1. Nombre de noeuds et éléments
+#
+  NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
                           fr="Nombre de noeuds et éléments du maillage",
                           ang="Number of nodes and éléments in the mesh" ),
 #
-# 8.2. Determination de la qualité des éléments du maillage
+# 12.2. Determination de la qualité des éléments du maillage
 #
-         QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+  QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Qualité du maillage",
                           ang="Mesh quality" ),
 #
-# 8.3. Connexite du maillage
+# 12.3. Connexite du maillage
 #
-         CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+  CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Connexité du maillage.",
                           ang="Mesh connexity." ),
 #
-# 8.4. Taille des sous-domaines du maillage
+# 12.4. Taille des sous-domaines du maillage
 #
-         TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+  TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Tailles des sous-domaines du maillage.",
                           ang="Sizes of mesh sub-domains." ),
 #
-# 8.5. Controle de la non-interpenetration des éléments
+# 12.5. Controle de la non-interpenetration des éléments
 #
-         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+  INTERPENETRATION= SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Controle de la non interpénétration des éléments.",
                           ang="Overlapping checking." ),
 #
-)  ;
+# 13. Gestion des éléments autres que ceux compatibles avec HOMARD
+#       "REFUSER" : ils sont refuses (defaut)
+#       "IGNORER" : ils sont ignorés
+#
+  ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+                             fr="Acceptation d'éléments incompatibles avec HOMARD",
+                             ang="Incompatible elements for HOMARD" ),
+#
+) ;
 #& MODIF COMMANDE  DATE 07/10/2005   AUTEUR CIBHHPD L.SALMONA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -16420,7 +16238,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
     ),
     INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ),
 )  ;
-#& MODIF COMMANDE  DATE 07/11/2005   AUTEUR GNICOLAS G.NICOLA
+#& MODIF COMMANDE  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOI
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16449,80 +16267,82 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
 #
 # 1. Le niveau d'information
 #
-         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+  INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 #
 # 2. Version de HOMARD
 #
-         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V7_7",
-                               into=("V7_7", "V7_N", "V7_N_PERSO", "V8_N"),
-                           fr="Version de HOMARD",
-                           ang="HOMARD release"),
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_2",
+                        into=("V8_2", "V8_N", "V8_N_PERSO"),
+                        fr="Version de HOMARD",
+                        ang="HOMARD release"),
 #
 # 3. Langue des messages issus de HOMARD
 #
-         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
-                               into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
-                           fr="Langue des messages issus de HOMARD.",
-                           ang="Language for HOMARD messages." ),
+  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                fr="Langue des messages issus de HOMARD.",
+                ang="Language for HOMARD messages." ),
 #
-# 4. Gestion des éléments autres que des simplexes
-#       0 : autres elements refusés
-#       1 : analyse exclusivement sur les simplexes, mais autres éléments acceptés
-#       2 : tous (defaut)
+# 4. Le nom du maillage a analyser
 #
-         NON_SIMPLEXE   = SIMP(statut='f',typ='I',defaut=2,into=(0,1,2),
-                          fr="Acceptation d'éléments quad, hexa et penta",
-                          ang="quad, hexa and penta elements allowed" ),
+  MAILLAGE = SIMP(statut='o',typ=maillage_sdaster,
+                  fr="Maillage à analyser.",
+                  ang="Mesh to be checked." ),
 #
-# 5. Le nom du maillage a analyser
+# 5. Suivi d'une frontiere
 #
-         MAILLAGE       = SIMP(statut='o',typ=maillage_sdaster,
-                           fr="Maillage à analyser.",
-                           ang="Mesh to be checked." ),
-#
-# 6. Suivi d'une frontiere
-#
-         MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+  MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
                            fr="Maillage de la frontiere à suivre",
                            ang="Boundary mesh" ),
 #
-         b_frontiere   =BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
-                           fr="Groupes définissant la frontière",
-                           ang="Groups which define the boundary",
-                           GROUP_MA       = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
-                           ) ,
+  b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière",
+                      ang="Further information about boundary",
 #
-# 7. Les options ; par defaut, on ne fait que les nombres
-# 7.1. Nombre de noeuds et elements
+    GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Groupes de mailles définissant la frontière",
+                    ang="Mesh groups which define the boundary" ),
 #
-         NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Nombre de noeuds et éléments du maillage",
-                          ang="Number of nodes and elements in the mesh" ),
+                    ) ,
 #
-# 7.2. Determination de la qualite des elements du maillage
+# 6. Les options ; par defaut, on controle tout
+# 6.1. Nombre de noeuds et elements
 #
-         QUALITE        = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Qualité du maillage",
-                          ang="Mesh quality" ),
+  NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Nombre de noeuds et éléments du maillage",
+                        ang="Number of nodes and elements in the mesh" ),
 #
-# 7.3. Connexite du maillage
+# 6.2. Determination de la qualite des elements du maillage
 #
-         CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Connexité du maillage.",
-                          ang="Mesh connexity." ),
+  QUALITE        = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Qualité du maillage",
+                        ang="Mesh quality" ),
 #
-# 7.4. Taille des sous-domaines du maillage
+# 6.3. Connexite du maillage
 #
-         TAILLE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Tailles des sous-domaines du maillage.",
-                          ang="Sizes of mesh sub-domains." ),
+  CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Connexité du maillage.",
+                        ang="Mesh connexity." ),
 #
-# 7.5. Controle de la non-interpenetration des elements
+# 6.4. Taille des sous-domaines du maillage
 #
-         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
-                          fr="Controle de la non interpénétration des éléments.",
-                          ang="Overlapping checking." ),
+  TAILLE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Tailles des sous-domaines du maillage.",
+                        ang="Sizes of mesh sub-domains." ),
+#
+# 6.5. Controle de la non-interpenetration des elements
+#
+  INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Controle de la non interpénétration des éléments.",
+                        ang="Overlapping checking." ),
 #
+# 7. Gestion des éléments autres que ceux compatibles avec HOMARD
+#       "REFUSER" : ils sont refuses (defaut)
+#       "IGNORER" : ils sont ignorés
+#
+  ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+                             fr="Acceptation d'éléments incompatibles avec HOMARD",
+                             ang="Incompatible elements for HOMARD" ),
 )  ;
 #& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETTE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -19629,7 +19449,7 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
            UNITE           =SIMP(statut='f',typ='I',defaut=15),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 13/03/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19656,8 +19476,8 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
                    UIinfo={"groupes":("Impression",)},
                    fr="Tester la non régression de fichiers produits par des commandes aster",
    FICHIER          =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
-   NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut=6),
-   EPSILON         =SIMP(statut='f',typ='R',defaut=1.E-14),
+   NB_CHIFFRE      =SIMP(statut='o',typ='I',),   # defaut=6        pas de defaut, il faut
+   EPSILON         =SIMP(statut='o',typ='R',),   # defaut=1.E-12   se poser la question !
    EXPR_IGNORE     =SIMP(statut='f',typ='TXM',max='**',
                          fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
    VALE_K          =SIMP(statut='o',typ='TXM' ),
@@ -23631,7 +23451,7 @@ LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
          UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),
 )  ;
 
-#& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 22/05/2006   AUTEUR REZETTE C.REZETTE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
index ba405c00dbd7f3aaec56f6a7b68630e456255ce9..29ffc1de2574d405928316a5d4f01799010c5b89 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_SENSIBILITE Noyau  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_SENSIBILITE Noyau  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
index e55e8d7de0a4488d91c19c25cbc177d1e2e70122..00b8209102a2eff648d69493171d022079b41ace 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MCCOMPO Validation  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_MCCOMPO Validation  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================