Salome HOME
CCAR: merge du developpement realise dans la branche BR_PN_VAL
authoreficas <>
Thu, 16 Oct 2003 14:31:22 +0000 (14:31 +0000)
committereficas <>
Thu, 16 Oct 2003 14:31:22 +0000 (14:31 +0000)
qui intégre les validateurs

53 files changed:
Aster/Cata/Macro/calc_precont_ops.py
Aster/Cata/Macro/macr_adap_mail_ops.py
Aster/Cata/Macro/macro_miss_3d_ops.py
Aster/Cata/cata_STA7.py
Aster/Cata/cata_reduit.py [new file with mode: 0755]
Aster/Cata/ops.py
Aster/NEWS
Aster/Tests/err.comm
Editeur/Objecttreeitem.py
Editeur/appli.py
Editeur/componuplet.py
Editeur/composimp.py
Editeur/utils.py
Editeur/widgets.py
Ihm/I_ETAPE.py
Ihm/I_JDC_CATA.py
Ihm/I_MACRO_ETAPE.py
Ihm/I_MCSIMP.py
Ihm/I_PROC_ETAPE.py
Ihm/I_VALIDATOR.py
Minicode/Test2/deb1.comm
Minicode/Test3/main.comm
Minicode/cata_saturne.py
Minicode/cata_saturne2.py
Minicode/ops.py
Noyau/N_BLOC.py
Noyau/N_CR.py
Noyau/N_ETAPE.py
Noyau/N_FACT.py
Noyau/N_JDC.py
Noyau/N_JDC_CATA.py
Noyau/N_MACRO.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_MCCOMPO.py
Noyau/N_OBJECT.py
Noyau/N_OPER.py
Noyau/N_PROC.py
Noyau/N_PROC_ETAPE.py
Noyau/N_REGLE.py
Noyau/N_SIMP.py
Noyau/nommage.py
Validation/V_ENSEMBLE.py
Validation/V_ETAPE.py
Validation/V_EXCLUS.py
Validation/V_JDC.py
Validation/V_MACRO_ETAPE.py
Validation/V_MCBLOC.py
Validation/V_MCFACT.py
Validation/V_MCLIST.py
Validation/V_MCSIMP.py
Validation/V_PRESENT_ABSENT.py
Validation/V_PRESENT_PRESENT.py
Validation/V_PROC_ETAPE.py

index 4d3a97767e8e4ba55472629c85bcb2f9b3cc3111..bb42a62ce7ac25f0851aaad3e17661dc8a12eed6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_precont_ops Macro  DATE 01/04/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF calc_precont_ops Macro  DATE 15/09/2003   AUTEUR ASSIRE A.ASSIRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -31,6 +31,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   import copy
   import aster
   import string
+  import types
   from Accas import _F
   from Noyau.N_utils import AsType
   ier=0
@@ -178,6 +179,17 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   #     Recuperation des cables dans les concepts CABLE_BP
   #     et CABLE_BP_INACTIF
   # ------------------------------------------------------
+  if type(CABLE_BP) is not types.NoneType:
+    if type(CABLE_BP) is not types.TupleType:
+      CABLE_BP0 = CABLE_BP
+      CABLE_BP = []
+      CABLE_BP.append ( CABLE_BP0 )
+
+  if type(CABLE_BP_INACTIF) is not types.NoneType:
+    if type(CABLE_BP_INACTIF) is not types.TupleType:
+      CABLE_BP_INACTIF0 = CABLE_BP_INACTIF
+      CABLE_BP_INACTIF = []
+      CABLE_BP_INACTIF.append ( CABLE_BP_INACTIF0 )
 
   motscles={}
   motscles['RELA_CINE_BP']=[]
index 0561942e1653e785cebc78a45c8d81b63f94f614..cccf5c783dd1fd0adce021cefa8f668196774ccd 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_adap_mail_ops Macro  DATE 01/07/2003   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF macr_adap_mail_ops Macro  DATE 13/10/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -45,10 +45,12 @@ def macr_adap_mail_ops ( self,
 #     est conservé dans la liste Liste_Passages. Cette liste est nécessairement globale pour pouvoir
 #     la retrouver à chaque nouveau passage.
 #     Description du dictionnaire de passages :
-#        dico['Maillage_0']          = o ; string ; nom du concept du maillage initial de la série d'adaptation
-#        dico['Maillage_NP1']        = o ; string ; nom du concept du dernier maillage adapté
-#        dico['Rep_Calc_HOMARD'] = o ; string ; Nom du répertoire de calcul pour HOMARD
-#        dico['niter']               = o ; entier ; numéro d'itération
+#        dico['Maillage_0']             = o ; string ; nom du concept du maillage initial de la série d'adaptation
+#        dico['Maillage_NP1']           = o ; string ; nom du concept du dernier maillage adapté
+#        dico['Rep_Calc_HOMARD_global'] = o ; string ; Nom global du répertoire de calcul pour HOMARD
+#        dico['Rep_Calc_HOMARD_local']  = o ; string ; Nom local du répertoire de calcul pour HOMARD
+#                                                      depuis le répertoire de calcul pour ASTER
+#        dico['niter']                  = o ; entier ; numéro d'itération
 #
 #  3. Les caractéristiques d'un maillage sont conservées dans un dictionnaire. Il y a autant de
 #     dictionnaires que de maillages manipulés. L'ensemble de ces dictionnaires est conservé
@@ -242,8 +244,10 @@ def macr_adap_mail_ops ( self,
 #
   niter = 0
   Nom_Rep_local = Nom_Concept_Maillage_N + "_" + modhom + "_" + str(Numero_Passage_Fonction)
-  Rep_Calc_HOMARD = os.path.join(Rep_Calc_ASTER,Nom_Rep_local)
-###  print "Rep_Calc_HOMARD = ", Rep_Calc_HOMARD
+  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 :
 #
@@ -258,7 +262,8 @@ def macr_adap_mail_ops ( self,
     for dico in Liste_Passages :
       if ( dico['Maillage_NP1'] == Nom_Concept_Maillage_N ) :
         niter   = dico['niter'] + 1
-        Rep_Calc_HOMARD = dico['Rep_Calc_HOMARD']
+        Rep_Calc_HOMARD_local  = dico['Rep_Calc_HOMARD_local']
+        Rep_Calc_HOMARD_global = dico['Rep_Calc_HOMARD_global']
 #
 # 3.2.2.2. ==> Memorisation de ce passage
 #
@@ -268,7 +273,8 @@ def macr_adap_mail_ops ( self,
       dico = {}
       dico['Maillage_0']   = Nom_Concept_Maillage_N
       dico['Maillage_NP1'] = Nom_Concept_Maillage_NP1
-      dico['Rep_Calc_HOMARD']      = Rep_Calc_HOMARD
+      dico['Rep_Calc_HOMARD_local']  = Rep_Calc_HOMARD_local
+      dico['Rep_Calc_HOMARD_global'] = Rep_Calc_HOMARD_global
       dico['niter']        = niter
       Liste_Passages.append(dico)
 #
@@ -283,7 +289,7 @@ def macr_adap_mail_ops ( self,
         L.append(dico)
       Liste_Passages = L
 #
-###  print "niter = ", niter, ", Rep_Calc_HOMARD = ", Rep_Calc_HOMARD
+###  print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
 #
 #--------------------------------------------------------------------
 # 4. Ecriture des commandes
@@ -296,10 +302,10 @@ def macr_adap_mail_ops ( self,
   if ( niter == 0 ) :
 #
     try :
-      os.mkdir(Rep_Calc_HOMARD)
+      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("Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD)
+      self.cr.fatal("Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD_global)
       codret = codret + 1
 #
 # 4.2. ==> Ecriture des commandes de creation des donnees MED
@@ -326,7 +332,7 @@ def macr_adap_mail_ops ( self,
   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))
   Nom_Symbolique_Fichier_ASTER_vers_HOMARD = "ASTER_to_HOMARD"
-  Fichier_HOMARD_Entree = os.path.join(Rep_Calc_HOMARD,"MAILL."+str(niter)+".MED")
+  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 :
@@ -341,7 +347,7 @@ def macr_adap_mail_ops ( self,
   if ( modhom == "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,"MAILL."+str(niter+1)+".MED")
+    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 :
@@ -502,15 +508,17 @@ def macr_adap_mail_ops ( self,
 #
   dico = {}
 #
-  Fichier_Configuration = os.path.join(Rep_Calc_HOMARD,'HOMARD.Configuration')
+  Nom_Fichier_Configuration = 'HOMARD.Configuration'
+  Fichier_Configuration = os.path.join(Rep_Calc_HOMARD_local,'HOMARD.Configuration')
 #                                 1234567890123456
   dico[Fichier_Configuration] = ('HOMARD_CONFIG','FICHIER_CONF',unite)
 #
   if ( modhom != "ADAP" ) :
     unite = unite + 1
-    Fichier_Donnees = os.path.join(Rep_Calc_HOMARD,'HOMARD.Donnees')
+    Nom_Fichier_Donnees = 'HOMARD.Donnees'
+    Fichier_Donnees = os.path.join(Rep_Calc_HOMARD_local,Nom_Fichier_Donnees)
 #                             1234567890123456
-    dico[Fichier_Donnees] = ('HOMARD_DONNEES','FICHIER_DONN',unite)
+    dico[Fichier_Donnees] = ('HOMARD_DONN','FICHIER_DONN',unite)
 #
 # 4.3.3.2. ==> L'ouverture de ces fichiers
 #
@@ -537,7 +545,7 @@ def macr_adap_mail_ops ( self,
 #              Remarque : aujourd'hui on est obligé de passer par le numéro d'unité logique
 #
   for fic in dico.keys() :
-    DEFI_FICHIER ( ACTION= "LIBERER", NOM_SYSTEME = fic, UNITE = dico[fic][2], INFO = INFO )
+    DEFI_FICHIER ( ACTION= "LIBERER", UNITE = dico[fic][2], INFO = INFO )
 #
 # 4.4. ==> Ecriture de la commande d'exécution de homard
 #    Remarque : dans la donnée de la version de HOMARD, il faut remplacer
@@ -556,12 +564,12 @@ def macr_adap_mail_ops ( self,
     VERSION_HOMARD=VERSION_HOMARD[:-6]
 #
   if ( modhom == "ADAP" ) :
-    Fichier_Donnees = '0'
+    Nom_Fichier_Donnees = '0'
 #
-  EXEC_LOGICIEL ( ARGUMENT = (_F(NOM_PARA=Rep_Calc_HOMARD), # nom du repertoire
+  EXEC_LOGICIEL ( ARGUMENT = (_F(NOM_PARA=Rep_Calc_HOMARD_global), # nom du repertoire
                               _F(NOM_PARA=VERSION_HOMARD),  # version de homard
                               _F(NOM_PARA=str(INFO)),       # niveau d information
-                              _F(NOM_PARA=Fichier_Donnees), # fichier de données HOMARD
+                              _F(NOM_PARA=Nom_Fichier_Donnees), # fichier de données HOMARD
                              ),
                   LOGICIEL = homard
                 )
@@ -610,7 +618,7 @@ def macr_adap_mail_ops ( self,
 # 5. Menage des fichiers MED et HOMARD devenus inutiles
 #--------------------------------------------------------------------
 #
-  fic = os.path.join(Rep_Calc_HOMARD,"MAILL."+str(niter)+".HOM")
+  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.append(Fichier_HOMARD_vers_ASTER)
@@ -633,7 +641,7 @@ def macr_adap_mail_ops ( self,
         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)
+###  print os.listdir(Rep_Calc_HOMARD_global)
 #
 #--------------------------------------------------------------------
 # 6. C'est fini !
index d3367203fc0611e91b32dca3aaf607cf40b0e644..55b83d9e1bf78855469fc7599ca4a286405cf756 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_miss_3d_ops Macro  DATE 20/01/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF macro_miss_3d_ops Macro  DATE 29/09/2003   AUTEUR ACBHHCD G.DEVESA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -44,7 +44,7 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
   if OPTION['TOUT']!=None:
       MODUL2='COMPLET'
   elif OPTION['MODULE']=='MISS_IMPE':
-      MODUL2='MISS_IMPE'
+      MODUL2='CALC_IMPE'
   elif OPTION['MODULE']=='MISS_EVOL':
       MODUL2='MISS_PTAS'
   elif OPTION['MODULE']=='PRE_MISS':
index 1dc9e02f057a08c5b952ad54a0ae07cbb2f1f562..1fa56710b04eac7d91832c6d017d3c6fef42af6a 100755 (executable)
@@ -1,20 +1,20 @@
-#& MODIF ENTETE  DATE 02/06/2003   AUTEUR F1BHHAJ J.ANGLES 
+#& MODIF ENTETE  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            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.                                 
+# 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.                            
+# 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.      
+# 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.
 # ======================================================================
 import Accas
 from Accas import *
@@ -30,7 +30,7 @@ except:
 
 #
 __version__="$Name:  $"
-__Id__="$Id: cata_STA7.py,v 1.2.2.1 2003/09/18 10:21:39 eficas Exp $"
+__Id__="$Id: cata_STA7.py,v 1.3.2.1 2003/10/15 15:11:51 eficas Exp $"
 #
 JdC = JDC_CATA(code='ASTER',
                execmodul=None,
@@ -93,7 +93,7 @@ class listr8   (ASSD):
     """ retourne la liste des valeurs [ val1, ...] """
     vale=string.ljust(self.get_name(),19)+'.VALE'
     return list(aster.getvectjev(vale))
-   
+
 
 
 # maillage :
@@ -107,8 +107,8 @@ class maillage(ASSD):
     """ retourne la liste des groupes de mailles sous la forme :
         [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
     return aster.GetMaillage(self.get_name(), "GROUP_MA")
-    
-    
+
+
 class squelette     (maillage):pass
 
 
@@ -225,6 +225,8 @@ class resultat(ASSD):
     return aster.GetResu(self.get_name(), "COMPOSANTES")
   def LIST_VARI_ACCES (self) :
     return aster.GetResu(self.get_name(), "VARI_ACCES")
+  def LIST_PARA (self) :
+    return aster.GetResu(self.get_name(), "PARAMETRES")
 
 class acou_harmo    (resultat):pass
 class base_modale     (resultat):pass
@@ -293,14 +295,18 @@ class nappe(fonction):pass
 # matr_asse :
 #--------------------------------
 class matr_asse(ASSD):pass
-class matr_asse_depl_c(matr_asse):pass
-class matr_asse_depl_r(matr_asse):pass
-class matr_asse_gene_r(matr_asse):pass
-class matr_asse_gene_c(matr_asse):pass
-class matr_asse_pres_c(matr_asse):pass
-class matr_asse_pres_r(matr_asse):pass
-class matr_asse_temp_c(matr_asse):pass
-class matr_asse_temp_r(matr_asse):pass
+
+class matr_asse_gene(matr_asse):pass
+class matr_asse_gene_r(matr_asse_gene):pass
+class matr_asse_gene_c(matr_asse_gene):pass
+
+class matr_asse_gd(matr_asse):pass
+class matr_asse_depl_c(matr_asse_gd):pass
+class matr_asse_depl_r(matr_asse_gd):pass
+class matr_asse_pres_c(matr_asse_gd):pass
+class matr_asse_pres_r(matr_asse_gd):pass
+class matr_asse_temp_c(matr_asse_gd):pass
+class matr_asse_temp_r(matr_asse_gd):pass
 
 # matr_elem :
 #--------------------------------
@@ -321,7 +327,7 @@ class table(ASSD):
       requete=string.ljust(key[0],24)
       tblp=string.ljust(self.get_name(),19)+'.TBLP'
       tabnom=list(aster.getvectjev(tblp))
-      for i in range(len(tabnom)) : 
+      for i in range(len(tabnom)) :
          if tabnom[i]==requete: break
       resu=aster.getvectjev(tabnom[i+2])
       if key[1]>len(resu) : raise KeyError
@@ -642,7 +648,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
          ) ;
 
-#& MODIF COMMUN  DATE 17/06/2003   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMUN  DATE 16/09/2003   AUTEUR JMBHH01 J.M.PROIX 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -760,6 +766,7 @@ def C_NOM_CHAM_INTO() : return  ("ACCE",    #COMMUN#
                         "META_ELGA_TEMP",
                         "META_ELNO_TEMP",
                         "META_NOEU_TEMP",
+                        "MODE_FLAMB",
                         "PMPB_ELGA_SIEF",
                         "PMPB_ELNO_SIEF",
                         "PMPB_NOEU_SIEF",
@@ -1292,7 +1299,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 29/09/2003   AUTEUR CIBHHPD D.NUNEZ 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1611,6 +1618,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                         EXCLUS('DIST_1','COEF_IMPO'),),
                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
                 b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                  fr="Paramètre de la réactualisation géométrique",
@@ -1627,7 +1635,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
            b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
                                  fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ), 
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
                 b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                  fr="Paramètre de la réactualisation géométrique",
@@ -1647,6 +1656,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
                 E_N             =SIMP(statut='f',typ='R'), 
                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
                 b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                  fr="Paramètre de la réactualisation géométrique",
@@ -2061,7 +2071,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 29/09/2003   AUTEUR CIBHHPD D.NUNEZ 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2231,6 +2241,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                         EXCLUS('DIST_1','COEF_IMPO'),),
                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
                 b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                  fr="Paramètre de la réactualisation géométrique",
@@ -2247,7 +2258,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
                                  fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ), 
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
                 b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                  fr="Paramètre de la réactualisation géométrique",
@@ -2266,7 +2278,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                                       fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
                 NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
                 E_N             =SIMP(statut='f',typ='R'), 
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ), 
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
                 b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                  fr="Paramètre de la réactualisation géométrique",
@@ -3007,7 +3020,7 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
          ),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 29/09/2003   AUTEUR JMBHH01 J.M.PROIX 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3144,7 +3157,8 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
                                                                       "POU_D_TGM",
                                                                       "Q4G",
                                                                       "TUYAU_3M",
-                                                                      "TUYAU_6M"
+                                                                      "TUYAU_6M",
+                                                                      "SHB8"
                                                                      )  )  ),
 
                 b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
@@ -6305,6 +6319,49 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
 
 )  ;
 
+#& MODIF COMMANDE  DATE 16/09/2003   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  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.        
+# ======================================================================
+CREA_TABLE=OPER(nom="CREA_TABLE",op=  36,sd_prod=table,
+                fr="Creation d'une table a partir d'une fonction ou de deux listes",
+                reentrant='n',docu='U4.99.99',UIinfo={"groupes":("Table",)},
+
+           regles=(EXCLUS('FONCTION','LISTE')),
+
+           FONCTION=FACT(statut='f',min=1,max=1,
+                    fr="Creation d'une table a partir d'une fonction",
+                        FONCTION=SIMP(statut='o',typ=fonction),
+                        PARA=SIMP(statut='f',typ='TXM',min=2,max=2)),  
+
+           LISTE=FACT(statut='f',min=2,max=2,
+                 fr="Creation d'une table a partir de deux listes",
+                 regles=(UN_PARMI('LISTE_I','LISTE_R','LISTE_K')), 
+                        PARA=SIMP(statut='o',typ='TXM'),
+                        TYPE_K=SIMP(statut='f',typ='TXM',defaut='K8',
+                                    into=('K8','K16','K24')),
+                        LISTE_I=SIMP(statut='f',typ='I',max='**'),
+                        LISTE_R=SIMP(statut='f',typ='R',max='**'),
+                        LISTE_K=SIMP(statut='f',typ='TXM', max='**')),
+)  ;
+
+
+
+
 #& MODIF COMMANDE  DATE 06/09/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -6620,7 +6677,7 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-f",r
          ),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 10/10/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6643,16 +6700,22 @@ DEFI_FICHIER=PROC(nom="DEFI_FICHIER",op=26,docu="U4.12.03-a",
                   UIinfo={"groupes":("Gestion du travail",)},
                   fr="Gestion d une unité logique : ajout, suppression",
 
-            regles=(AU_MOINS_UN('NOM_SYSTEME','FICHIER'),),
             ACTION        =SIMP(statut='f',typ='TXM',into=("ASSOCIER","LIBERER"),defaut="ASSOCIER"),
-            FICHIER       =SIMP(statut='f',typ='TXM'),
             UNITE         =SIMP(statut='o',typ='I' ,val_min=1),
-            NOM_SYSTEME   =SIMP(statut='f',typ='TXM'),      
-            TYPE          =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
-            ACCES         =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
-
+            b_associer    =BLOC(condition = "ACTION == 'ASSOCIER'",fr="Paramètres pour l ouverture du fichier",
+               TYPE          =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
+               b_type_ascii  =BLOC(condition = "TYPE == 'ASCII'",fr="Paramètres pour le type ASCII",
+                  NOM_SYSTEME   =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+                  FICHIER       =SIMP(statut='o',typ='TXM'),
+               ),
+               b_type_autre  =BLOC(condition = "TYPE != 'ASCII'",fr="Paramètres pour les types BINARY et LIBRE",
+                  regles=(AU_MOINS_UN('NOM_SYSTEME','FICHIER'),),
+                  NOM_SYSTEME   =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+                  FICHIER       =SIMP(statut='f',typ='TXM'),
+               ),
+               ACCES         =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
+            ),
             INFO          =SIMP(statut='f',typ='I',into=(1,2) ),           
-           
            )
 
 #& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
@@ -7443,7 +7506,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
          ),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7494,7 +7557,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement élastique
 #
-           ELAS            =FACT(statut='f',min=0,
+           ELAS            =FACT(statut='f',
              E               =SIMP(statut='o',typ='R',val_min=0.E+0),
              NU              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
              RHO             =SIMP(statut='f',typ='R'),
@@ -7503,7 +7566,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AMOR_BETA       =SIMP(statut='f',typ='R'),
              AMOR_HYST       =SIMP(statut='f',typ='R'),
            ),
-           ELAS_FO         =FACT(statut='f',min=0,
+           ELAS_FO         =FACT(statut='f',
              regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),),
              E               =SIMP(statut='o',typ=(fonction,formule)),
              NU              =SIMP(statut='o',typ=(fonction,formule)),
@@ -7522,7 +7585,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
              VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
            ),
-           ELAS_FLUI       =FACT(statut='f',min=0,
+           ELAS_FLUI       =FACT(statut='f',
              E               =SIMP(statut='o',typ='R'),
              NU              =SIMP(statut='o',typ='R'),
              RHO             =SIMP(statut='o',typ='R'),
@@ -7531,7 +7594,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COEF_MASS_AJOU  =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="ABSC",into=("ABSC",) ),
            ),
-           ELAS_ISTR       =FACT(statut='f',min=0,
+           ELAS_ISTR       =FACT(statut='f',
              E_L             =SIMP(statut='o',typ='R'),
              E_N             =SIMP(statut='o',typ='R'),
              NU_LT           =SIMP(statut='o',typ='R'),
@@ -7541,7 +7604,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ELAS_ISTR_FO    =FACT(statut='f',min=0,
+           ELAS_ISTR_FO    =FACT(statut='f',
              regles=(
                       PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
                       PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
@@ -7558,7 +7621,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_N         =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST")),
            ),
-           ELAS_ORTH       =FACT(statut='f',min=0,
+           ELAS_ORTH       =FACT(statut='f',
              E_L             =SIMP(statut='o',typ='R'),
              E_T             =SIMP(statut='o',typ='R'),
              E_N             =SIMP(statut='f',typ='R'),
@@ -7578,7 +7641,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              YC              =SIMP(statut='f',typ='R',defaut= 1. ),
              S_LT            =SIMP(statut='f',typ='R',defaut= 1. ),
            ),
-           ELAS_ORTH_FO    =FACT(statut='f',min=0,
+           ELAS_ORTH_FO    =FACT(statut='f',
              regles=(
                       PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
                       PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
@@ -7601,7 +7664,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_N         =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
            ),
-           ELAS_THM        =FACT(statut='f',min=0,
+           ELAS_THM        =FACT(statut='f',
              RHO_S           =SIMP(statut='o',typ='R'),
              UN_SUR_KS       =SIMP(statut='o',typ='R'),
              E               =SIMP(statut='f',typ='R'),
@@ -7610,7 +7673,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_S         =SIMP(statut='f',typ='R'),
              ALPHA_D         =SIMP(statut='f',typ='R'),
            ),
-           SURF_ETAT_SATU  =FACT(statut='f',min=0,
+           SURF_ETAT_SATU  =FACT(statut='f',
              E_CHAR          =SIMP(statut='o',typ='R'),
              E_DECHAR        =SIMP(statut='o',typ='R'),
              XN              =SIMP(statut='f',typ='R'),
@@ -7627,7 +7690,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COHE            =SIMP(statut='o',typ='R'),
              RESI_TRAC       =SIMP(statut='o',typ='R'),
            ),
-           CAM_CLAY_THM    =FACT(statut='f',min=0,
+           CAM_CLAY_THM    =FACT(statut='f',
              NU              =SIMP(statut='f',typ='R'),
              LAMBDA          =SIMP(statut='o',typ='R'),
              KAPA            =SIMP(statut='o',typ='R'),
@@ -7643,7 +7706,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA3_PC       =SIMP(statut='f',typ='R'),
              ALPHA_S         =SIMP(statut='f',typ='R'),
                          ),
-           SURF_ETAT_NSAT  =FACT(statut='f',min=0,
+           SURF_ETAT_NSAT  =FACT(statut='f',
              E_CHAR          =SIMP(statut='o',typ='R'),
              E_DECHAR        =SIMP(statut='o',typ='R'),
              XN              =SIMP(statut='f',typ='R'),
@@ -7667,7 +7730,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_SURF_SATU     =SIMP(statut='f',typ='R'),
              D_SURF_SATU     =SIMP(statut='f',typ='R'),
            ),
-           ELAS_COQUE      =FACT(statut='f',min=0,
+           ELAS_COQUE      =FACT(statut='f',
              regles=(EXCLUS('MEMB_L','M_LLLL',),
                      PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
                                      'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
@@ -7723,7 +7786,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              RHO             =SIMP(statut='f',typ='R'),
              ALPHA           =SIMP(statut='f',typ='R'),
            ),
-           ELAS_COQUE_FO   =FACT(statut='f',min=0,
+           ELAS_COQUE_FO   =FACT(statut='f',
              regles=(EXCLUS('MEMB_L','M_LLLL',),
                      PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
                                      'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
@@ -7779,11 +7842,11 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA           =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST") ),
            ),
-           APPUI_ELAS      =FACT(statut='f',min=0,
+           APPUI_ELAS      =FACT(statut='f',
              E_N             =SIMP(statut='o',typ='R'),
              E_TAN           =SIMP(statut='f',typ='R',defaut= 0.E+0),
            ),
-           CABLE           =FACT(statut='f',min=0,
+           CABLE           =FACT(statut='f',
              E               =SIMP(statut='o',typ='R'),
              EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
              RHO             =SIMP(statut='f',typ='R'),
@@ -7794,41 +7857,41 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement mécanique non linéaire
 #
-           TRACTION        =FACT(statut='f',min=0,
+           TRACTION        =FACT(statut='f',
              SIGM            =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
              VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
            ),
-           ECRO_LINE       =FACT(statut='f',min=0,
+           ECRO_LINE       =FACT(statut='f',
              D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
              SY              =SIMP(statut='o',typ='R'),
            ),
-           ECRO_LINE_FO    =FACT(statut='f',min=0,
+           ECRO_LINE_FO    =FACT(statut='f',
              D_SIGM_EPSI     =SIMP(statut='o',typ=(fonction,formule)),
              SY              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           BETON_ECRO_LINE =FACT(statut='f',min=0,
+           BETON_ECRO_LINE =FACT(statut='f',
              D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
              SYT             =SIMP(statut='o',typ='R'),
              SYC             =SIMP(statut='f',typ='R'),
            ),
-           PRAGER          =FACT(statut='f',min=0,
+           PRAGER          =FACT(statut='f',
              C               =SIMP(statut='o',typ='R'),
            ),
-           PRAGER_FO       =FACT(statut='f',min=0,
+           PRAGER_FO       =FACT(statut='f',
              C               =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ECRO_FLEJOU     =FACT(statut='f',min=0,
+           ECRO_FLEJOU     =FACT(statut='f',
              EP              =SIMP(statut='o',typ='R'),
              SY              =SIMP(statut='o',typ='R'),
              SU              =SIMP(statut='o',typ='R'),
              PUISS           =SIMP(statut='o',typ='R'),
            ),
-           TAHERI          =FACT(statut='f',min=0,
+           TAHERI          =FACT(statut='f',
              R_0             =SIMP(statut='o',typ='R'),
              ALPHA           =SIMP(statut='o',typ='R'),
              M               =SIMP(statut='o',typ='R'),
@@ -7838,7 +7901,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_INF           =SIMP(statut='o',typ='R'),
              S               =SIMP(statut='o',typ='R'),
            ),
-           TAHERI_FO       =FACT(statut='f',min=0,
+           TAHERI_FO       =FACT(statut='f',
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              ALPHA           =SIMP(statut='o',typ=(fonction,formule)),
              M               =SIMP(statut='o',typ=(fonction,formule)),
@@ -7849,7 +7912,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              S               =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ROUSSELIER      =FACT(statut='f',min=0,
+           ROUSSELIER      =FACT(statut='f',
              D               =SIMP(statut='o',typ='R'),
              SIGM_1          =SIMP(statut='o',typ='R'),
              PORO_INIT       =SIMP(statut='o',typ='R'),
@@ -7859,7 +7922,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
              AN              =SIMP(statut='f',typ='R',defaut= 0. ),
            ),
-           ROUSSELIER_FO   =FACT(statut='f',min=0,
+           ROUSSELIER_FO   =FACT(statut='f',
              D               =SIMP(statut='o',typ=(fonction,formule)),
              SIGM_1          =SIMP(statut='o',typ=(fonction,formule)),
              PORO_INIT       =SIMP(statut='o',typ=(fonction,formule)),
@@ -7870,12 +7933,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AN              =SIMP(statut='f',typ='R',defaut= 0. ),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ROUSS_VISC      =FACT(statut='f',min=0,
+           ROUSS_VISC      =FACT(statut='f',
              SIGM_0          =SIMP(statut='o',typ='R'),
              EPSI_0          =SIMP(statut='o',typ='R'),
              M               =SIMP(statut='o',typ='R'),
            ),
-           CHABOCHE        =FACT(statut='f',min=0,
+           CHABOCHE        =FACT(statut='f',
              R_I             =SIMP(statut='o',typ='R'),
              R_0             =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
@@ -7886,7 +7949,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C1              =SIMP(statut='o',typ='R'),
              C2              =SIMP(statut='o',typ='R'),
            ),
-           CIN1_CHAB  =FACT(statut='f',min=0,
+           CIN1_CHAB  =FACT(statut='f',
              R_0             =SIMP(statut='o',typ='R'),
              R_I             =SIMP(statut='f',typ='R'),
              B               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
@@ -7896,7 +7959,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              G_0             =SIMP(statut='o',typ='R'),
              A_I             =SIMP(statut='f',typ='R',defaut= 1.0E+0),
            ),
-           CIN1_CHAB_FO  =FACT(statut='f',min=0,
+           CIN1_CHAB_FO  =FACT(statut='f',
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              R_I             =SIMP(statut='o',typ=(fonction,formule)),
              B               =SIMP(statut='o',typ=(fonction,formule)),
@@ -7907,7 +7970,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_I             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           CIN2_CHAB  =FACT(statut='f',min=0,
+           CIN2_CHAB  =FACT(statut='f',
              R_0             =SIMP(statut='o',typ='R'),
              R_I             =SIMP(statut='f',typ='R'),
              B               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -7919,7 +7982,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              G2_0            =SIMP(statut='o',typ='R'),
              A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
            ),
-           CIN2_CHAB_FO  =FACT(statut='f',min=0,
+           CIN2_CHAB_FO  =FACT(statut='f',
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              R_I             =SIMP(statut='o',typ=(fonction,formule)),
              B               =SIMP(statut='o',typ=(fonction,formule)),
@@ -7932,7 +7995,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_I             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           VISCOCHAB       =FACT(statut='f',min=0,
+           VISCOCHAB       =FACT(statut='f',
              K_0             =SIMP(statut='o',typ='R'),
              A_K             =SIMP(statut='o',typ='R'),
              A_R             =SIMP(statut='o',typ='R'),
@@ -7959,7 +8022,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              G2_0            =SIMP(statut='o',typ='R'),
              A_I             =SIMP(statut='o',typ='R'),
            ),
-           VISCOCHAB_FO    =FACT(statut='f',min=0,
+           VISCOCHAB_FO    =FACT(statut='f',
              K_0             =SIMP(statut='o',typ=(fonction,formule)),
              A_K             =SIMP(statut='o',typ=(fonction,formule)),
              A_R             =SIMP(statut='o',typ=(fonction,formule)),
@@ -7987,7 +8050,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_I             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           POLY_CFC        =FACT(statut='f',min=0,
+           POLY_CFC        =FACT(statut='f',
              TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
              DL              =SIMP(statut='f',typ='R'),
              DA              =SIMP(statut='f',typ='R'),
@@ -8003,7 +8066,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D1              =SIMP(statut='o',typ='R'),
              C2              =SIMP(statut='o',typ='R'),
            ),
-           POLY_CFC_FO     =FACT(statut='f',min=0,
+           POLY_CFC_FO     =FACT(statut='f',
              TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
              DL              =SIMP(statut='o',typ=(fonction,formule)),
              DA              =SIMP(statut='o',typ=(fonction,formule)),
@@ -8020,40 +8083,40 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C2              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           LEMAITRE        =FACT(statut='f',min=0,
+           LEMAITRE        =FACT(statut='f',
              N               =SIMP(statut='o',typ='R'),
              UN_SUR_K        =SIMP(statut='o',typ='R'),
              UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ZIRC_CYRA2      =FACT(statut='f',min=0,
+           ZIRC_CYRA2      =FACT(statut='f',
              EPSI_FAB        =SIMP(statut='o',typ=(fonction,formule)),
              TEMP_RECUIT     =SIMP(statut='o',typ=(fonction,formule)),
              FLUX_PHI        =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
            ),
-           ZIRC_EPRI       =FACT(statut='f',min=0,
+           ZIRC_EPRI       =FACT(statut='f',
              FLUX_PHI        =SIMP(statut='o',typ='R'),
              R_P             =SIMP(statut='o',typ='R'),
              THETA_MAX       =SIMP(statut='o',typ='R'),
            ),
-           LEMAITRE_FO     =FACT(statut='f',min=0,
+           LEMAITRE_FO     =FACT(statut='f',
              N               =SIMP(statut='o',typ=(fonction,formule)),
              UN_SUR_K        =SIMP(statut='o',typ=(fonction,formule)),
              UN_SUR_M        =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           GRAN_IRRA       =FACT(statut='f',min=0,
+           GRAN_IRRA       =FACT(statut='f',
              A               =SIMP(statut='f',typ='R',defaut= 0.E+0),
              B               =SIMP(statut='f',typ='R',defaut= 0.E+0),
              S               =SIMP(statut='f',typ='R',defaut= 0.E+0),
            ),
-           FLU_IRRA       =FACT(statut='f',min=0,
+           FLU_IRRA       =FACT(statut='f',
              QSR_K           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              PHI_ZERO        =SIMP(statut='f',typ='R',defaut= 1.E+20),
              L               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           OHNO            =FACT(statut='f',min=0,
+           OHNO            =FACT(statut='f',
              R_I             =SIMP(statut='o',typ='R'),
              R_0             =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
@@ -8074,7 +8137,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              M4              =SIMP(statut='o',typ='R'),
              M5              =SIMP(statut='o',typ='R'),
                            ),
-           OHNO_FO         =FACT(statut='f',min=0,
+           OHNO_FO         =FACT(statut='f',
              R_I             =SIMP(statut='o',typ=(fonction,formule)),
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              B               =SIMP(statut='o',typ=(fonction,formule)),
@@ -8096,7 +8159,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              M5              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           LMARC           =FACT(statut='f',min=0,
+           LMARC           =FACT(statut='f',
              DE_0            =SIMP(statut='o',typ='R'),
              R_0             =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
@@ -8127,7 +8190,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              R33             =SIMP(statut='o',typ='R'),
              R66             =SIMP(statut='o',typ='R'),
            ),
-           LMARC_FO        =FACT(statut='f',min=0,
+           LMARC_FO        =FACT(statut='f',
              DE_0            =SIMP(statut='o',typ=(fonction,formule)),
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              N               =SIMP(statut='o',typ=(fonction,formule)),
@@ -8159,7 +8222,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              R66             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           VMIS_POUTRE     =FACT(statut='f',min=0,
+           VMIS_POUTRE     =FACT(statut='f',
              NP              =SIMP(statut='o',typ='R'),
              MEY             =SIMP(statut='o',typ='R'),
              MPY             =SIMP(statut='o',typ='R'),
@@ -8171,7 +8234,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              CBZ             =SIMP(statut='o',typ='R'),
              MPX             =SIMP(statut='o',typ='R'),
            ),
-           VMIS_POUTRE_FO  =FACT(statut='f',min=0,
+           VMIS_POUTRE_FO  =FACT(statut='f',
              NP              =SIMP(statut='o',typ=(fonction,formule)),
              MEY             =SIMP(statut='o',typ=(fonction,formule)),
              MPY             =SIMP(statut='o',typ=(fonction,formule)),
@@ -8184,14 +8247,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              MPX             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ARME            =FACT(statut='f',min=0,
+           ARME            =FACT(statut='f',
              KYE             =SIMP(statut='o',typ='R'),
              DLE             =SIMP(statut='o',typ='R'),
              KYP             =SIMP(statut='o',typ='R'),
              DLP             =SIMP(statut='o',typ='R'),
              KYG             =SIMP(statut='o',typ='R'),
            ),
-           ASSE_CORN       =FACT(statut='f',min=0,
+           ASSE_CORN       =FACT(statut='f',
              NU_1            =SIMP(statut='o',typ='R'),
              MU_1            =SIMP(statut='o',typ='R'),
              DXU_1           =SIMP(statut='o',typ='R'),
@@ -8207,7 +8270,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              KRX             =SIMP(statut='o',typ='R'),
              KRZ             =SIMP(statut='o',typ='R'),
            ),
-           DIS_CONTACT     =FACT(statut='f',min=0,
+           DIS_CONTACT     =FACT(statut='f',
              RIGI_NOR        =SIMP(statut='f',typ='R' ),
              DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -8238,7 +8301,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           NADAI_B         =FACT(statut='f',min=0,
+           NADAI_B         =FACT(statut='f',
              F_C             =SIMP(statut='o',typ='R'),
              F_T             =SIMP(statut='o',typ='R'),
              CRIT_E_C        =SIMP(statut='o',typ='R'),
@@ -8247,7 +8310,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              EPSI_R_T        =SIMP(statut='o',typ='R'),
              FAC_T_C         =SIMP(statut='o',typ='R'),
            ),
-           BETON_DOUBLE_DP =FACT(statut='f',min=0,
+           BETON_DOUBLE_DP =FACT(statut='f',
              F_C             =SIMP(statut='o',typ=(fonction,formule)),
              F_T             =SIMP(statut='o',typ=(fonction,formule)),
              COEF_BIAX       =SIMP(statut='o',typ=(fonction,formule)),
@@ -8290,7 +8353,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              BT              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-          VENDOCHAB       =FACT(statut='f',min=0,
+          VENDOCHAB       =FACT(statut='f',
              S_VP            =SIMP(statut='o',typ='R'),
              SEDVP1          =SIMP(statut='o',typ='R'),
              SEDVP2          =SIMP(statut='o',typ='R'),
@@ -8301,7 +8364,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_D             =SIMP(statut='o',typ='R'),
              K_D             =SIMP(statut='o',typ='R'),
            ),
-           VENDOCHAB_FO    =FACT(statut='f',min=0,
+           VENDOCHAB_FO    =FACT(statut='f',
              S_VP            =SIMP(statut='o',typ=(fonction,formule)),
              SEDVP1          =SIMP(statut='o',typ=(fonction,formule)),
              SEDVP2          =SIMP(statut='o',typ=(fonction,formule)),
@@ -8314,7 +8377,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="X",into=("X",) ),
            ),
-           PINTO_MENEGOTTO =FACT(statut='f',min=0,
+           PINTO_MENEGOTTO =FACT(statut='f',
              SY              =SIMP(statut='o',typ='R'),
              EPSI_ULTM       =SIMP(statut='o',typ='R'),
              SIGM_ULTM       =SIMP(statut='o',typ='R'),
@@ -8328,18 +8391,20 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_PM            =SIMP(statut='f',typ='R',defaut= 0.5 ),
              A_PM            =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
            ),
-           BPEL_BETON      =FACT(statut='f',min=0,
+           BPEL_BETON      =FACT(statut='f',
              PERT_FLUA       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              PERT_RETR       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           BPEL_ACIER      =FACT(statut='f',min=0,
+           BPEL_ACIER      =FACT(statut='f',
+            regles=(PRESENT_PRESENT('RELAX_1000','F_PRG',),
+                     PRESENT_PRESENT('MU0_RELAX','F_PRG',),),
              RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             SY              =SIMP(statut='o',typ='R'),
-             FROT_COURB      =SIMP(statut='o',typ='R'),
-             FROT_LINE       =SIMP(statut='o',typ='R'),
+             F_PRG           =SIMP(statut='f',typ='R'),
+             FROT_COURB      =SIMP(statut='f',typ='R',defaut=0.E+0),
+             FROT_LINE       =SIMP(statut='f',typ='R',defaut=0.E+0),
            ),
-           CAM_CLAY      =FACT(statut='f',min=0,
+           CAM_CLAY      =FACT(statut='f',
              PORO            =SIMP(statut='o',typ='R'),
              LAMBDA          =SIMP(statut='o',typ='R'),
              KAPA            =SIMP(statut='o',typ='R'),
@@ -8347,7 +8412,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              PRES_CRIT       =SIMP(statut='o',typ='R'),
              PA              =SIMP(statut='o',typ='R'),
            ),
-           CJS             =FACT(statut='f',min=0,
+           CJS             =FACT(statut='f',
              BETA_CJS        =SIMP(statut='o',typ='R'),
              RM              =SIMP(statut='o',typ='R'),
              N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -8363,13 +8428,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              Q_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              R_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ECRO_ASYM_LINE  =FACT(statut='f',min=0,
+           ECRO_ASYM_LINE  =FACT(statut='f',
              DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
              SY_C            =SIMP(statut='o',typ='R'),
              DT_SIGM_EPSI    =SIMP(statut='o',typ='R'),
              SY_T            =SIMP(statut='o',typ='R'),
            ),
-           GRANGER_FP      =FACT(statut='f',min=0,
+           GRANGER_FP      =FACT(statut='f',
              J1              =SIMP(statut='f',typ='R'),
              J2              =SIMP(statut='f',typ='R'),
              J3              =SIMP(statut='f',typ='R'),
@@ -8388,12 +8453,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              TAUX_8          =SIMP(statut='f',typ='R'),
              QSR_K           =SIMP(statut='f',typ='R'),
            ),
-           V_GRANGER_FP    =FACT(statut='f',min=0,
+           V_GRANGER_FP    =FACT(statut='f',
              QSR_VEIL        =SIMP(statut='f',typ='R'),
              FONC_V          =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
            ),
-           BAZANT_FD      =FACT(statut='f',min=0,
+           BAZANT_FD      =FACT(statut='f',
              LAM_VISC      =SIMP(statut='o',typ='R'),
            ),  
            BETON_UMLV_FP   =FACT(statut='f',min=0 ,
@@ -8408,14 +8473,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement thermique
 #
-           THER_NL         =FACT(statut='f',min=0,
+           THER_NL         =FACT(statut='f',
              regles=(UN_PARMI('BETA','RHO_CP', ),),
              LAMBDA          =SIMP(statut='o',typ=(fonction,formule)),
              BETA            =SIMP(statut='f',typ=(fonction,formule)),
              RHO_CP          =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           THER_HYDR       =FACT(statut='f',min=0,
+           THER_HYDR       =FACT(statut='f',
              LAMBDA          =SIMP(statut='o',typ=(fonction,formule)),
              BETA            =SIMP(statut='f',typ=(fonction,formule)),
              AFFINITE        =SIMP(statut='o',typ=(fonction,formule)),
@@ -8424,22 +8489,22 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
            ),
-           THER            =FACT(statut='f',min=0,
+           THER            =FACT(statut='f',
              LAMBDA          =SIMP(statut='o',typ='R'),
              RHO_CP          =SIMP(statut='f',typ='R'),
            ),
-           THER_FO         =FACT(statut='f',min=0,
+           THER_FO         =FACT(statut='f',
              LAMBDA          =SIMP(statut='o',typ=(fonction,formule)),
              RHO_CP          =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
            ),
-           THER_ORTH       =FACT(statut='f',min=0,
+           THER_ORTH       =FACT(statut='f',
              LAMBDA_L        =SIMP(statut='o',typ='R'),
              LAMBDA_T        =SIMP(statut='o',typ='R'),
              LAMBDA_N        =SIMP(statut='f',typ='R'),
              RHO_CP          =SIMP(statut='f',typ='R'),
            ),
-           THER_COQUE      =FACT(statut='f',min=0,
+           THER_COQUE      =FACT(statut='f',
              COND_LMM        =SIMP(statut='o',typ='R'),
              COND_TMM        =SIMP(statut='o',typ='R'),
              COND_LMP        =SIMP(statut='o',typ='R'),
@@ -8457,7 +8522,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              CMAS_PP         =SIMP(statut='f',typ='R'),
              CMAS_SI         =SIMP(statut='f',typ='R'),
            ),
-           THER_COQUE_FO   =FACT(statut='f',min=0,
+           THER_COQUE_FO   =FACT(statut='f',
              COND_LMM        =SIMP(statut='o',typ=(fonction,formule)),
              COND_TMM        =SIMP(statut='o',typ=(fonction,formule)),
              COND_LMP        =SIMP(statut='o',typ=(fonction,formule)),
@@ -8475,22 +8540,22 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              CMAS_PP         =SIMP(statut='f',typ=(fonction,formule)),
              CMAS_SI         =SIMP(statut='f',typ=(fonction,formule)),
            ),
-           SECH_GRANGER    =FACT(statut='f',min=0,
+           SECH_GRANGER    =FACT(statut='f',
              A               =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
              QSR_K           =SIMP(statut='o',typ='R'),
              TEMP_0_C        =SIMP(statut='o',typ='R'),
            ),
-           SECH_MENSI      =FACT(statut='f',min=0,
+           SECH_MENSI      =FACT(statut='f',
              A               =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
            ),
-           SECH_BAZANT     =FACT(statut='f',min=0,
+           SECH_BAZANT     =FACT(statut='f',
              D1              =SIMP(statut='o',typ='R'),
              ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
            ),
-           SECH_NAPPE      =FACT(statut='f',min=0,
+           SECH_NAPPE      =FACT(statut='f',
              FONCTION        =SIMP(statut='o',typ=(nappe,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TSEC",into=("TSEC",) ),
@@ -8498,7 +8563,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement métallurgique
 #
-           META_ACIER      =FACT(statut='f',min=0,
+           META_ACIER      =FACT(statut='f',
              TRC             =SIMP(statut='o',typ=(tabl_trc) ),
              AR3             =SIMP(statut='o',typ='R'),
              ALPHA           =SIMP(statut='o',typ='R'),
@@ -8512,7 +8577,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D10             =SIMP(statut='f',typ='R'),
              WSR_K           =SIMP(statut='f',typ='R'),
            ),
-           META_ZIRC       =FACT(statut='f',min=0,
+           META_ZIRC       =FACT(statut='f',
              TDEQ            =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
              K               =SIMP(statut='o',typ='R'),
@@ -8524,14 +8589,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AR              =SIMP(statut='o',typ='R'),
              BR              =SIMP(statut='o',typ='R'),
            ),
-           DURT_META       =FACT(statut='f',min=0,
+           DURT_META       =FACT(statut='f',
              F1_DURT         =SIMP(statut='o',typ='R'),
              F2_DURT         =SIMP(statut='o',typ='R'),
              F3_DURT         =SIMP(statut='o',typ='R'),
              F4_DURT         =SIMP(statut='o',typ='R'),
              C_DURT          =SIMP(statut='o',typ='R'),
            ),
-           ELAS_META       =FACT(statut='f',min=0,
+           ELAS_META       =FACT(statut='f',
              E               =SIMP(statut='o',typ='R'),
              NU              =SIMP(statut='o',typ='R'),
              F_ALPHA         =SIMP(statut='o',typ='R'),
@@ -8553,7 +8618,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              S_VP_MELANGE    =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
            ),
-           ELAS_META_FO    =FACT(statut='f',min=0,
+           ELAS_META_FO    =FACT(statut='f',
              regles=(
                       PRESENT_PRESENT('F_ALPHA','TEMP_DEF_ALPHA'),
                       PRESENT_PRESENT('C_ALPHA','TEMP_DEF_ALPHA'),
@@ -8581,7 +8646,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
            ),
-           META_ECRO_LINE  =FACT(statut='f',min=0,
+           META_ECRO_LINE  =FACT(statut='f',
              F1_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction,formule)),
              F2_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction,formule)),
              F3_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction,formule)),
@@ -8589,7 +8654,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_D_SIGM_EPSI   =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           META_TRACTION   =FACT(statut='f',min=0,
+           META_TRACTION   =FACT(statut='f',
              SIGM_F1         =SIMP(statut='f',typ=(fonction,formule)),
              SIGM_F2         =SIMP(statut='f',typ=(fonction,formule)),
              SIGM_F3         =SIMP(statut='f',typ=(fonction,formule)),
@@ -8598,7 +8663,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",)),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           META_VISC_FO    =FACT(statut='f',min=0,
+           META_VISC_FO    =FACT(statut='f',
              F1_ETA          =SIMP(statut='f',typ=(fonction,formule)),
              F1_N            =SIMP(statut='f',typ=(fonction,formule)),
              F1_C            =SIMP(statut='f',typ=(fonction,formule)),
@@ -8621,7 +8686,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_M             =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           META_PT         =FACT(statut='f',min=0,
+           META_PT         =FACT(statut='f',
              F1_K            =SIMP(statut='f',typ='R'),
              F2_K            =SIMP(statut='f',typ='R'),
              F3_K            =SIMP(statut='f',typ='R'),
@@ -8633,7 +8698,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",) ),
            ),
-           META_RE         =FACT(statut='f',min=0,
+           META_RE         =FACT(statut='f',
              C_F1_THETA      =SIMP(statut='f',typ='R'),
              C_F2_THETA      =SIMP(statut='f',typ='R'),
              C_F3_THETA      =SIMP(statut='f',typ='R'),
@@ -8646,13 +8711,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement fluide
 #
-           FLUIDE          =FACT(statut='f',min=0,
+           FLUIDE          =FACT(statut='f',
              regles=(EXCLUS('CELE_C','CELE_R'),),
              RHO             =SIMP(statut='o',typ='R'),
              CELE_C          =SIMP(statut='f',typ='C'),
              CELE_R          =SIMP(statut='f',typ='R'),
            ),
-           PORO_JOINT      =FACT(statut='f',min=0,
+           PORO_JOINT      =FACT(statut='f',
              RHO_FLUI        =SIMP(statut='o',typ='R'),
              ENTRO_FLUI      =SIMP(statut='o',typ='R'),
              BIOT_M          =SIMP(statut='o',typ='R'),
@@ -8664,7 +8729,863 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              SOURCE_INIT     =SIMP(statut='o',typ='R'),
              OMEGA_0         =SIMP(statut='o',typ='R'),
            ),
-           THM_LIQU        =FACT(statut='f',min=0,
+# =================================================================================
+# COMPORTEMENT THERMO_HYDRO_MECANIQUE
+# LES DONNEES NECESSAIRES A LA DEFINITION DU MATERIAU SONT DEPENDANTES
+# DE LA LOI DE COUPLAGE THM DE LA RELATION
+# LE COMPORTEMENT DE COUPLAGE COMP_THM N EST VALABLE QUE POUR LES LOIS
+# DE COUPLAGE : LIQU_SATU,LIQU_GAZ,GAZ,LIQU_GAZ_ATM,LIQU_VAPE_GAZ,LIQU_VAPE
+# POUR LES LOIS DE COUPLAGE LIQU_SATU_GAT ET LIQU_NSAT_GAT
+# ON NE MODIFIE RIEN
+# LA CORRESPONDANCE AVEC LES VARIABLES CACHEES EST LA SUIVANTE :
+# 1 -->  LIQU_SATU
+# 2 -->  GAZ
+# 3 -->  LIQU_VAPE
+# 4 -->  LIQU_VAPE_GAZ
+# 5 -->  LIQU_GAZ
+# 6 -->  LIQU_GAZ_ATM
+# 7 -->  LIQU_SATU_GAT
+# 8 -->  LIQU_NSAT_GAT
+# =================================================================================
+           COMP_THM        = SIMP(statut='f', typ='TXM',
+                                  into = ( "LIQU_SATU"     ,
+                                           "LIQU_GAZ"      ,
+                                           "GAZ"           ,
+                                           "LIQU_GAZ_ATM"  ,
+                                           "LIQU_VAPE_GAZ" ,
+                                           "LIQU_VAPE"     ,
+                                           "LIQU_SATU_GAT" ,
+                                           "LIQU_NSAT_GAT" ,
+                                          ) ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_SATU -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU -----------------------------------------------
+# =================================================================================
+           b_liqusatu      = BLOC(condition = "COMP_THM == 'LIQU_SATU' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_SATU",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1          = SIMP(statut='o',typ='R'),
+                                           PORO          = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP          = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2          = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE     = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU     = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO     = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 1.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO           = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF     = SIMP(statut='o',typ='R'),
+                                           PESA_X        = SIMP(statut='o',typ='R'),
+                                           PESA_Y        = SIMP(statut='o',typ='R'),
+                                           PESA_Z        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP            = SIMP(statut='f',typ='R'),
+                                           PERM_IN       = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_END      = SIMP(statut='f',typ=(fonction,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END'),),
+                                           LAMBDA        = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ         = SIMP(statut='f',typ='R'),
+                                           SATU_PRES       =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SATU_PRES     =SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_LIQU       =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_GAZ        =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+                                           FICK            =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_GAZ_PRES =SIMP(statut='f',typ=(fonction,formule)),
+                                           SIGMA_T         =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SIGMA_T       =SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_G_INTR     =SIMP(statut='f',typ=(fonction,formule)),
+                                           CHAL_VAPO       =SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+                                           VERI_P2         =SIMP(statut='c',typ='TXM',defaut="SAT", into=("SAT" ,) ),
+                                           VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+                                           VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+                                           VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+                                           VERI_P6         =SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO           = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K      = SIMP(statut='o',typ='R'),
+                                           VISC          = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP   = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA         = SIMP(statut='f',typ='R'),
+                                           CP            = SIMP(statut='f',typ='R'),
+                                           LAMBDA        = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COEF_HENRY      =SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1       = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                         ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             LAMBDA          =SIMP(statut='f',typ=(fonction,formule)),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ --------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+           b_liqugaz      = BLOC(condition = "COMP_THM == 'LIQU_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 5.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END'),),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           FICK             = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_TEMP      = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_GAZ_PRES  = SIMP(statut='f',typ=(fonction,formule)),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+                                           VERI_P2          = SIMP(statut='c',typ='TXM',defaut="SAT" ,into=("SAT" ,) ),
+                                           VERI_P3          = SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+                                           VERI_P4          = SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+                                           VERI_P5          = SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+                                           VERI_P6          = SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COEF_HENRY       = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL        = SIMP(statut='o',typ='R'),
+                                           VISC            = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP     = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP              = SIMP(statut='f',typ='R'),
+                                           LAMBDA          = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP   = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1         = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE GAZ -------------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_GAZ ------------------------------------------------
+# =================================================================================
+           b_gaz          = BLOC(condition = "COMP_THM == 'GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='o',typ='R'),
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 2.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END'),),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           SATU_PRES       =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SATU_PRES     =SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_LIQU       =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_GAZ        =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+                                           FICK            =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_GAZ_PRES =SIMP(statut='f',typ=(fonction,formule)),
+                                           SIGMA_T         =SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SIGMA_T       =SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_G_INTR     =SIMP(statut='f',typ=(fonction,formule)),
+                                           CHAL_VAPO       =SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+                                           VERI_P2         =SIMP(statut='c',typ='TXM',defaut="SAT",into=("SAT",) ),
+                                           VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+                                           VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+                                           VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+                                           VERI_P6         =SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_LIQU        =FACT(statut='f',
+             RHO             =SIMP(statut='f',typ='R'),
+             UN_SUR_K        =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             LAMBDA          =SIMP(statut='f',typ=(fonction,formule)),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ_ATM ----------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+           b_liqugazatm   = BLOC(condition = "COMP_THM == 'LIQU_GAZ_ATM' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ_ATM",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 6.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END'),),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+             R_GAZ           =SIMP(statut='f',typ='R'),
+             PERM_GAZ        =SIMP(statut='f',typ=(fonction,formule)),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+             FICK            =SIMP(statut='f',typ=(fonction,formule)),
+             D_FICK_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             D_FICK_GAZ_PRES =SIMP(statut='f',typ=(fonction,formule)),
+             SIGMA_T         =SIMP(statut='f',typ=(fonction,formule)),
+             D_SIGMA_T       =SIMP(statut='f',typ=(fonction,formule)),
+             PERM_G_INTR     =SIMP(statut='f',typ=(fonction,formule)),
+             CHAL_VAPO       =SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="SAT", into=("SAT", ) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+             VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+             VERI_P6         =SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COEF_HENRY       = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE_GAZ ---------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ ------------------------
+# =================================================================================
+           b_liquvapegaz  = BLOC(condition = "COMP_THM == 'LIQU_VAPE_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 4.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction,formule)),
+                                           FICK             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_FICK_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_FICK_GAZ_PRES  = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END'),),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+                                           VERI_P2          = SIMP(statut='c',typ='TXM',defaut="SAT" ,into=("SAT" ,) ),
+                                           VERI_P3          = SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+                                           VERI_P4          = SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+                                           VERI_P5          = SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+                                           VERI_P6          = SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COEF_HENRY       = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_VAPE_GAZ ---------------------------------
+# =================================================================================
+           b_liquvape  = BLOC(condition = "COMP_THM == 'LIQU_VAPE' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 3.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction,formule)),
+                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END'),),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           FICK             = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_TEMP      = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_FICK_GAZ_PRES  = SIMP(statut='f',typ=(fonction,formule)),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+                                           VERI_P2          = SIMP(statut='c',typ='TXM',defaut="SAT" ,into=("SAT" ,) ),
+                                           VERI_P3          = SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+                                           VERI_P4          = SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+                                           VERI_P5          = SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+                                           VERI_P6          = SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMBDA           = SIMP(statut='f',typ=(fonction,formule)),
+                                           D_LAMBDA_TEMP    = SIMP(statut='f',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COEF_HENRY       = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           VERI_P1          = SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             LAMBDA          =SIMP(statut='f',typ=(fonction,formule)),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+                                 ),
+# =================================================================================
+           b_liqusatugat   = BLOC(condition = "COMP_THM == 'LIQU_SATU_GAT' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_SATU_GAT",
+           THM_LIQU        =FACT(statut='f',
              RHO             =SIMP(statut='o',typ='R'),
              UN_SUR_K        =SIMP(statut='f',typ='R'),
              ALPHA           =SIMP(statut='f',typ='R'),
@@ -8676,7 +9597,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COEF_HENRY      =SIMP(statut='f',typ='R'),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           THM_GAZ         =FACT(statut='f',min=0,
+           THM_GAZ         =FACT(statut='f',
              MASS_MOL        =SIMP(statut='f',typ='R'),
              CP              =SIMP(statut='f',typ='R'),
              VISC            =SIMP(statut='f',typ=(fonction,formule)),
@@ -8685,14 +9606,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           THM_VAPE_GAZ    =FACT(statut='f',min=0,
+           THM_VAPE_GAZ    =FACT(statut='f',
              MASS_MOL        =SIMP(statut='f',typ='R'),
              CP              =SIMP(statut='f',typ='R'),
              VISC            =SIMP(statut='f',typ=(fonction,formule)),
              D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           THM_INIT        =FACT(statut='f',min=0,
+           THM_INIT        =FACT(statut='f',
              TEMP            =SIMP(statut='o',typ='R'),
              PRE1            =SIMP(statut='o',typ='R'),
              PRE2            =SIMP(statut='o',typ='R'),
@@ -8700,8 +9621,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              PRES_VAPE       =SIMP(statut='o',typ='R'),
              DEGR_SATU       =SIMP(statut='f',typ='R'),
              PRES_ATMO       =SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+             COMP_THM         = SIMP(statut='c',typ='R',defaut= 7.0,),
            ),
-           THM_DIFFU       =FACT(statut='f',min=0,
+           THM_DIFFU       =FACT(statut='f',
              R_GAZ           =SIMP(statut='o',typ='R'),
              RHO             =SIMP(statut='f',typ='R'),
              CP              =SIMP(statut='f',typ='R'),
@@ -8735,10 +9660,89 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
              VERI_P6         =SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
            ),
+           ),
+           b_liqunsatgat   = BLOC(condition = "COMP_THM == 'LIQU_NSAT_GAT' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_NSAT_GAT",
+           THM_LIQU        =FACT(statut='f',
+             RHO             =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             LAMBDA          =SIMP(statut='f',typ=(fonction,formule)),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             LAMBDA          =SIMP(statut='f',typ=(fonction,formule)),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
+           ),
+           THM_INIT        =FACT(statut='f',
+             TEMP            =SIMP(statut='o',typ='R'),
+             PRE1            =SIMP(statut='o',typ='R'),
+             PRE2            =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             PRES_VAPE       =SIMP(statut='o',typ='R'),
+             DEGR_SATU       =SIMP(statut='f',typ='R'),
+             PRES_ATMO       =SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+             COMP_THM         = SIMP(statut='c',typ='R',defaut= 8.0,),
+           ),
+           THM_DIFFU       =FACT(statut='f',
+             R_GAZ           =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             BIOT_COEF       =SIMP(statut='f',typ='R'),
+             SATU_PRES       =SIMP(statut='f',typ=(fonction,formule)),
+             D_SATU_PRES     =SIMP(statut='f',typ=(fonction,formule)),
+             PESA_X          =SIMP(statut='f',typ='R'),
+             PESA_Y          =SIMP(statut='f',typ='R'),
+             PESA_Z          =SIMP(statut='f',typ='R'),
+             PERM_IN         =SIMP(statut='f',typ=(fonction,formule)),
+             PERM_END       =SIMP(statut='f',typ=(fonction,formule)),
+                 regles=(EXCLUS('PERM_IN','PERM_END'),),
+             PERM_LIQU       =SIMP(statut='f',typ=(fonction,formule)),
+             D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction,formule)),
+             PERM_GAZ        =SIMP(statut='f',typ=(fonction,formule)),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction,formule)),
+             FICK            =SIMP(statut='f',typ=(fonction,formule)),
+             D_FICK_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
+             D_FICK_GAZ_PRES =SIMP(statut='f',typ=(fonction,formule)),
+             LAMBDA          =SIMP(statut='f',typ=(fonction,formule)),
+             D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
+             SIGMA_T         =SIMP(statut='f',typ=(fonction,formule)),
+             D_SIGMA_T       =SIMP(statut='f',typ=(fonction,formule)),
+             PERM_G_INTR     =SIMP(statut='f',typ=(fonction,formule)),
+             CHAL_VAPO       =SIMP(statut='f',typ=(fonction,formule)),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="SAT",into=("SAT",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
+             VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
+             VERI_P6         =SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
+           ),
+           ),
 #
 # courbes et coefficients associés à la fatigue et au dommage
 #
-           FATIGUE         =FACT(statut='f',min=0,
+           FATIGUE         =FACT(statut='f',
              regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
                      PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
                      PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
@@ -8761,12 +9765,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SIGM",into=("SIGM",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
            ),
-           DOMMA_LEMAITRE  =FACT(statut='f',min=0,
+           DOMMA_LEMAITRE  =FACT(statut='f',
              S               =SIMP(statut='o',typ=(fonction,formule)),
              EPSP_SEUIL      =SIMP(statut='o',typ='R'),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           CISA_PLAN_CRIT  =FACT(statut='f',min=0,
+           CISA_PLAN_CRIT  =FACT(statut='f',
              CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN") ),
 
              b_critere_matake =BLOC(condition="CRITERE=='MATAKE'",
@@ -8786,13 +9790,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # autres comportements ...
 #
-           WEIBULL         =FACT(statut='f',min=0,
+           WEIBULL         =FACT(statut='f',
              M               =SIMP(statut='o',typ='R'),
              VOLU_REFE       =SIMP(statut='o',typ='R'),
              SIGM_REFE       =SIMP(statut='o',typ='R'),
              SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
            ),
-           WEIBULL_FO      =FACT(statut='f',min=0,
+           WEIBULL_FO      =FACT(statut='f',
              M               =SIMP(statut='o',typ='R'),
              VOLU_REFE       =SIMP(statut='o',typ='R'),
              SIGM_CNV        =SIMP(statut='o',typ='R'),
@@ -8800,16 +9804,16 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           NON_LOCAL       =FACT(statut='f',min=0,
+           NON_LOCAL       =FACT(statut='f',
              LONG_CARA       =SIMP(statut='o',typ='R'),
              COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
            ),
-           RUPT_FRAG       =FACT(statut='f',min=0,
+           RUPT_FRAG       =FACT(statut='f',
              GC              =SIMP(statut='o',typ='R'),
              SIGM_C          =SIMP(statut='f',typ='R'),
              SAUT_C          =SIMP(statut='f',typ='R'),
            ),
-           RCCM            =FACT(statut='f',min=0,
+           RCCM            =FACT(statut='f',
              SY_02           =SIMP(statut='f',typ='R'),
              SM              =SIMP(statut='f',typ='R'),
              SU              =SIMP(statut='f',typ='R'),
@@ -8818,7 +9822,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              N_KE            =SIMP(statut='f',typ='R'),
              M_KE            =SIMP(statut='f',typ='R'),
            ),
-           RCCM_FO         =FACT(statut='f',min=0,
+           RCCM_FO         =FACT(statut='f',
              SY_02           =SIMP(statut='f',typ=(fonction,formule)),
              SM              =SIMP(statut='f',typ=(fonction,formule)),
              SU              =SIMP(statut='f',typ=(fonction,formule)),
@@ -8827,7 +9831,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              M_KE            =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           LAIGLE          =FACT(statut='f',min=0,
+           LAIGLE          =FACT(statut='f',
              GAMMA_ULT       =SIMP(statut='o',typ='R'),
              GAMMA_E         =SIMP(statut='o',typ='R'),
              M_ULT           =SIMP(statut='o',typ='R'),
@@ -9649,7 +10653,7 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
 # Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation 
 #  presents dans le Fortran          
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 14/10/2003   AUTEUR ACBHHCD G.DEVESA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9714,7 +10718,8 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
                    EXCLUS('ACCE','COEF_MULT'),
                    PRESENT_ABSENT('ACCE','FONC_MULT'),
                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
-                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+                   # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+                   ),
            VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
            CHARGE          =SIMP(statut='f',typ=char_meca ),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule) ),
@@ -9723,7 +10728,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            ACCE            =SIMP(statut='f',typ=(fonction,formule) ),
            VITE            =SIMP(statut='f',typ=(fonction,formule) ),
            DEPL            =SIMP(statut='f',typ=(fonction,formule) ),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -9777,7 +10782,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 14/10/2003   AUTEUR ACBHHCD G.DEVESA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9807,7 +10812,8 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
          EXCIT           =FACT(statut='o',max='**',
            regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
-                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+                   # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+                   ),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
                                  into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
            CHARGE          =SIMP(statut='o',typ=char_meca),
@@ -9815,7 +10821,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            DEPL            =SIMP(statut='f',typ=(fonction,formule)),
            ACCE            =SIMP(statut='f',typ=(fonction,formule)),
            VITE            =SIMP(statut='f',typ=(fonction,formule)),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -10079,7 +11085,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 14/10/2003   AUTEUR ACBHHCD G.DEVESA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10108,7 +11114,8 @@ DYNA_TRAN_EXPLI=OPER(nom="DYNA_TRAN_EXPLI",op= 69,sd_prod=evol_noli,reentrant='f
          EXCIT           =FACT(statut='o',max='**',
            regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
-                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+                   # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+                   ),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
                                  into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
            CHARGE          =SIMP(statut='o',typ=char_meca),
@@ -10116,7 +11123,7 @@ DYNA_TRAN_EXPLI=OPER(nom="DYNA_TRAN_EXPLI",op= 69,sd_prod=evol_noli,reentrant='f
            DEPL            =SIMP(statut='f',typ=(fonction,formule)),
            ACCE            =SIMP(statut='f',typ=(fonction,formule)),
            VITE            =SIMP(statut='f',typ=(fonction,formule)),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
            DIRECTION       =SIMP(statut='f',typ='R',max=3),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -10729,6 +11736,56 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-c",r
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
 
+#& MODIF COMMANDE  DATE 16/09/2003   AUTEUR CIBHHLV L.VIVAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  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.        
+# ======================================================================
+def extr_table_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "MATR_ASSE_GENE_R" : return matr_asse_gene_r
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,docu="U4.71.05",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("MATR_ASSE_GENE_R",) ),
+
+         TABLE           =SIMP(statut='o',typ=table),
+
+         NOM_PARA        =SIMP(statut='o',typ='TXM'),
+
+         FILTRE          =FACT(statut='f',min=1,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM'),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R'),
+              VALE_I          =SIMP(statut='f',typ='I'),
+              VALE_C          =SIMP(statut='f',typ='C'),
+              VALE_K          =SIMP(statut='f',typ='TXM'),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+
 #& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -11725,30 +12782,30 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
 
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 11/09/2003   AUTEUR VABHHTS J.PELLET 
 #            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.                                 
+# 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.                            
+# 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.      
+# 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.
 # ======================================================================
 IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
                   fr="Impression des matrices élémentaires et des matrices assemblées",
                   docu="U7.04.32-d",
             UIinfo={"groupes":("Impression",)},
          regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
-         
+
          MATR_ELEM       =FACT(statut='f',max='**',
            FICHIER         =SIMP(statut='f',typ='TXM' ),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
@@ -11756,9 +12813,9 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
            b_format      =BLOC(condition = "FORMAT == 'IDEAS'",
              VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
            ),
-#  créer les types matr_elem  et vect_elem        
+#  créer les types matr_elem  et vect_elem
            MATRICE         =SIMP(statut='o',typ=(matr_elem, vect_elem)),
-#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA           
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
@@ -11774,9 +12831,9 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
                                  into=("IDEAS","RESULTAT") ),
            VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
-#  créer le type matr_elem           
-           MATRICE         =SIMP(statut='o',typ=matr_asse),
-#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA                      
+#  créer le type matr_elem
+           MATRICE         =SIMP(statut='o',typ=matr_asse_gd),
+#  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
@@ -12288,7 +13345,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-f",
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 30/09/2003   AUTEUR VABHHTS J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12468,7 +13525,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
                              "NOEU_VAR2_R",  "ELEM_VARI_R",  "ELNO_VARI_R",  "ELGA_VARI_R",
                              "NOEU_VNOR_C",  "ELEM_VNOR_C",  "ELNO_VNOR_C",  "ELGA_VNOR_C",
                              "NOEU_IRRA_R",  "ELEM_IRRA_R",  "ELNO_IRRA_R",  "ELGA_IRRA_R",) ),
-         b_modele =BLOC(condition = "TYPE_CHAM[0:2] == 'EL'",
+         b_modele =BLOC(condition = "TYPE_CHAM!=None and TYPE_CHAM[0:2] == 'EL'",
             MODELE      =SIMP(statut='o',typ=modele, ),
                   ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
@@ -15690,7 +16747,7 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 29/09/2003   AUTEUR JMBHH01 J.M.PROIX 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15715,7 +16772,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
             UIinfo={"groupes":("Maillage",)},
       regles=(AU_MOINS_UN('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
                        'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
-                       'TRANSLATION','ROTATION','MODI_BASE','ECHELLE',),
+                       'TRANSLATION','ROTATION','MODI_BASE','ECHELLE','ORIE_SHB8'),
               PRESENT_ABSENT('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
                        'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
               PRESENT_ABSENT('DEFORME','ORIE_CONTACT','EQUE_PIQUA','ORIE_PEAU_2D',
@@ -15725,9 +16782,9 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
               PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_CONTACT','DEFORME','EQUE_PIQUA',
                        'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
               PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+                       'PLAQ_TUBE','MODI_MAILLE',),
               PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','PLAQ_TUBE','MODI_MAILLE',),
+                       'PLAQ_TUBE','MODI_MAILLE',),
               PRESENT_ABSENT('PLAQ_TUBE','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
                        'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE',),
               PRESENT_ABSENT('MODI_MAILLE','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
@@ -15771,6 +16828,9 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
          ORIE_PEAU_3D    =FACT(statut='f',max='**',
            GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
          ),
+         ORIE_SHB8       =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ),
          ORIE_NORM_COQUE =FACT(statut='f',max='**',
            regles=(EXCLUS('NOEUD','GROUP_NO'),
                    PRESENT_PRESENT('NOEUD','VECT_NORM'),
@@ -18347,7 +19407,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18365,12 +19425,12 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-RETOUR=MACRO(nom="RETOUR",op= ops.build_retour,docu="U4.13.02-f",
+RETOUR=MACRO(nom="RETOUR",op=ops.build_retour,docu="U4.13.02-f",
             UIinfo={"groupes":("Gestion du travail",)},
             fr="Retour au fichier de commandes appelant", 
 ) ;
 
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 16/09/2003   AUTEUR JMBHH01 J.M.PROIX 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18569,6 +19629,11 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+         ),
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
          ),
            SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                                fr="Liste des paramètres de sensibilité",
diff --git a/Aster/Cata/cata_reduit.py b/Aster/Cata/cata_reduit.py
new file mode 100755 (executable)
index 0000000..120cdb4
--- /dev/null
@@ -0,0 +1,576 @@
+#& MODIF ENTETE  DATE 18/03/2003   AUTEUR MCOURTOI M.COURTOIS 
+#            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.      
+# ======================================================================
+import Accas
+from Accas import *
+from Accas import _F
+import string
+
+import ops
+
+try:
+  import aster
+except:
+  pass
+
+#
+__version__="$Name:  $"
+__Id__="$Id: cata_reduit.py,v 1.1.2.2 2003/10/16 10:09:09 eficas Exp $"
+#
+JdC = JDC_CATA(code='ASTER',
+               execmodul=None,
+               regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                         AU_MOINS_UN('FIN'),
+                         A_CLASSER(('DEBUT','POURSUITE'),'FIN')))
+# Type le plus general
+class entier  (ASSD):pass
+class reel    (ASSD):pass
+class complexe(ASSD):pass
+class chaine  (ASSD):pass
+
+
+# Type geometriques
+class no  (GEOM):pass
+class grno(GEOM):pass
+class ma  (GEOM):pass
+class grma(GEOM):pass
+
+
+
+# Autres
+
+class cabl_precont    (ASSD):pass
+class cara_elem       (ASSD):pass
+class cara_pout       (ASSD):pass
+class cham_mater      (ASSD):pass
+class char_acou       (ASSD):pass
+class char_cine_acou  (ASSD):pass
+class char_cine_meca  (ASSD):pass
+class char_cine_ther  (ASSD):pass
+class char_meca       (ASSD):pass
+class char_ther       (ASSD):pass
+class courbe          (ASSD):pass
+class fond_fiss       (ASSD):pass
+class interf_dyna_clas(ASSD):pass
+class interspfact     (ASSD):pass
+class listis          (ASSD):pass
+class liste           (ASSD):pass
+class macr_elem_dyna  (ASSD):pass
+class macr_elem_stat  (ASSD):pass
+class mater           (ASSD):pass
+class melasflu        (ASSD):pass
+class modele          (ASSD):pass
+class modele_gene     (ASSD):pass
+class nume_ddl        (ASSD):pass
+class nume_ddl_gene   (ASSD):pass
+class obstacle        (ASSD):pass
+class spectre         (ASSD):pass
+class surface         (ASSD):pass
+class tran_gene       (ASSD):pass
+class type_flui_stru  (ASSD):pass
+class valeur          (ASSD):pass
+
+
+# liste :
+#--------------------------------
+class listr8   (ASSD):
+  def LIST_VALEURS(self) :
+    """ retourne la liste des valeurs [ val1, ...] """
+    vale=string.ljust(self.get_name(),19)+'.VALE'
+    return list(aster.getvectjev(vale))
+   
+
+
+# maillage :
+#--------------------------------
+class maillage(ASSD):
+  def LIST_GROUP_NO(self) :
+    """ retourne la liste des groupes de noeuds sous la forme :
+        [ (gno1, nb noeuds  gno1), ...] """
+    return aster.GetMaillage(self.get_name(), "GROUP_NO")
+  def LIST_GROUP_MA(self) :
+    """ retourne la liste des groupes de mailles sous la forme :
+        [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
+    return aster.GetMaillage(self.get_name(), "GROUP_MA")
+    
+    
+class squelette     (maillage):pass
+
+
+# cham_gd (carte,cham_no,cham_elem)
+#--------------------------------
+
+class cham_gd(ASSD):pass
+
+# cham_gd/carte :
+#--------------------------------
+class carte(cham_gd):pass
+class carte_dbel_r   (carte):pass
+class carte_depl_c   (carte):pass
+class carte_depl_f   (carte):pass
+class carte_depl_r   (carte):pass
+class carte_durt_r   (carte):pass
+class carte_ener_r   (carte):pass
+class carte_epsi_r   (carte):pass
+class carte_erreur   (carte):pass
+class carte_flux_r   (carte):pass
+class carte_g_depl_r (carte):pass
+class carte_geom_r   (carte):pass
+class carte_hydr_r   (carte):pass
+class carte_inst_r   (carte):pass
+class carte_inte_r   (carte):pass
+class carte_irra_r   (carte):pass
+class carte_meta_r   (carte):pass
+class carte_neut_f   (carte):pass
+class carte_neut_r   (carte):pass
+class carte_pres_r   (carte):pass
+class carte_sief_r   (carte):pass
+class carte_sour_r   (carte):pass
+class carte_temp_f   (carte):pass
+class carte_temp_r   (carte):pass
+class carte_var2_r   (carte):pass
+class carte_vnor_c   (carte):pass
+
+
+# cham_gd/cham_elem :
+#--------------------------------
+class cham_elem(cham_gd):pass
+class cham_elem_crit_r(cham_elem):pass
+class cham_elem_dbel_r(cham_elem):pass
+class cham_elem_depl_c(cham_elem):pass
+class cham_elem_depl_f(cham_elem):pass
+class cham_elem_depl_r(cham_elem):pass
+class cham_elem_dommag(cham_elem):pass
+class cham_elem_durt_r(cham_elem):pass
+class cham_elem_ener_r(cham_elem):pass
+class cham_elem_epsi_c(cham_elem):pass
+class cham_elem_epsi_r(cham_elem):pass
+class cham_elem_erreur(cham_elem):pass
+class cham_elem_facy_r(cham_elem):pass
+class cham_elem_flux_r(cham_elem):pass
+class cham_elem_g_depl(cham_elem):pass
+class cham_elem_geom_r(cham_elem):pass
+class cham_elem_hydr_r(cham_elem):pass
+class cham_elem_inst_r(cham_elem):pass
+class cham_elem_inte_r(cham_elem):pass
+class cham_elem_irra_r(cham_elem):pass
+class cham_elem_meta_r(cham_elem):pass
+class cham_elem_neut_f(cham_elem):pass
+class cham_elem_neut_r(cham_elem):pass
+class cham_elem_pres_r(cham_elem):pass
+class cham_elem_sief_c(cham_elem):pass
+class cham_elem_sief_r(cham_elem):pass
+class cham_elem_sour_r(cham_elem):pass
+class cham_elem_spma_r(cham_elem):pass
+class cham_elem_temp_f(cham_elem):pass
+class cham_elem_temp_r(cham_elem):pass
+class cham_elem_vari_r(cham_elem):pass
+class cham_elem_vnor_c(cham_elem):pass
+
+
+# cham_gd/cham_no :
+#--------------------------------
+class cham_no(cham_gd):pass
+class cham_no_dbel_r   (cham_no):pass
+class cham_no_depl_c   (cham_no):pass
+class cham_no_depl_f   (cham_no):pass
+class cham_no_depl_r   (cham_no):pass
+class cham_no_durt_r   (cham_no):pass
+class cham_no_ener_r   (cham_no):pass
+class cham_no_epsi_r   (cham_no):pass
+class cham_no_erreur   (cham_no):pass
+class cham_no_flux_r   (cham_no):pass
+class cham_no_g_depl_r (cham_no):pass
+class cham_no_geom_r   (cham_no):pass
+class cham_no_hydr_r   (cham_no):pass
+class cham_no_inst_r   (cham_no):pass
+class cham_no_inte_r   (cham_no):pass
+class cham_no_irra_r   (cham_no):pass
+class cham_no_meta_r   (cham_no):pass
+class cham_no_neut_f   (cham_no):pass
+class cham_no_neut_r   (cham_no):pass
+class cham_no_pres_c   (cham_no):pass
+class cham_no_pres_r   (cham_no):pass
+class cham_no_sief_r   (cham_no):pass
+class cham_no_sour_r   (cham_no):pass
+class cham_no_spma_r   (cham_no):pass
+class cham_no_temp_c   (cham_no):pass
+class cham_no_temp_f   (cham_no):pass
+class cham_no_temp_r   (cham_no):pass
+class cham_no_vanl_r   (cham_no):pass
+class cham_no_var2_r   (cham_no):pass
+class cham_no_vnor_c   (cham_no):pass
+
+
+# resultat : (evol,mode_stat,mode_meca)
+#--------------------------------
+
+class resultat(ASSD):
+  def LIST_CHAMPS (self) :
+    return aster.GetResu(self.get_name(), "CHAMPS")
+  def LIST_NOM_CMP (self) :
+    return aster.GetResu(self.get_name(), "COMPOSANTES")
+  def LIST_VARI_ACCES (self) :
+    return aster.GetResu(self.get_name(), "VARI_ACCES")
+
+class acou_harmo    (resultat):pass
+class base_modale     (resultat):pass
+class comb_fourier  (resultat):pass
+class dyna_harmo    (resultat):pass
+class dyna_trans    (resultat):pass
+class fourier_elas  (resultat):pass
+class harm_gene     (resultat):pass
+class mode_acou     (resultat):pass
+class mode_cycl     (resultat):pass
+class mode_flamb    (resultat):pass
+class mode_gene     (resultat):pass
+class mult_elas     (resultat):pass
+class theta_geom    (resultat):pass
+
+# resultat/evol :
+#--------------------------------
+class evol(resultat):pass
+class evol_char(evol):pass
+class evol_elas(evol):pass
+class evol_noli(evol):pass
+class evol_ther(evol):pass
+class evol_varc(evol):pass
+
+# resultat/mode_stat :
+#--------------------------------
+class mode_stat(resultat):pass
+class mode_stat_depl(mode_stat):pass
+class mode_stat_acce(mode_stat):pass
+class mode_stat_forc(mode_stat):pass
+
+
+# resultat/mode_meca :
+#--------------------------------
+class mode_meca(resultat):pass
+class mode_meca_c(mode_meca):pass
+
+
+# fonction :
+#--------------------------------
+class fonction(ASSD):
+  def LIST_VALEURS(self) :
+    """ retourne la liste des valeurs [ val1, ...] """
+    vale=string.ljust(self.get_name(),19)+'.VALE'
+    lbl=list(aster.getvectjev(vale))
+    lbr=[]
+    for i in range(len(lbl)/2):
+        lbr.append(lbl[i])
+        lbr.append(lbl[len(lbl)/2+i])
+    return lbr
+class para_sensi(fonction):pass
+class fonction_c(fonction):
+  def LIST_VALEURS(self) :
+    """ retourne la liste des valeurs [ val1, ...] """
+    vale=string.ljust(self.get_name(),19)+'.VALE'
+    lbl=list(aster.getvectjev(vale))
+    lbr=[]
+    for i in range(len(lbl)/3):
+        lbr.append(lbl[i])
+        lbr.append(lbl[len(lbl)/3+i*2])
+        lbr.append(lbl[len(lbl)/3+i*2+1])
+    return lbr
+class nappe(fonction):pass
+
+
+# matr_asse :
+#--------------------------------
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
+# matr_elem :
+#--------------------------------
+class matr_elem(ASSD):pass
+class matr_elem_depl_c(matr_elem):pass
+class matr_elem_depl_r(matr_elem):pass
+class matr_elem_pres_c(matr_elem):pass
+class matr_elem_temp_r(matr_elem):pass
+
+
+
+
+# table :
+#--------------------------------
+
+class table(ASSD):
+  def __getitem__(self,key):
+      requete=string.ljust(key[0],24)
+      tblp=string.ljust(self.get_name(),19)+'.TBLP'
+      tabnom=list(aster.getvectjev(tblp))
+      for i in range(len(tabnom)) : 
+         if tabnom[i]==requete: break
+      resu=aster.getvectjev(tabnom[i+2])
+      if key[1]>len(resu) : raise KeyError
+      else                : return resu[key[1]-1]
+
+class tabl_aire_int   (table):pass
+class tabl_calc_g_loca(table):pass
+class tabl_calc_g_th  (table):pass
+class tabl_cara_geom  (table):pass
+class tabl_char_limite(table):pass
+class tabl_ener_elas  (table):pass
+class tabl_ener_pot   (table):pass
+class tabl_ener_cin   (table):pass
+class tabl_trav_ext   (table):pass
+class tabl_ener_totale(table):pass
+class tabl_indic_ener (table):pass
+class tabl_indic_seuil(table):pass
+class tabl_intsp      (table):pass
+class tabl_mass_iner  (table):pass
+class tabl_post_alea  (table):pass
+class tabl_post_beta  (table):pass
+class tabl_post_dyna  (table):pass
+class tabl_post_f_alea(table):pass
+class tabl_post_fatig (table):pass
+class tabl_post_gouj2e(table):pass
+class tabl_post_k     (table):pass
+class tabl_post_rccm  (table):pass
+class tabl_post_rele  (table):pass
+class tabl_post_simpli(table):pass
+class tabl_post_usur  (table):pass
+class tabl_reca_weib  (table):pass
+class tabl_rice_tracey(table):pass
+class tabl_texture    (table):pass
+class tabl_trc        (table):pass
+class tabl_weibull    (table):pass
+
+
+# vect_asse :
+#--------------------------------
+class vect_asse(ASSD):pass
+class vect_asse_gene(vect_asse):pass
+
+
+# vect_elem :
+#--------------------------------
+class vect_elem(ASSD):pass
+class vect_elem_depl_r(vect_elem):pass
+class vect_elem_pres_c(vect_elem):pass
+class vect_elem_pres_r(vect_elem):pass
+class vect_elem_temp_r(vect_elem):pass
+
+#& MODIF COMMUN  DATE 31/03/2003   AUTEUR ASSIRE A.ASSIRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  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.        
+# ======================================================================
+DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,docu="U4.11.01-g",repetable='n',
+            UIinfo={"groupes":("Gestion du travail",)},
+           fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
+          sd_prod=ops.DEBUT,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=3,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE','LOCALE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         CODE            =FACT(fr="définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           NIV_PUB_WEB     =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R'),
+         ),
+ );
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
+#            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.      
+# ======================================================================
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
+            fr="Affectation des éléments finis sur le maillage",
+            reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+VERIF=SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD")),
+) ;
+
+PLS_BASE_SIMPLE=OPER(nom="PLS_BASE_SIMPLE",op=19,sd_prod=cara_elem,
+                    fr="Exemple de PLUSIEURS_BASE_Panel sans validator",
+                    docu="U4.42.01-g",reentrant='n',
+                   UIinfo={"groupes":("Modélisation",)},
+  VAR1=SIMP(statut='o',typ='TXM',min=1,max=6 ),
+  VAR2=SIMP(statut='o',typ='TXM',min=1,max=6,into =( "TUTU","TATA","CCCC")),
+  VAR3=SIMP(statut='o',typ='I',min=1,max=1,into =( 1,2,3)),
+  VAR4=SIMP(statut='o',typ='I',min=1,max=1),
+  VAR44=SIMP(statut='o',typ='I',min=1,max=6),
+  VAR5=SIMP(statut='o',typ='TXM',min=1,max=1),
+  VAR6=SIMP(statut='o',typ='C',min=1,max=1),
+  MODELE=SIMP(statut='o',typ=modele ),
+) ;
+
+TESTS_VALID=OPER(nom="TESTS_VALID",op=19,sd_prod=cara_elem,
+                    fr="Exemple de PLUSIEURS_BASE_Panel sans validator",
+                    docu="U4.42.01-g",reentrant='n',
+                   UIinfo={"groupes":("Modélisation",)},
+  LongStr=SIMP(statut='o',typ='TXM',validators=LongStr(3,5)),
+  ListStr=SIMP(statut='o',typ='TXM',min=1,max=4,validators=LongStr(3,5)),
+  PairVal=SIMP(statut='o',typ='I',min=1,max=4,validators=PairVal()),
+  RangeVal=SIMP(statut='o',typ='I',validators=RangeVal(3,15)),
+  CardVal=SIMP(statut='o',typ='I',max='**',validators=CardVal(3,15)),
+  EnumVal=SIMP(statut='o',typ='I',validators=EnumVal((3,2,4,8,9,15))),
+  OrdList=SIMP(statut='o',typ='I',max='**',validators=OrdList("croissant")),
+  OrdList2=SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),max='**',validators=OrdList("croissant")),
+  TypeVal=SIMP(statut='o',typ='I',validators=TypeVal(int)),
+) ;
+
+PLS_BASE_NOREPEAT=OPER(nom="PLS_BASE_NOREPEAT",op=19,sd_prod=cara_pout,
+                    fr="Exemple de PLUSIEURS_BASE_Panel avec validator",
+                    docu="U4.42.01-g",reentrant='n',
+                   UIinfo={"groupes":("Modélisation",)},
+  VAR1=SIMP(statut='o',typ='TXM',min=1,max=6,validators=NoRepeat()),
+  VAR2=SIMP(statut='o',typ='TXM',min=1,max=6,into =( "TUTU","TATA","CCCC"),validators=NoRepeat()),
+  VAR3=SIMP(statut='o',typ='I',min=1,max=1,into =( 1,2,3),validators=PairVal()),
+  VAR4=SIMP(statut='o',typ='I',min=1,max=1,validators=PairVal()),
+  VAR5=SIMP(statut='o',typ='I',min=1,max=6,validators=PairVal()),
+  VAR6=SIMP(statut='o',typ='I',min=1,max=6,validators=(NoRepeat(),PairVal())),
+  VAR7=SIMP(statut='o',typ='I',min=1,max=6,validators=[NoRepeat(),PairVal()]),
+) ;
+
+#& MODIF COMMANDE  DATE 21/03/2003   AUTEUR ASSIRE A.ASSIRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',fr="Poursuite d une étude",
+                docu="U4.11.03-g",sd_prod = ops.POURSUITE,
+            UIinfo={"groupes":("Gestion du travail",)},
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=3,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TES',)),
+         ),
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R' ),
+         ),
+         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I',defaut=15),
+         ),
+)  ;
+# 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.
+# ======================================================================
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
+         docu="U4.11.02-g",
+            UIinfo={"groupes":("Gestion du travail",)},
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
+)  ;
+
index 0234e371300bd41cdd5cbe313709bbd184893396..841a3e56c803b14b3c4c328a53fa4b2712fbaec2 100644 (file)
@@ -197,9 +197,12 @@ def detruire(self,d):
            if d.has_key(e):del d[e]
            if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
        else:
+#CCAR: ajout de ce test pour ne pas détruire une formule. Faut-il le reintegrer 
+#      dans le catalogue d'Aster ? Est-il spécial EFICAS ?
          if isinstance(mcs,formule):
            cr=self.parent.report()
            cr.fatal("la destruction d'une FORMULE est impossible" )
+#CCAR: fin ajout
          if isinstance(mcs,ASSD):
            sd.append(mcs)
            mcs=mcs.nom
index 66a003f7342bfc90cd1b5a865bccad1910958a69..5bb441b4c660bd8f5e38f8adb0b54cf59a0d7156 100644 (file)
@@ -1,11 +1,15 @@
-Verion 1.4 (5/2003):
+Version 1.5 (10/2003):
+   Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2)
+   Introduction des validateurs de mots cles simples
+
+Version 1.4 (5/2003):
    Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
    Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
    Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
    Ajout du bouton de documentation dans le pannneau FORMULE (AO2002-447)
    Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
 
-Verion 1.3 (11/2002):
+Version 1.3 (11/2002):
    Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
    Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
    sur click droit de la souris sur l'icone de la commande)
index f037ce5fec94bfb650e8ef43e3a93faf5858b0f1..6ded4a0a6f0c7fbfda9ad6ddb614b407a3768e00 100644 (file)
@@ -1,4 +1,7 @@
 
+# Test pour vérifier qu'une commande dont le concept 
+# produit est nommé sansnom est considérée comme invalide
+#plusieurs commandes : PROC, MACRO, OPER
 
 DEBUT();
 
@@ -10,7 +13,27 @@ kk=DEFI_MATERIAU(ELAS=_F(E=56.24,
 uu=DEFI_MATERIAU(ELAS=_F(E=56.24,
                          NU=0.3,),);
 
-sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+SD_4=DEFI_MATERIAU(ELAS=_F(E=56.24,
                            NU=0.3,),);
 
+sansnom=AFFE_CHAR_CINE(MODELE=None,);
+
+MACR_ADAP_MAIL(ADAPTATION=_F(LIBRE='RAFFINEMENT',
+                             MAILLAGE_N=MA,
+                             MAILLAGE_NP1=CO('MAA'),
+                             RESULTAT_N=None,
+                             INDICATEUR=None,
+                             NOM_CMP_INDICA=None,
+                             CRIT_RAFF_ABS=1.0,),);
+
+MACR_ADAP_MAIL(ADAPTATION=_F(LIBRE='RAFFINEMENT',
+                             MAILLAGE_N=MA,
+                             MAILLAGE_NP1=MAA,
+                             RESULTAT_N=None,
+                             INDICATEUR=None,
+                             NOM_CMP_INDICA=None,
+                             CRIT_RAFF_ABS=1.0,),);
+
+PRE_CHAR_IDEAS(MODELE=None,);
+
 FIN();
index dd0a4898eaafc5623846970eff48f57ce3262e13..a79bb75474e65ef76c60e026d33cd9e047dbffe1 100644 (file)
@@ -320,9 +320,9 @@ class ObjectTreeItem(TreeItem,Delegate):
         """ Retourne la clé de doc de l'objet pointé par self """
         return self.object.get_docu()
 
-    def set_valeur(self,new_valeur,evaluation='oui'):
+    def set_valeur(self,new_valeur):
         """ Remplace la valeur de l'objet pointé par self par new_valeur """
-        return self.object.set_valeur(new_valeur,evaluation=evaluation)
+        return self.object.set_valeur(new_valeur)
         
     def GetText(self):
         return myrepr.repr(self.object)
index 740b1eb8f17167717e5235556ba22dfefbf4685b..d2e027830b774aa8eb263e54bca638ee7f14d01f 100644 (file)
@@ -39,7 +39,7 @@ import properties
 from widgets import Fenetre
 from Misc import MakeNomComplet
 
-VERSION="EFICAS v1.4"
+VERSION="EFICAS v1.5"
 
 class APPLI: 
   def __init__ (self,master,code='ASTER',fichier=None) :
index 0df5021027cd0dcb9bc15f5d9693e40beec2952b..e45ba80f4d8130134deccfc86d9a23f36df0639b 100644 (file)
@@ -30,7 +30,7 @@ import panels
 
 #
 __version__="$Name:  $"
-__Id__="$Id: componuplet.py,v 1.2 2002/05/15 15:31:58 eficas Exp $"
+__Id__="$Id: componuplet.py,v 1.3.2.1 2003/10/09 14:57:58 eficas Exp $"
 #
 
 myrepr = Repr()
@@ -66,7 +66,8 @@ class NUPLETPanel(panels.OngletPanel):
       aide=self.gen_aide(obj)
       if objet_mc.into != None :
         l_choix=list(objet_mc.into)
-        obj.set_valeur(l_choix[0],evaluation='non')
+        #obj.set_valeur(l_choix[0],evaluation='non')
+        obj.set_valeur(l_choix[0])
         option=Pmw.OptionMenu (frame_valeur,
                 items = l_choix,
                 menubutton_width = 10,
@@ -91,7 +92,8 @@ class NUPLETPanel(panels.OngletPanel):
       Enregistre  val comme valeur de self.node.item.object SANS faire de 
       test de validité
     """
-    obj.set_valeur(val,evaluation='non')
+    #obj.set_valeur(val,evaluation='non')
+    obj.set_valeur(val)
     self.parent.appli.affiche_infos(mess)
     self.node.parent.verif()
     self.node.update()
@@ -111,7 +113,8 @@ class NUPLETPanel(panels.OngletPanel):
           self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e')
           e.widget.insert(0,obj.getval())
       else:
-          obj.set_valeur(anc_val,evaluation='non')
+          #obj.set_valeur(anc_val,evaluation='non')
+          obj.set_valeur(anc_val)
           self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
           e.widget.insert(0,anc_val)
     else:
index 6fb84f369832fe5d978231df85ac48fbb3a0eb6c..ecca51286bee6f111fd0a909e072f363a94ee718 100644 (file)
@@ -64,34 +64,65 @@ class newSIMPPanel(panels.OngletPanel):
 #    au mot-clé courant
 # ----------------------------------------------------------------------------------------
 
-  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+  def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
       """
           Enregistre  val comme valeur de self.node.item.object SANS 
-          faire de test de validité
+          faire de test de validité ni ré-évaluer l'ancienne valeur
+          permet de rester avec des valeurs non entrees et de ne pas 
+          ré-évaluer des entiers par exemple
       """
       if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != None:
-          valeur =name
-      else :
-          #XXX Pourquoi proceder ainsi ? Il n'est pas possible de mettre
-          # None comme valeur du mot cle. 
-          # Probablement que ce debranchement permet de mettre record_valeur
-          # en call back, il faut donc aller chercher la valeur dans l'entry
-          valeur= self.entry.get()
-          self.entry.delete(0,END)
-          #XXX Pour permettre la mise a None du mot cle, on remet None si valeur == ''
-          if valeur == '':valeur=None
-      self.node.item.set_valeur(valeur,evaluation='non')
+      self.node.item.set_valeur(name)
       self.parent.appli.affiche_infos(mess)
       if self.node.item.get_position()=='global':
-          self.node.etape.verif_all()
+           self.node.etape.verif_all()
       elif self.node.item.get_position()=='global_jdc':
-          self.node.racine.verif_all()
+           self.node.racine.verif_all()
       else :
-          self.node.parent.verif()
+           self.node.parent.verif()
       self.node.update()
-      if self.node.item.isvalid():
-          self.node.parent.select()
+
+  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+      """
+          Enregistre  val comme valeur de self.node.item.object  
+         en evaluant l item et en le validant 
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != None:
+          valeur = name
+          validite = 1
+      else :
+          valeurentree= self.entry.get()
+          self.entry.delete(0,END)
+          if valeurentree == '': valeurentree=None
+          valeur,validite=self.node.item.eval_valeur(valeurentree)
+          if not validite :
+               valeur= self.entry.get()
+                commentaire = "impossible d'évaluer : %s " %`valeurentree`
+               self.parent.appli.affiche_infos(commentaire)
+               
+      if validite : 
+         if self.node.item.is_list() :
+            validite=self.node.item.valide_liste_complete(valeur)
+            commentaire=self.node.item.info_erreur_liste()
+         else :
+           validite=self.node.item.valide_item(valeur)
+            commentaire=self.node.item.info_erreur_item()
+      if validite :
+          self.node.item.set_valeur(valeur)
+          self.parent.appli.affiche_infos(mess)
+          if self.node.item.get_position()=='global':
+              self.node.etape.verif_all()
+          elif self.node.item.get_position()=='global_jdc':
+              self.node.racine.verif_all()
+          else :
+              self.node.parent.verif()
+          self.node.update()
+          if self.node.item.isvalid():
+              self.node.parent.select()
+      else :
+          self.parent.appli.affiche_infos(commentaire)
 
 # ----------------------------------------------------------------------------------------
 #   Méthodes utilisées pour la manipulation des items dans les listes de choix
@@ -107,30 +138,35 @@ class newSIMPPanel(panels.OngletPanel):
       Supprime la valeur selectionnée de la liste des valeurs et la rajoute
       à la liste des choix possibles
       """
-      liste_valeurs = self.Liste_valeurs.get_liste()
-      liste_valeurs.remove(self.selected_valeur)
-      liste_choix = self.node.item.get_definition().into
-      liste_choix = substract_list(liste_choix,liste_valeurs)
-      self.Liste_valeurs.put_liste(liste_valeurs)
-      self.Liste_choix.put_liste(liste_choix)
-      self.selected_valeur = None
+      if hasattr(self,'selected_valeur') :
+         if ( self.selected_valeur != None and self.selected_valeur != ''):
+            liste_valeurs = self.Liste_valeurs.get_liste()
+            liste_valeurs.remove(self.selected_valeur)
+            self.Liste_valeurs.put_liste(liste_valeurs)
+            listeActuelle=self.Liste_valeurs.get_liste()
+            liste_choix=self.node.item.get_liste_possible(listeActuelle)
+            self.Liste_choix.put_liste(liste_choix)
+            self.selected_valeur = None
 
   def add_choix(self,name=None):
       """
       Ajoute le choix selectionné à la liste des valeurs et le retire
       de la liste des choix possibles
       """
-      min,max = self.node.item.GetMinMax()
-      liste_valeurs = self.Liste_valeurs.get_liste()
-      if len(liste_valeurs) >= max :
-          self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
-          return
-      liste_valeurs.append(self.selected_choix)
-      liste_choix = self.Liste_choix.get_liste()
-      #  liste_choix.remove(self.selected_choix)
-      self.Liste_valeurs.put_liste(liste_valeurs)
-      self.Liste_choix.put_liste(liste_choix)
-      self.selected_choix = None
+      
+      if hasattr(self,'selected_choix') :
+         if (self.selected_choix != None and self.selected_choix != ''):
+            min,max = self.node.item.GetMinMax()
+            liste_valeurs = self.Liste_valeurs.get_liste()
+            if len(liste_valeurs) >= max :
+                self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
+                return
+            liste_valeurs.append(self.selected_choix)
+            self.Liste_valeurs.put_liste(liste_valeurs)
+            listeActuelle=self.Liste_valeurs.get_liste()
+            liste_choix=self.node.item.get_liste_possible(listeActuelle)
+            self.Liste_choix.put_liste(liste_choix)
+            self.selected_choix = None
 
   def selectChoix(self,name):
       self.selected_choix = name
@@ -197,7 +233,7 @@ class SHELLPanel(newSIMPPanel):
           valeur = val
       else:
           valeur = self.node.item.get_valeur()
-      if valeur == None : return
+      if valeur == None  or valeur == '': return
       self.text.insert(END,valeur)
 
 class PLUSIEURS_Panel(newSIMPPanel):
@@ -211,17 +247,11 @@ class PLUSIEURS_Panel(newSIMPPanel):
       et l'affecte au mot-clé courant.
       """
       l1_valeurs = self.Liste_valeurs.get_liste()
-      # PN : remplacement des paramétres par leur nom (cf get_liste)
-      #      
       l_valeurs=[]
       for  val in l1_valeurs :
-           if val.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
-               v=val.nom
-           else:
-                v=val
-           l_valeurs.append(v)
+        if val != '' and val != None :
+           l_valeurs.append(val)
     
-      print "l_valeurs = ", l_valeurs
       longueur = len(l_valeurs)
       if longueur < min or longueur > max :
           self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
@@ -232,11 +262,11 @@ class PLUSIEURS_Panel(newSIMPPanel):
          valeur = l_valeurs[0]
       else:
          valeur = None
+
       self.parent.appli.affiche_infos("Valeur acceptée")
-      print "valeur = " ,valeur
       self.record_valeur(valeur)
-      if self.node.item.isvalid():
-          self.node.parent.select()
+      #if self.node.item.isvalid():
+      #    self.node.parent.select()
       # fermeture de la fenêtre de sélection
       if self.ajout_valeurs:
           self.ajout_valeurs.quit()
@@ -250,63 +280,67 @@ class PLUSIEURS_Panel(newSIMPPanel):
       if self.ajout_valeurs:
           self.ajout_valeurs.quit()
           
-  def traite_reel(self,valeur):
-      """
-      Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
-      ou de détecter si on fait référence à un concept produit par DEFI_VALEUR
-      ou un EVAL ...
-      """
-      valeur = string.strip(valeur)
-      liste_reels = self.node.item.get_sd_avant_du_bon_type()
-      if valeur in liste_reels:
-          return valeur
-      if len(valeur) >= 3 :
-          if valeur[0:4] == 'EVAL' :
-              # on a trouvé un EVAL --> on retourne directement la valeur
-              return valeur
-      if string.find(valeur,'.') == -1 :
-          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin
-          return valeur+'.'
-      else:
-          return valeur
-        
-  def add_valeur_sans_into(self,name=None):
+  def add_valeur_sans_into(self,name=None,encorevalide=1):
       """
       Lit ce que l'utilisateur a saisi dans self.entry et cherche à
       l'évaluer :
         - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
         - sinon elle est refusée
+      encorevalide vaut 1 si le validateur trouve l item et la liste correctes
+                        0 si le validateur trouve la valeur de l item incorrecte
+                       -1 si le validateur trouve la liste incorrecte
       """
-      min,max = self.node.item.GetMinMax()
+
+      commentaire="Valeur incorrecte : ajout à la liste refusé"
+      testvalide=1
+
+      # Lecture de la zone de saisie et evaluation si nécessaire
       if name != None :
-          valeur = name
-      else:
-          valeur = self.get_valeur()
-      if self.node.item.wait_reel():
-          valeur = self.traite_reel(valeur)
-      if self.node.item.wait_geom():
-          val,test1 = valeur,1
-      else:
-          val,test1 = self.node.item.object.eval_valeur(valeur)
-      if test1 :
-          test2 = self.node.item.object.verif_type(val)
-          if test2 :
-              liste_valeurs = self.Liste_valeurs.get_liste()
-              if len(liste_valeurs) >= max :
-                  self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
-                  self.erase_valeur()
-                  return
-              liste_valeurs.append(val)
-              self.Liste_valeurs.put_liste(liste_valeurs)
-              self.erase_valeur()
-              self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
-          else:
-              self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
+         valeur = name
       else:
-          print "impossible d'évaluer %s" %val
-          self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
-      #if self.node.item.isvalid():
-      #    self.node.parent.select()
+         valeurentree = self.get_valeur()
+         if valeurentree == '': valeur=None
+         valeurentree,testvalide=self.node.item.eval_valeur(valeur)
+         if (not testvalide) :
+            commentaire = "impossible d'évaluer : %s " %`valeurentree`
+
+      # Pas de traitement des valeurs nulles ( a priori clic involontaire
+      if (valeur == None or valeur =="") :
+          commentaire = "Pas de saisie des valeurs nulles"
+          encorevalide = -2 
+          testtype=0
+      else :
+          testtype = self.node.item.object.verif_type(valeur)
+          if not testtype :
+            commentaire ="Type de la valeur incorrecte"
+            encorevalide=-2
+               
+      if (encorevalide ==0) :
+         commentaire=self.node.item.info_erreur_item()
+      if (encorevalide == -1) :
+         commentaire=self.node.item.info_erreur_liste()
+        # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
+         min,max = self.node.item.GetMinMax()
+         if len(self.Liste_valeurs.get_liste()) >= max : 
+            commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+
+      if testvalide and (encorevalide == 1):
+         min,max = self.node.item.GetMinMax()
+
+         if testtype :
+            liste_valeurs = self.Liste_valeurs.get_liste()
+            if len(liste_valeurs) >= max :
+                commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+            else :
+               liste_valeurs.append(valeur)
+               self.Liste_valeurs.put_liste(liste_valeurs)
+               self.erase_valeur()
+               commentaire="Nouvelle valeur acceptée"
+         else :
+            commentaire ="Type de la valeur incorrecte"
+
+      #self.erase_valeur()
+      self.parent.appli.affiche_infos(commentaire)
 
   def sup_valeur_sans_into(self,name=None):
       """
@@ -319,7 +353,6 @@ class PLUSIEURS_Panel(newSIMPPanel):
           # la valeur sélectionnée n'est pas dans la liste
           return
       self.Liste_valeurs.put_liste(liste_valeurs)
-      #self.display_valeur('')
       self.display_valeur(self.selected_valeur)
       self.selected_valeur = None      
 
@@ -355,9 +388,12 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
       bulle_aide=self.get_bulle_aide()
       objet_mc = self.node.item.get_definition()
       min,max = self.node.item.GetMinMax()
-      l_choix=list(objet_mc.into)
-      l_choix.sort()
+      #l_choix=list(objet_mc.into)
+      l_valeurs = self.node.item.GetListeValeurs()
+      l_choix= self.node.item.get_liste_possible(l_valeurs)
+      # reinitialisation de l_valeurs
       l_valeurs = self.node.item.GetListeValeurs()
+
       # remplissage du panneau
       self.frame_valeurs = Frame(page)
       self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
@@ -375,9 +411,11 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
       liste_commandes_choix = (("<Button-1>",self.selectChoix),
                                ("<Button-3>",self.deselectChoix),
                                ("<Double-Button-1>",self.add_choix))
-      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
+                                      l_valeurs,liste_commandes = liste_commandes_valeurs,
                                       titre="Valeur(s) actuelle(s)")
-      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
+      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
+                                    liste_commandes = liste_commandes_choix,
                                     titre= "Valeurs possibles")
       bouton_add = Button(self.frame_boutons_fleches,
                           #text="<--",
@@ -415,6 +453,7 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
       Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
       que saisit l'utilisateur
       """
+      commentaire=""
       mc = self.node.item.get_definition()
       d_aides = { 'TXM' : 'chaînes de caractères',
                   'R'   : 'réels',
@@ -427,10 +466,12 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
          else :
            return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
       if mc.min == mc.max:
-          return "Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
+           commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
       else :
-          return "Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
-      return "  "
+           commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
+      aideval=self.node.item.aide()
+      commentaire=commentaire + "\n" + aideval
+      return commentaire
 
   def get_bulle_aide(self):
       """
@@ -467,6 +508,7 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       aide = justify_text(texte=aide)
       min,max = self.node.item.GetMinMax()
       l_valeurs = self.node.item.GetListeValeurs()
+
       # création des frames globales
       self.frame1 = Frame(page,relief='groove',bd=2)
       self.frame2 = Frame(page)
@@ -474,6 +516,7 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
       self.frame_right = Frame(self.frame1)
       self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+
       # création des frames internes
       self.frame_valeurs = Frame(self.frame1)
       self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
@@ -489,26 +532,31 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
                  self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
           fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
           fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
       # création des objets dans les frames
       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
                                  ("<Button-3>",self.deselectValeur),
                                  ("<Double-Button-1>",self.sup_valeur_sans_into))
       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
                                       titre="Valeur(s) actuelle(s)")
+
       # Création de l'entry ou de la liste des SD
       self.label = Label(self.frame_choix,text="Valeur :")
-      self.make_entry(frame = self.frame_choix,command = self.add_valeur_sans_into)
+      # PN : pour ajouter les validators
+      self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
       self.label.place(relx=0.05,rely=0.5)
+
       # Création d'un bouton "Importer ..." sur le panel.
       bouton_valeurs_fichier = Button(self.frame_choix,
                                       text="Importer ...",
                                       command=self.select_in_file)
       bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
       self.ajout_valeurs = None
+
       # boutons Ajouter et Supprimer
       bouton_add = Button(self.frame_boutons_fleches,
                           image = images.get_image('arrow_left'),
-                          command = self.add_valeur_sans_into)
+                          command = self.add_valeur_plusieurs_base)
       bouton_sup = Button(self.frame_boutons_fleches,
                           image = images.get_image('arrow_right'),
                           command = self.sup_valeur_sans_into)
@@ -533,6 +581,25 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       for but in (bouton_accepter,bouton_annuler):
           but.pack(side='left',padx=5)
 
+  def add_valeur_plusieurs_base(self,name=None):
+      if name != None :
+         valeur = name
+      else:
+         valeurentree = self.get_valeur()
+         if valeurentree == '': valeur=None
+         valeur,validite=self.node.item.eval_valeur(valeurentree)
+         if not validite :
+            commentaire = "impossible d'évaluer : %s " %`valeurentree`
+            self.parent.appli.affiche_infos(commentaire)
+            return
+
+      encorevalide=self.node.item.valide_item(valeur)
+      if encorevalide :
+         listecourante=self.Liste_valeurs.get_liste()
+         encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
+         if not encorevalide : encorevalide = -1
+      self.add_valeur_sans_into(valeur,encorevalide)
+    
   def select_in_file(self):
       """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
       nom_fichier = askopenfilename(title="Choix fichier :")
@@ -572,6 +639,7 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
       que saisit l'utilisateur
       """
+      commentaire=""
       mc = self.node.item.get_definition()
       d_aides = { 'TXM' : 'chaînes de caractères',
                   'R'   : 'réels',
@@ -580,9 +648,12 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       type = mc.type[0]
       if not d_aides.has_key(type) : return 'Type de base inconnu'
       if mc.min == mc.max:
-          return "Une liste de "+d_aides[type]+" chaînes de caractères est attendue"
+          commentaire="Une liste de "+d_aides[type]+" chaînes de caractères est attendue"
       else :
-          return "Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+          commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+aideval
+      return commentaire
 
   def make_entry(self,frame,command):
       """
@@ -657,7 +728,8 @@ class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
                                  ("<Double-Button-1>",self.sup_valeur_sans_into))
       liste_commandes_choix = (("<Button-1>",self.selectChoix),
                                ("<Button-3>",self.deselectChoix),
-                               ("<Double-Button-1>",self.add_valeur_sans_into))
+      #                         ("<Double-Button-1>",self.add_valeur_sans_into))
+                               ("<Double-Button-1>",self.add_eval_valeur_sans_into))
       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
                                       titre="Valeur(s) actuelle(s)")
       self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
@@ -665,7 +737,8 @@ class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
       bouton_add = Button(self.frame_boutons_fleches,
                           #text="<--",
                           image = images.get_image('arrow_left'),
-                          command = self.add_valeur_sans_into)
+      #                    command = self.add_valeur_sans_into)
+                          command = self.add_eval_valeur_sans_into)
       bouton_sup = Button(self.frame_boutons_fleches,
                           #text="-->",
                           image = images.get_image('arrow_right'),
@@ -685,6 +758,14 @@ class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
       for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
           fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
           fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+  
+  def add_eval_valeur_sans_into(self,valeurentree=None):
+      valeur,validite=self.node.item.eval_valeur(valeurentree)
+      if not validite :
+             commentaire = "impossible d'évaluer : %s " %`valeurentree`
+             self.parent.appli.affiche_infos(commentaire)
+             return
+      self.add_valeur_sans_into(valeur)
 
   def get_bulle_aide(self):
       """
@@ -706,15 +787,20 @@ class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
       Retourne la phrase d'aide indiquant de quel type doivent être les
       valeurs que doit entrer l'utilisateur
       """
+      commentaire=""
       mc = self.node.item.get_definition()
       type = mc.type[0].__name__  
       if len(mc.type)>1 :
           for typ in mc.type[1:] :
               type = type + ' ou '+typ.__name__
       if mc.min == mc.max:
-        return "Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
+        commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
       else :
-        return "Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+        commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
+
     
   def sup_valeur(self,name=None):
       """
@@ -772,13 +858,20 @@ class UNIQUE_Panel(newSIMPPanel):
       - si non, restaure l'ancienne valeur
       """
       if self.parent.modified == 'n' : self.parent.init_modif()
-      valeur = self.get_valeur()
-      self.erase_valeur()
       anc_val = self.node.item.get_valeur()
+      valeurentree = self.get_valeur()
+      self.erase_valeur()
+      valeur,validite=self.node.item.eval_valeur(valeurentree)
+      if not validite :
+             commentaire = "impossible d'évaluer : %s " %`valeurentree`
+             self.parent.appli.affiche_infos(commentaire)
+             return
+   
       test = self.node.item.set_valeur(valeur)
+       
       if not test :
           mess = "impossible d'évaluer : %s " %`valeur`
-          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess)
       elif self.node.item.isvalid() :
           self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
          if self.node.item.get_position()=='global':
@@ -792,7 +885,7 @@ class UNIQUE_Panel(newSIMPPanel):
       else :
           cr = self.node.item.get_cr()
           mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.record_valeur(anc_val,mess=mess)
+          self.reset_old_valeur(anc_val,mess=mess)
 
 class UNIQUE_INTO_Panel(UNIQUE_Panel):
   """
@@ -811,10 +904,12 @@ class UNIQUE_INTO_Panel(UNIQUE_Panel):
       # remplissage du panel
       self.frame_valeur = Frame(page)
       self.frame_valeur.pack(fill='both',expand=1)
-      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : 
+                              s.parent.appli.affiche_aide(e,a))
       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      l_choix=list(objet_mc.into)
-      l_choix.sort()
+      #l_choix=list(objet_mc.into)
+      #l_choix.sort()
+      l_choix=self.node.item.get_liste_possible([])
       self.label = Label(self.frame_valeur,text='Choisir une valeur :')
       self.label.pack(side='top')
       self.frame = Frame(page)
@@ -822,7 +917,8 @@ class UNIQUE_INTO_Panel(UNIQUE_Panel):
       liste_commandes = (("<Button-1>",self.selectChoix),
                          ("<Button-3>",self.deselectChoix),
                          ("<Double-Button-1>",self.record_valeur))
-      self.Liste_choix = ListeChoix(self,self.frame,l_choix,liste_commandes = liste_commandes,
+      self.Liste_choix = ListeChoix(self,self.frame,l_choix,
+                                    liste_commandes = liste_commandes,
                                     titre="Valeurs possibles")
       self.Liste_choix.affiche_liste()
 
@@ -867,7 +963,7 @@ class UNIQUE_ASSD_Panel(UNIQUE_Panel):
       else :
           cr = self.node.item.get_cr()
           mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.record_valeur(anc_val,mess=mess)
+          self.reset_old_valeur(anc_val,mess=mess)
 
   def makeValeurPage(self,page):
       """
@@ -922,7 +1018,11 @@ class UNIQUE_ASSD_Panel(UNIQUE_Panel):
       if len(mc.type)>1 :
           for typ in mc.type[1:] :
               type = type + ' ou '+typ.__name__
-      return  "Un objet de type "+type+" est attendu"
+      commentaire="Un objet de type "+type+" est attendu"
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
+
     
   def select_valeur_from_list(self):
       """
@@ -953,7 +1053,7 @@ class UNIQUE_ASSD_Panel(UNIQUE_Panel):
       Affiche la valeur de l'objet pointé par self
       """
       valeur = self.node.item.get_valeur()
-      if valeur == None : return # pas de valeur à afficher ...
+      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
       self.valeur_choisie.set(valeur.nom)
 
   def erase_valeur(self):
@@ -1048,7 +1148,7 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
       else :
           cr = self.node.item.get_cr()
           mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.record_valeur(anc_val,mess=mess)
+          self.reset_old_valeur(anc_val,mess=mess)
           return
       if self.node.item.get_position()=='global':
           self.node.etape.verif_all()
@@ -1077,7 +1177,7 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
       else :
           cr = self.node.item.get_cr()
           mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.record_valeur(anc_val,mess=mess)
+          self.reset_old_valeur(anc_val,mess=mess)
           return
       if self.node.item.get_position()=='global':
           self.node.etape.verif_all()
@@ -1201,7 +1301,10 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
                   'R'   : "Un réel est attendu",
                   'I'   : "Un entier est attendu"}
       type = mc.type[0]
-      return d_aides.get(type,"Type de base inconnu")
+      commentaire=d_aides.get(type,"Type de base inconnu")
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
 
   def get_bulle_aide(self):
       """
@@ -1215,7 +1318,7 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
       Affiche la valeur de l'objet pointé par self
       """
       valeur = self.node.item.get_valeur()
-      if valeur == None : return # pas de valeur à afficher ...
+      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
       self.entry.delete(0,END)
       self.entry.insert(0,valeur)
       self.entry.focus()
@@ -1275,7 +1378,10 @@ class UNIQUE_COMP_Panel(UNIQUE_Panel):
       Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
       le mot-clé simple courant
       """
-      return 'Un complexe est attendu'
+      commentaire='Un complexe est attendu'
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
 
   def get_valeur(self):
       """
@@ -1311,23 +1417,15 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       if self.wait_shell():
           # l'objet attend un shell
           self.panel = SHELLPanel
-      elif self.wait_into():
+      elif self.has_into():
           # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
-          min,max = self.GetMinMax()
-          # PN : 
-          # Remplacement du if ??
-          #if max != 1 and ((min != 0 and min != max) or (min == 0)):
-          assert (min <= max)
-          if max > 1 :
-             # l'objet attend une liste de valeurs
+          if self.is_list() :
              self.panel = PLUSIEURS_INTO_Panel
           else:
-             # l'objet n'attend qu'une seule valeur
              self.panel = UNIQUE_INTO_Panel
       else:
           # l'objet prend une ou des valeurs à priori quelconques
-          min,max = self.GetMinMax()
-          if max != 1 :
+          if self.is_list() :
               # on attend une liste de valeurs mais de quel type ?
               if self.wait_assd():
                   # on attend une liste de SD
@@ -1351,59 +1449,32 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
                   else:
                       # on attend un entier, un réel ou une string
                       self.panel = UNIQUE_BASE_Panel
-      
-  def SetText(self, text):
-    try:
-      value = eval(text)
-      self.object.setval(value)
-    except:
-      pass
-
-  def GetIconName(self):
-    if self.isvalid():
-      return "ast-green-ball"
-    elif self.object.isoblig():
-      return "ast-red-ball"
-    else:
-      return "ast-yel-ball"
-
-  def GetText(self):
-    """
-    Classe SIMPTreeItem
-    Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
-    pointé par self 
-    """
-    text= self.object.GetText()
-    return text
+      print "affect_panel : ",self.panel
 
-  def has_into(self):
+  def is_list(self):
       """
-          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
-          ou s'il n'en propose pas (valeur de retour 0)
+          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+          ou s'il n'en attend pas (valeur de retour 0)
 
           Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
-          Dans le cas sans validateur, l'information est donnée par l'attribut into
+          Dans le cas sans validateur, l'information est donnée par l'attribut max
           de la definition du mot cle.
           Dans le cas avec validateur, il faut combiner l'information précédente avec
-          celle issue de l'appel de la méthode has_into sur le validateur. On utilisera
+          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
           l'operateur ET pour effectuer cette combinaison (AndVal).
       """
-      if not self.object.definition.validators:
-           if self.definition.into:
-               return 1
-           else:
-               return 0
-      else:
-           # Dans le cas avec validateurs, pour que le mot cle soit considéré
-           # comme proposant un choix, il faut que into soit présent OU
-           # que la méthode has_into du validateur retourne 1. Dans les autres cas
-           # on retournera 0 (ne propose pas de choix)
-           if self.definition.into:
-                return 1
-           elif self.object.definition.validators.has_into():
-                return 1
-           else:
-                return 0
+      is_a_list=0
+      min,max = self.GetMinMax()
+      assert (min <= max)
+      if max > 1 :
+               is_a_list=1
+      # Dans le cas avec validateurs, pour que le mot cle soit considéré
+      # comme acceptant une liste, il faut que max soit supérieur a 1
+      # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+      # on retournera 0 (n'attend pas de liste)
+      if self.definition.validators :
+         is_a_list= self.definition.validators.is_list() * is_a_list
+      return is_a_list 
 
   def get_into(self,liste_courante=None):
       """
@@ -1419,35 +1490,108 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
          return self.object.definition.into
       else:
          return self.object.definition.validators.get_into(liste_courante,self.definition.into)
-         
-  def is_list(self):
+
+  def has_into(self):
       """
-          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
-          ou s'il n'en attend pas (valeur de retour 0)
+          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+          ou s'il n'en propose pas (valeur de retour 0)
 
           Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
-          Dans le cas sans validateur, l'information est donnée par l'attribut max 
+          Dans le cas sans validateur, l'information est donnée par l'attribut into
           de la definition du mot cle.
-          Dans le cas avec validateur, il faut combiner l'information précédente avec
-          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
-          l'operateur ET pour effectuer cette combinaison (AndVal).
-      """
-      if not self.object.definition.validators:
-           if self.definition.max <= 1:
-               return 0
-           else: 
-               return 1
-      else:
-           # Dans le cas avec validateurs, pour que le mot cle soit considéré 
-           # comme acceptant une liste, il faut que max soit supérieur a 1
-           # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
-           # on retournera 0 (n'attend pas de liste)
-           if self.definition.max <= 1:
-                return 0
-           elif not self.object.definition.validators.is_list():
-                return 0
-           else:
-                return 1
+         Dans le cas avec validateurs, pour que le mot cle soit considéré
+          comme proposant un choix, il faut que into soit présent OU
+          que la méthode has_into du validateur retourne 1. Dans les autres cas
+          on retournera 0 (ne propose pas de choix)
+      """
+      has_an_into=0
+      if self.definition.into:
+        has_an_into=1
+      elif self.definition.validators :
+         has_an_into= self.definition.validators.has_into()
+      return has_an_into
+
+  def valide_item(self,item):
+      """
+       On fait un try except pour les erreurs de types (exple
+       on rentre 1 pour une chaine de caracteres
+      """
+      valide=1
+      if self.definition.validators :
+         try :
+            valide=self.definition.validators.verif_item(item)
+         except :
+           valide = 0
+      return valide
+     
+  def valide_liste_partielle(self,item,listecourante):
+      valeuravant=self.object.valeur
+      valeur=listecourante
+      valeur.append(item)
+      valeur = tuple(valeur)
+      retour=self.object.set_valeur(valeur)
+      validite=0
+      if self.object.isvalid():
+         validite=1
+      elif self.definition.validators :
+         validite=self.definition.validators.valide_liste_partielle(valeur)
+      if validite==0:
+         min,max=self.GetMinMax()
+         if len(valeur) < min :
+           validite=1
+      retour=self.object.set_valeur(valeuravant)
+      return validite 
+
+  def valide_liste_complete (self,valeur):
+      valeuravant=self.object.valeur
+      retour=self.object.set_valeur(valeur)
+      validite=0
+      if self.object.isvalid():
+         validite=1
+      retour=self.object.set_valeur(valeuravant)
+      return validite
+     
+  def info_erreur_item(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_item()
+      return commentaire
+      
+  def aide(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.aide()
+      return commentaire
+
+  def info_erreur_liste(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_liste()
+      return commentaire
+
+  def SetText(self, text):
+    try:
+      value = eval(text)
+      self.object.setval(value)
+    except:
+      pass
+
+  def GetIconName(self):
+    if self.isvalid():
+      return "ast-green-ball"
+    elif self.object.isoblig():
+      return "ast-red-ball"
+    else:
+      return "ast-yel-ball"
+
+  def GetText(self):
+    """
+    Classe SIMPTreeItem
+    Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+    pointé par self 
+    """
+    text= self.object.GetText()
+    return text
 
   def wait_co(self):
       """
@@ -1546,6 +1690,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       Retourne la liste des noms des SD présentes avant l'étape qui contient
       le MCS pointé par self et du type requis par ce MCS
       """
+      a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
       return self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,
                                                                self.object.definition.type)
     
@@ -1557,14 +1702,64 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       pass
 
   def isvalid(self):
+    valide=self.object.isvalid()
     return self.object.isvalid()
 
   def eval_valeur(self,valeur):
       """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur
       de l'objet pointé par self :
         - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
-        - retourne 'valeur' (chaîne de caractères) sinon """
-      return self.object.eval_valeur(valeur)
+        - retourne 'valeur' (chaîne de caractères) sinon
+        - retourne None en cas d invalidite
+        - retourne invalide si 1 des objets du tuple l est
+      """
+      validite=1
+      if type(valeur) in (types.ListType,types.TupleType) :
+         valeurretour=[]
+         for item in valeur :
+             newvaleur,validiteitem=self.eval_valeur_item(item)
+             valeurretour.append(newvaleur)
+             if validiteitem == 0:
+               validite=0
+      else :
+         valeurretour,validite= self.eval_valeur_item(valeur)
+      if validite == 0 :
+        valeurretour = None
+      return valeurretour,validite
+
+  def eval_valeur_item(self,valeur):
+      if valeur==None or valeur == "" :
+        return None,0
+      validite=1
+      if self.wait_reel():
+             valeurinter = self.traite_reel(valeur)
+             valeurretour,validite= self.object.eval_valeur(valeurinter)
+      elif self.wait_geom():
+             valeurretour,validite = valeur,1
+      else :
+             valeurretour,validite= self.object.eval_valeur(valeur)
+      if validite == 0:
+        if type(valeur) == types.StringType and self.object.wait_TXM():
+            essai_valeur="'" + valeur + "'"
+            valeurretour,validite= self.object.eval_valeur(essai_valeur)
+      if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+            validite=1
+      if self.wait_co():
+         try:
+            valeurretour=Accas.CO(valeur)
+         except:
+            valeurretour=None
+            validite=0
+
+      # on est dans le cas où on a évalué et où on n'aurait pas du
+      if self.object.wait_TXM() :
+         if type(valeurretour) != 'str':
+                if valeur[0]=="'" and valeur[-1]=="'" :
+                  valeurretour=str(valeur)
+                  validite=1
+
+      return valeurretour,validite
+      
 
   def is_CO(self,valeur=None):
       """
@@ -1594,6 +1789,51 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       #self.object.etape.parent.del_sdprod(valeur)
       self.object.etape.parent.delete_concept(valeur)
 
+  def get_liste_possible(self,listeActuelle=[]):
+      if hasattr(self.definition.validators,'into'):
+        self.get_definition().into=self.definition.validators.into 
+      valeurspossibles = self.get_definition().into
+      listevalideitem=[]
+      for item in valeurspossibles:
+          encorevalide=self.valide_item(item)
+          if encorevalide :
+             listevalideitem.append(item)
+      # on ne verifie pas la liste des choix si max = 1 
+      # (sinon cela enleve tous les choix possibles)
+      min,max=self.GetMinMax()
+      if max != 1 : 
+         listevalideliste=[]
+         for item in listevalideitem:
+             listetravail=[]
+             for item2 in listeActuelle : listetravail.append(item2)
+             encorevalide=self.valide_liste_partielle(item,listetravail)
+             if encorevalide :
+                listevalideliste.append(item)
+      else :
+         listevalideliste=listevalideitem
+      return listevalideliste
+
+  def traite_reel(self,valeur):
+      """
+      Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
+      ou de détecter si on fait référence à un concept produit par DEFI_VALEUR
+      ou un EVAL ...
+      """
+      valeur = string.strip(valeur)
+      liste_reels = self.get_sd_avant_du_bon_type()
+      if valeur in liste_reels:
+          return valeur
+      if len(valeur) >= 3 :
+          if valeur[0:4] == 'EVAL' :
+              # on a trouvé un EVAL --> on retourne directement la valeur
+              return valeur
+      if string.find(valeur,'.') == -1 :
+          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin
+          return valeur+'.'
+      else:
+          return valeur
+        
+
 import Accas
 treeitem = SIMPTreeItem
 objet = Accas.MCSIMP
index f186acbcef90abff0335234199e70053dbbfb2b2..44eb986f6bab3ad9b1c85e8f6cb4e1487b98b9aa 100644 (file)
@@ -23,6 +23,7 @@
 import os,re
 import glob
 import traceback
+import codecs,types
 
 def substract_list(liste1,liste2):
   """ 
@@ -83,12 +84,16 @@ def save_in_file(file,text):
       retourne 1 si OK 0 sinon
   """
   try :
-    f=open(file,'w+')
-    f.write(text)
-    f.close()
-    return 1
+      if type(text) == types.StringType:
+         f=open(file,'w')
+      else:
+         # Probablement Unicode
+         f=codecs.open(file,'w','iso-8859-1')
+      f.write(text)
+      f.close()
+      return 1
   except:
-    return 0
+      return 0
 
 def extension_fichier(pathAndFile):
     """ Return ext if path/filename.ext is given """
index e33547a1230bd3d2440028a8d7c0dddd8e763260..593cf88b0aa3ff9e3940cf33f90941b96d40f7a2 100644 (file)
@@ -696,10 +696,10 @@ class ListeChoix :
     def get_liste(self):
         l=[]
         for val in self.liste:
-            try:
-                v = eval(val)
-               l.append(v)
-            except:
+#            try:
+#                v = eval(val)
+#              l.append(v)
+#            except:
                 l.append(val)
         return l
     
index 6528f0d32142fe1a8f110b898d098fa304a5660a..a58727b905e542c28537f2dc98b4074bf0b99739 100644 (file)
 """
 """
 # Modules Python
-import sys
+import sys,re
 import string,types
 from copy import copy
 
+# Objet re pour controler les identificateurs Python
+concept_re=re.compile(r'[a-zA-Z_]\w*$')
+
 # import rajoutés suite à l'ajout de Build_sd --> à résorber
 import traceback
 import Noyau
@@ -91,8 +94,13 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
             - 0 si le nommage n'a pas pu etre mené à son terme,
             - 1 dans le cas contraire
       """
+      # Le nom d'un concept doit etre un identificateur Python (toujours vrai ?)
+      if not concept_re.match(nom):
+         return 0,"Un nom de concept doit etre un identificateur Python"
+
       if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
         return 0,"Nom de concept trop long (maxi 8 caractères)"
+
       self.init_modif()
       #
       # On verifie d'abord si les mots cles sont valides
@@ -283,6 +291,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       for child in self.mc_liste :
         child.replace_concept(old_sd,sd)
 
+#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
    def make_register(self):
       """
          Initialise les attributs jdc, id, niveau et réalise les
@@ -380,7 +389,29 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
      for motcle in self.mc_liste :
          motcle.verif_existence_sd()
      
+#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
    def Build_sd(self,nom):
+      """
+           Methode de Noyau surchargee pour poursuivre malgre tout
+           si une erreur se produit pendant la creation du concept produit
+      """
+      try:
+         sd=Noyau.N_ETAPE.ETAPE.Build_sd(self,nom)
+      except AsException,e:
+         # Une erreur s'est produite lors de la construction du concept
+         # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+         # Si on poursuit, on a le choix entre deux possibilités :
+         # 1. on annule la sd associée à self
+         # 2. on la conserve mais il faut la retourner
+         # En plus il faut rendre coherents sdnom et sd.nom
+         self.sd=None
+         self.sdnom=None
+         self.state="unchanged"
+         self.valid=0
+
+      return self.sd
+
+   def Build_sd_old(self,nom):
       """
          Construit le concept produit de l'opérateur. Deux cas 
          peuvent se présenter :
index 751cacda98d6a0eb8ef6fc3cae024ec5281f9555..9057c9b84d0751b22a31979c8e1118b5f625cd60 100644 (file)
@@ -23,6 +23,7 @@ class JDC_CATA:
   def __init__(self):
     self.l_noms_entites=[]
 
+#ATTENTION SURCHARGE: cette methode doit etre synchronisée avec celle du Noyau
   def enregistre(self,commande):
     """ 
         Cette méthode surcharge la méthode de la classe du Noyau
index f301d6a2007e3bb2d3af90a7b10f1722b55d6d7b..fa7ed33e6c6524cb73958e3f4fe039c2bd03a6d7 100644 (file)
@@ -268,8 +268,33 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
       # On met g_context à blanc
       self.g_context={}
          
-#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro)
+#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
   def Build_sd(self,nom):
+      """
+           Methode de Noyau surchargee pour poursuivre malgre tout
+           si une erreur se produit pendant la creation du concept produit
+      """
+      try:
+         sd=Noyau.N_MACRO_ETAPE.MACRO_ETAPE.Build_sd(self,nom)
+         self.state="unchanged"
+         self.valid=1
+      except AsException,e:
+         # Une erreur s'est produite lors de la construction du concept
+         # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+         # Si on poursuit, on a le choix entre deux possibilités :
+         # 1. on annule la sd associée à self
+         # 2. on la conserve mais il faut la retourner
+         # On choisit de l'annuler
+         # En plus il faut rendre coherents sdnom et sd.nom
+         self.sd=None
+         self.sdnom=None
+         self.state="unchanged"
+         self.valid=0
+
+      return self.sd
+
+#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro ou a reintegrer)
+  def Build_sd_old(self,nom):
      """
         Construit le concept produit de l'opérateur. Deux cas 
         peuvent se présenter :
index 7baeb14264376fe08c06b4b837c535d7bcc1bf3b..f85d97a5c88654a5116330af645755fae8aea9b0 100644 (file)
@@ -66,6 +66,10 @@ class MCSIMP(I_OBJECT.OBJECT):
            txt=txt + i*',' + str(val)
         elif type(val) == types.InstanceType and isinstance(val,ASSD): 
            txt = txt + i*',' + val.get_name()
+    #PN
+    # ajout du elif
+        elif val.__class__.__name__ in  ('PARAMETRE','PARAMETRE_EVAL'):
+            txt = txt + i*','+ str(val) 
         else: 
            txt = txt + i*','+ myrepr.repr(val)
         i=1
@@ -182,57 +186,52 @@ class MCSIMP(I_OBJECT.OBJECT):
   def isoblig(self):
     return self.definition.statut=='o'
 
+#  def set_valeur(self,new_valeur,evaluation='oui'):
+#    """
+#        Remplace la valeur de self(si elle existe) par new_valeur
+#            - si evaluation = 'oui' : 
+#                        essaie d'évaluer new_valeur dans le contexte
+#            - si evaluation = 'non' : 
+#                        n'essaie pas d'évaluer (on stocke une string ou 
+#                        une valeur de la liste into )
+#    """
+#    if evaluation == 'oui' and not self.wait_assd_or_geom():
+#      valeur,test = self.eval_valeur(new_valeur)
+#      if test :
+#        self.val = new_valeur
+#        self.valeur = valeur
+#        self.init_modif()
+#        self.fin_modif()
+#        return 1
+#      else:
+#        # On n'a pas trouve de concept ni réussi à évaluer la valeur 
+#        # dans le contexte
+#        # Si le mot cle simple attend un type CO on crée un objet de ce 
+#        # type de nom new_valeur
+#        if self.wait_co():
+#          try:
+#            # Pour avoir la classe CO avec tous ses comportements
+#            from Accas import CO
+#            self.valeur=CO(new_valeur)
+#          except:
+#            traceback.print_exc()
+#            return 0
+#          self.init_modif()
+#          self.val=self.valeur
+#          self.fin_modif()
+#          return 1
+#        elif type(new_valeur)==types.StringType and self.wait_TXM():
+#          self.init_modif()
+#          self.val = new_valeur
+#          self.valeur = new_valeur
+#          self.fin_modif()
+#          return 1
+#        else:
+#          return 0
+#    else :
+      # on ne fait aucune vérification ...
   def set_valeur(self,new_valeur,evaluation='oui'):
-    """
-        Remplace la valeur de self(si elle existe) par new_valeur
-            - si evaluation = 'oui' : 
-                        essaie d'évaluer new_valeur dans le contexte
-            - si evaluation = 'non' : 
-                        n'essaie pas d'évaluer (on stocke une string ou 
-                        une valeur de la liste into )
-    """
-    if evaluation == 'oui' and not self.wait_assd_or_geom():
-      valeur,test = self.eval_valeur(new_valeur)
-      if test :
-        self.val = new_valeur
-        self.valeur = valeur
         self.init_modif()
-        self.fin_modif()
-        return 1
-      else:
-        # On n'a pas trouve de concept ni réussi à évaluer la valeur 
-        # dans le contexte
-        # Si le mot cle simple attend un type CO on crée un objet de ce 
-        # type de nom new_valeur
-        if self.wait_co():
-          try:
-            # Pour avoir la classe CO avec tous ses comportements
-            from Accas import CO
-            self.valeur=CO(new_valeur)
-          except:
-            traceback.print_exc()
-            return 0
-          self.init_modif()
-          self.val=self.valeur
-          self.fin_modif()
-          return 1
-        elif type(new_valeur)==types.StringType and self.wait_TXM():
-          self.init_modif()
-          self.val = new_valeur
-          self.valeur = new_valeur
-          self.fin_modif()
-          return 1
-        else:
-          return 0
-    else :
-      # on ne fait aucune vérification ...
-      self.init_modif()
-      try:
-        self.valeur = eval(new_valeur)
-        self.val = eval(new_valeur)
-        self.fin_modif()
-        return 1
-      except:
         self.valeur = new_valeur
         self.val = new_valeur
         self.fin_modif()
@@ -243,7 +242,6 @@ class MCSIMP(I_OBJECT.OBJECT):
         Essaie d'évaluer new_valeur comme une SD, une déclaration Python 
         ou un EVAL: Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
     """
-    #sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape)
     sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None)
     if sd :
       return sd,1
@@ -256,15 +254,6 @@ class MCSIMP(I_OBJECT.OBJECT):
         objet = eval(new_valeur,d)
         return objet,1
       except Exception:
-# PN :
-#    - Ajout de quote autour de la valeur en cas de chaine de caracteres 
-        if type(new_valeur)==types.StringType and self.wait_TXM():
-            new_valeur="'"+new_valeur+"'"
-            try :
-               objet = eval(new_valeur,d)
-               return objet,1
-            except :
-               return None,0
         if CONTEXT.debug : traceback.print_exc()
         return None,0
 
@@ -433,3 +422,144 @@ class MCSIMP(I_OBJECT.OBJECT):
  
 #ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
 # Elles doivent etre reintegrees des que possible
+
+  def is_complexe(self,valeur):
+      """ Retourne 1 si valeur est un complexe, 0 sinon """
+      if type(valeur) == types.InstanceType :
+        #XXX je n'y touche pas pour ne pas tout casser mais il serait
+        #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('C'), par exemple
+        if valeur.__class__.__name__ in ('EVAL','complexe','PARAMETRE_EVAL'):
+          return 1
+        elif valeur.__class__.__name__ in ('PARAMETRE',):
+          # il faut tester si la valeur du parametre est un entier
+          #XXX ne serait ce pas plutot complexe ???? sinon expliquer
+          return self.is_entier(valeur.valeur)
+        else:
+          print "Objet non reconnu dans is_complexe %s" %`valeur`
+          return 0
+      # Pour permettre l'utilisation de complexes Python
+      #elif type(valeur) == types.ComplexType:
+        #return 1
+      elif type(valeur) != types.TupleType :
+        return 0
+      else:
+        if len(valeur) != 3 :
+          return 0
+        else:
+          if type(valeur[0]) != types.StringType : return 0
+          if string.strip(valeur[0]) not in ('RI','MP'):
+            return 0
+          else:
+            if not self.is_reel(valeur[1]) or not self.is_reel(valeur[2]) : return 0
+            else: return 1
+
+  def is_reel(self,valeur):
+      """
+      Retourne 1 si valeur est un reel, 0 sinon
+      """
+      if type(valeur) == types.InstanceType :
+        #XXX je n'y touche pas pour ne pas tout casser mais il serait
+        #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('R'), par exemple
+        #XXX ou valeur.is_reel()
+        #XXX ou encore valeur.compare(self.is_reel)
+        if valeur.__class__.__name__ in ('EVAL','reel','PARAMETRE_EVAL') :
+          return 1
+        elif valeur.__class__.__name__ in ('PARAMETRE',):
+          # il faut tester si la valeur du parametre est un réel
+          return self.is_reel(valeur.valeur)
+        else:
+          print "Objet non reconnu dans is_reel %s" %`valeur`
+          return 0
+      elif type(valeur) not in (types.IntType,types.FloatType,types.LongType):
+        # ce n'est pas un réel
+        return 0
+      else:
+        return 1
+
+  def is_entier(self,valeur):
+      """ Retourne 1 si valeur est un entier, 0 sinon """
+      if type(valeur) == types.InstanceType :
+        #XXX je n'y touche pas pour ne pas tout casser mais il serait
+        #XXX préférable d'appeler une méthode de valeur : return valeur.is_type('I'), par exemple
+        if valeur.__class__.__name__ in ('EVAL','entier','PARAMETRE_EVAL') :
+          return 1
+        elif valeur.__class__.__name__ in ('PARAMETRE',):
+          # il faut tester si la valeur du parametre est un entier
+          return self.is_entier(valeur.valeur)
+        else:
+          print "Objet non reconnu dans is_reel %s" %`valeur`
+          return 0
+      elif type(valeur) not in (types.IntType,types.LongType):
+        # ce n'est pas un entier
+        return 0
+      else:
+        return 1
+
+  def is_object_from(self,objet,classe):
+      """
+           Retourne 1 si valeur est un objet de la classe classe ou d'une 
+           sous-classe de classe, 0 sinon
+      """
+      if type(objet) != types.InstanceType :
+          return 0
+      if not objet.__class__ == classe and not issubclass(objet.__class__,classe):
+        return 0
+      else:
+        return 1
+
+  def get_valid(self):
+       if hasattr(self,'valid'):
+          return self.valid
+       else:
+          self.valid=None
+          return None
+
+  def set_valid(self,valid):
+       old_valid=self.get_valid()
+       self.valid = valid
+       self.state = 'unchanged'
+       if not old_valid or old_valid != self.valid :
+           self.init_modif_up()
+
+  def isvalid(self,cr='non'):
+      """
+         Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
+
+           - 0 si l'objet est invalide
+           - 1 si l'objet est valide
+
+         Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
+         la méthode construit également un comte-rendu de validation
+         dans self.cr qui doit avoir été créé préalablement.
+      """
+      if self.state == 'unchanged':
+        return self.valid
+      else:
+        v=self.valeur
+        valid = 1
+        #  verifiaction presence
+        if self.isoblig() and v == None :
+          if cr == 'oui' :
+            self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
+          valid = 0
+
+        if v is None:
+          valid=0
+          if cr == 'oui' :
+             self.cr.fatal("None n'est pas une valeur autorisée")
+        else:
+          # type,into ...
+          valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
+          #
+          # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
+          #
+          if valid and self.definition.validators and not self.definition.validators.verif(self.valeur):
+            if cr == 'oui' :
+              self.cr.fatal(string.join(("Mot-clé : ",self.nom,"devrait avoir ",self.definition.validators.info())))
+            valid=0
+          # fin des validateurs
+          #
+
+        self.set_valid(valid)
+        return self.valid
+
index b9e18b1d0311ab4c1a5cdfb5b137f438f0f65f81..17a1720d280ca70e3615c36eb02f845e41c83bc3 100644 (file)
@@ -65,7 +65,27 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
       for child in self.mc_liste :
         child.replace_concept(old_sd,sd)
 
+#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
    def Build_sd(self):
+      """
+           Methode de Noyau surchargee pour poursuivre malgre tout
+           si une erreur se produit pendant la creation du concept produit
+      """
+      try:
+         sd=Noyau.N_PROC_ETAPE.PROC_ETAPE.Build_sd(self)
+      except AsException,e:
+         # Une erreur s'est produite lors de la construction du concept
+         # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+         # Si on poursuit, on a le choix entre deux possibilités :
+         # 1. on annule la sd associée à self
+         # 2. on la conserve mais il faut la retourner
+         # En plus il faut rendre coherents sdnom et sd.nom
+         self.sd=None
+         self.sdnom=None
+         self.state="unchanged"
+         self.valid=0
+
+   def Build_sd_old(self):
       """
           Cette methode applique la fonction op_init au contexte du parent
           et lance l'exécution en cas de traitement commande par commande
index d968e8a0330cc9ff48273ae73e73f72e29b79598..c241e857c6e1c39148fe123746bdfcb648d3da84 100644 (file)
@@ -9,6 +9,9 @@
    interface sera stabilisée.
 """
 
+import types
+import Noyau.N_VALIDATOR
+
 class Valid:
    """
         Cette classe est la classe mere de toutes les classes complémentaires
@@ -60,6 +63,20 @@ class Valid:
        """
        return 0
 
+   def valide_liste_partielle(self,liste_courante):
+       return 0
+
+   def verif_item(self,valeur):
+       """
+          La methode verif du validateur effectue une validation complete de la valeur.
+          valeur peut etre un scalaire ou une liste. Le validateur doit traiter les 2
+          aspects s'il accepte des listes (dans ce cas la methode is_list doit retourner 1).
+          La methode valid_item sert pour effectuer des validations partielles de liste
+          Elle doit uniquement verifier la validite d'un item de liste mais pas les caracteristiques
+          de la liste
+       """
+       return 0
+
    def get_into(self,liste_courante=None,into_courant=None):
        """
           Cette méthode retourne la liste de choix proposée par le validateur. Si le validateur ne propose
@@ -80,9 +97,89 @@ class Valid:
        """
        return into_courant
 
+   def is_eval(self,valeur):
+       """
+           Cette méthode indique si valeur est un objet de type EVAL ou autre
+           que l'on ne cherchera pas à evaluer et qui doit etre considere comme toujours valide
+           Si c'est un objet de ce type elle retourne la valeur 1 sinon la valeur 0
+       """
+       if type(valeur) == types.InstanceType :
+          if valeur.__class__.__name__ in ('EVAL','entier','reel','chaine','complexe','liste','PARAMETRE_EVAL') :
+             return 1
+       return 0
+
+   def is_param(self,valeur):
+       """
+           Cette méthode indique si valeur est un objet de type PARAMETRE
+           dont on cherchera à evaluer la valeur (valeur.valeur)
+       """
+       if type(valeur) == types.InstanceType :
+          if valeur.__class__.__name__ in ('PARAMETRE',):
+             return 1
+       return 0
+
+   def is_unknown(self,valeur):
+       """
+           Cette méthode indique si valeur est un objet de type inconnu
+           c'est à dire ni de type EVAL ni de type PARAMETRE
+       """
+       if type(valeur) == types.InstanceType :
+          if not self.is_eval(valeur) and not self.is_param(valeur):
+             return 1
+       return 0
+
+   def surcharge_verif(self,methode_verif_initiale,valeur):
+       if type(valeur) == types.InstanceType :
+          #CCAR: pour le moment on fait comme dans is_entier de V_MCSIMP.py
+          # mais il serait préférable d'appeler une méthode de valeur : valeur.AsType()
+          # qui donnerait le type générique de l'objet.
+          # Pour un objet de "type" entier on obtiendrait par exemple 'I'
+          if valeur.__class__.__name__ in ('EVAL','entier','reel','chaine','complexe','liste','PARAMETRE_EVAL') :
+             # On ne vérifie pas le type d'un EVAL ou d'un objet de classe entier, .... C'est toujours valide
+             return 1
+          elif valeur.__class__.__name__ in ('PARAMETRE',):
+             # Dans le cas d'un parametre, il faut tester si la valeur du parametre est un entier
+             valeur=valeur.valeur
+          else:
+             # Objet inconnu : invalide
+             print "Objet non reconnu dans surcharge_verif : %s" %`valeur`
+             return 0
+
+       return methode_verif_initiale(self,valeur)
+
 class FunctionVal(Valid):pass
 
 class OrVal(Valid):
+   def verif_item(self,valeur):
+       for validator in self.validators:
+           v=validator.verif_item(valeur)
+           if v :
+              return 1
+       return 0
+
+   def info_erreur_item(self):
+       chaine=""
+       a=1
+       for v in self.validators:
+          if v.info_erreur_item() != "" :
+              if a==1:
+                 chaine=v.info_erreur_item()
+                 a=0
+             else:
+                 chaine=chaine+" \n ou "+ v.info_erreur_item()
+       return chaine
+
+   def info_erreur_liste(self):
+       chaine=""
+       a=1
+       for v in self.validators:
+          if v.info_erreur_liste() != "" :
+              if a==1:
+                 chaine=v.info_erreur_liste()
+                 a=0
+             else:
+                 chaine=chaine+" \n ou "+v.info_erreur_liste()
+
    def is_list(self):
        """
           Si plusieurs validateurs sont reliés par un OU
@@ -120,13 +217,49 @@ class OrVal(Valid):
        """
        validator_into=[]
        for validator in self.validators:
-           v_into=v.get_info(liste_courante,into_courant)
+           v_into=validator.get_into(liste_courante,into_courant)
            if v_into is None:
               return v_into
            validator_into.extend(v_into)
        return validator_into
+    
 
 class AndVal(Valid):
+   def info(self):
+       return "\n et ".join([v.info() for v in self.validators])
+
+   def info_erreur_item(self):
+       chaine=""
+       a=1
+       for v in self.validators:
+          if v.info_erreur_item() != "" :
+              if a==1:
+                 chaine=v.info_erreur_item()
+                 a=0
+             else:
+                 chaine=chaine+" \n et "+v.info_erreur_item()
+       return chaine
+
+   def info_erreur_liste(self):
+       a=1
+       for v in self.validators:
+          if v.info_erreur_liste() != "" :
+              if a==1:
+                 chaine=v.info_erreur_liste()
+                 a=0
+             else:
+                 chaine=chaine+" \n et "+v.info_erreur_liste()
+       return chaine
+
+   def verif_item(self,valeur):
+       for validator in self.validators:
+           v=validator.verif_item(valeur)
+           if not v :
+              # L'info n'est probablement pas la meme que pour verif ???
+              self.local_info=validator.info()
+              return 0
+       return 1
+
    def is_list(self):
        """
           Si plusieurs validateurs sont reliés par un ET
@@ -155,6 +288,7 @@ class AndVal(Valid):
               return 1
        return 0
 
+
    def get_into(self,liste_courante=None,into_courant=None):
        """
           Dans le cas ou plusieurs validateurs sont reliés par un ET
@@ -166,18 +300,32 @@ class AndVal(Valid):
           En revanche, Enum(1,2,3) ET Enum(4,5,6) ne propose pas de choix
        """
        for validator in self.validators:
-           into_courant=v.get_info(liste_courante,into_courant)
+           into_courant=validator.get_into(liste_courante,into_courant)
            if into_courant in ([],None):
               return into_courant
        return into_courant
 
 class CardVal(Valid):
+   def info(self):
+       return "longueur de liste comprise entre  %s et %s" % (self.min,self.max)
+
    def is_list(self):
        if self.max == '**' or self.max > 1:
              return 1
        else:
              return 0
 
+   def verif_item(self,valeur):
+       return 1
+
+   def valide_liste_partielle(self,liste_courante=None):
+       validite=1
+        print liste_courante
+        if liste_courante != None :
+           if len(liste_courante) > self.max :
+              validite=0
+        return validite
+
    def get_into(self,liste_courante=None,into_courant=None):
        if into_courant is None:
           return None
@@ -190,6 +338,9 @@ class CardVal(Valid):
        else:
           return []
 
+   def info_erreur_liste(self):
+       return "La cardinalité de la liste doit être comprise entre %s et %s" % (self.min,self.max)
+
 class ListVal(Valid):
    def is_list(self):
        return 1
@@ -210,6 +361,10 @@ class ListVal(Valid):
           return liste_choix
 
 class EnumVal(ListVal):
+   def verif_item(self,valeur):
+       if valeur not in self.into:return 0
+       return 1
+
    def has_into(self):
        return 1
  
@@ -222,14 +377,86 @@ class EnumVal(ListVal):
               if e in self.into:
                  liste_choix.append(e)
        return liste_choix
+
+   def info_erreur_item(self):
+       return "La valeur n'est pas dans la liste des choix possibles"
           
-class LongStr(ListVal):pass
-class RangeVal(ListVal):pass
-class TypeVal(ListVal):pass
-class PairVal(ListVal):pass
-class InstanceVal(ListVal):pass
+class LongStr(ListVal):
+   def info_erreur_item(self):
+       return "Longueur de la chaine incorrecte"
+
+   def verif_item(self,valeur):
+       low=self.low
+       high=self.high
+       if valeur[0]=="'" and valeur[-1]=="'" :
+          low=low+2
+          high=high+2
+       if len(valeur) < low :return 0
+       if len(valeur) > high:return 0
+       return 1
+class RangeVal(ListVal):
+   def verif_item(self,valeur):
+       if valeur < self.low :return 0
+       if valeur > self.high:return 0
+       return 1
+
+   def info_erreur_item(self) :
+       return "La valeur doit être comprise entre %s et %s" % (self.low,self.high)
+
+class TypeVal(ListVal):
+   def verif_item(self,valeur):
+       try:
+          self.coerce(valeur)
+       except:
+          return 0
+       return 1
+
+class PairVal(ListVal):
+
+   def info_erreur_item(self):
+       return "La valeur saisie doit être paire"
+
+   #ATTENTION METHODE SURCHARGEE: a resorber dans une future version
+   def verif_item(self,valeur):
+       if self.is_eval(valeur):
+          return 1
+       elif self.is_param(valeur):
+          valeur=valeur.valeur
+       elif self.is_unknown(valeur):
+          return 0
+       return valeur % 2 == 0
+
+   def verif(self,valeur):
+          if self.is_param(valeur):
+             valeur=valeur.valeur
+          if type(valeur) in (types.ListType,types.TupleType):
+             for val in valeur:
+                if not self.verif_item(val):
+                   return 0
+             return 1
+          else:
+             return self.verif_item(valeur)
+
+   def verif_old(self,valeur):
+       print "Ihm.I_MCSIMP.PairVal.verif: ",valeur
+       return self.surcharge_verif(Noyau.N_VALIDATOR.PairVal.verif,valeur)
+
+class InstanceVal(ListVal):
+   def verif_item(self,valeur):
+       if not isinstance(valeur,self.aClass): return 0
+       return 1
 
 class NoRepeat(ListVal):
+   def info(self):
+       return "pas de presence de doublon dans la liste"
+
+   def info_erreur_liste(self):
+       return "Les doublons ne sont pas permis"
+
+   def verif_item(self,valeur):
+       return 1
+
    def get_into(self,liste_courante=None,into_courant=None):
        """
           Methode get_into spécifique pour validateur NoRepeat
@@ -247,6 +474,9 @@ class NoRepeat(ListVal):
           return liste_choix
  
 class OrdList(ListVal):
+   def verif_item(self,valeur):
+       return 1
+
    def get_into(self,liste_courante=None,into_courant=None):
        """
           Methode get_into spécifique pour validateur OrdList 
@@ -267,9 +497,6 @@ class OrdList(ListVal):
               liste_choix.append(e)
           return liste_choix
 
+   def info_erreur_liste(self) :
+       return "La liste doit être en ordre "+self.ord
           
-          
-
-
-
-
index 4b084bad4cff85f97fdc14ca20576459d0bf5832..1974998f06a298331a7ea8df671254288828abc0 100644 (file)
@@ -1,4 +1,13 @@
-POURSUITE()
-MMA=LIRE_MAILLAGE()
-INCLUDE(UNITE=23)
-FIN()
+
+#Test de poursuite avec include emboites
+#Utiliser deb0.comm comme fichier initial de deb1.comm
+#ensuite utiliser les fichiers incl.* correspondant au numero
+#d'unité indiqué
+
+POURSUITE();
+
+MMA=LIRE_MAILLAGE();
+
+INCLUDE(UNITE=23,);
+
+FIN();
index e95c4b0b14bfb715baf2e6a48c6e5717d65f0b4a..8a3c49305b3b754c84bc5b49628a0ae86400106d 100644 (file)
@@ -1,5 +1,26 @@
-# Changer unite 15 par incl.14
-DEBUT()
-INCLUDE(UNITE=15)
-MA=LIRE_MAILLAGE()
-FIN()
+
+#  Scenario de test
+# 1- Donner le fichier incl.15 pour l'include unite 15 
+# 2- Donner le fichier incl.16 pour l'include unité 16
+#Le fichier de commandes est invalide car MA est défini plusieurs fois
+#  3- Changer include unite 15 par incl.14 :
+# Le changement doit etre accepté mais la commande LIRE_MAILLAGE
+#reste invalide     
+# 4- Detruire la commande INCLUDE et nommer le concept de LIRE_MAILLAGE MA
+# 5- Ajouter un INCLUDE avant LIRE_MAILLAGE d'unité 16 (incl.16)
+#L'INCLUDE doit etre invalide
+# 6- Changer le nom du concept de LIRE_MAILLAGE en MMM
+# L'INCLUDE reste invalide bien que le conflit soit résolu
+# 7- Revalider l'INCLUDE en allant dans l'onglet Fichier INCLUDE et en cliquant
+#     sur le bouton Valider
+#
+#
+#
+
+DEBUT();
+
+INCLUDE(UNITE=15,);
+
+MA=LIRE_MAILLAGE();
+
+FIN();
index 5f86f0a5bf153ba664592109b6da8ae283484209..97528b378ff18e971ef0be7c1bdc2f650153fdbd 100755 (executable)
@@ -101,6 +101,9 @@ INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
 POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
                 docu="U4.11.03-f1",sd_prod = ops.POURSUITE,
                 op_init = ops.POURSUITE_context,fichier_ini = 1,
+         HDF             =FACT(statut='f',min=1,max=1,
+           FICHIER         =SIMP(fr="nom du fichier hdf associe",statut='o',typ='TXM'),
+         ),
          PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
                            into=("OUI","NON"),defaut="OUI"),
          BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
@@ -1632,6 +1635,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
            COMPOR          =SIMP(statut='o',typ='TXM' ),
            TEMP_EVAL       =SIMP(statut='o',typ='R' ),
          ),
+         UNITE_LONGUEUR  =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
 
index c9345320cc2389da53902bdcd7a6b40dcbe6e0ab..16663659cddc1940cf6c3fe7a40e0300b71e704a 100755 (executable)
@@ -9,7 +9,7 @@ from Accas import EVAL,PARAMETRE,COMMENTAIRE,PARAMETRE_EVAL,COMMANDE_COMM
 from Accas import ASSD,CO,GEOM,fonction,geom,assd
 #
 __version__="$Name:  $"
-__Id__="$Id: cata_saturne.py,v 1.10 2000/10/24 10:32:56 iliade Exp $"
+__Id__="$Id: cata_saturne2.py,v 1.1.1.1.6.1 2003/10/16 12:13:36 eficas Exp $"
 #
 
 import ops
@@ -53,6 +53,9 @@ INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
 POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
                 docu="U4.11.03-f1",sd_prod = ops.POURSUITE,
                 op_init = ops.POURSUITE_context,fichier_ini = 1,
+         HDF             =FACT(statut='f',min=1,max=1,
+           FICHIER         =SIMP(fr="nom du fichier hdf associe",statut='o',typ='TXM'),
+         ),
          PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
                            into=("OUI","NON"),defaut="OUI"),
          BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
index eecdc4427de74cb3ad6726ea5c971542fb3780f1..841a3e56c803b14b3c4c328a53fa4b2712fbaec2 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 23/10/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF ops Cata  DATE 06/09/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24,6 +24,7 @@ import string,linecache,os,traceback,re
 # Modules Eficas
 import Accas
 from Accas import ASSD
+from Noyau.N_FONCTION import formule
 
 try:
    import aster
@@ -34,25 +35,71 @@ try:
 except:
    pass
 
-def DEBUT(self,PAR_LOT,**args):
+def DEBUT(self,PAR_LOT,CODE,**args):
    """
        Fonction sdprod de la macro DEBUT
    """
+   # La commande DEBUT ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
+
    self.jdc.set_par_lot(PAR_LOT)
+   if CODE!=None :
+      self.jdc.fico=CODE['NOM']
+   else:
+      self.jdc.fico=None
+
+def build_debut(self,**args):
+   """
+   Fonction ops pour la macro DEBUT
+   """
+   self.jdc.UserError=self.codex.error
+
+   if self.jdc.par_lot == 'NON' :
+      self.jdc._Build()
+   # On execute la fonction debut pour initialiser les bases
+   # Cette execution est indispensable avant toute autre action sur ASTER
+   # op doit etre un entier car la fonction debut appelle GCECDU qui demande
+   # le numero de l'operateur associé (getoper)
+   self.definition.op=0
+   self.set_icmd(1)
+   lot,ier=self.codex.debut(self,1)
+   # On remet op a None juste apres pour eviter que la commande DEBUT
+   # ne soit executée dans la phase d'execution
+   self.definition.op=None
+   return ier
 
-def POURSUITE(self,PAR_LOT,**args):
+def POURSUITE(self,PAR_LOT,CODE,HDF,**args):
    """
        Fonction sdprod de la macro POURSUITE
    """
+   # La commande POURSUITE ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
+
    self.jdc.set_par_lot(PAR_LOT)
-   if self.codex and os.path.isfile("glob.1"):
+   if CODE!=None :
+      self.jdc.fico=CODE['NOM']
+   else:
+      self.jdc.fico=None
+   if (self.codex and os.path.isfile("glob.1")) or HDF!=None:
      # Le module d'execution est accessible et glob.1 est present
+     # Pour eviter de rappeler plusieurs fois la sequence d'initialisation
+     # on memorise avec l'attribut fichier_init que l'initialisation
+     # est réalisée
      if hasattr(self,'fichier_init'):return
      self.fichier_init='glob.1'
      self.jdc.initexec()
+     # le sous programme fortran appelé par self.codex.poursu demande le numero
+     # de l'operateur (GCECDU->getoper), on lui donne la valeur 0
+     self.definition.op=0
      lot,ier,lonuti,concepts=self.codex.poursu(self,1)
-     self.icmd=lonuti
-     #print "Fin de debut",ier,lot,lonuti
+     # Par la suite pour ne pas executer la commande pendant la phase
+     # d'execution on le remet à None
+     self.definition.op=None
+     # On demande la numerotation de la commande POURSUITE avec l'incrément
+     # lonuti pour qu'elle soit numérotée à la suite des commandes existantes.
+     self.set_icmd(lonuti)
      pos=0
      d={}
      while pos+80 < len(concepts)+1:
@@ -60,6 +107,7 @@ def POURSUITE(self,PAR_LOT,**args):
        concep=concepts[pos+8:pos+24]
        nomcmd=concepts[pos+24:pos+40]
        statut=concepts[pos+40:pos+48]
+       print nomres,concep,nomcmd,statut
        if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
           exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
        pos=pos+80
@@ -88,6 +136,16 @@ def POURSUITE_context(self,d):
    for v in self.g_context.values():
       if isinstance(v,ASSD) : self.jdc.sds.append(v)
 
+def build_poursuite(self,**args):
+   """
+   Fonction ops pour la macro POURSUITE
+   """
+   # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE
+   # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans
+   # la fonction sdprod de la commande (ops.POURSUITE))
+   self.jdc.UserError=self.codex.error
+   return 0
+
 def INCLUDE(self,UNITE,**args):
    """ 
        Fonction sd_prod pour la macro INCLUDE
@@ -97,12 +155,8 @@ def INCLUDE(self,UNITE,**args):
    self.unite=UNITE
 
    if self.jdc and self.jdc.par_lot == 'NON':
-      # On est en mode commande par commande
-      # On teste la validite de la commande avec interruption eventuelle
-      cr=self.report()
-      self.parent.cr.add(cr)
-      if not cr.estvide():
-         raise EOFError
+      # On est en mode commande par commande, on appelle la methode speciale
+      self.Execute_alone()
 
    self.make_include(unite=UNITE)
 
@@ -113,49 +167,87 @@ def INCLUDE_context(self,d):
    for k,v in self.g_context.items():
       d[k]=v
 
+def build_include(self,**args):
+   """
+   Fonction ops de la macro INCLUDE appelée lors de la phase de Build
+   """
+   # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+   # le numero de la commande n est pas utile en phase de construction
+   # La macro INCLUDE ne sera pas numérotée (incrément=None)
+   ier=0
+   self.set_icmd(None)
+   icmd=0
+   # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien.
+   #ier=self.codex.opsexe(self,icmd,-1,1)
+   return ier
+
 def detruire(self,d):
    """
        Cette fonction est la fonction op_init de la PROC DETRUIRE
    """
-   sd=[]
-   for mc in self["CONCEPT"]:
-     mcs=mc["NOM"]
-     if type(mcs) == types.ListType or type(mcs) == types.TupleType:
-       for e in mcs:
-         if isinstance(e,ASSD):
-           sd.append(e)
-           e=e.nom
-         if d.has_key(e):del d[e]
-         if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
-     else:
-       if isinstance(mcs,ASSD):
-         sd.append(mcs)
-         mcs=mcs.nom
-       if d.has_key(mcs):del d[mcs]
-       if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
-   for s in sd:
-     # On signale au parent que le concept s n'existe plus apres l'étape self
-     self.parent.delete_concept_after_etape(self,s)
-
-def subst_materiau(text,NOM_MATER,EXTRACTION):
+   if self["CONCEPT"]!=None:
+     sd=[]
+     for mc in self["CONCEPT"]:
+       mcs=mc["NOM"]
+       if type(mcs) == types.ListType or type(mcs) == types.TupleType:
+         for e in mcs:
+           if isinstance(e,ASSD):
+             sd.append(e)
+             e=e.nom
+           if d.has_key(e):del d[e]
+           if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
+       else:
+#CCAR: ajout de ce test pour ne pas détruire une formule. Faut-il le reintegrer 
+#      dans le catalogue d'Aster ? Est-il spécial EFICAS ?
+         if isinstance(mcs,formule):
+           cr=self.parent.report()
+           cr.fatal("la destruction d'une FORMULE est impossible" )
+#CCAR: fin ajout
+         if isinstance(mcs,ASSD):
+           sd.append(mcs)
+           mcs=mcs.nom
+         if d.has_key(mcs):del d[mcs]
+         if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
+     for s in sd:
+       # On signale au parent que le concept s n'existe plus apres l'étape self
+       self.parent.delete_concept_after_etape(self,s)
+
+def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
    """
        Cette fonction retourne un texte obtenu à partir du texte passé en argument (text)
        en substituant le nom du materiau par NOM_MATER 
        et en réalisant les extractions spéciifées dans EXTRACTION
    """
    lines=string.split(text,'\n')
+
+##### traitement de UNIT : facteur multiplicatif puissance de 10
+   regmcsu=re.compile(r" *(.*) *= *([^ ,]*) *## +([^ ]*) *([^ ]*)")
+   ll_u=[]
+   for l in lines:
+       m=regmcsu.match(l)
+       if m:
+          if m.group(3) == "UNIT":
+             if   UNITE_LONGUEUR=='M'  : coef = '0'
+             elif UNITE_LONGUEUR=='MM' : coef = m.group(4)
+             print ' UNITE_LONGUEUR = BINGO'
+             print ' UNITE_LONGUEUR = ',m.group(4),type(m.group(4))
+             ll_u.append('   '+m.group(1)+" = "+m.group(2)+coef)
+          else : ll_u.append(l)
+       else : ll_u.append(l)
+
+##### traitement de EXTRACTION
    if EXTRACTION:
-     ll=[]
      regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)")
      regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)")
      regfin=re.compile(r" *\) *")
+     ll=[]
      temps={};lmcf=[]
      for e in EXTRACTION:
        mcf=e['COMPOR']
        lmcf.append(mcf)
        temps[mcf]=e['TEMP_EVAL']
      FLAG=0
-     for l in lines:
+     for l in ll_u:
        m=regmcf.match(l)
        if m: # On a trouve un mot cle facteur "commentarise"
          if m.group(2) == "SUBST": # il est de plus substituable
@@ -187,7 +279,7 @@ def subst_materiau(text,NOM_MATER,EXTRACTION):
                del temps[mcf]
              ll.append(l)
    else:
-     ll=lines
+     ll=ll_u
 
    for l in ll:
      print l
@@ -199,8 +291,15 @@ def subst_materiau(text,NOM_MATER,EXTRACTION):
    text=string.join(ll,'\n')
    return text
 
+def post_INCLUDE(self):
+  """
+      Cette fonction est executée apres toutes les commandes d'un INCLUDE (RETOUR)
+      Elle sert principalement pour les INCLUDE_MATERIAU : remise a blanc du prefixe Fortran
+  """
+  self.codex.opsexe(self,0,-1,2)
+
 def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
-                    EXTRACTION,INFO,**args):
+                    EXTRACTION,UNITE_LONGUEUR,INFO,**args):
   """ 
       Fonction sd_prod pour la macro INCLUDE_MATERIAU
   """
@@ -221,7 +320,7 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
     text=string.replace(open(f).read(),'\r\n','\n')
     # On effectue les substitutions necessaires
     self.prefix=NOM_MATER
-    self.text= subst_materiau(text,NOM_MATER,EXTRACTION)
+    self.text= subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR)
     if INFO == 2:
       print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n'
       print self.text
@@ -230,16 +329,57 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
     # et le contexte de l etape (local au sens Python)
     # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
     linecache.cache[f]=0,0,string.split(self.text,'\n'),f
+
+    self.postexec=post_INCLUDE
+
     if self.jdc.par_lot == 'NON':
-      # On est en mode commande par commande
-      # On teste la validite de la commande avec interruption eventuelle
-      cr=self.report()
-      self.parent.cr.add(cr)
-      if not cr.estvide():
-        raise EOFError
-      # Et en plus il faut executer la fonction ops014 avant les sous
-      # commandes car le prefixe PRFXCO doit etre initialise dans le Fortran
-      self.codex.opsexe(self,0,-1,-self.definition.op)  
+      # On est en mode commande par commande, on appelle la methode speciale
+      self.Execute_alone()
 
     self.make_contexte(f,self.text)
 
+def build_formule(self,**args):
+  """
+  Fonction ops de la macro FORMULE appelée lors de la phase de Build
+  """
+  from Build import B_utils
+  for mc in self.mc_liste:
+###    if mc.nom in ('REEL','ENTIER','COMPLEXE'):
+    if mc.nom in ('REEL','COMPLEXE'):
+      texte= self.sd.get_name()+ string.strip(mc.valeur)
+      mc.valeur=B_utils.ReorganisationDe(texte,80)
+  # ATTENTION : FORMULE est une des rares commandes qui a besoin de
+  # connaitre son numero d execution avant d etre construite
+  self.set_icmd(1)
+  # La macro formule doit etre executee. Seules les macros qui ont
+  # un numero d'op sont executees lors des phases suivantes
+  self.definition.op = -5
+  ier=self.codex.opsexe(self,self.icmd,-1,-self.definition.op)
+  return ier
+
+def build_procedure(self,**args):
+    """
+    Fonction ops de la macro PROCEDURE appelée lors de la phase de Build
+    """
+    ier=0
+    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+    # le numero de la commande n est pas utile en phase de construction
+    # On ne numérote pas une macro PROCEDURE (incrément=None)
+    self.set_icmd(None)
+    icmd=0
+    #ier=self.codex.opsexe(self,icmd,-1,3)
+    return ier
+
+def build_retour(self,**args):
+    """
+    Fonction ops de la macro RETOUR appelée lors de la phase de Build
+    """
+    ier=0
+    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+    # le numero de la commande n est pas utile en phase de construction
+    # On ne numérote pas une macro RETOUR (incrément=None)
+    self.set_icmd(None)
+    icmd=0
+    #ier=self.codex.opsexe(self,icmd,-1,2)
+    return ier
+
index 0f8a2b602053162813cd2a250f80897064b47666..f00a8b54e1fbc582e3273fc74ee9ccc897b9f97c 100644 (file)
@@ -36,11 +36,11 @@ class BLOC(N_ENTITE.ENTITE):
 
     Cette classe a deux attributs de classe :
 
-          - class_instance qui indique la classe qui devra etre utilisée 
+    - class_instance qui indique la classe qui devra etre utilisée 
             pour créer l'objet qui servira à controler la conformité d'un 
             bloc de mots-clés avec sa définition
 
-          - label qui indique la nature de l'objet de définition (ici, BLOC)
+    - label qui indique la nature de l'objet de définition (ici, BLOC)
 
    """
    class_instance = N_MCBLOC.MCBLOC
@@ -52,12 +52,17 @@ class BLOC(N_ENTITE.ENTITE):
       """
           Un bloc est caractérisé par les attributs suivants :
 
-             - fr   : chaine de caractere commentaire pour aide en ligne (en francais)
-             - ang : chaine de caractere commentaire pour aide en ligne (en anglais)
-             - regles : liste d'objets de type REGLE pour vérifier la cohérence des sous-objets
-             - statut : obligatoire ('o') ou facultatif ('f')
-             - condition : chaine de caractère evaluable par l'interpreteur Python
-             - entites : dictionnaire contenant les sous-objets de self (mots-clés). La clé du dictionnaire 
+          - fr   : chaine de caractere commentaire pour aide en ligne (en francais)
+
+          - ang : chaine de caractere commentaire pour aide en ligne (en anglais)
+
+          - regles : liste d'objets de type REGLE pour vérifier la cohérence des sous-objets
+
+          - statut : obligatoire ('o') ou facultatif ('f')
+
+          - condition : chaine de caractère evaluable par l'interpreteur Python
+
+          - entites : dictionnaire contenant les sous-objets de self (mots-clés). La clé du dictionnaire 
                      est le nom du mot-clé et la valeur l'objet de définition correspondant. Cet attribut
                      est initialisé avec l'argument args de la méthode __init__
 
index f7b6439f3294cf6d841c7c49cf5b971aa769d3a9..5be765e76691f01aa8eeb3f71bb08284923c780f 100644 (file)
@@ -68,7 +68,8 @@ class CR :
    def estvide(self):
       """ 
            Retourne 1 si self ne contient aucun message grave (fatal ou exception) et
-           aucun CR qui en contienne, 0 sinon
+                          aucun CR qui en contienne,
+                    0 sinon
       """
       if self.crexception : return 0
       if self.crfatal : return 0
index e5d7effc3b46ad13f773f30966c8e9a2c4b239b1..cb968d3ad2b54b7ac4806f8d6e4e0ca57359a991 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_ETAPE Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF N_ETAPE Noyau  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -107,11 +107,11 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
          Construit le concept produit de l'opérateur. Deux cas 
          peuvent se présenter :
         
-            - le parent n'est pas défini. Dans ce cas, l'étape prend en charge la création 
-              et le nommage du concept.
+         - le parent n'est pas défini. Dans ce cas, l'étape prend en charge la création 
+           et le nommage du concept.
 
-            - le parent est défini. Dans ce cas, l'étape demande au parent la création et 
-              le nommage du concept.
+         - le parent est défini. Dans ce cas, l'étape demande au parent la création et 
+           le nommage du concept.
 
       """
       if not self.isactif():return
@@ -155,11 +155,11 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       """
           Retourne le concept résultat de l'étape
           Deux cas :
-                        -  sd_prod de oper n'est pas une fonction
+                   cas 1 : sd_prod de oper n'est pas une fonction
                            il s'agit d'une sous classe de ASSD
                            on construit le sd à partir de cette classe
                            et on le retourne
-                        -  il s'agit d'une fonction
+                   cas 2 : il s'agit d'une fonction
                            on l'évalue avec les mots-clés de l'étape (mc_liste)
                            on construit le sd à partir de la classe obtenue
                            et on le retourne
@@ -194,11 +194,11 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       """
           Retourne le type du concept résultat de l'étape
           Deux cas :
-                 - sd_prod de oper n'est pas une fonction
+           cas 1 : sd_prod de oper n'est pas une fonction
                    il s'agit d'une sous classe de ASSD
                    on retourne le nom de la classe
-                 - il s'agit d'une fonction
-                   on l'évalue avec les mots-clés de l'étape (mc_liste)
+           cas 2 : il s'agit d'une fonction
+                    on l'évalue avec les mots-clés de l'étape (mc_liste)
                    et on retourne son résultat
       """
       if type(self.definition.sd_prod) == types.FunctionType:
@@ -254,7 +254,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
    def reset_current_step(self):
       """ 
             Methode utilisee par l'etape self qui remet son etape parent comme 
-            etape courante 
+             etape courante 
       """
       #print "reset_current_step ",self.nom
       #traceback.print_stack(limit=3,file=sys.stdout)
index d8904247f13679c1cd5b848b996562a343bb1f1d..0f3def1241ae07b660c769ed8cf75a8175fbffbc 100644 (file)
@@ -34,11 +34,13 @@ class FACT(N_ENTITE.ENTITE):
 
     Cette classe a trois attributs de classe 
 
-          - class_instance qui indique la classe qui devra etre utilisée 
-                  pour créer l'objet qui servira à controler la conformité d'un 
-                  mot-clé facteur avec sa définition
-          - list_instance
-          - label qui indique la nature de l'objet de définition (ici, FACT)
+    - class_instance qui indique la classe qui devra etre utilisée 
+            pour créer l'objet qui servira à controler la conformité d'un 
+            mot-clé facteur avec sa définition
+
+    - list_instance
+
+    - label qui indique la nature de l'objet de définition (ici, FACT)
    """
    class_instance = N_MCFACT.MCFACT
    list_instance = N_MCLIST.MCList
@@ -50,15 +52,23 @@ class FACT(N_ENTITE.ENTITE):
       """
           Un mot-clé facteur est caractérisé par les attributs suivants :
 
-             - fr   :
-             - ang :
-             - statut :
-             - defaut :
-             - regles
-             - min
-             - max
-             - position
-             - docu
+          - fr   :
+
+          - ang :
+
+          - statut :
+
+          - defaut :
+
+          - regles
+
+          - min
+
+          - max
+
+          - position
+
+          - docu
       """
       N_ENTITE.ENTITE.__init__(self,validators)
       # Initialisation des attributs
@@ -87,14 +97,14 @@ class FACT(N_ENTITE.ENTITE):
           MCFACT soit une liste de type MCLIST.
 
           La creation d un mot cle facteur depend de son statut
-             - Si statut ='o'   il est obligatoire
-             - Si statut == 'd' il est facultatif mais ses sous mots cles avec 
+          Si statut ='o'   il est obligatoire
+          Si statut == 'd' il est facultatif mais ses sous mots cles avec 
                            defaut sont visibles
-             - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne 
+          Si statut == 'f' il est facultatif et ses sous mots avec defaut ne 
                            sont pas visibles
-             - Si statut == 'c' il est cache ???
-             - Si defaut != None, on utilise cette valeur pour calculer la valeur 
-                           par defaut du mot cle facteur
+          Si statut == 'c' il est cache ???
+          Si defaut != None, on utilise cette valeur pour calculer la valeur 
+                             par defaut du mot cle facteur
       """
       if val == None:
         if self.defaut == None:
index 4f6952906d9642fe36cb65b2b19c8ed7fa63b551..d538ca71ab90dd91437dfc54e42f2d66bf3c761b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_JDC Noyau  DATE 23/10/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_JDC Noyau  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -237,17 +237,17 @@ NONE = None
 
    def create_sdprod(self,etape,nomsd):
       """ 
-                  Intention : Cette methode doit fabriquer le concept produit retourne
+          Intention : Cette methode doit fabriquer le concept produit retourne
                   par l'etape etape et le nommer.
                   Elle est appelée à l'initiative de l'etape
                   pendant le processus de construction de cette etape : 
-                    methode __call__ de la classe CMD (OPER ou MACRO)
+                    methode __call__ de la classe CMD (OPER ou MACRO)
                   Ce travail est réalisé par le contexte supérieur 
                   (etape.parent) car dans certains cas, le concept ne doit 
                   pas etre fabriqué mais l'etape doit simplement utiliser 
                   un concept préexistant.
-                      1.  etape.reuse != None : le concept est réutilisé
-                      2.  l'étape appartient à une macro qui a déclaré un 
+                  Cas 1 : etape.reuse != None : le concept est réutilisé
+                  Cas 2 : l'étape appartient à une macro qui a déclaré un 
                           concept de sortie qui doit etre produit par cette 
                           etape.
                   Dans le cas du JDC, le deuxième cas ne peut pas se produire.
index 9a5b5f37f349e37f78a0058a6c72750371fbd049..4bb371a641e90652aebe4c1727d297a829871763 100644 (file)
@@ -34,11 +34,11 @@ class JDC_CATA(N_ENTITE.ENTITE):
 
     Attributs de classe :
 
-          - class_instance qui indique la classe qui devra etre utilisée 
+    - class_instance qui indique la classe qui devra etre utilisée 
             pour créer l'objet qui servira à controler la conformité 
             du jeu de commandes avec sa définition
 
-          - label qui indique la nature de l'objet de définition (ici, JDC)
+    - label qui indique la nature de l'objet de définition (ici, JDC)
 
    """
    class_instance = N_JDC.JDC
index 497b86d5c2f9bc2ee3e15dec4acc2a3d1e7e62b6..46cb881bf749d32f2a3c620165d6d2e1b74c53c0 100644 (file)
@@ -35,46 +35,46 @@ class MACRO(N_ENTITE.ENTITE):
 
     Cette classe a trois attributs de classe 
 
-          - class_instance qui indique la classe qui devra etre utilisée 
+    - class_instance qui indique la classe qui devra etre utilisée 
             pour créer l'objet qui servira à controler la conformité d'un 
             macro-commande avec sa définition
 
-          - label qui indique la nature de l'objet de définition (ici, MACRO)
+    - label qui indique la nature de l'objet de définition (ici, MACRO)
 
-          - nommage qui est un module Python qui fournit la fonctionnalité de nommage
+    - nommage qui est un module Python qui fournit la fonctionnalité de nommage
 
     et les attributs d'instance suivants :
 
-          - nom   : son nom
+    - nom   : son nom
 
-          - op   : le numéro d'opérateur
+    - op   : le numéro d'opérateur
 
-          - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
+    - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
                       une classe
 
-          - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
+    - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
 
-          - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
+    - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
 
-          - fr   : commentaire associé en francais
+    - fr   : commentaire associé en francais
 
-          - ang : commentaire associé en anglais
+    - ang : commentaire associé en anglais
 
-          - docu : clé de documentation associée
+    - docu : clé de documentation associée
 
-          - regles : liste des règles associées
+    - regles : liste des règles associées
 
-          - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
+    - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
 
-          - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
+    - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
                      Si niveau vaut None, l'opérateur est rangé au niveau global.
 
-          - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
+    - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
                       est initialisé avec args, c'est à dire les arguments d'appel restants.
 
index 57807dd7862480a6269ca3b19347a818ae271a2f..953b0d94b2ca9eb05b2284b6bc8ecac0fdf03fb3 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 06/01/2003   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -45,7 +45,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
 
           - definition : objet portant les attributs de définition d'une étape 
                          de type macro-commande. Il est initialisé par 
-                         l'argument oper.
+                          l'argument oper.
 
           - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc
                     en sortie si les conditions d'exécution de l'opérateur 
@@ -99,11 +99,11 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
          Construit le concept produit de l'opérateur. Deux cas 
          peuvent se présenter :
         
-              - le parent n'est pas défini. Dans ce cas, l'étape prend en charge 
-                la création et le nommage du concept.
+         - le parent n'est pas défini. Dans ce cas, l'étape prend en charge 
+           la création et le nommage du concept.
 
-              - le parent est défini. Dans ce cas, l'étape demande au parent la 
-                création et le nommage du concept.
+         - le parent est défini. Dans ce cas, l'étape demande au parent la 
+           création et le nommage du concept.
 
       """
       if not self.isactif():return
@@ -146,15 +146,15 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       """
         Retourne le concept résultat d'une macro étape
         La difference avec une etape ou une proc-etape tient a ce que
-        le concept produit peut exister ou pas
+         le concept produit peut exister ou pas
         Si sd_prod == None le concept produit n existe pas on retourne None
         Deux cas :
-               - sd_prod  n'est pas une fonction
+         cas 1 : sd_prod  n'est pas une fonction
                  il s'agit d'une sous classe de ASSD
                  on construit le sd à partir de cette classe
                  et on le retourne
-               - sd_prod est une fonction
-                 on l'évalue avec les mots-clés de l'étape (mc_liste)
+         cas 2 : sd_prod est une fonction
+                  on l'évalue avec les mots-clés de l'étape (mc_liste)
                  on construit le sd à partir de la classe obtenue
                  et on le retourne
       """
@@ -193,12 +193,12 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
    def get_type_produit(self,force=0):
       """
            Retourne le type du concept résultat de l'étape et eventuellement type
-           les concepts produits "à droite" du signe égal (en entrée)
+            les concepts produits "à droite" du signe égal (en entrée)
            Deux cas :
-                  - sd_prod de oper n'est pas une fonction
+            cas 1 : sd_prod de oper n'est pas une fonction
                     il s'agit d'une sous classe de ASSD
                     on retourne le nom de la classe
-                  - il s'agit d'une fonction
+            cas 2 : il s'agit d'une fonction
                     on l'évalue avec les mots-clés de l'étape (mc_liste)
                     et on retourne son résultat
       """
@@ -266,12 +266,11 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
    def type_sdprod(self,co,t):
       """
            Cette methode a pour fonction de typer le concept co avec le type t
-           dans les conditions suivantes
-            1. co est un concept produit de self
-            2. co est un concept libre : on le type et on l attribue à self
-
+            dans les conditions suivantes
+            1- co est un concept produit de self
+            2- co est un concept libre : on le type et on l attribue à self
            Elle enregistre egalement les concepts produits (on fait l hypothese
-           que la liste sdprods a été correctement initialisee, vide probablement)
+            que la liste sdprods a été correctement initialisee, vide probablement)
       """
       if not hasattr(co,'etape'):
          # Le concept vaut None probablement. On ignore l'appel
@@ -335,7 +334,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
 
    def create_sdprod(self,etape,nomsd):
       """ 
-                  Intention : Cette methode doit fabriquer le concept produit retourne
+          Intention : Cette methode doit fabriquer le concept produit retourne
                   par l'etape etape et le nommer.
                   Elle est appelée à l'initiative de l'etape
                   pendant le processus de construction de cette etape : methode __call__
@@ -343,9 +342,9 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
                   Ce travail est réalisé par le contexte supérieur (etape.parent)
                   car dans certains cas, le concept ne doit pas etre fabriqué mais
                   l'etape doit simplement utiliser un concept préexistant.
-                      - Cas 1 : etape.reuse != None : le concept est réutilisé
-                      - Cas 2 : l'étape appartient à une macro qui a déclaré un concept
-                        de sortie qui doit etre produit par cette etape.
+                  Cas 1 : etape.reuse != None : le concept est réutilisé
+                  Cas 2 : l'étape appartient à une macro qui a déclaré un concept
+                          de sortie qui doit etre produit par cette etape.
       """
       if self.Outputs.has_key(nomsd):
          # Il s'agit d'un concept de sortie de la macro. Il ne faut pas le créer
index daa83e647cc00a32055094892fa41568912958a9..56fa972dea554d74a38de4774ab819dad128d364 100644 (file)
@@ -125,14 +125,15 @@ class MCCOMPO(N_OBJECT.OBJECT):
         Cette méthode réalise les opérations suivantes en plus de transformer 
         la liste en dictionnaire :
 
-           - ajouter tous les mots-clés non présents avec la valeur None
-           - ajouter tous les mots-clés globaux (attribut position = 'global' 
-             et 'global_jdc')
+        - ajouter tous les mots-clés non présents avec la valeur None
 
-        ATTENTION : on ne remonte pas (semble en contradiction avec la 
-        programmation de la méthode get_valeur du bloc) les 
-        mots-clé fils d'un bloc au niveau du
-        contexte car celà peut générer des erreurs.
+        - ajouter tous les mots-clés globaux (attribut position = 'global' 
+          et 'global_jdc')
+
+        ATTENTION : -- on ne remonte pas (semble en contradiction avec la 
+                      programmation de la méthode get_valeur du bloc) les 
+                      mots-clé fils d'un bloc au niveau du
+                      contexte car celà peut générer des erreurs.
 
         L'argument liste est, en général, une mc_liste en cours de 
         construction, contenant les mots-clés locaux et les blocs déjà créés.
@@ -285,7 +286,8 @@ class MCCOMPO(N_OBJECT.OBJECT):
           Retourne le fils de self de nom name ou None s'il n'existe pas
           Si restreint vaut oui : ne regarde que dans la mc_liste
           Si restreint vaut non : regarde aussi dans les entites possibles 
-          avec defaut. (Ce dernier cas n'est utilisé que dans le catalogue)
+          avec defaut    
+           (Ce dernier cas n'est utilisé que dans le catalogue)
       """
       for v in self.mc_liste:
         if v.nom == name : return v
index 7b009330e6a06cdd7c1fb8e9b4bcb2ea62aa4300..487127900413171f3b81c1823b6271fdcd1684d8 100644 (file)
@@ -30,7 +30,7 @@ class OBJECT:
       Elle ne peut etre instanciée.
       Une sous classe doit obligatoirement implémenter les méthodes :
 
-          - __init__
+      - __init__
 
    """
 
index 7850c70b54c164b7b2a27391844671b62ca0ac59..5e43776ed7f2ce9ef2ed9a979cc8059cbef285fd 100644 (file)
@@ -35,46 +35,46 @@ class OPER(N_ENTITE.ENTITE):
 
     Cette classe a trois attributs de classe 
 
-          - class_instance qui indique la classe qui devra etre utilisée 
+    - class_instance qui indique la classe qui devra etre utilisée 
             pour créer l'objet qui servira à controler la conformité d'un 
             opérateur avec sa définition
 
-          - label qui indique la nature de l'objet de définition (ici, OPER)
+    - label qui indique la nature de l'objet de définition (ici, OPER)
 
-          - nommage qui est un module Python qui fournit la fonctionnalité de nommage
+    - nommage qui est un module Python qui fournit la fonctionnalité de nommage
 
     et les attributs d'instance suivants :
 
-          - nom   : son nom
+    - nom   : son nom
 
-          - op   : le numéro d'opérateur
+    - op   : le numéro d'opérateur
 
-          - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
+    - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
                       une classe
 
-          - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
+    - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
 
-          - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
+    - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
 
-          - fr   : commentaire associé en francais
+    - fr   : commentaire associé en francais
 
-          - ang : commentaire associé en anglais
+    - ang : commentaire associé en anglais
 
-          - docu : clé de documentation associée
+    - docu : clé de documentation associée
 
-          - regles : liste des règles associées
+    - regles : liste des règles associées
 
-          - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
+    - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
 
-          - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
+    - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
                      Si niveau vaut None, l'opérateur est rangé au niveau global.
 
-          - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
+    - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
                       est initialisé avec args, c'est à dire les arguments d'appel restants.
 
@@ -128,7 +128,7 @@ class OPER(N_ENTITE.ENTITE):
    def make_objet(self,mc_list='oui'):
       """ 
            Cette méthode crée l'objet ETAPE dont la définition est self sans
-           l'enregistrer ni créer sa sdprod.
+            l'enregistrer ni créer sa sdprod.
            Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction 
            des objets MCxxx.
       """
index 0d9b590789adfef842225e96fb50947da6f064f1..6e1b73fa99054cfb47039a0fb6f4d4045f23d4be 100644 (file)
@@ -34,42 +34,42 @@ class PROC(N_ENTITE.ENTITE):
 
     Cette classe a deux attributs de classe 
 
-          - class_instance qui indique la classe qui devra etre utilisée 
+    - class_instance qui indique la classe qui devra etre utilisée 
             pour créer l'objet qui servira à controler la conformité d'un 
             opérateur avec sa définition
 
-          - label qui indique la nature de l'objet de définition (ici, PROC)
+    - label qui indique la nature de l'objet de définition (ici, PROC)
 
 
     et les attributs d'instance suivants :
 
-          - nom   : son nom
+    - nom   : son nom
 
-          - op   : le numéro d'opérateur
+    - op   : le numéro d'opérateur
 
-          - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
+    - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
 
-          - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
+    - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
 
-          - fr   : commentaire associé en francais
+    - fr   : commentaire associé en francais
 
-          - ang : commentaire associé en anglais
+    - ang : commentaire associé en anglais
 
-          - docu : clé de documentation associée
+    - docu : clé de documentation associée
 
-          - regles : liste des règles associées
+    - regles : liste des règles associées
 
-          - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
+    - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
 
-          - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
+    - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
                      Si niveau vaut None, l'opérateur est rangé au niveau global.
 
-          - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
+    - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
                       est initialisé avec args, c'est à dire les arguments d'appel restants.
 
@@ -120,7 +120,7 @@ class PROC(N_ENTITE.ENTITE):
    def make_objet(self,mc_list='oui'):
       """
            Cette méthode crée l'objet PROC_ETAPE dont la définition est self sans
-           l'enregistrer ni créer sa sdprod.
+            l'enregistrer ni créer sa sdprod.
            Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction
            des objets MCxxx.
       """
index e15e5e33cafee1b6efb9b3f248698c7dc8cb2ed2..1795bd7cba6657ce8ef0f99a09b956463e58e832 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_PROC_ETAPE Noyau  DATE 20/01/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF N_PROC_ETAPE Noyau  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 8ec0f33c372e250d40185d3336e31485ff836539..e3d6878dc894176a899788a0d2ce589396a185a0 100644 (file)
 
     A la creation de l'objet regle on lui passe la liste des noms de mots cles concernes
 
-    Exemple::
+    Exemple ::
 
-        # Création de l'objet règle UNPARMI
-        r=UNPARMI("INFO","AFFE")
-        # Vérification de la règle r sur le dictionnaire passé en argument
-        r.verif({"INFO":v1,"AFFE":v2)
+    # Création de l'objet règle UNPARMI
+    r=UNPARMI("INFO","AFFE")
+    # Vérification de la règle r sur le dictionnaire passé en argument
+    r.verif({"INFO":v1,"AFFE":v2)
 """
 
 import types
@@ -54,7 +54,7 @@ class REGLE:
          et le deuxième un entier.
  
          L'entier peut valoir 0 ou 1. -- s'il vaut 1, la règle est vérifiée
-         s'il vaut 0, la règle n'est pas vérifiée et le texte joint contient
+          s'il vaut 0, la règle n'est pas vérifiée et le texte joint contient
          un commentaire de la non validité.
       """
       raise "NotImplemented : class REGLE should be derived"
index 13b0ca84d56b524217de9d57c561aa233aaaa9bb..0158a203e89f342a3e789a53977115c0e00b7b4b 100644 (file)
@@ -33,11 +33,11 @@ class SIMP(N_ENTITE.ENTITE):
 
     Cette classe a deux attributs de classe 
 
-          - class_instance qui indique la classe qui devra etre utilisée 
+    - class_instance qui indique la classe qui devra etre utilisée 
             pour créer l'objet qui servira à controler la conformité d'un 
             mot-clé simple avec sa définition
 
-          - label qui indique la nature de l'objet de définition (ici, SIMP)
+    - label qui indique la nature de l'objet de définition (ici, SIMP)
 
    """
    class_instance = N_MCSIMP.MCSIMP
@@ -50,31 +50,31 @@ class SIMP(N_ENTITE.ENTITE):
       """
           Un mot-clé simple est caractérisé par les attributs suivants :
 
-              - type : cet attribut est obligatoire et indique le type de valeur attendue 
+          - type : cet attribut est obligatoire et indique le type de valeur attendue 
 
-              - fr   :
+          - fr   :
 
-              - ang :
+          - ang :
 
-              - statut :
+          - statut :
 
-              - into   :
+          - into   :
 
-              - defaut :
+          - defaut :
 
-              - min
+          - min
 
-              - max
+          - max
 
-              - homo
+          - homo
 
-              - position
+          - position
 
-              - val_min
+          - val_min
 
-              - val_max
+          - val_max
 
-              - docu
+          - docu
       """
       N_ENTITE.ENTITE.__init__(self,validators)
       # Initialisation des attributs
index de6edfe0c75c9a58152e914e596ef1d94fd6c7fb..8494cc8c40eb1fab276990f31d13d7451dff7944 100644 (file)
@@ -94,9 +94,9 @@ def evalnom(text,d):
   """
    Retourne un nom pour le concept resultat identifie par text
    Pour obtenir ce nom il y a plusieurs possibilites :
-    1text est un identificateur python c est le nom du concept
-    2text est un element d une liste on construit le nom en
-       evaluant la partie indice dans le contexte de l appelant d
+    1-text est un identificateur python c est le nom du concept
+    2-text est un element d une liste on construit le nom en
+      evaluant la partie indice dans le contexte de l appelant d
   """
   l=re.split('([\[\]]+)',text)
   #print l
index 1f4bc257afad3fb0a6469061b8fc76fcfdb1ce1f..86665652c321d67dc1e5a582367570bbccaf17d8 100644 (file)
@@ -22,7 +22,7 @@
 class ENSEMBLE:
    """
       La règle vérifie que si un mot-clé de self.mcs est present 
-      parmi les elements de args tous les autres doivent etre presents.
+          parmi les elements de args tous les autres doivent etre presents.
 
       Ces arguments sont transmis à la règle pour validation sous la forme 
       d'une liste de noms de mots-clés ou d'un dictionnaire dont 
index 4e38c5aadecf94798b648cfd40e8e466a317000e..bd08a018f930f211d731039149ad3ba05f2e362d 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_ETAPE Validation  DATE 06/01/2003   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF V_ETAPE Validation  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -147,11 +147,11 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
       """ 
            Cette méthode met à jour le concept produit en fonction des conditions initiales :
 
-            - Il n'y a pas de concept retourné (self.definition.sd_prod == None)
+            1- Il n'y a pas de concept retourné (self.definition.sd_prod == None)
 
-            - Le concept retourné n existait pas (self.sd == None)
+            2- Le concept retourné n existait pas (self.sd == None)
 
-            - Le concept retourné existait. On change alors son type ou on le supprime
+            3- Le concept retourné existait. On change alors son type ou on le supprime
 
            En cas d'erreur (exception) on retourne un indicateur de validité de 0 sinon de 1
       """
index 744696ae17f70f924fc177a513b73b58b4ceb976..7bed078d017746cf2d05c0074c265fc6d5214c8e 100644 (file)
@@ -22,7 +22,7 @@
 class EXCLUS:
    """
       La règle vérifie qu'un seul mot-clé de self.mcs est present 
-      parmi les elements de args.
+          parmi les elements de args.
 
       Ces arguments sont transmis à la règle pour validation sous la forme 
       d'une liste de noms de mots-clés ou d'un dictionnaire dont 
index f288eaae8c2c47fabea278fc056524f3beb14b1a..9d213721f30ef2ae53229b956e05c690e64ca114 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_JDC Validation  DATE 29/05/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_JDC Validation  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 37b168b4581cd1620abcd8710e5668de2c59c9cc..c6c5af431dfe5b9bf7b136d0d53b246dd5762fc7 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MACRO_ETAPE Validation  DATE 06/01/2003   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF V_MACRO_ETAPE Validation  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -99,11 +99,11 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
       """ 
            Cette méthode met à jour le concept produit en fonction des conditions initiales :
 
-            - Il n'y a pas de concept retourné (self.definition.sd_prod == None)
+            1- Il n'y a pas de concept retourné (self.definition.sd_prod == None)
 
-            - Le concept retourné n existait pas (self.sd == None)
+            2- Le concept retourné n existait pas (self.sd == None)
 
-            - Le concept retourné existait. On change alors son type ou on le supprime
+            3- Le concept retourné existait. On change alors son type ou on le supprime
 
            En cas d'erreur (exception) on retourne un indicateur de validité de 0 sinon de 1
       """
index f08a5f26c32937569051d09b769e5e1baa8d72ed..e134a2652f7d0d5b27d9d44c624ae245137ca245 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MCBLOC Validation  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_MCBLOC Validation  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -35,7 +35,8 @@ import V_MCCOMPO
 class MCBLOC(V_MCCOMPO.MCCOMPO):
    """
       Cette classe a un attribut de classe :
-          - txt_nat qui sert pour les comptes-rendus liés à cette classe
+
+      - txt_nat qui sert pour les comptes-rendus liés à cette classe
    """
 
    txt_nat="Bloc :"
index 6541296b797d6fc8bd8ff721491376f68cf2c89a..0a27deb0047fcf10da0de26a2663346db63fcb0c 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MCFACT Validation  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF V_MCFACT Validation  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -35,7 +35,8 @@ import V_MCCOMPO
 class MCFACT(V_MCCOMPO.MCCOMPO):
    """
       Cette classe a un attribut de classe :
-         - txt_nat qui sert pour les comptes-rendus liés à cette classe
+
+      - txt_nat qui sert pour les comptes-rendus liés à cette classe
    """
 
    txt_nat="Mot cle Facteur :"
index f70067fa0dc7eed6c5d56e87679fd7807667e990..88e2cfd36aeda4056397a7092de607a6d31aa674 100644 (file)
@@ -37,8 +37,10 @@ from Noyau.N_Exception import AsException
 class MCList:
    """
       Cette classe a deux attributs de classe :
-        - CR qui sert à construire l'objet compte-rendu
-        - txt_nat qui sert pour les comptes-rendus liés à cette classe
+
+      - CR qui sert à construire l'objet compte-rendu
+
+      - txt_nat qui sert pour les comptes-rendus liés à cette classe
    """
 
    CR=N_CR.CR
index 04f8e9e275ea4938546996154de22fe86830d783..11a6c6070428bcada1b5eae2cd20ef2ad076762e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MCSIMP Validation  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF V_MCSIMP Validation  DATE 06/10/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -37,13 +37,13 @@ from Noyau.N_Exception import AsException
 class MCSIMP:
    """
       COMMENTAIRE CCAR
-      Cette classe est quasiment identique à la classe originale d'EFICAS
-      a part quelques changements cosmétiques et des chagements pour la
-      faire fonctionner de facon plus autonome par rapport à l'environnement
-      EFICAS
+        Cette classe est quasiment identique à la classe originale d'EFICAS
+        a part quelques changements cosmétiques et des chagements pour la
+        faire fonctionner de facon plus autonome par rapport à l'environnement
+        EFICAS
  
-      A mon avis, il faudrait aller plus loin et réduire les dépendances
-      amont au strict nécessaire.
+        A mon avis, il faudrait aller plus loin et réduire les dépendances
+        amont au strict nécessaire.
 
         - Est il indispensable de faire l'évaluation de la valeur dans le contexte
           du jdc dans cette classe.
@@ -63,8 +63,9 @@ class MCSIMP:
          Cette méthode retourne un indicateur de validité de l'objet
          de type MCSIMP 
          
-           - 0 si l'objet est invalide
-           - 1 si l'objet est valide
+         - 0 si l'objet est invalide
+         - 1 si l'objet est valide
 
          Le pramètre cr permet de paramétrer le traitement. Si cr == 'oui'
          la méthode construit également un comte-rendu de validation
@@ -85,21 +86,21 @@ class MCSIMP:
             self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
           valid = 0
         if v is None:
-          valid=0
-          if cr == 'oui' :
-             self.cr.fatal("None n'est pas une valeur autorisée")
+           if cr == 'oui' :
+              self.cr.fatal("None n'est pas une valeur autorisée")
+           valid=0
         else:
-          # type,into ...
-          valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
-          #
-          # On verifie les validateurs s'il y en a
-          #
-          if self.definition.validators and not self.definition.validators.verif(self.valeur):
-            if cr == 'oui' :
-              self.cr.fatal(string.join(("Mot-clé : ",self.nom,"devrait avoir ",self.definition.validators.info())))
-            valid=0
-          # fin des validateurs
-          #
+           # type,into ...
+           valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
+           #
+           # On verifie les validateurs s'il y en a
+           #
+           if self.definition.validators and not self.definition.validators.verif(self.valeur):
+              if cr == 'oui' :
+                 self.cr.fatal(string.join(("Mot-clé : ",self.nom,"devrait avoir ",self.definition.validators.info())))
+              valid=0
+           # fin des validateurs
+           #
         self.valid = valid
         self.state = 'unchanged'
         # Si la validité du mot clé a changé, on le signale à l'objet parent
@@ -115,8 +116,8 @@ class MCSIMP:
    def verif_card(self,cr='non'):
       """ 
          un mot-clé simple ne peut etre répété :
-         la cardinalité ici s'entend par la vérification que le nombre d'arguments de self.valeur
-         est bien compris entre self.min et self.max dans le cas où il s'agit d'une liste
+           la cardinalité ici s'entend par la vérification que le nombre d'arguments de self.valeur
+           est bien compris entre self.min et self.max dans le cas où il s'agit d'une liste
       """
       card = 1
       min=self.definition.min
@@ -139,13 +140,12 @@ class MCSIMP:
 
    def verif_type(self,val=None,cr='non'):
       """
-         FONCTION :
+        FONCTION :
          Cette methode verifie que le type de l'argument val est en conformite avec celui 
          qui est declare dans la definition du mot cle simple.
          Elle a plusieurs modes de fonctionnement liés à la valeur de cr.
          Si cr vaut 'oui' : elle remplit le compte-rendu self.cr sinon elle ne le remplit pas.
-
-         PARAMETRE DE RETOUR :
+        PARAMETRE DE RETOUR :
          Cette méthode retourne une valeur booléenne qui vaut 1 si le type de val est correct ou 0 sinon
          
       """
@@ -178,6 +178,7 @@ class MCSIMP:
               return 0
           except:
             print "problème avec :",self.nom
+            print 'valeur =',valeur
             return 0
         for type_permis in self.definition.type:
           if self.compare_type(valeur,type_permis) : return 1
index 342af00edb2e5cd8fe4496b6e994516991e36684..84feda6b18ceba225bedb60fcf7974501ba1a073 100644 (file)
@@ -22,8 +22,8 @@
 class PRESENT_ABSENT: 
    """
       La règle vérifie que si le premier mot-clé de self.mcs est present 
-      parmi les elements de args les autres mots clés de self.mcs
-      doivent etre absents
+          parmi les elements de args les autres mots clés de self.mcs
+           doivent etre absents
 
       Ces arguments sont transmis à la règle pour validation sous la forme 
       d'une liste de noms de mots-clés ou d'un dictionnaire dont 
index 04f85f7782bd1cd1e8e0fe8a3cbf1dbe1df82e9f..f192e035c24c254148d6d31024ad31cb5bbb5b92 100644 (file)
@@ -22,7 +22,7 @@
 class PRESENT_PRESENT:
    """
       La règle vérifie que si le premier mot-clé de self.mcs est present 
-      parmi les elements de args les autres doivent l'etre aussi
+          parmi les elements de args les autres doivent l'etre aussi
 
       Ces arguments sont transmis à la règle pour validation sous la forme 
       d'une liste de noms de mots-clés ou d'un dictionnaire dont 
index 53f31b4703d3b00c42778cc09d4978367d3aef39..4953de5f70b4f898bac0f9d9faca94640892a8fd 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_PROC_ETAPE Validation  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_PROC_ETAPE Validation  DATE 26/09/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG