From bc6e269898ebd67c109cae2675102044e9fa9fe1 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Mon, 16 Sep 2002 08:56:43 +0000 Subject: [PATCH] =?utf8?q?CCAR:=20Correction=20du=20pb=20AO2001-474,=20SD?= =?utf8?q?=20non=20nomm=C3=A9e=20:=20impossible=20de=20la=20renommer=20ens?= =?utf8?q?uite=20Ce=20probleme=20a=20=C3=A9t=C3=A9=20corrig=C3=A9=20en=20m?= =?utf8?q?odifiant=20la=20methode=20isvalid=20de=20ETAPE=20et=20MACRO=5FET?= =?utf8?q?APE.=20Maintenant=20lors=20des=20appels=20=C3=A0=20isvalid=20pou?= =?utf8?q?r=20des=20validit=C3=A9s=20partielles=20(sd=3D"non")=20l'etat=20?= =?utf8?q?de=20validite=20de=20la=20commande=20n'est=20plus=20modifi=C3=A9?= =?utf8?q?=20(self.state=20et=20self.valid).=20L'etat=20reste=20maintenant?= =?utf8?q?=20coherent=20et=20reflete=20seulement=20la=20validite=20complet?= =?utf8?q?e.=20Dans=20la=20methode=20Build=5Fsd,=20on=20poursuit=20mainten?= =?utf8?q?ant=20meme=20en=20presence=20d'une=20erreur=20lors=20de=20la=20c?= =?utf8?q?onstruction=20du=20concept=20produit=20(self.sd).?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Aster/Tests/README | 8 + Aster/Tests/Recette/efica01a.11 | 21 ++ Aster/Tests/Recette/efica01a.com0 | 77 +++++++ Aster/Tests/Recette/efica01a.comm | 204 ++++++++++++++++++ Aster/Tests/err.comm | 16 ++ Aster/Tests/err2.comm | 19 ++ Aster/Tests/err3.comm | 41 ++++ Aster/Tests/torsion.comm | 340 ++++++++++++++++++++++++++++++ Editeur/bureau.py | 4 + Editeur/menubar.py | 2 +- Exemples/ex18/torsion.comm | 340 ++++++++++++++++++++++++++++++ Ihm/I_ETAPE.py | 35 +-- Validation/V_ETAPE.py | 59 +++--- Validation/V_MACRO_ETAPE.py | 34 +-- insercopyright.py | 38 ++++ 15 files changed, 1181 insertions(+), 57 deletions(-) create mode 100644 Aster/Tests/README create mode 100755 Aster/Tests/Recette/efica01a.11 create mode 100755 Aster/Tests/Recette/efica01a.com0 create mode 100755 Aster/Tests/Recette/efica01a.comm create mode 100644 Aster/Tests/err.comm create mode 100644 Aster/Tests/err2.comm create mode 100644 Aster/Tests/err3.comm create mode 100755 Aster/Tests/torsion.comm create mode 100755 Exemples/ex18/torsion.comm create mode 100644 insercopyright.py diff --git a/Aster/Tests/README b/Aster/Tests/README new file mode 100644 index 00000000..bea23866 --- /dev/null +++ b/Aster/Tests/README @@ -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 index 00000000..57c140df --- /dev/null +++ b/Aster/Tests/Recette/efica01a.11 @@ -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 index 00000000..ed4ca2de --- /dev/null +++ b/Aster/Tests/Recette/efica01a.com0 @@ -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 index 00000000..e5eeb902 --- /dev/null +++ b/Aster/Tests/Recette/efica01a.comm @@ -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 index 00000000..f037ce5f --- /dev/null +++ b/Aster/Tests/err.comm @@ -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 index 00000000..1f14ec0e --- /dev/null +++ b/Aster/Tests/err2.comm @@ -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 index 00000000..d6db0f1e --- /dev/null +++ b/Aster/Tests/err3.comm @@ -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 index 00000000..83f56092 --- /dev/null +++ b/Aster/Tests/torsion.comm @@ -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 diff --git a/Editeur/bureau.py b/Editeur/bureau.py index 341ec3f7..56bfa7dd 100644 --- a/Editeur/bureau.py +++ b/Editeur/bureau.py @@ -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'), diff --git a/Editeur/menubar.py b/Editeur/menubar.py index 89c74406..d4eaf673 100644 --- a/Editeur/menubar.py +++ b/Editeur/menubar.py @@ -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 index 00000000..83f56092 --- /dev/null +++ b/Exemples/ex18/torsion.comm @@ -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 diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 33a517b7..02a06523 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -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 diff --git a/Validation/V_ETAPE.py b/Validation/V_ETAPE.py index 904333d5..251c1814 100644 --- a/Validation/V_ETAPE.py +++ b/Validation/V_ETAPE.py @@ -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' diff --git a/Validation/V_MACRO_ETAPE.py b/Validation/V_MACRO_ETAPE.py index 878a14da..4a7ce182 100644 --- a/Validation/V_MACRO_ETAPE.py +++ b/Validation/V_MACRO_ETAPE.py @@ -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 index 00000000..bf6539f1 --- /dev/null +++ b/insercopyright.py @@ -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() + -- 2.39.2