$$$$ @ANA_LIM * @ANA_LIM PROCEDUR KK2000 00/12/18 21:15:33 4049 'DEBPROC' @ANA_LIM PRECED*'TABLE'; *VERSION 04/96 * *******************initialisation et recapitulation des donnees * * LIG='MOT' '************************'; 'MESSAGE' LIG; 'MESSAGE' 'PROCEDURE ANALYSE LIMITE'; 'MESSAGE' LIG; * PRECED.'TESTURG'=FAUX; * ***critere de plasticite? * 'SI'( 'NON' ('EXISTE' PRECED 'CRITERE')); PRECED.'CRITERE'=VONMISES; 'FINSI'; 'MESSAGE' 'critere de plasticite ' PRECED.'CRITERE'; * ***limite d'ecoulement? * 'SI'( 'NON' ('EXISTE' PRECED 'SIGLIM')); PRECED.'SIGLIM'=1.; 'FINSI'; * ***precision? * 'SI'( 'NON' ('EXISTE' PRECED 'PRECISION')); PRECED.'PRECISION'=1E-3; 'FINSI'; 'MESSAGE' 'precision' PRECED.'PRECISION'; * ****nombre d'iterations maximum? * 'SI'( 'NON' ('EXISTE' PRECED 'MAXITERATION')); PRECED.'MAXITERATION'=50; 'FINSI'; 'MESSAGE' 'maxiterations' PRECED.'MAXITERATION'; * ****pas d"affichage des resultats? * 'SI'( 'NON' ('EXISTE' PRECED 'PAS')); PRECED.'PAS'=1; 'FINSI'; * ****est ce un calcul coque? * 'SI' ('NON' ('EXISTE' PRECED 'CALCUL_COQUE')); 'SI' ('EXISTE' (PRECED.'MODELE') 'ELEM' 'COQ2' 'COQ3' 'COQ4' 'COQ6' 'COQ8' 'DKT' 'DST'); 'MESSAGE' LIG; 'MESSAGE' 'Il manque les caracteristiques de la coque'; 'QUITTER' @ANA_LIM; 'FINSI'; 'SINON'; 'MESSAGE' 'calcul coque'; 'FINSI'; * * ****procedure personnelle? * 'SI'( 'NON' ('EXISTE' PRECED 'PROCEDURE_PERSO1')); PRECED.'PROCEDURE_PERSO1'=FAUX; 'FINSI'; * * ****reprise? 'SI'( 'NON' ('EXISTE' PRECED 'REPRISE')); PRECED.'ITER'=0; PRECED.'YOUNG'=2.e5; PRECED.'RESCL'=1.; 'SINON'; 'MESSAGE' 'reprise'; 'FINSI'; 'MESSAGE' LIG; * ****definition de l'element si calcul coque pour calcul de ENER * TSET1=FAUX; 'SI' ( 'EXISTE' ('EXTR' PRECED.'MODELE' GEOM) 'ALFA'); TSET1=VRAI; 'FINSI'; ******************************** **********resolution ******************************** * 'REPETER' BOUC1 PRECED.'MAXITERATION'; * *****************test d'iteration * PRECED.'ITER'= ((PRECED.'ITER') + 1); * *****************definition du materiau * MA = 'MATE' PRECED.'MODELE' 'YOUN' PRECED.'YOUNG' 'NU' .49 ; * ***************cas d'une coque * 'SI'('EXISTE' PRECED 'CALCUL_COQUE'); 'SI'( ('DIME' ('EXTRAIRE' PRECED.'CALCUL_COQUE' COMP) 'EGA' 4) 'ET' (EXISTE ('EXTRAIRE' PRECED.'CALCUL_COQUE' COMP) EPAI) 'ET' (EXISTE ('EXTRAIRE' PRECED.'CALCUL_COQUE' COMP) ALFA) ); MA1 = 'MATE' PRECED.'MODELE' 'YOUN' 0. 'NU' 0. 'EPAI' 1. 'ALFA' 1.; MA2 = MA1 '*' PRECED.'CALCUL_COQUE' ; MA = MA '+' MA2 ; 'SINON'; 'MESSAGE' 'Les carac. de la coque doivent etre YOUN NU EPAI ALFA' ; 'QUITTER' @ANA_LIM; 'FINSI'; 'FINSI'; *****************calcul de la matrice de rigidite * RIGI1 = (('RIGI' PRECED.'MODELE' MA) ET PRECED.'BLOCAGES_MECANIQUES'); * *****************resolution * PRECED.'DEPLA' = 'RESO' RIGI1 (PRECED.'RESCL'*PRECED.'CHARGEMENT'); * ******************calcul des contraintes et des contraintes equivalentes * PRECED.'CONTRAINTES'='SIGMA' PRECED.'MODELE' MA PRECED.'DEPLA'; 'SI'( 'NON' ('EXISTE' PRECED 'CALCUL_COQUE')); 'SI' ('EGA' PRECED.'CRITERE' VONMISES); PRECED.'MECARUINE'='CHAN' TYPE ('VMISE' PRECED.'MODELE' PRECED.'CONTRAINTES') SCALAIRE; 'FINSI'; 'SI'('EGA' PRECED.'CRITERE' TRSCA); PRECED.'MECARUINE'='CHAN' TYPE ('TRESCA' PRECED.'MODELE' PRECED.'CONTRAINTES') SCALAIRE; 'FINSI'; 'SINON'; 'SI' ('EGA' PRECED.'CRITERE' VONMISES); PRECED.'MECARUINE'='CHAN' TYPE ('VMISE' PRECED.'MODELE' PRECED.'CONTRAINTES' PRECED.'CALCUL_COQUE') SCALAIRE; 'FINSI'; 'SI'('EGA' PRECED.'CRITERE' TRSCA); PRECED.'MECARUINE'='CHAN' TYPE ('TRESCA' PRECED.'MODELE' PRECED.'CONTRAINTES' PRECED.'CALCUL_COQUE') SCALAIRE; 'FINSI'; 'FINSI'; SMAX1='MAXI' PRECED.'MECARUINE'; * *******************mise en place du retour et adimensionnement avec * chargement elastique * 'SI' ( (PRECED.'ITER') 'EGA' 1); PRECED.'CONTINI'=PRECED.'CONTRAINTES'; 'SI' ( 'EGA' ('TYPE' (PRECED.'SIGLIM')) FLOTTANT); PRECED.'CELAS'=(PRECED.'SIGLIM')/SMAX1; 'SINON'; PRECED.'CELAS'=('MAXI' (PRECED.'SIGLIM'))/SMAX1; 'FINSI'; 'MESSAGE' ' '; 'MESSAGE'' ratio elastique:' PRECED.'CELAS'; 'MESSAGE' ' '; 'MESSAGE' ' iter critere charge limite baro'; 'FINSI'; * * *****************adaptation des modules d'young * PRECED.'YOUNG'=((PRECED.'SIGLIM')* ((PRECED.'MECARUINE')**(-1.)))*PRECED.'YOUNG'; *ajout version anterieur: pbs si Ymax/Ymin trop grand *Ymax/Ymin bride a 1.e4. A voir ... 'SI' ( (PRECED.'ITER') '>EG' 3); YMAX='MAXI' PRECED.'YOUNG'; YMIN='MINI' PRECED.'YOUNG'; YTEST=YMAX/YMIN; 'SI' ( (YTEST) '>EG' 1E4); PRECED.'BRIDE'=YMIN*1E4; 'FINSI'; 'SI'('EXISTE' PRECED 'BRIDE'); MASQSUP=PRECED.'YOUNG' 'MASQUE' 'SUPERIEUR' PRECED.'BRIDE'; MASQINF= PRECED.'YOUNG' 'MASQUE' 'EGINF' PRECED.'BRIDE'; PRECED.'YOUNG'=(((PRECED.'YOUNG')*MASQINF) + (((PRECED.'BRIDE')*MASQSUP))); 'FINSI'; 'FINSI'; * *******calcul du numerateur * 'SI'( 'NON' ('EXISTE' PRECED 'CALCUL_COQUE')); EPS1='EPSI' PRECED.'MODELE' PRECED.'DEPLA'; 'SINON'; EPS1='EPSI' PRECED.'MODELE' PRECED.'DEPLA' PRECED.'CALCUL_COQUE'; 'FINSI'; EPS=(PRECED.'SIGLIM'*( ('ENER' PRECED.'MODELE' PRECED.'CONTRAINTES' EPS1)*((PRECED.'MECARUINE')**(-1.)))); 'SI' ( (TSET1) 'OU' ( 'NON' ('EXISTE' PRECED 'CALCUL_COQUE'))); NUM='INTG' PRECED.'MODELE' EPS; 'SINON'; NUM='INTG' PRECED.'MODELE' EPS PRECED.'CALCUL_COQUE'; 'FINSI'; * *******calcul du denominateur * MLPRIM = 'MOTS' 'UX' 'UY' 'UZ' 'RX' 'RY' 'RZ' 'UR' 'UT' 'LX'; MLDUAL = 'MOTS' 'FX' 'FY' 'FZ' 'MX' 'MY' 'MZ' 'FR' 'FT' 'FLX'; 'SI' ( PRECED.'ITER' 'EGA' 1 ); 'SI'( 'NON' ('EXISTE' PRECED 'CALCUL_COQUE')); PRECED.'REA1'='BSIG' PRECED.'MODELE' PRECED.'CONTINI'; 'SINON'; PRECED.'REA1'='BSIG' PRECED.'MODELE' PRECED.'CONTINI' PRECED.'CALCUL_COQUE'; 'FINSI'; 'FINSI'; DENO='XTY' PRECED.'REA1' PRECED.'DEPLA' MLDUAL MLPRIM; * ******charge limite * CL=(NUM/DENO); * ******criteres de convergence * 'SI' ( 'EGA' ('TYPE' (PRECED.'SIGLIM')) FLOTTANT); BAROM=((SMAX1 - (PRECED.'SIGLIM'))/(PRECED.'SIGLIM')); 'SINON'; BAROM1=((PRECED.'MECARUINE') + ((-1.)*(PRECED.'SIGLIM'))); BAROM1=(BAROM1*((PRECED.'SIGLIM')**(-1.))); BAROM='MAXI' BAROM1; 'FINSI'; * CRITERE=ABS(CL - PRECED.'RESCL')/cl; * *******************sortie des donnees * 'SI' ((((PRECED.'ITER') + 1)/(1+((PRECED.'ITER')/PRECED.'PAS'))) 'EGA' (PRECED.'PAS')); 'MESSAGE' PRECED.'ITER' CRITERE CL BAROM; 'FINSI'; * 'SI' ( PRECED.'ITER' > 3 ); PRECED.'RUINE'=PRECED.'MECARUINE' ELEM COMPRIS PRECED.'SIGLIM' SMAX1; NBRUINE='NBEL' PRECED.RUINE; 'MESSAGE' ' nb d"elements ruines' nbruine; 'FINSI'; * *******************evolution de la charge * 'SI' (( PRECED.'ITER' > 0 ) 'ET' ( PRECED.'ITER' < 2 )); PRECED.'LISTCL'='PROG' (CL); 'FINSI'; 'SI' ('NON' (( PRECED.'ITER' > 0 ) 'ET' ( PRECED.'ITER' < 2 ))); PRECED.'LISTCL'=(PRECED.'LISTCL' 'ET' ('PROG' (CL))); 'FINSI'; * *******************test de comportement de l'algorithme * 'SI' (((PRECED.'ITER' '>EG' 2) 'ET' (SMAX1 < 1.)) 'ET' (SMAX1 > 0.)); 'MESSAGE' ' '; 'MESSAGE' ' ***avert1: SIGEQMAX < SIGY***'; 'MESSAGE' '***verifiez la bonne convergence***'; 'MESSAGE' ' '; 'FINSI'; * BOOL4= PRECED.'ITER' > 1; BOOL6= (PRECED.RESCL < CL); 'SI' (BOOL4 ET (BOOL6 ET ('NON' (PRECED.'TESTURG')))); 'MESSAGE' ' '; 'MESSAGE' '***avert2: parametre de charge croissant***'; 'MESSAGE' '***verifiez la bonne convergence***'; 'MESSAGE' ' '; 'FINSI'; * 'SI' ((PRECED.'ITER' 'EGA' (PRECED.'MAXITERATION')) ET ('NON' (PRECED.'TESTURG'))); 'MESSAGE' '****************************************************'; 'MESSAGE' '***AVERT3: AUGMENTER LE NB D"ITERATIONS***'; 'MESSAGE' ' ***CONVERGENCE NON ATTEINTE***'; 'MESSAGE' ' iter critere charge limite barometre'; 'MESSAGE' PRECED.'ITER' CRITERE CL BAROM; 'MESSAGE' '****************************************************'; PRECED.'TESTURG'=VRAI; 'FINSI'; PRECED.RESCL=CL; * * ********************procedures perso * 'SI'( PRECED.'PROCEDURE_PERSO1' ); 'MESSAGE' ' '; 'MESSAGE' '---debut de la procedure PERSO1---'; 'MESSAGE' ' '; PERSO1 PRECED; 'MESSAGE' ' '; 'MESSAGE' '---fin de la procedure PERSO1---'; 'MESSAGE' ' '; 'FINSI'; * * ********************verification de la convergence * BOOLERR1= CRITERE '