]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
*** empty log message ***
authorPascale Noyret <pascale.noyret@edf.fr>
Thu, 6 Dec 2007 10:38:41 +0000 (10:38 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Thu, 6 Dec 2007 10:38:41 +0000 (10:38 +0000)
21 files changed:
Aster/Cata/cataSTA8/Macro/impr_oar_ops.py
Aster/Cata/cataSTA8/Macro/macr_ascouf_mail_ops.py
Aster/Cata/cataSTA8/Macro/macr_spectre_ops.py
Aster/Cata/cataSTA8/cata.py
Aster/Cata/cataSTA8/ops.py
Aster/Cata/cataSTA9/Macro/Sensibilite.py
Aster/Cata/cataSTA9/Macro/impr_oar_ops.py
Aster/Cata/cataSTA9/Macro/macr_ascouf_mail_ops.py
Aster/Cata/cataSTA9/Macro/macr_recal_ops.py
Aster/Cata/cataSTA9/Macro/macr_spectre_ops.py
Aster/Cata/cataSTA9/Macro/test_fichier_ops.py
Aster/Cata/cataSTA9/SD/sd_cham_gene.py
Aster/Cata/cataSTA9/SD/sd_cham_no.py
Aster/Cata/cataSTA9/SD/sd_compor.py
Aster/Cata/cataSTA9/SD/sd_macr_elem_stat.py
Aster/Cata/cataSTA9/SD/sd_resultat_dyn.py
Aster/Cata/cataSTA9/SD/sd_tran_gene.py
Aster/Cata/cataSTA9/cata.py
Aster/Cata/cataSTA9/ops.py
Noyau/N_CONVERT.py
Noyau/N_MCSIMP.py

index 44cebeccc4c089cf0a10a1d8b5711ea5ccc3dd76..f942f6c11d2bdf72ce5fc1e6953a83e7a5458b13 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_oar_ops Macro  DATE 07/11/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF impr_oar_ops Macro  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-import aster
-try :
+# protection pour eficas
+try:
+   import aster
    from Utilitai.Utmess import UTMESS
    from Utilitai.Table import Table
    from Utilitai.partition import MAIL_PY
-except :
+except:
    pass
-
+   
 def buildTabString(tabLevel):
    """
       Construit une chaine de tabulation
index 12369cd53ab197d31489e37e027d82cd74e27a37..4a5993f9952d64fe55c735ae6b9cab8132992be9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_mail_ops Macro  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF macr_ascouf_mail_ops Macro  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 import os.path
 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
-import aster
 import string
-try :
+
+# protection pour eficas
+try:
+   import aster
    from Utilitai.Utmess     import UTMESS
-except :
+except:
    pass
 
 # ------------------------------------------------------------------------------
index 7f05c8bcebd4bcbbce9b18b0ba0966e77e1398c1..19d0a455cdba47d9063de39d210ca6b54eb07654 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_spectre_ops Macro  DATE 14/11/2006   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macr_spectre_ops Macro  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 from Accas import _F
-import aster
 import string
-try :
-    from Utilitai.Utmess import UTMESS
-except :
-    pass
+
+# protection pour eficas
+try:
+   import aster
+   from Utilitai.Utmess import UTMESS  
+except:
+   pass
+
 def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None,
                      FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args):
   """
index 7faa61de4741d51eac633f32e79eb799cc47606b..9649ad161f0017de1c86acef0af8250a1ce102b0 100755 (executable)
@@ -1,4 +1,4 @@
-#& MODIF ENTETE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF ENTETE  DATE 31/07/2007   AUTEUR SALMONA L.SALMONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -34,7 +34,7 @@ except:
   pass
 
 __version__="$Name:  $"
-__Id__="$Id: cata.py,v 1.3.8.6 2007-06-14 16:18:24 pnoyret Exp $"
+__Id__="$Id: cata_aster_v6.py,v 1.12 2001/01/16 15:55:05 iliade Exp $"
 
 EnumTypes = (ListType, TupleType)
 
@@ -667,9 +667,10 @@ class fonction_c(fonction_class):
       if self.par_lot() :
          raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
       from Utilitai.Graph import Graph
+      para = self.Parametres()
       gr=Graph()
       gr.AjoutCourbe(Val=self.Valeurs(),
-       Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU'],'IMAG'])
+       Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']])
       gr.Trace(FORMAT=FORMAT,**kargs)
    def __call__(self,val):
       ### Pour EFICAS : substitution de l'instance de classe
@@ -6136,7 +6137,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
      TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 ) ;
-#& MODIF COMMANDE  DATE 16/10/2006   AUTEUR JMBHH01 J.M.PROIX 
+#& MODIF COMMANDE  DATE 31/07/2007   AUTEUR SALMONA L.SALMONA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6191,9 +6192,11 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
 
          b_fatigue_multi   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'",
                                  fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
            TYPE_CHARGE   =SIMP(statut='o',typ='TXM',into=("PERIODIQUE","NON_PERIODIQUE") ),
            OPTION        =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
            RESULTAT      =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+           MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
            CHAM_MATER    =SIMP(statut='o',typ=(cham_mater) ),
            GROUP_MA      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
            MAILLE        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**' ),
@@ -6215,9 +6218,6 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
                    DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
                ),
            ),
-           b_fati_grmano  =BLOC(condition = "(GROUP_MA != None or MAILLE != None or GROUP_NO != None or NOEUD != None)",
-               MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
-           ),
          ),
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
@@ -21466,7 +21466,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
     MODELE  = SIMP(statut='o',typ=modele_sdaster),
     TITRE   = SIMP(statut='f',typ='TXM',max='**'),
 );                     
-#& MODIF COMMANDE  DATE 03/10/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 28/11/2007   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21707,7 +21707,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
               NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
               COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
               NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
-              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+#              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
               NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
               CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
               CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
index 6e08bd2ab951106801ce6b3e824079f7cf206aa2..810894c002431e4f94a269a39618daeb027a0625 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 31/07/2007   AUTEUR SALMONA L.SALMONA 
+#@ MODIF ops Cata  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -28,6 +28,7 @@ import pickle
 import Accas
 from Accas import ASSD
 
+
 try:
    import aster
    # Si le module aster est présent, on le connecte
index 1e7194e126156bcf8f118d0d868927d6c9c58bab..abd3f873a9038610ae70a98cae100add756cabf9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF Sensibilite Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF Sensibilite Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -24,11 +24,12 @@ Module traite de la gestion des concepts sensibles :
    - corps de la macro MEMO_NOM_SENSI
 """
 
-import aster
-try :
-    from Utilitai.Utmess import  UTMESS
-except :
-    pass
+# protection pour eficas
+try:
+   import aster
+   from Utilitai.Utmess import  UTMESS
+except:
+   pass
 
 _VIDE_ = '????????'
 
index 415f20b875b0cc6d5b0873dc6e4cafa52eaba564..0a45e2074a03ced160bf8d8e230be440d1568a88 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_oar_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF impr_oar_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-import aster
-try :
+# protection pour eficas
+try:
+   import aster
    from Utilitai.Utmess import  UTMESS
    from Utilitai.Table import Table
    from Utilitai.partition import MAIL_PY
-except :
+except:
    pass
 
 def buildTabString(tabLevel):
index 5e3e1e89f6b76a0aa6812845ee31ff86fb0ade41..9305fd0efb35eca7f86b17eedee09ca9a4478ddc 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_mail_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF macr_ascouf_mail_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 import os.path
 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
-import aster
 import string
-try :
+
+try:
+   import aster
    from Utilitai.Utmess     import  UTMESS
-except :
+except:
    pass
 
-
 # ------------------------------------------------------------------------------
 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
   """
index eb1cfa28c2ac8fe095608f5bd77157a93db6fc24..e0fafb602ac447beab0b34646087dcd09d6c6ced 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_recal_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF macr_recal_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
index ea44846a01b65263f097203661999bde4862563d..44fb67d6094e35d827db551a630889c391c0eda6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_spectre_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF macr_spectre_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 from Accas import _F
-import aster
 import string
-try :
+
+try:
+   import aster
    from Utilitai.Utmess import  UTMESS
-except :
+except:
    pass
+
 def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None,
                      FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args):
   """
index 623616800eb5140d52308e9fd91e9822cd37dd69..62e7d02cb5e828c016d7f9660531e83241b8306c 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF test_fichier_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF test_fichier_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 import sys
-import os.path
+import os
 import re
-from math import floor, log10
-from types import StringType
 import md5
 
 #-------------------------------------------------------------------------------
-def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
+class TestFichierError(Exception):
+   pass
+
+#-------------------------------------------------------------------------------
+def convert(x):
+   return float(x)
+
+def f_SOMM(somme, lx):
+   return somme + sum([convert(x) for x in lx])
+
+def f_SOMM_ABS(somme, lx):
+   return somme + sum([abs(convert(x)) for x in lx])
+
+def f_MINI(val, lx):
+   return min(val, min([convert(x) for x in lx]))
+
+def f_MAXI(val, lx):
+   return max(val, max([convert(x) for x in lx]))
+
+def f_MINI_ABS(val, lx):
+   return min(val, min([abs(convert(x)) for x in lx]))
+
+def f_MAXI_ABS(val, lx):
+   return max(val, max([abs(convert(x)) for x in lx]))
+
+dict_func_test = {
+   'SOMM'     : f_SOMM,
+   'SOMM_ABS' : f_SOMM_ABS,
+   'MINI'     : f_MINI,
+   'MAXI'     : f_MAXI,
+   'MINI_ABS' : f_MINI_ABS,
+   'MAXI_ABS' : f_MAXI_ABS,
+}
+
+#-------------------------------------------------------------------------------
+def test_fichier_ops(self, FICHIER, NB_VALE, VALE, VALE_K, TYPE_TEST,
+                           CRITERE, PRECISION, INFO, **kwargs):
    """
-     Macro TEST_FICHIER permettant de tester la non-regression d'un fichier
-     'a une tolerance' pres pour les nombres reels en calculant
-     le md5sum.
+     Macro permettant de tester la non-regression d'un fichier.
+     On teste le nombre de réels présents, et, facultativement, la
+     somme de ces nombres et le texte du fichier.
    """
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
@@ -45,233 +79,235 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
    
    import aster
    from Accas import _F
-   from Macro.test_fichier_ops import md5file
    from Utilitai.Utmess import  UTMESS
 
-   # vérifie la syntaxe des expressions régulières fournies
-   l_regexp = []
-   if args['EXPR_IGNORE']:
-      if type(args['EXPR_IGNORE']) is StringType:
-         lexp = [args['EXPR_IGNORE']]
-      else:
-         lexp = args['EXPR_IGNORE']
-      for exp in lexp:
-         try:
-            obj = re.compile(exp)
-         except re.error, s:
-#                   '<INVALID_REGEXP> %s pour %s' % (str(s), repr(exp)))
-            UTMESS('F','TEST0_1',valk=[str(s), repr(exp)])
-         else:
-            l_regexp.append(exp)
-
    is_ok = 0
 
    # vérifier que le fichier a été fermé
    tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER)
-   
-   if tinfo__['ETAT_UNITE', 1].find('OUVERT')>-1:
-#             "LE FICHIER N'A PAS ETE FERME :\n%s" % FICHIER)
-      UTMESS('A','TEST0_2',valk=FICHIER)
+   if tinfo__['ETAT_UNITE', 1].find('OUVERT') > -1:
+      UTMESS('S','TEST0_2',valk=FICHIER)
 
-   # fichier correctement fermé
-   else:
-      # calcule le md5sum du fichier
-      ier, mdsum = md5file(FICHIER, NB_CHIFFRE, EPSILON, l_regexp, INFO)
-      if ier != 0:
-         if ier == 4:
-            texte_erreur = 'Fichier inexistant : '+FICHIER
-         else:
-            texte_erreur = 'Erreur dans md5file, code retour = '+str(ier)
-         texte_erreur = '<S> <TEST_FICHIER> '+texte_erreur
-         # aujourd'hui, je ne sais pas déclencher autre chose que <F>...
-         self.cr.fatal(texte_erreur)
-         return ier
-
-      # comparaison a la reference
-      if INFO > 0 :
-         aster.affiche('MESSAGE', ' %-20s : %32s\n' % ('REFERENCE', VALE_K))
-
-      if mdsum == VALE_K:
-         is_ok = 1
+   # lecture du fichier
+   if not os.path.isfile(FICHIER):
+      UTMESS('S', 'TEST0_3', valk=FICHIER)
+   fileobj = open(FICHIER, 'r')
+
+   # filtre par expression régulière
+   try:
+      fileobj = regexp_filter(fileobj, kwargs['EXPR_IGNORE'])
+   except TestFichierError, (idmess, valk):
+      UTMESS('S', idmess, valk=valk)
+
+   # calcule le nombre de réels et la somme ou min/max
+   nbval, valeur, md5sum = test_iter(fileobj, function=dict_func_test[TYPE_TEST], verbose=(INFO > 1))
+   fileobj.close()
 
    # produit le TEST_TABLE
-   tab1__ = CREA_TABLE(LISTE=(_F(PARA='TEST',
-                                 TYPE_K='K8',
-                                 LISTE_K='VALEUR  ',),
-                              _F(PARA='BOOLEEN',
-                                 LISTE_I=is_ok,),),)
-   if args['REFERENCE'] == 'NON_REGRESSION':
-      TEST_TABLE(TABLE=tab1__,
-                 FILTRE=_F(NOM_PARA='TEST',
-                           VALE_K='VALEUR  ',),
-                 NOM_PARA='BOOLEEN',
-                 VALE_I=1,
-                 PRECISION=1.e-3,
-                 CRITERE='ABSOLU',
-                 REFERENCE=args['REFERENCE'],
-                 VERSION=args['VERSION'],)
+   md5ref = VALE_K or 'non testé'
+   is_ok = int(md5sum == md5ref)
+   tab1__ = CREA_TABLE(LISTE=(_F(PARA='NBVAL',  LISTE_I=nbval,),
+                              _F(PARA='VALEUR', LISTE_R=valeur,),
+                              _F(PARA='TEXTE',  LISTE_I=is_ok),),)
+   if VALE is not None:
+      sVALE = '%20.13e' % VALE
    else:
+      sVALE = 'non testé'
+   UTMESS('I', 'TEST0_4', vali=(nbval, NB_VALE), valr=valeur, valk=(md5sum, md5ref, FICHIER, sVALE))
+   
+   kwopt = { 'REFERENCE' : kwargs['REFERENCE'], }
+   if kwargs['REFERENCE'] == 'NON_REGRESSION':
+      kwopt['VERSION'] = kwargs['VERSION']
+   
+   TEST_TABLE(TABLE=tab1__,
+              NOM_PARA='NBVAL',
+              VALE_I=NB_VALE,
+              CRITERE='ABSOLU',
+              PRECISION=0,
+              **kwopt)
+
+   if VALE:
+      TEST_TABLE(TABLE=tab1__,
+                 NOM_PARA='VALEUR',
+                 VALE=VALE,
+                 CRITERE=CRITERE,
+                 PRECISION=PRECISION,
+                 **kwopt)
+
+   if VALE_K:
       TEST_TABLE(TABLE=tab1__,
-                 FILTRE=_F(NOM_PARA='TEST',
-                           VALE_K='VALEUR  ',),
-                 NOM_PARA='BOOLEEN',
-                 VALE_I=1,
-                 PRECISION=1.e-3,
+                 NOM_PARA='TEXTE',
+                 VALE_I=int(True),
+                 PRECISION=0,
                  CRITERE='ABSOLU',
-                 REFERENCE=args['REFERENCE'],)
+                 **kwopt)
 
    DETRUIRE(CONCEPT=_F(NOM=('tinfo__','tab1__'),),
             ALARME='NON',INFO=1,)
    return ier
 
+#-------------------------------------------------------------------------------
+def regexp_filter(file_in, regexp_ignore, debug=False):
+   """Filtre le fichier fourni (file descriptor) en utilisant les
+   expressions régulières fournies.
+   On retourne l'objet file vers le fichier modifié (ou non).
+   """
+   if not regexp_ignore:      # None or []
+      return file_in
+   # vérification des expressions régulières
+   if type(regexp_ignore) not in (list, tuple):
+      regexp_ignore = [regexp_ignore,]
+   l_regexp = []
+   for exp in regexp_ignore:
+      try:
+         obj = re.compile(exp)
+      except re.error, s:
+         raise TestFichierError, ('TEST0_1', (s, str(exp)))
+      else:
+         l_regexp.append(obj)
+   # filtre du fichier
+   file_out = os.tmpfile()
+   file_in.seek(0)
+   for i, line in enumerate(file_in):
+      if debug:
+         print 'LIGNE', i,
+      keep = True
+      for exp in l_regexp:
+         if exp.search(line):
+            keep = False
+            if debug:
+               print ' >>>>>>>>>> IGNOREE <<<<<<<<<<'
+            break
+      if keep:
+         file_out.write(line)
+         if debug:
+            print
+   file_out.seek(0)
+   return file_out
+
 
 #-------------------------------------------------------------------------------
-def sign(x):
-   return int(x/abs(x))
-
-def _round(x, n, exp):
-   v = x * 10**(-exp+n)
-   val = int(v + sign(x)*0.4999)
-   return val
-
-def entier_ini(x, nbch, exp=None):
-   #if exp is None:
-      #exp = int(floor(log10(abs(x))))
-   val = _round(x, nbch-1, exp)
-   return val, exp-nbch+1
-
-def entier_triple(x, nbch, exp_epsi):
-   #if abs(x) <= 10**exp_epsi:
-      #return '0'
-   y = _round(x * 10**(-exp_epsi), 0, 0) * 10**exp_epsi
-   exp = int(floor(log10(abs(y))))
-   z1, e1 = entier_ini(y,           nbch+2, exp)
-   z2, e2 = entier_ini(z1 * 10**e1, nbch+1, exp)
-   z3, e3 = entier_ini(z2 * 10**e2, nbch,   exp)
-   return '%sE%d' % (z3, e3)
+re_float_expo = re.compile('[-+]?[0-9\.]+[eED][\-\+]{0,1}[0-9]+')
+re_float      = re.compile('[-+]?[0-9]+?\.[0-9]*')
+re_int        = re.compile('[0-9]+')
+
+re_fortran    = re.compile('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)')
 
 #-------------------------------------------------------------------------------
-def md5file(fich, nbch, epsi,
-            regexp_ignore=[], info=0, output=None, format_func=entier_triple):
+def test_iter(obj, function, verbose=False):
    """
-   Cette methode retourne le md5sum d'un fichier en arrondissant les nombres
-   reels a la valeur significative.
+   Cette fonction compte le nombre de réels dans le fichier et une grandeur
+   à partir des valeurs (somme, sommes des valeurs absolues, min/max...).
    IN :
-      fich          : nom du fichier
-      nbch          : nombre de decimales significatives
-      epsi          : valeur en deca de laquelle on prend 0
-      regexp_ignore : liste d'expressions régulières permettant d'ignorer
-         certaines lignes
-      output        : pour rediriger l'interprétation du fichier (INFO=2)
-         dans le fichier de nom `output`,
-      info          : on affiche le résumé si info>0
-      format_func   : on peut préciser une autre fonction pour formatter 
-         les réels...
+      obj      : objet 'file' ou 'string' sur le lequel on peut itérer
+      function : fonction de test   val = func_test(val, [xi, ...])
+      verbose  : on affiche le résumé si info>0
    OUT :
-      code retour : 0 si ok, >0 sinon
-      md5sum
+      nombre de valeurs, valeur résultat
+   """
+   max_buff_size = 1000
+   nbval = 0
+   val = 0.
+   md5text = md5.new()
+   
+   # Si on lit tout le fichier d'un coup, on va environ 3 fois plus vite
+   # que si on le lit ligne à ligne, mais on consomme en mémoire environ
+   # 5 fois la taille du fichier...
+   # En lisant par paquet de 1000 (ou 10000), on va quasiment aussi vite
+   # en consommant très peu de mémoire.
+   
+   #    fichier     tout   ligne/ligne   1000 lignes
+   #     10 Mo       3 s      10 s       3 s
+   #     50 Mo      17 s      48 s      17 s
+   #    100 Mo      34 s      96 s      35 s
    
-         NE PAS AJOUTER D'IMPORT QUI RENDRAIT CETTE FONCTION
-               INUTILISABLE EN DEHORS DE CODE_ASTER.
-   """   
-   if output != None:
+   # l'itérateur est l'objet file lui-même ou on le crée sur la liste
+   if type(obj) is file:
+      obj.seek(0)
+      iterator = obj
+   else:
+      iterator = iter(obj)
+   
+   ok = True
+   buff = []
+   while ok:
       try:
-         sys.stdout = open(output, 'w')
-      except IOError, msg:
-         print "Erreur d'écriture sur %s : %s" % (output, msg)
+         text = iterator.next()
+      except StopIteration:
+         ok = False
+         text = ''
+      buff.append(text)
+      if ok and len(buff) < max_buff_size:
+         continue
+      else:
+         text = ''.join(buff)
+         buff = []
+
+      l_float = re_float_expo.findall(text)
+      l_float = [s.replace('D', 'E') for s in l_float]
+      text =    re_float_expo.sub('', text)
+      l_float.extend(re_float.findall(text))
+      text =         re_float.sub('', text)
+      l_float.extend(  re_int.findall(text))
+      text =           re_int.sub('', text)
+      
+      nbval += len(l_float)
+      val    = function(val, l_float)
+
+      text = ''.join([s.strip() for s in text.split()])
+      md5text.update(text)
+      
+      if verbose:
+         print 'Nombres réels et entiers :'
+         print l_float
+         print 'Texte :'
+         print text
    
-   #      1 Mo   10 Mo   100 Mo
-   # v0   2.6 s  20.4 s  196.6 s
-   # v1   2.0 s  10.3 s  94.9 s (pas de distinction entier/reel)
-   # remplacer le try/except par if re.search(...), 80% plus lent
-   # v2  10.7 s
-   if not os.path.isfile(fich):
-      return 4, ''
-   f = open(fich,'r')
-   m = md5.new()
-   exp_epsi = int(floor(log10(abs(epsi))))
-   i = 0
-   for ligne in f:
-      i = i+1
-      if info >= 2:
-         print 'LIGNE', i,
-      keep = True
-      for exp in regexp_ignore:
-         if re.search(exp, ligne):
-            keep = False
-            if info >= 2:
-               print ' >>>>>>>>>> IGNOREE <<<<<<<<<<',
-            break
-      if keep:
-         # découpe des nombres collés : 1.34E-142-1.233D+09
-         ligne = re.sub('([0-9]+)\-', '\g<1> -', ligne)
-         # conversion des DOUBLE fortran en 'E'
-         ligne = re.sub('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)', '\g<1>E\g<2>', ligne)
-         r = ligne.split()
-         for x in r:
-            try:
-               xv = float(x)
-               if abs(xv)<epsi:
-                  s = '0'
-               else:
-                  #s = format_float % float(x)
-                  s = format_func(xv, nbch, exp_epsi)
-            except ValueError:
-               s = x
-            if info >= 2:
-               print (' %'+str(nbch+7)+'s') % s,
-            m.update(s)
-      if info >= 2:
-         print
-   f.close()
-   md5sum = m.hexdigest()
+   md5sum = md5text.hexdigest()
    
-   affich_resu = True
-   if info >= 1:
-      while affich_resu:
-         form = ' %-20s : %32s'
-         print form % ('Fichier', fich)
-         print form % ('Nombre de lignes', str(i))
-         #print form % ('Format des reels',format_float)
-         print form % ('Nombre de chiffres', str(nbch))
-         print form % ('Epsilon', str(epsi))
-         print form % ('md5sum', md5sum)
-         if output == None:
-            affich_resu = False
-         else:
-            sys.stdout = sys.__stdout__
-            output = None
-   return 0, md5sum
+   return nbval, val, md5sum
 
+#-------------------------------------------------------------------------------
+def test_file(filename, regexp_ignore=[], type_test='SOMM', verbose=False):
+   """Raccourci pour tester rapidement un fichier (utilisé par stanley.py).
+   """
+   if type(regexp_ignore) not in (list, tuple):
+      regexp_ignore = [regexp_ignore,]
+
+   fileobj = open(filename, 'r')
+   fileobj = regexp_filter(fileobj, regexp_ignore)
+
+   nbv, val, md5sum = test_iter(fileobj, function=dict_func_test[type_test], verbose=verbose)
+
+   return nbv, val, md5sum
 
 #-------------------------------------------------------------------------------
 if __name__ == '__main__':
    from optparse import OptionParser, OptionGroup
 
-   p = OptionParser(usage='usage: %s a_tester [options]' % sys.argv[0])
-   p.add_option('-n', '--nbch',
-      action='store', dest='nbch', type='int', default=6,
-      help='nombre de chiffres significatifs')
-   p.add_option('-e', '--epsilon',
-      action='store', dest='epsi', type='float', default=1.e-14,
-      help='epsilon en dessous duquel on considère les nombres nuls')
+   p = OptionParser(usage='usage: %s fichier [options]' % sys.argv[0])
+   p.add_option('--type_test',
+      action='store', dest='type_test', default='SOMM',
+      help='type du test : SOMM, SOMM_ABS, MIN, MAX')
    p.add_option('--expr_ignore',
       action='store', dest='exp', type='string',
       help='expression régulière à ignorer')
-   p.add_option('-o', '--output',
-      action='store', dest='output', type='string', default='output.txt',
-      help='fichier de sortie')
+   p.add_option('-v', '--verbose',
+      action='store_true', dest='verbose', default=False,
+      help='mode bavard')
    opts, args = p.parse_args()
 
-   if len(args)<1:
-      p.print_usage()
-      sys.exit(1)
+   if len(args) == 0:
+      p.error('fichier à tester ?')
+
    if opts.exp is None:
       exp = []
    else:
       exp = [opts.exp]
 
-   print 'Lignes retenues dans %s' % opts.output
-   iret = md5file(args[0], opts.nbch, opts.epsi,
-                  regexp_ignore=exp, info=2, output=opts.output)
+   fileobj = open(args[0], 'r')
+   fileobj = regexp_filter(fileobj, exp)
+   nbv2, sumv2, md5sum2 = test_iter(fileobj, function=dict_func_test[opts.type_test], verbose=opts.verbose)
+   print '%6d valeurs, resultat = %f, texte : %s' % (nbv2, sumv2, md5sum2)
+
 
index 906b33b067b467263af2bdfe42d559876b48275a..43cca8eeb7d971ad192b88d97b38fdbf0eafb831 100644 (file)
@@ -1,24 +1,25 @@
-#@ MODIF sd_cham_gene SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_gene SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
 
 class sd_cham_gene(AsBase):
     nomj = SDNom(fin=19)
@@ -27,3 +28,18 @@ class sd_cham_gene(AsBase):
     DESC = AsVI(docu='VGEN', )
 
 
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.REFE.exists
+
+    # indirection vers NUME_DDL_GENE:
+    def check_REFE(self, checker):
+        if not self.exists() : return
+        refe = self.REFE.get_stripped()
+        # ce test fait planter les verif de SD issues de DYNA_TRAN_MODAL + RECU_GENE
+        # op0037 cree un refe[1]='$TRAN_GENE' bidon 
+        if refe[1] == '$TRAN_GENE': return
+        if refe[1] :
+            sd2 = sd_nume_ddl_gene(refe[1]) ; sd2.check(checker)
+
+
index 1fa32c08d5e5a15ba7fd87d2fe125f82a5363728..7a1333dee3685a04cf9a9900de6e02b8ca966ffe 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_cham_no SD  DATE 17/07/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_no SD  DATE 28/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -44,8 +44,9 @@ class sd_cham_no(sd_titre):
         # faut-il vérifier le sd_maillage de chaque sd_cham_no ?   AJACOT_PB
         #  - cela risque de couter cher
         #  - cela pose un problème "import circulaire" avec sd_maillage -> sd_cham_no => import ici
-        #from SD.sd_maillage import sd_maillage
-        #sd2 = sd_maillage(lnom[0]) ; sd2.check(checker)
+        from SD.sd_maillage import sd_maillage
+        sd2 = sd_maillage(lnom[0])
+        sd2.check(checker)
 
         # j'aurai préféré : sd_prof_chno que sd_nume_equa (mais sslv111b !) AJACOT_PB :
         if lnom[1].strip() :
index 7b77d401a302cee9ad13808e9daf3aadd35ea2a3..b7ed032f56b5c96c312f2c637e41b3eee0398f7a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_compor SD  DATE 12/11/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_compor SD  DATE 19/11/2007   AUTEUR PROIX J-M.PROIX 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -52,8 +52,8 @@ class sd_compor(AsBase):
     #------------------------------------
         nboccm=cpri[4]
         nvi   =cpri[2]
-        nbsys=(nvi-8)/3
-        assert nvi==8+3*nbsys , (nvi, nbsys, cpri)
+        nbsys=(nvi-9)/3
+        assert nvi==9+3*nbsys , (nvi, nbsys, cpri)
         cprk=self.CPRK.get_stripped()
 
         # vérif existence et longueur
index a1ebed471c02054f8050ae9b188904359145b524..c9020c1bf0bfbba42497fdfb1336c2c10f19c5c0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_macr_elem_stat SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_macr_elem_stat SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,6 +22,7 @@ from SD import *
 
 from SD.sd_matr_asse_gd import sd_matr_asse_gd
 from SD.sd_stoc_lciel import sd_stoc_lciel
+from SD.sd_proj_mesu import sd_proj_mesu
 
 
 class sd_macr_elem_stat(AsBase):
@@ -51,6 +52,9 @@ class sd_macr_elem_stat(AsBase):
     LICA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
     LICH = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8))
 
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu())
+
 
     def check_longueurs(self, checker):
     #------------------------------------
index 51406bd50c62a5646892ef03d0d6c9d84a989c33..c0bdacb563cc859460eedda68ab3a6ed3c8b45b6 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_resultat_dyn SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_resultat_dyn SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -24,6 +24,7 @@ from SD.sd_resultat import sd_resultat
 from SD.sd_nume_ddl import sd_nume_ddl
 from SD.sd_matr_asse import sd_matr_asse
 from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+from SD.sd_proj_mesu import sd_proj_mesu
 
 
 class sd_resultat_dyn(sd_resultat):
@@ -32,6 +33,9 @@ class sd_resultat_dyn(sd_resultat):
     PROFC_NUME_REFN = Facultatif(AsVK24(SDNom(nomj='.PROFC.NUME.REFN'), lonmax=2, ))
     REFD = Facultatif(AsVK24(SDNom(debut=19), lonmax=6, )) # n'existe pas dans sdll23a
 
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu())
+
 
     # indirection vers les SD de .REFD :
     def check_resultat_dyn_i_REFD(self, checker):
index 9ec5c393c7698247efa9156fb2c25dbf2e846620..a5c682f4817424b3fd4ac7f9826c87a4893ece20 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_tran_gene SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_tran_gene SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,6 +22,7 @@ from SD import *
 from SD.sd_titre import sd_titre
 from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
 from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_proj_mesu import sd_proj_mesu
 from SD.sd_util import *
 
 
@@ -61,13 +62,9 @@ class sd_tran_gene(sd_titre) :
     REDC = Facultatif(AsVI())
     REDD = Facultatif(AsVR())
 
-    # objets commencant en 8 :
-    # Ces objets ne sont pas encore documentés.
-    # une fiche a été émise pour ces objets : 10882
-    BASEPR = Facultatif(AsVR(SDNom(debut=8)))
-    VNOEUD = Facultatif(AsVI(SDNom(debut=8)))
-    VORIEN = Facultatif(AsVR(SDNom(debut=8)))
-    VRANGE = Facultatif(AsVK8(SDNom(debut=8)))
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu(SDNom(debut=8)))
+
 
 
 
@@ -90,12 +87,15 @@ class sd_tran_gene(sd_titre) :
 
 
     def check_REFD(self,checker):
+        # AJACOT : j'avais cru comprendre des choses ... mais sdld104a me prouve le contraire !
+        # à revoir ?????
+        return
         refd=self.REFD.get_stripped()
         assert refd[0] != '' , refd
         sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
         assert refd[1] != '' , refd
-        sd2= sd_matr_asse_gene(refd[1]) ; sd2.check()
-        if  refd[2] != '' :
+        sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+        if refd[2] != '' :
             sd2= sd_matr_asse_gene(refd[2]) ; sd2.check()
         assert refd[3] != '' , refd
         sd2= sd_nume_ddl_gene(refd[3]) ; sd2.check()
index bbac13de70bbeafa4cc27016f37602325d676d84..71e22d03a44137a51fd8754db41d9b3233489b65 100644 (file)
@@ -1,4 +1,4 @@
-#& MODIF ENTETE  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#& MODIF ENTETE  DATE 28/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
-__version__ = "$Name: BR_dev_V1_13 $"
-__Id__ = "$Id: cata.py,v 1.2.6.3 2007-11-15 12:46:21 pnoyret Exp $"
+# faire que la division soit toujours réelle
+from __future__ import division
+
+__version__ = "$Name:  $"
+__Id__ = "$Id: cata_aster_v6.py,v 1.12 2001/01/16 15:55:05 iliade Exp $"
 
 import Accas
 from Accas import *
@@ -1821,7 +1824,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_pr
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 08/10/2007   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 27/11/2007   AUTEUR BOYERE E.BOYERE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2807,24 +2810,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                                        "CDI","CDG") ),
              VALE_PDC        =SIMP(statut='f',typ='R',max='**',
                                  fr="valeurs des coefficients de perte de charge singulière",),
-             APPL_FORC_ARCHI  =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force d'archimède",
-                                 into=("REPARTIE","CDG") ),
-             APPL_FORC_FPLAQ  =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force de plaquage dans le guidage continu",
-                                 into=("REPARTIE","CDG","ZONE","MILIEU","DISTRI") ),
-             APPL_FORC_FMEC   =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force dans le mécanisme de levée",
-                                 into=("REPARTIE","CDG","ZONE","PTREP") ),
-             APPL_FORC_FTG    =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force tube_guide",
-                                 into=("REPARTIE","CDG","ZONE","PTREP") ),
              DIRE_FORC_FPLAQ  =SIMP(statut='f',typ='R',min=3,max=3,
                                  fr="direction d'application de la force de plaquage",),
-             b_CDG    =BLOC(condition = "(APPL_FORC_ARCHI == 'CDG') or (APPL_FORC_FPLAQ == 'CDG') or \
-                                         (APPL_FORC_FMEC  == 'CDG') or (APPL_FORC_FTG   == 'CDG')",
-                MASS_INER        =SIMP(statut='o',typ=table_sdaster ),
-             ),
              UNITE_IMPR_FORCE =SIMP(statut='f',typ='I',
                                  fr="unité d'impression des forces",),
              UNITE_IMPR_NOEUD =SIMP(statut='f',typ='I',
@@ -13119,7 +13106,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 23/10/2007   AUTEUR BOITEAU O.BOITEAU 
+#& MODIF COMMANDE  DATE 27/11/2007   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13377,33 +13364,6 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 #-------------------------------------------------------------------
-         RECH_LINEAIRE   =FACT(statut='f',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),         
-           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
-           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
-           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
-           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
-           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
-           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
-         ),
-         PILOTAGE        =FACT(statut='f',
-           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
-           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
-           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
-           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
-           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
-                         ),
          CONVERGENCE     =FACT(statut='d',
            regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
            b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
@@ -14028,7 +13988,7 @@ EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 23/10/2007   AUTEUR BOITEAU O.BOITEAU 
+#& MODIF COMMANDE  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14047,7 +14007,7 @@ EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-def fact_ldlt_prod(MATR_ASSE,**args):
+def factoriser_prod(MATR_ASSE,**args):
   if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
   if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
   if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
@@ -14056,7 +14016,7 @@ def fact_ldlt_prod(MATR_ASSE,**args):
   if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
   raise AsException("type de concept resultat non prevu")
 
-FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=fact_ldlt_prod,
+FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
                fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires"+
                   "ou construire une matrice de préconditionnement pour une résolution par gradient conjugué",
                reentrant='f', UIinfo={"groupes":("Résolution",)},
@@ -17758,7 +17718,7 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
             )
-#& MODIF COMMANDE  DATE 08/11/2007   AUTEUR SALMONA L.SALMON
+#& MODIF COMMANDE  DATE 19/11/2007   AUTEUR DEVESA G.DEVES
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17786,7 +17746,8 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
          MATR_RIGI       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c),),
          MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
          MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
-         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),         
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'), 
+         SANS_GROUP_NO   =SIMP(statut='f',typ=grno ),
          MATR_IMPE       =SIMP(statut='f',typ=matr_asse_gene_c ),
          b_matr_impe     =BLOC(condition = "MATR_IMPE != None",
              FREQ_EXTR       =SIMP(statut='o',typ='R' ),
@@ -18802,14 +18763,14 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
 from Macro.macro_matr_asse_ops import macro_matr_asse_ops
 
 def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL :  raise AsException("Impossible de typer les concepts resultats")
   if isinstance(NUME_DDL,CO) :
     self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
   else:
     self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
-
   for m in MATR_ASSE:
     opti=m['OPTION']
-    if opti==None:t=matr_asse
 
     if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
        "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
@@ -18824,9 +18785,6 @@ def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
     if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
 
     self.type_sdprod(m['MATRICE'],t)
-
-  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
-  if not NUME_DDL :  raise AsException("Impossible de typer les concepts resultats")
   return None
 
 MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
@@ -21448,7 +21406,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
     INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
 
 );                     
-#& MODIF COMMANDE  DATE 03/04/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 27/11/2007   AUTEUR VIVAN L.VIVAN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21692,7 +21650,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
               NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
               COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
               NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
-              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+#              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
               NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
               CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
               CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
@@ -23654,7 +23612,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
  )
 
-#& MODIF COMMANDE  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23681,11 +23639,17 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
                    UIinfo={"groupes":("Impression",)},
                    fr="Tester la non régression de fichiers produits par des commandes aster",
    FICHIER          =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
-   NB_CHIFFRE      =SIMP(statut='o',typ='I',),   # defaut=6        pas de defaut, il faut
-   EPSILON         =SIMP(statut='o',typ='R',),   # defaut=1.E-12   se poser la question !
-   EXPR_IGNORE     =SIMP(statut='f',typ='TXM',max='**',
-                         fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
-   VALE_K          =SIMP(statut='o',typ='TXM' ),
+   EXPR_IGNORE      =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
+
+   TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut='SOMM',into=("SOMM_ABS","SOMM","MAXI","MINI","MAXI_ABS","MINI_ABS")),
+   NB_VALE         =SIMP(statut='o',typ='I',),
+   VALE            =SIMP(statut='f',typ='R',max='**'),
+   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),
+
    REFERENCE       =SIMP(statut='f',typ='TXM',
                          into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
 
index c8163ee5ce2f268c81896d29e9ce40bb10cd7033..bbe607181bbe115f0c537f26c45c8a7a24e06bd0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF ops Cata  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -56,8 +56,6 @@ def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG):
    if CODE != None:
       jdc.fico = CODE['NOM']
    if aster_exists:
-      # on commence l'execution proprement dite, fin des initialisations
-      jdc.timer.Stop('JDC init')
       # en POURSUITE, ne pas écraser la mémorisation existante.
       if not hasattr(jdc, 'memo_sensi'):
          jdc.memo_sensi = MEMORISATION_SENSIBILITE()
index 4d1af5adaa9faaf2dbb95d4f63be54324733b2ae..9d3443ddc8620ab73191e9092632b5458a1a543b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_CONVERT Noyau  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_CONVERT Noyau  DATE 30/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
    Module de conversion des valeurs saisies par l'utilisateur après vérification.
 """
 
-# -----------------------------------------------------------------------------
-class ConversionError(Exception):
-   pass
-
 # -----------------------------------------------------------------------------
 def is_int(real):
    """Est-ce que 'real' a une valeur entière ?
@@ -33,46 +29,74 @@ def is_int(real):
    return abs(int(real) - real) < 1.e-12
 
 # -----------------------------------------------------------------------------
-class TypeConversion:
-   """Conversion de type
+class Conversion:
+   """Conversion de type.
    """
-   def __init__(self, name, typ=None):
+   def __init__(self, name, typ):
       self.name = name
-      self.typ = typ
+      self.typ  = typ
 
    def convert(self, obj):
       """Filtre liste
       """
       in_type = type(obj)
-      is_simple = in_type not in (list, tuple)
-      if is_simple:
+      if in_type not in (list, tuple):
          obj = (obj,)
       
       result = []
       for o in obj:
-         result.append(self.defaut(o))
+         result.append(self.function(o))
       
-      if is_simple:
+      if in_type not in (list, tuple):
          return result[0]
       else:
-         return in_type(result)
+         # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple
+         return tuple(result)
 
-   def defaut(self, obj):
-      """Conversion de obj si c'est possible.
-      """
-      for type_permis in self.typ:
-         # attention si plusieurs types sont permis, l'ordre de self.typ peut influer sur le résultat.
-         if type_permis == 'R':
-            if type(obj) in (int, float, long):
-               return float(obj)
-         elif type_permis == 'I':
-            if type(obj) in (int, float, long):
-               if is_int(obj):
-                  return int(obj)
-               else:
-                  raise ConversionError("%s (%s) ne peut pas être considéré comme entier" % (repr(obj), type(obj)))
+   def function(self, o):
+      raise NotImplementedError, 'cette classe doit être dérivée'
+
+# -----------------------------------------------------------------------------
+class TypeConversion(Conversion):
+   """Conversion de type
+   """
+   def __init__(self, typ):
+      Conversion.__init__(self, 'type', typ)
+
+# -----------------------------------------------------------------------------
+class IntConversion(TypeConversion):
+   """Conversion en entier
+   """
+   def __init__(self):
+      TypeConversion.__init__(self, 'I')
+
+   def function(self, o):
+      if type(o) is float and is_int(o):
+         o = int(o)
+      return o
+
+# -----------------------------------------------------------------------------
+class FloatConversion(TypeConversion):
+   """Conversion de type
+   """
+   def __init__(self):
+      TypeConversion.__init__(self, 'R')
+
+   def function(self, o):
+      if type(o) in (int, float, long):
+         o = float(o)
+      return o
+
+# -----------------------------------------------------------------------------
+_convertI = IntConversion()
+_convertR = FloatConversion()
 
-      # autres types : pas de conversion, la validation arrêtera si obj est incorrect.
-      return obj
+def ConversionFactory(name, typ):
+   if name == 'type':
+      if 'I' in typ:
+         return _convertI
+      elif 'R' in typ:
+         return _convertR
+   return None
 
 
index 8d2e939a5d3762e8baef2960535b2a0adc627fc3..2f42ae93066f15d50551d8198f1a75c790c67e98 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCSIMP Noyau  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCSIMP Noyau  DATE 30/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -32,7 +32,7 @@ from copy import copy
 from Noyau.N_ASSD import ASSD,assd
 from Noyau.N_CO import CO
 import N_OBJECT
-from N_CONVERT import TypeConversion
+from N_CONVERT import ConversionFactory
 
 class MCSIMP(N_OBJECT.OBJECT):
    """
@@ -59,7 +59,7 @@ class MCSIMP(N_OBJECT.OBJECT):
       self.nom=nom
       self.val = val
       self.parent = parent
-      self.convProto = TypeConversion('type', typ=self.definition.type)
+      self.convProto = ConversionFactory('type', typ=self.definition.type)
       self.valeur = self.GETVAL(self.val)
       if parent :
          self.jdc = self.parent.jdc
@@ -78,7 +78,8 @@ class MCSIMP(N_OBJECT.OBJECT):
       """
       if (val is None and hasattr(self.definition,'defaut')) :
          val = self.definition.defaut
-      val = self.convProto.convert(val)
+      if self.convProto:
+         val = self.convProto.convert(val)
       return val
 
    def get_valeur(self):