Salome HOME
CCAR: Correction du pb AO2001-474, SD non nommée : impossible de la renommer ensuite
authoreficas <>
Mon, 16 Sep 2002 08:56:43 +0000 (08:56 +0000)
committereficas <>
Mon, 16 Sep 2002 08:56:43 +0000 (08:56 +0000)
Ce probleme a été corrigé en modifiant la methode isvalid de ETAPE et MACRO_ETAPE.
Maintenant lors des appels à isvalid pour des validités partielles (sd="non")
l'etat de validite de la commande n'est plus modifié (self.state et self.valid).
L'etat reste maintenant coherent et reflete seulement la validite complete.
Dans la methode Build_sd, on poursuit maintenant meme en presence d'une erreur
lors de la construction du concept produit (self.sd).

15 files changed:
Aster/Tests/README [new file with mode: 0644]
Aster/Tests/Recette/efica01a.11 [new file with mode: 0755]
Aster/Tests/Recette/efica01a.com0 [new file with mode: 0755]
Aster/Tests/Recette/efica01a.comm [new file with mode: 0755]
Aster/Tests/err.comm [new file with mode: 0644]
Aster/Tests/err2.comm [new file with mode: 0644]
Aster/Tests/err3.comm [new file with mode: 0644]
Aster/Tests/torsion.comm [new file with mode: 0755]
Editeur/bureau.py
Editeur/menubar.py
Exemples/ex18/torsion.comm [new file with mode: 0755]
Ihm/I_ETAPE.py
Validation/V_ETAPE.py
Validation/V_MACRO_ETAPE.py
insercopyright.py [new file with mode: 0644]

diff --git a/Aster/Tests/README b/Aster/Tests/README
new file mode 100644 (file)
index 0000000..bea2386
--- /dev/null
@@ -0,0 +1,8 @@
+Ce repertoire contient quelques tests d'Eficas pour Aster.
+
+Les fichiers tests doivent etre lisibles par Eficas sans probleme.
+Le repertoire Recette contient le cas de recette d'eficas_aster.
+On doit pouvoir le relire tel que et le reconstruire de zero (fichier
+normal et poursuite).
+
+Le test torsion.comm est un test pour format AsterV5
diff --git a/Aster/Tests/Recette/efica01a.11 b/Aster/Tests/Recette/efica01a.11
new file mode 100755 (executable)
index 0000000..57c140d
--- /dev/null
@@ -0,0 +1,21 @@
+DEPL2 = FORMULE(REEL="""(REEL:INST) =
+SIN(OMEGAA*INST)/(OMEGAA**2) """)
+DEPLACE2=CALC_FONC_INTERP( FONCTION=DEPL2,
+                           LIST_PARA=L_INST,
+                           PROL_DROITE='LINEAIRE',
+                           PROL_GAUCHE='LINEAIRE',
+                           NOM_RESU='DEPL'       )
+
+MONO_X=CALC_CHAR_SEISME(  MATR_MASS=MASSE,
+                          DIRECTION=( 1., 0., 0.,),
+                          MONO_APPUI='OUI' )
+
+
+MACRO_PROJ_BASE(BASE=MODE_MEC,MATR_ASSE_GENE=(
+                _F( MATRICE = CO("MASS_GEN"), MATR_ASSE = MASSE),
+                _F( MATRICE = CO("RIGI_GEN"), MATR_ASSE = RIGIDITE)),
+                VECT_ASSE_GENE=_F( VECTEUR = CO("VECT_X"), VECT_ASSE = MONO_X)
+               )
+
+
+RETOUR()
diff --git a/Aster/Tests/Recette/efica01a.com0 b/Aster/Tests/Recette/efica01a.com0
new file mode 100755 (executable)
index 0000000..ed4ca2d
--- /dev/null
@@ -0,0 +1,77 @@
+POURSUITE(CODE=_F(  NOM = 'EFICA01A'))
+
+
+TRAN_GE2=DYNA_TRAN_MODAL(  MASS_GENE=MGEN_BIC,   RIGI_GENE=RGEN_BIC,
+                 METHODE='EULER',
+                 AMOR_REDUIT=( 0.07,  0.07, ),
+                MODE_STAT=MSTA_BIC,EXCIT=(
+                _F(  VECT_GENE = VECT_X1,  ACCE = ACCELER1,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,), NOEUD = 'NO1',
+                       VITE = VITESSE1, DEPL = DEPLACE1), 
+                _F(  VECT_GENE = VECT_X2,  ACCE = ACCELER2,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,), NOEUD = 'NO11',
+                       VITE = VITESSE2, DEPL = DEPLACE2)), 
+                CHOC=_F(  GROUP_NO_1 = 'MASSES1',
+                       GROUP_NO_2 = 'MASSES2',
+                       OBSTACLE = GRILLE,
+                       INTITULE = 'NO2/NO12',
+                       NORM_OBST = (0., 0., 1.,),
+                       DIST_1 = 0.4495,
+                       DIST_2 = 0.4495,
+                       RIGI_NOR = 2.88E7,
+                       AMOR_NOR = 0.,
+                       RIGI_TAN = 0.,
+                       COULOMB = 0.),
+                 INCREMENT=_F( INST_INIT = 0.,  INST_FIN = 1.,  PAS = 0.00025),
+                ARCHIVAGE=_F(  PAS_ARCH = 8)
+                )
+
+LISTIMP=DEFI_LIST_REEL(  DEBUT=0.,
+                    INTERVALLE=_F(  JUSQU_A = 1.,  NOMBRE = 500))
+
+RESUA1=REST_BASE_PHYS(  RESU_GENE=TRAN_GE1,
+                        LIST_INST=LISTIMP,
+                        INTERPOL='LIN',
+                        NOM_CHAM='DEPL',
+                        MULT_APPUI='OUI'
+                       )
+
+RESUR1=REST_BASE_PHYS(  RESU_GENE=TRAN_GE1,
+                        LIST_INST=LISTIMP,
+                        INTERPOL='LIN',
+                        NOM_CHAM='DEPL',
+                        MULT_APPUI='NON'
+                       )
+
+
+NO2_DXA=RECU_FONCTION(  NOEUD='NO2',  NOM_CMP='DX',  NOM_CHAM='DEPL',
+                        RESULTAT=RESUA1,  
+                        LIST_INST=LISTIMP,   INTERPOL='LIN' )
+
+NO2_DX_A=RECU_FONCTION(  NOEUD='NO2',  NOM_CMP='DX',  NOM_CHAM='DEPL',
+                         RESU_GENE=TRAN_GE2,  
+                         MULT_APPUI='OUI',        INTERP_NUME='LIN',
+                         LIST_INST=LISTIMP,   INTERPOL='LIN' )
+
+DIFF=CALC_FONCTION(COMB=(
+               _F(  FONCTION = NO2_DX_A,  COEF = 1.),
+               _F(  FONCTION = NO2_DXA,   COEF = -1.))
+                    )
+
+TEST_FONCTION(VALEUR=(
+    _F(  FONCTION = DIFF, VALE_PARA = 0.10, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 0.30, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 0.50, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 0.70, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 1.00, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5))
+             )
+
+
+FIN()
diff --git a/Aster/Tests/Recette/efica01a.comm b/Aster/Tests/Recette/efica01a.comm
new file mode 100755 (executable)
index 0000000..e5eeb90
--- /dev/null
@@ -0,0 +1,204 @@
+# MODIF  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+# TITRE TEST DE NON REGRESSION DE L IHM EFICAS - DERIVE DE SDND102A
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Ce cas test est gere en configuration dans la base ASTER, il sert de
+# modele pour prononcer la recette de l IHM d EFICAS : l objectif est de
+# pouvoir recreer ce test a l identique dans EFICAS a partir d une page
+# blanche.
+# On a donc essaye d y placer toutes les commandes un peu particulieres
+# du langage de commandes d ASTER
+#
+# Il s agit en fait du test SDND102A auquel on a ajoute :
+#      la definition d un parametre (VAL)
+#      l inclusion d un fichier (INCLUDE)
+#      une poursuite (POURSUITE)
+# Il contient ainsi :
+# des parametres, des formules, des macros, des mots cles facteurs repetes
+# (y compris conditionnes par des regles : calc_fonction / COMB),
+# des blocs  (mode_iter_simult,calc_char_seisme), un defi_valeur, un parametre.
+#
+#
+# Il faudra y associer quelques recommandations pour la recette :
+# - verifier qu en ouvrant le .com0, il demande bien a browser le .comm puis, en cascade, le .11
+# - verifier qu on peut bien supprimer une commande, un mot cle simple et facteur
+# - verifier les acces a la doc
+#
+
+DEBUT(CODE=_F( NOM = 'EFICA01A'))
+
+MAILLAGE=LIRE_MAILLAGE( )
+
+MAILLA2=LIRE_MAILLAGE(  UNITE=19 )
+
+MODELE=AFFE_MODELE(  MAILLAGE=MAILLAGE,
+                     AFFE=(
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_MA = 'RESSORT'),
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_NO = 'MASSES')    )
+                    )
+
+BICHOC=AFFE_MODELE(  MAILLAGE=MAILLA2,
+                     AFFE=(
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_MA = 'RESSORTS'),
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_NO = ( 'MASSES1', 'MASSES2',)))
+                    )
+
+VAL = 98696.0
+
+CARA_ELE=AFFE_CARA_ELEM(  MODELE=MODELE,
+                          DISCRET=(
+           _F(  CARA = 'K_T_D_L',  REPERE = 'GLOBAL', GROUP_MA = 'RESSORT',
+                VALE = (VAL, 0., 0., )),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES', VALE = 25.0))
+                         )
+
+CARA_BIC=AFFE_CARA_ELEM(  MODELE=BICHOC,
+                          DISCRET=(
+           _F(  CARA = 'K_T_D_L',  REPERE = 'GLOBAL', GROUP_MA = 'RESSORTS',
+                VALE = (VAL, 0., 0., )),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES1', VALE = 25.0),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES2', VALE = 25.0))
+                         )
+
+
+CON_LIM=AFFE_CHAR_MECA(  MODELE=MODELE,DDL_IMPO=(
+              _F(  GROUP_NO = 'ENCASTRE',  DX = 0.,  DY = 0.,  DZ = 0.),
+              _F(  GROUP_NO = 'MASSES',              DY = 0.,  DZ = 0.))
+                       )
+
+CL_BICHO=AFFE_CHAR_MECA(  MODELE=BICHOC,DDL_IMPO=(
+              _F(  GROUP_NO = 'ENCBICHO',     DX = 0.,  DY = 0.,  DZ = 0.),
+              _F(  GROUP_NO = ( 'MASSES1', 'MASSES2',), DY = 0.,  DZ = 0.))
+                       )
+
+MACRO_MATR_ASSE(  MODELE=MODELE,
+                  CHARGE=CON_LIM,
+                  CARA_ELEM=CARA_ELE,
+                  NUME_DDL=CO("NUMEDDL"),
+                  MATR_ASSE=(
+                 _F(  MATRICE = CO("RIGIDITE"),  OPTION = 'RIGI_MECA'),
+                 _F(  MATRICE = CO("MASSE"),     OPTION = 'MASS_MECA'))
+               )
+
+MACRO_MATR_ASSE(  MODELE=BICHOC,
+                  CHARGE=CL_BICHO,
+                  CARA_ELEM=CARA_BIC,
+                  NUME_DDL=CO("NUMDDLC"),
+                  MATR_ASSE=(
+                 _F(  MATRICE = CO("RIGI_BIC"),  OPTION = 'RIGI_MECA'),
+                 _F(  MATRICE = CO("MASS_BIC"),  OPTION = 'MASS_MECA'))
+               )
+
+MODE_MEC=MODE_ITER_SIMULT(  MATR_A=RIGIDITE,   MATR_B=MASSE )
+
+MODE_MEC=NORM_MODE(reuse=MODE_MEC,  MODE=MODE_MEC,   NORME='MASS_GENE' )
+
+MODE_BIC=MODE_ITER_SIMULT(  MATR_A=RIGI_BIC,   MATR_B=MASS_BIC,
+                  METHODE='JACOBI',
+                  OPTION='SANS',
+                  CALC_FREQ=_F(  OPTION = 'BANDE',  FREQ = (1., 10., ))
+                            )
+
+MODE_BIC=NORM_MODE(reuse=MODE_BIC,  MODE=MODE_BIC,   NORME='MASS_GENE' )
+
+MODE_STA=MODE_STATIQUE(  MATR_RIGI=RIGIDITE,   MATR_MASS=MASSE,
+                          MODE_STAT=_F(  TOUT = 'OUI', AVEC_CMP = 'DX') )
+
+MSTA_BIC=MODE_STATIQUE(  MATR_RIGI=RIGI_BIC,   MATR_MASS=MASS_BIC,
+                          MODE_STAT=_F(  TOUT = 'OUI', AVEC_CMP = 'DX') )
+
+
+L_INST=DEFI_LIST_REEL(  DEBUT=0.,
+                           INTERVALLE=_F(  JUSQU_A = 1., PAS = 0.0001) )
+
+OMEGAA=DEFI_VALEUR( R8=EVAL("""2.*PI*10.""") )
+
+ACCE1 = FORMULE(REEL="""(REEL:INST) = SIN(OMEGAA*INST) """)
+ACCELER1=CALC_FONC_INTERP( FONCTION=ACCE1, LIST_PARA=L_INST,
+                               PROL_DROITE='LINEAIRE',
+                              PROL_GAUCHE='LINEAIRE',
+                               NOM_RESU='ACCE'       )
+
+ACCE2 = FORMULE(REEL="""(REEL:INST) =- SIN(OMEGAA*INST) """)
+ACCELER2=CALC_FONC_INTERP( FONCTION=ACCE2, LIST_PARA=L_INST,
+                               PROL_DROITE='LINEAIRE',
+                              PROL_GAUCHE='LINEAIRE',
+                               NOM_RESU='ACCE'       )
+
+VITE1 = FORMULE(REEL="""(REEL:INST) =-COS(OMEGAA*INST)/OMEGAA """)
+VITESSE1=CALC_FONC_INTERP( FONCTION=VITE1, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='VITE'       )
+
+DEPL1 = FORMULE(REEL="""(REEL:INST) =-SIN(OMEGAA*INST)/(OMEGAA**2) """)
+DEPLACE1=CALC_FONC_INTERP( FONCTION=DEPL1, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='DEPL'       )
+
+VITE2 = FORMULE(REEL="""(REEL:INST) =COS(OMEGAA*INST)/OMEGAA """)
+VITESSE2=CALC_FONC_INTERP( FONCTION=VITE2, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='VITE'       )
+
+INCLUDE(   UNITE=11,   INFO=1 )
+
+MUR=DEFI_OBSTACLE(   TYPE='PLAN_Z' )
+
+TRAN_GE1=DYNA_TRAN_MODAL(  MASS_GENE=MASS_GEN,   RIGI_GENE=RIGI_GEN,
+                METHODE='EULER',
+                AMOR_REDUIT=0.07, 
+                MODE_STAT=MODE_STA,
+                EXCIT=_F(
+                       VECT_GENE = VECT_X,
+                       ACCE = ACCELER1,
+                       VITE = VITESSE1,
+                       DEPL = DEPLACE1,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,),
+                       NOEUD = 'NO1'),
+                CHOC=_F(  GROUP_NO_1 = 'MASSES',
+                      OBSTACLE = MUR,
+                      INTITULE = 'NO2/MUR',
+                      ORIG_OBST = ( -1., 0., 0., ),
+                      NORM_OBST = (  0., 0., 1., ),
+                      JEU = 1.1005,
+                      RIGI_NOR = 5.76E7,
+                      AMOR_NOR = 0.,
+                      RIGI_TAN = 0.,
+                      COULOMB = 0.0),
+                INCREMENT=_F( INST_INIT = 0.,  INST_FIN = 1.,  PAS = 0.0002),
+                ARCHIVAGE=_F(  PAS_ARCH = 8)
+                          )
+
+
+MULT_X1=CALC_CHAR_SEISME(  MATR_MASS=MASS_BIC,  DIRECTION=( 1., 0., 0.,),
+                           MODE_STAT=MSTA_BIC,  NOEUD='NO1' )
+
+MULT_X2=CALC_CHAR_SEISME(  MATR_MASS=MASS_BIC,  DIRECTION=( 1., 0., 0.,),
+                           MODE_STAT=MSTA_BIC,  NOEUD='NO11' )
+
+MACRO_PROJ_BASE(BASE=MODE_BIC,
+                MATR_ASSE_GENE=(
+                _F( MATRICE = CO("MGEN_BIC"), MATR_ASSE = MASS_BIC),
+                _F( MATRICE = CO("RGEN_BIC"), MATR_ASSE = RIGI_BIC)),
+                VECT_ASSE_GENE=(
+                _F( VECTEUR = CO("VECT_X1"),  VECT_ASSE = MULT_X1),
+                _F( VECTEUR = CO("VECT_X2"),  VECT_ASSE = MULT_X2))
+               )
+
+
+GRILLE=DEFI_OBSTACLE(   TYPE='BI_PLAN_Z' )
+
+
+FIN()
diff --git a/Aster/Tests/err.comm b/Aster/Tests/err.comm
new file mode 100644 (file)
index 0000000..f037ce5
--- /dev/null
@@ -0,0 +1,16 @@
+
+
+DEBUT();
+
+MA=LIRE_MAILLAGE();
+
+kk=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+uu=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                           NU=0.3,),);
+
+FIN();
diff --git a/Aster/Tests/err2.comm b/Aster/Tests/err2.comm
new file mode 100644 (file)
index 0000000..1f14ec0
--- /dev/null
@@ -0,0 +1,19 @@
+
+
+DEBUT();
+
+MA=LIRE_MAILLAGE();
+
+kk=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+uu=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                           NU=0.3,),);
+
+sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                           NU=0.3,),);
+
+FIN();
diff --git a/Aster/Tests/err3.comm b/Aster/Tests/err3.comm
new file mode 100644 (file)
index 0000000..d6db0f1
--- /dev/null
@@ -0,0 +1,41 @@
+
+
+DEBUT();
+
+ma=LIRE_MAILLAGE();
+
+air=DEFI_MATERIAU();
+
+champmat=AFFE_MATERIAU(MAILLAGE=ma,
+                       AFFE=_F(TOUT='OUI',
+                               MATER=air,),);
+
+mo=AFFE_MODELE(MAILLAGE=ma,
+               AFFE=_F(TOUT='OUI',
+                       PHENOMENE='ACOUSTIQUE',
+                       MODELISATION='3D',),);
+
+characou=AFFE_CHAR_ACOU(MODELE=mo,
+                        VITE_FACE=_F(GROUP_MA=('ENTREE','SORTIE','TOTO','TITI',),
+                                     VNOR=('RI',0.014,0.0,),),);
+
+MACRO_MATR_ASSE(MODELE=mo,
+                NUME_DDL=CO('num'),
+                MATR_ASSE=_F(MATRICE=CO('matasm'),
+                             OPTION='MASS_ACOU',),);
+
+vectelem=CALC_VECT_ELEM(OPTION='CHAR_ACOU',
+                        CHAM_MATER=champmat,
+                        CHARGE=characou,);
+
+sansnom=ASSE_VECTEUR(VECT_ELEM=None,
+                     NUME_DDL=num,);
+
+sansnom=COMB_CHAM_NO(COMB_C=_F(CHAM_NO=None,),);
+
+matasm=FACT_LDLT(reuse =matasm,
+                 MATR_ASSE=matasm,);
+
+sansnom=RESO_LDLT(MATR_FACT=matasm,
+                  CHAM_NO=None,
+                  );
\ No newline at end of file
diff --git a/Aster/Tests/torsion.comm b/Aster/Tests/torsion.comm
new file mode 100755 (executable)
index 0000000..83f5609
--- /dev/null
@@ -0,0 +1,340 @@
+              DEBUT();
+
+
+              INCLUDE(UNITE: 80);
+TPS =  1.     ;
+
+
+
+SY = 90. ;
+
+
+
+A   =  1.     ;
+H   =  0.01   ;
+N   =  50     ;
+T   =  0.01   ;
+TD = DEFI_VALEUR(R8: EVAL(T*180./PI)) ;
+CT = DEFI_VALEUR(R8: EVAL(COS(T))) ;
+ST = DEFI_VALEUR(R8: EVAL(SIN(T))) ;     
+MST= DEFI_VALEUR(R8: EVAL(-ST));
+RAT= DEFI_VALEUR(R8: EVAL(H/A));
+
+
+K_REF = DEFI_VALEUR( R8: EVAL(0.9845615*Q1) );
+EPS_Y = DEFI_VALEUR( R8: EVAL( (1./K_REF)**5. ));
+YOUNG = DEFI_VALEUR( R8: EVAL(SY/EPS_Y) );
+
+!FORMULE( REEL: (
+  RP(REEL:EPSI) = K_REF * SY * EPSI**0.2
+  ) );
+  
+ECH_EPSI = DEFI_LIST_REEL (
+              DEBUT: EPS_Y
+              INTERVALLE: (
+                JUSQU_A: 3.
+                NOMBRE : 300
+                )
+              ) ;
+  
+TRAC      = CALC_FONC_INTERP (
+              FONCTION: RP
+              LIST_PARA  :  ECH_EPSI
+              PROL_GAUCHE: 'LINEAIRE'
+              PROL_DROIT : 'LINEAIRE'
+              ) ;
+              
+              
+            PRE_GIBI();
+ MA =       LIRE_MAILLAGE();
+
+&MA =       DEFI_GROUP
+              (
+              MAILLAGE: MA
+              CREA_GROUP_NO:
+                (
+                TOUT_GROUP_MA: 'OUI'
+                )
+              ) ;
+              
+
+ CUIVRE   = DEFI_MATERIAU
+              (
+              ELAS :
+                (
+                E : YOUNG               
+                NU: 0.3             
+                )
+              TRACTION : (
+                SIGM: TRAC
+                )
+              NON_LOCAL: (
+                LONG_CARA: LC
+                )
+              ) ;
+
+ CHMAT =    AFFE_MATERIAU
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA: TRANCHE
+                MATER   : CUIVRE
+                )
+              ) ;
+              
+
+ MO_MECA =   AFFE_MODELE
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA     : TRANCHE
+                PHENOMENE    : 'MECANIQUE'
+                MODELISATION : '3D_SI'
+                )
+              ) ;
+
+ MO_DELO = AFFE_MODELE (
+             MAILLAGE: MA
+             AFFE: 
+               (
+               GROUP_MA: TRANCHE
+               PHENOMENE: 'NON_LOCAL'
+               MODELISATION: '3D'
+               )
+             ) ;
+             
+
+!FORMULE ( REEL : ( UX_IMP(REEL: INST, REEL:X, REEL:Y) =
+                   -INST*RAT*Y
+          ));
+!FORMULE ( REEL : ( UY_IMP(REEL: INST, REEL:X, REEL:Y) = 
+                    INST*RAT*X
+          ));
+!FORMULE ( REEL : ( UZ_IMP(REEL:X, REEL:Y) =  0. ));
+
+
+ ANCRAGE   = AFFE_CHAR_MECA   (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: BAS
+                DX: 0.
+                DY: 0.
+                DZ: 0.
+                )
+              ) ;
+
+ TORSION  = AFFE_CHAR_MECA_F (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: HAUT
+                DX      : UX_IMP
+                DY      : UY_IMP
+                DZ      : UZ_IMP
+                )
+              ) ;
+                
+
+ SYMETRIE = AFFE_CHAR_MECA (
+              MODELE: MO_MECA
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DX' )
+                COEF_MULT_1  : (CT MST)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DY' )
+                COEF_MULT_1  : (ST CT)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DZ')
+                DDL_2        : ('DZ')
+                COEF_MULT_1  : (1.)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              ) ;
+              
+            
+ INSTANTS = DEFI_LIST_REEL
+              (
+              DEBUT: 0.
+              INTERVALLE:
+                (JUSQU_A: TPS  NOMBRE: 50)
+              ) ;
+
+
+
+ EVOL =     STAT_NON_LINE
+              (
+              MODELE: MO_MECA
+              CHAM_MATER: CHMAT
+              EXCIT :
+               (CHARGE: TORSION)
+               (CHARGE: ANCRAGE)
+               (CHARGE: SYMETRIE)                
+              INCREMENT:
+                (
+                LIST_INST: INSTANTS
+                SUBD_PAS : 5
+                SUBD_PAS_MINI: 0.0001
+                )
+              COMP_INCR:
+                (
+                RELATION: 'PLAS_GRAD_TRAC'
+                DEFORMATION: 'PETIT'
+                )
+              NEWTON:
+                (
+                MATRICE:'ELASTIQUE'
+                )
+              CONVERGENCE:
+                (
+                RESI_GLOB_RELA: 1.E-4
+                ITER_GLOB_MAXI: 500
+                ITER_INTE_MAXI: 250
+                RESI_INTE_RELA: 1.E-9
+                )
+              ARCHIVAGE: (
+                ARCH_ETAT_INIT: 'OUI'
+                LIST_INST     : INSTANTS
+                )
+
+              MODELE_NON_LOCAL: MO_DELO
+              LAGR_NON_LOCAL: (
+                RESI_PRIM_ABSO: 1.E-9
+                RESI_DUAL_ABSO: 1.E-4
+                RHO: 1000.
+                ITER_PRIM_MAXI: 100
+                ITER_DUAL_MAXI: 10
+                )
+              ) ;
+
+          
+
+&EVOL       = CALC_ELEM (
+                MODELE: MO_MECA
+                CHAM_MATER: CHMAT
+                RESULTAT  : EVOL
+                OPTION: ('SIEF_ELNO_ELGA' 'VARI_ELNO_ELGA')
+                ) ;
+
+&EVOL       = CALC_NO (
+                RESULTAT: EVOL
+                OPTION: ('FORC_NODA' 
+                         'SIEF_NOEU_ELGA' 'VARI_NOEU_ELGA')
+                ) ;
+
+  
+ECHAN       = INTE_MAIL_3D (
+                MAILLAGE    : MA
+                DEFI_SEGMENT: (
+                  GROUP_NO_ORIG: O1
+                  GROUP_NO_EXTR: A1
+                  )
+                ) ;
+                
+ PLAS_CUM = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'P'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'VARI_NOEU_ELGA'
+                NOM_CMP  : 'V1'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+ SIGMA    = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'SIYZ'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'SIEF_NOEU_ELGA'
+                NOM_CMP  : 'SIYZ'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+
+ MOM_A   = POST_RELEVE_T (
+              ACTION: (
+                INTITULE  : 'MOMENT'
+                GROUP_NO  :  HAUT
+                RESULTAT  :  EVOL
+                NOM_CHAM  : 'FORC_NODA'
+                RESULTANTE: ('DX' 'DY' 'DZ')
+                MOMENT    : ('DRX' 'DRY' 'DRZ')
+                POINT     : (0. 0. H)
+                TOUT_ORDRE: 'OUI'
+                OPERATION : 'EXTRACTION'
+                )
+              ) ;
+
+ MOM_KA_A   = RECU_FONCTION (
+              TABLE : MOM_A
+              PARA_X: 'INST'
+              PARA_Y: 'MOMENT_Z'
+              ) ;
+
+!FORMULE ( REEL:( MA3_KA(REEL: INST) = MOM_KA_A(INST)*360/TD/A**3/SY));
+
+
+
+              DEFUFI(
+                IMPRESSION: (
+                  NOM: 'POST_PY'
+                  UNITE: 81
+                )
+              ) ;
+              
+              
+              
+ IMPR_COURBE( 
+   FORMAT: 'AGRAF'
+   FICHIER: 'POST_PY'
+   COURBE: (
+     FONCTION : MA3_KA
+     LIST_PARA: INSTANTS
+     )
+   ) ;
+
+
+              FIN();
+              
+              
+IMPR_TABLE(TABLE:SIGMA);
+IMPR_TABLE(TABLE:PLAS_CUM);
+            FIN();              
\ No newline at end of file
index 341ec3f73f966984b57a1c138779be152c4ff5cf..56bfa7dd3ff1974d2e697251b502230b4c5c6c0b 100644 (file)
@@ -65,6 +65,10 @@ class BUREAU:
                                    ('Mots-clés inconnus','mc_inconnus'),
                                   ]
               ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS'),
+                      ]
+              ),
              ]
 
    button_defs  =      (('New24',"newJDC","Création d'un nouveau fichier",'always'),
index 89c74406d5e76c032298497e354d8ed1185812c1..d4eaf673321ab96b976509aaafbf217930be7604 100644 (file)
@@ -34,7 +34,7 @@ class MENUBAR:
    try:
       from prefs import labels
    except:
-      labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Browsers','Options')
+      labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Browsers','Options','Aide')
 
    def init(self):
       self.menudict={}
diff --git a/Exemples/ex18/torsion.comm b/Exemples/ex18/torsion.comm
new file mode 100755 (executable)
index 0000000..83f5609
--- /dev/null
@@ -0,0 +1,340 @@
+              DEBUT();
+
+
+              INCLUDE(UNITE: 80);
+TPS =  1.     ;
+
+
+
+SY = 90. ;
+
+
+
+A   =  1.     ;
+H   =  0.01   ;
+N   =  50     ;
+T   =  0.01   ;
+TD = DEFI_VALEUR(R8: EVAL(T*180./PI)) ;
+CT = DEFI_VALEUR(R8: EVAL(COS(T))) ;
+ST = DEFI_VALEUR(R8: EVAL(SIN(T))) ;     
+MST= DEFI_VALEUR(R8: EVAL(-ST));
+RAT= DEFI_VALEUR(R8: EVAL(H/A));
+
+
+K_REF = DEFI_VALEUR( R8: EVAL(0.9845615*Q1) );
+EPS_Y = DEFI_VALEUR( R8: EVAL( (1./K_REF)**5. ));
+YOUNG = DEFI_VALEUR( R8: EVAL(SY/EPS_Y) );
+
+!FORMULE( REEL: (
+  RP(REEL:EPSI) = K_REF * SY * EPSI**0.2
+  ) );
+  
+ECH_EPSI = DEFI_LIST_REEL (
+              DEBUT: EPS_Y
+              INTERVALLE: (
+                JUSQU_A: 3.
+                NOMBRE : 300
+                )
+              ) ;
+  
+TRAC      = CALC_FONC_INTERP (
+              FONCTION: RP
+              LIST_PARA  :  ECH_EPSI
+              PROL_GAUCHE: 'LINEAIRE'
+              PROL_DROIT : 'LINEAIRE'
+              ) ;
+              
+              
+            PRE_GIBI();
+ MA =       LIRE_MAILLAGE();
+
+&MA =       DEFI_GROUP
+              (
+              MAILLAGE: MA
+              CREA_GROUP_NO:
+                (
+                TOUT_GROUP_MA: 'OUI'
+                )
+              ) ;
+              
+
+ CUIVRE   = DEFI_MATERIAU
+              (
+              ELAS :
+                (
+                E : YOUNG               
+                NU: 0.3             
+                )
+              TRACTION : (
+                SIGM: TRAC
+                )
+              NON_LOCAL: (
+                LONG_CARA: LC
+                )
+              ) ;
+
+ CHMAT =    AFFE_MATERIAU
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA: TRANCHE
+                MATER   : CUIVRE
+                )
+              ) ;
+              
+
+ MO_MECA =   AFFE_MODELE
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA     : TRANCHE
+                PHENOMENE    : 'MECANIQUE'
+                MODELISATION : '3D_SI'
+                )
+              ) ;
+
+ MO_DELO = AFFE_MODELE (
+             MAILLAGE: MA
+             AFFE: 
+               (
+               GROUP_MA: TRANCHE
+               PHENOMENE: 'NON_LOCAL'
+               MODELISATION: '3D'
+               )
+             ) ;
+             
+
+!FORMULE ( REEL : ( UX_IMP(REEL: INST, REEL:X, REEL:Y) =
+                   -INST*RAT*Y
+          ));
+!FORMULE ( REEL : ( UY_IMP(REEL: INST, REEL:X, REEL:Y) = 
+                    INST*RAT*X
+          ));
+!FORMULE ( REEL : ( UZ_IMP(REEL:X, REEL:Y) =  0. ));
+
+
+ ANCRAGE   = AFFE_CHAR_MECA   (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: BAS
+                DX: 0.
+                DY: 0.
+                DZ: 0.
+                )
+              ) ;
+
+ TORSION  = AFFE_CHAR_MECA_F (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: HAUT
+                DX      : UX_IMP
+                DY      : UY_IMP
+                DZ      : UZ_IMP
+                )
+              ) ;
+                
+
+ SYMETRIE = AFFE_CHAR_MECA (
+              MODELE: MO_MECA
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DX' )
+                COEF_MULT_1  : (CT MST)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DY' )
+                COEF_MULT_1  : (ST CT)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DZ')
+                DDL_2        : ('DZ')
+                COEF_MULT_1  : (1.)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              ) ;
+              
+            
+ INSTANTS = DEFI_LIST_REEL
+              (
+              DEBUT: 0.
+              INTERVALLE:
+                (JUSQU_A: TPS  NOMBRE: 50)
+              ) ;
+
+
+
+ EVOL =     STAT_NON_LINE
+              (
+              MODELE: MO_MECA
+              CHAM_MATER: CHMAT
+              EXCIT :
+               (CHARGE: TORSION)
+               (CHARGE: ANCRAGE)
+               (CHARGE: SYMETRIE)                
+              INCREMENT:
+                (
+                LIST_INST: INSTANTS
+                SUBD_PAS : 5
+                SUBD_PAS_MINI: 0.0001
+                )
+              COMP_INCR:
+                (
+                RELATION: 'PLAS_GRAD_TRAC'
+                DEFORMATION: 'PETIT'
+                )
+              NEWTON:
+                (
+                MATRICE:'ELASTIQUE'
+                )
+              CONVERGENCE:
+                (
+                RESI_GLOB_RELA: 1.E-4
+                ITER_GLOB_MAXI: 500
+                ITER_INTE_MAXI: 250
+                RESI_INTE_RELA: 1.E-9
+                )
+              ARCHIVAGE: (
+                ARCH_ETAT_INIT: 'OUI'
+                LIST_INST     : INSTANTS
+                )
+
+              MODELE_NON_LOCAL: MO_DELO
+              LAGR_NON_LOCAL: (
+                RESI_PRIM_ABSO: 1.E-9
+                RESI_DUAL_ABSO: 1.E-4
+                RHO: 1000.
+                ITER_PRIM_MAXI: 100
+                ITER_DUAL_MAXI: 10
+                )
+              ) ;
+
+          
+
+&EVOL       = CALC_ELEM (
+                MODELE: MO_MECA
+                CHAM_MATER: CHMAT
+                RESULTAT  : EVOL
+                OPTION: ('SIEF_ELNO_ELGA' 'VARI_ELNO_ELGA')
+                ) ;
+
+&EVOL       = CALC_NO (
+                RESULTAT: EVOL
+                OPTION: ('FORC_NODA' 
+                         'SIEF_NOEU_ELGA' 'VARI_NOEU_ELGA')
+                ) ;
+
+  
+ECHAN       = INTE_MAIL_3D (
+                MAILLAGE    : MA
+                DEFI_SEGMENT: (
+                  GROUP_NO_ORIG: O1
+                  GROUP_NO_EXTR: A1
+                  )
+                ) ;
+                
+ PLAS_CUM = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'P'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'VARI_NOEU_ELGA'
+                NOM_CMP  : 'V1'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+ SIGMA    = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'SIYZ'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'SIEF_NOEU_ELGA'
+                NOM_CMP  : 'SIYZ'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+
+ MOM_A   = POST_RELEVE_T (
+              ACTION: (
+                INTITULE  : 'MOMENT'
+                GROUP_NO  :  HAUT
+                RESULTAT  :  EVOL
+                NOM_CHAM  : 'FORC_NODA'
+                RESULTANTE: ('DX' 'DY' 'DZ')
+                MOMENT    : ('DRX' 'DRY' 'DRZ')
+                POINT     : (0. 0. H)
+                TOUT_ORDRE: 'OUI'
+                OPERATION : 'EXTRACTION'
+                )
+              ) ;
+
+ MOM_KA_A   = RECU_FONCTION (
+              TABLE : MOM_A
+              PARA_X: 'INST'
+              PARA_Y: 'MOMENT_Z'
+              ) ;
+
+!FORMULE ( REEL:( MA3_KA(REEL: INST) = MOM_KA_A(INST)*360/TD/A**3/SY));
+
+
+
+              DEFUFI(
+                IMPRESSION: (
+                  NOM: 'POST_PY'
+                  UNITE: 81
+                )
+              ) ;
+              
+              
+              
+ IMPR_COURBE( 
+   FORMAT: 'AGRAF'
+   FICHIER: 'POST_PY'
+   COURBE: (
+     FONCTION : MA3_KA
+     LIST_PARA: INSTANTS
+     )
+   ) ;
+
+
+              FIN();
+              
+              
+IMPR_TABLE(TABLE:SIGMA);
+IMPR_TABLE(TABLE:PLAS_CUM);
+            FIN();              
\ No newline at end of file
index 33a517b78a9fd85dc5d35bbdeb96b75f72f9b215..02a065239f20a6b532d822529fc27c6922b10fd8 100644 (file)
@@ -94,13 +94,14 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       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
+      #
       if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
       #
       # Cas particulier des opérateurs obligatoirement réentrants
       #
       if self.definition.reentrant == 'o':
-        # FR : appel à get_sdprod incorrect : il faut appeler get_sd_avant_etape
-        #self.sd = self.reuse = self.jdc.get_sdprod(nom)
        self.sd = self.reuse = self.jdc.get_sd_avant_etape(nom,self)
         if self.sd != None :
           self.sdnom=self.sd.nom
@@ -135,10 +136,6 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       if self.sd == None :
           if self.parent.get_sd_autour_etape(nom,self):
             # Un concept de ce nom existe dans le voisinage de l'etape courante
-            # On force self.valid a 0 car l appel a isvalid precedent l a mis a 1
-            # mais ceci indique seulement une validité partielle
-            # isvalid ne devrait peut etre pas mettre l attribut valid à 1 si sd == 'non'
-            self.valid=0
             # On retablit l'ancien concept reentrant s'il existait
             if old_reuse:
                self.sd=self.reuse=old_reuse
@@ -159,9 +156,12 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
             # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
            # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
            # on peut donc le nommer sans test préalable
-           self.sd.nom=nom
-            self.sdnom=nom
-            return 1,"Nommage du concept effectué"
+            if self.parent.get_sd_autour_etape(nom,self):
+              return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
+            else:
+             self.sd.nom=nom
+              self.sdnom=nom
+              return 1,"Nommage du concept effectué"
           if self.isvalid() :
             # Normalement l appel de isvalid a mis a jour le concept produit (son type)
             # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
@@ -364,8 +364,9 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       # CCAR : cette modification ne corrige le probleme qu'en partie. Il faudrait probablement
       # supprimer les erreurs fatales (exception ) et retourner systematiquement un objet produit
       # meme en cas d'erreur et reporter l'emission du message d'erreur a la phase de validation
+      #
       if not self.isvalid(sd='non') : return
-      else:self.state='undetermined'
+      #else:self.state='undetermined'
       self.sdnom=nom
       try:
          if self.parent:
@@ -384,8 +385,18 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
             self.Execute()
          return sd
       except AsException,e:
-         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
-                              'fichier : ',self.appel[1],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.valid=0
+         return self.sd
+         #raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+         #                     'fichier : ',self.appel[1],e)
       except EOFError:
          # XXX Normalement le contexte courant doit etre le parent.
          # Il n'y a pas de raison de remettre le contexte au parent
index 904333d5a01ff1ca70645346209c68f4034ca56a..251c18141ad27bb02dd1a4c3055a8554be8c8ea2 100644 (file)
@@ -61,24 +61,39 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
         return self.valid
       else:
         valid = 1
+        # on teste les enfants
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de self
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        if sd == "non":
+          # Dans ce cas, on ne teste qu'une validité partielle (sans tests sur le concept produit)
+          # Conséquence : on ne change pas l'état ni l'attribut valid, on retourne simplement
+          # l'indicateur de validité valid
+          return valid
+        #
+        # On complète les tests avec ceux sur le concept produit
+        #
         if hasattr(self,'valid'):
           old_valid = self.valid
         else:
           old_valid = None
-        # on teste si demandé la structure de donnée (par défaut)
-        if sd == 'oui':
-          if self.sd != None :pass
-            # Ce test parait superflu. Il est sur que si sd existe il s'agit du concept produit
-            # Quelle pourrait etre la raison qui ferait que sd n existe pas ???
-            #if self.jdc.get_sdprod(self.sd.nom) == None :
-            #  if cr == 'oui' :
-            #    self.cr.fatal('Le concept '+self.sd.nom+" n'existe pas")
-            #  valid = 0
-          else :
-            if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
-            valid = 0
-        # on teste, si elle existe, le nom de la sd (sa longueur doit etre <= 8 caractères)
-        if self.sd != None :
+
+        if self.sd == None:
+          # Le concept produit n'existe pas => erreur
+          if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
+          valid = 0
+        else:
+          # on teste, si elle existe, le nom de la sd (sa longueur doit etre <= 8 caractères)
           # la SD existe déjà : on regarde son nom
           if self.sd.nom != None :
             if len(self.sd.nom) > 8 and self.jdc.definition.code == 'ASTER' :
@@ -95,21 +110,7 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
               if cr == 'oui' :
                 self.cr.fatal("Pas de nom pour le concept retourné")
               valid = 0
-        # on teste les enfants
-        for child in self.mc_liste :
-          if not child.isvalid():
-            valid = 0
-            break
-        # on teste les règles de self
-        text_erreurs,test_regles = self.verif_regles()
-        if not test_regles :
-          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
-          valid = 0
-        if self.reste_val != {}:
-          if cr == 'oui' :
-            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
-          valid=0
-        if sd == 'oui' and valid:
+        if valid:
           valid = self.update_sdprod(cr)
         self.valid = valid
         self.state = 'unchanged'
index 878a14dad62f273f616f4253df1478ec0d094cb1..4a7ce18249c843b1d5e9127a65d001e1c9bebefb 100644 (file)
@@ -62,6 +62,24 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
         return self.valid
       else:
         valid = 1
+        # on teste les mots cles de la commande
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de la commande
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        if sd == "non":
+           # Dans ce cas, on ne calcule qu'une validite partielle, on ne modifie pas l'état de self
+           # on retourne simplement l'indicateur valid
+           return valid
         if hasattr(self,'valid'):
           old_valid = self.valid
         else:
@@ -84,21 +102,7 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
               if cr == 'oui' :
                 self.cr.fatal("Pas de nom pour le concept retourné")
               valid = 0
-        # on teste les enfants
-        for child in self.mc_liste :
-          if not child.isvalid():
-            valid = 0
-            break
-        # on teste les règles de self
-        text_erreurs,test_regles = self.verif_regles()
-        if not test_regles :
-          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
-          valid = 0
-        if self.reste_val != {}:
-          if cr == 'oui' :
-            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
-          valid=0
-        if sd == 'oui' and valid:
+        if valid:
           valid = self.update_sdprod(cr)
         # Si la macro comprend des etapes internes, on teste leur validite
         for e in self.etapes:
diff --git a/insercopyright.py b/insercopyright.py
new file mode 100644 (file)
index 0000000..bf6539f
--- /dev/null
@@ -0,0 +1,38 @@
+import glob,os
+
+copyright="""#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  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.
+#
+#
+# ======================================================================
+"""
+
+listfich=glob.glob('*')
+for fich in listfich:
+   if not os.path.isfile(fich):continue
+   print "Lecture ",fich
+   f=open(fich,'r')
+   text=f.read()
+   f.close()
+   os.rename(fich,fich+'.bak')
+
+   text=copyright + text
+
+   f2=open(fich,'w')
+   f2.write(text)
+   f2.close()
+