mshear
C MSHEAR SOURCE PV 11/03/07 21:17:33 6885 & DTRANP,DTRANM,BETA,NPELA,TRFA,DOCP,DOCM,EXPN, & CURFP,NCURFP,CURKP,NCURKP,CURLP,NCURLP, & CURFM,NCURFM,CURKM,NCURKM,CURLM,NCURLM,KERRE) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C====================================================================== C MUR_SHEAR, Elisa, Armelle, Alessandra et Pierre, ELSA/ISPRA C 01/2002 --> ../2004 ... C====================================================================== C C MODELE GLOBAL DE MUR EN CISAILLEMENT C (Sur des elements de poutre TIMO - Effort tranchant/Cisail.) C C====================================================================== C======================================================================= C C LISTE D'ECHANGE C --------------- C C DDEP = Incrément de déplacement C FOR0 = Effort initial C FORF = Effort final C VAR0 = Variables internes initiales C VARF = Variables internes finales C NVAR = Nb de variable interne C DDINL = Increment de deformation inelastique C C DTRANP = zone de transition (sens positif) C DTRANM = (sens négatif) C C BETA = Coefficient BETA (equivalence nrj-deplacement) C NPELA = Nb de pts par unite de zone elastique pour les C segments non lineaires C+2003 C TRFA = Coefficient d'entrainement des origine (>0,<1) C DOCP = Deplacement d'ouverture des fissure + (>0) C DOCM = Deplacement d'ouverture des fissure - (<0) C+2003 C+2004 C EXPN = Exposant n de la fonction de cumul du domage C+2004 C C CURFP,NCURFP = courbe de charge + (x>0,y>0) C CURKP,NCURKP = courbe de raideur + (x>0,y>0) C CURLP,NCURLP = courbe de domaine elastique + (x>0,y>0) C CURFM,NCURFM = courbe de charge - (x<0,y<0) C CURKM,NCURKM = courbe de raideur - (x<0,y>0) C CURLM,NCURLM = courbe de domaine elastique - (x<0,y>0) C C VARIABLES INTERNES (0=initiales, F=finales) C ------------------ C C : Numero du cas C DEP : Deplacement total C EPLUS : Energie "positive" C EMOIN : Energie "negative" C DPLUS : Deplacement de reference + C DMOIN : Deplacement de reference - C FCINI : Force de reference pour la surface cinematique C FCAMP : Taille de la surface cinematique C KCINE : Raideur de la surface cinematique C APLUS : Coefficient multiplicateur de l'amplitude + C AMOIN : Coefficient multiplicateur de l'amplitude - C+2003 C OPLUS : Position de l'origine + <0 C OMOIN : Position de l'origine - <0 C+2003 C C C======================================================================= C PARAMETER (XZER=0.D0,UN=1.D0,XPETIT=1.D-7) DIMENSION CURFP(2,NCURFP),CURKP(2,NCURKP),CURLP(2,NCURLP) DIMENSION CURFM(2,NCURFM),CURKM(2,NCURKM),CURLM(2,NCURLM) C REAL*8 KCINE0,KCINEF C DIMENSION VAR0(NVAR),VARF(NVAR) LOGICAL LSWICH C KERRE=0 C C Lecture variables internes C ICAS = nint(VAR0(1)) DEP0 = VAR0(2) EPLUS0= VAR0(3) EMOIN0= VAR0(4) DPLUS0= VAR0(5) DMOIN0= VAR0(6) FCINI0= VAR0(7) FCAMP0= VAR0(8) KCINE0= VAR0(9) APLUS0= VAR0(10) AMOIN0= VAR0(11) C+2003 OPLUS0= VAR0(12) OMOIN0= VAR0(13) C+2003 C+2004 E= VAR0(12) OMOIN0= VAR0(13) C+2004 C C Initialisation des variables finales C DDINL=XZER DEPF =DEP0+DDEP DO IE1=1,NVAR VARF(IE1)=VAR0(IE1) ENDDO VARF(2)=DEPF FORF=FOR0 * * WRITE(6,*)ICAS,DEP0,DEPF * C C Cas de l'increment nul C IF(DDEP.EQ.XZER)RETURN C================================================================== C C DRIVER C C================================================================== GOTO(1,2,3,4,5,6,7),ICAS+1 C========================================================== C A: CAS DU MODELE DANS SON ETAT ELASTIQUE ICAS= 0 C========================================================== 1 CONTINUE C-->Condition de branchement sur B0 ou C0 IF(DEPF.GT.CURFP(1,2))THEN ICAS=1 DEP0 = CURFP(1,2) FOR0 = CURFP(2,2) KCINE0 = FOR0/DEP0 DMOIN0 = CURFM(1,2) VARF(6)= DMOIN0 GOTO 2 ELSEIF(DEPF.LT.CURFM(1,2))THEN ICAS=4 DEP0 = CURFM(1,2) FOR0 = CURFM(2,2) KCINE0 = FOR0/DEP0 DPLUS0 = CURFP(1,2) VARF(5)= DPLUS0 GOTO 5 ENDIF C-->Regime normal: On calcul l'etat elastique IF(DEPF.GE.0)THEN KCINEF=CURFP(2,2)/CURFP(1,2) FORF=KCINEF*DEPF ELSE KCINEF=CURFM(2,2)/CURFM(1,2) FORF=KCINEF*DEPF ENDIF RETURN C========================================================== C B0: CAS DU CHARGEMENT MONOTONE DIRECTION + ICAS= 1 C========================================================== 2 CONTINUE C-->Condition de branchement sur C1 IF(DDEP.LT.XZER)THEN ICAS=2 GOTO 3 ENDIF C-->Regime normal: On procede sur la courbe de charge + C 2003DPLUSF=DEPF DPLUSF=DEPF-OPLUS0 C 2003CALL YOFXCU(DEPF ,CURFP,NCURFP, FORF,DYSDX,KERRE) FORF=FORF*(UN-APLUS0) VARF(1)=ICAS VARF(5)=DPLUSF C-->On calcule et on sauve les caracteristiques de la surface C Cinematique en tenant compte de la zone de transition C 2003CALL MSHEA1(DEPF,ICAS,FORF,DPLUSF,DMOIN0, DTRANP,DTRANM, > APLUS0,CURFP,NCURFP,CURKP,NCURKP,CURLP,NCURLP, > AMOIN0,CURFM,NCURFM,CURKM,NCURKM,CURLM,NCURLM, > FCINIF,FCAMPF,KCINEF) C2003> FCINIF,FCAMPF,KCINEF,ALPHP) VARF(7) =FCINIF VARF(8) =FCAMPF VARF(9) =KCINEF C-->Increment de d.p. DDINL=DDINL+DEPF-FORF/KCINEF-(DEP0-FOR0/KCINE0) C+2003 IF(DPLUSF.GE.DOCP)THEN IF(OMOIN0.EQ.XZER)THEN OMOINF=TRFA*(DPLUSF-DOCP) ELSE OMOINF=OMOIN0+TRFA*(DPLUSF-DPLUS0) ENDIF VARF(13)=OMOINF ENDIF C+2003 RETURN C========================================================== C C1: BRANCHE DE UNLOADING ELASTIQUE - ICAS= 2 C========================================================== 3 CONTINUE C-->Condition de branchement sur B0, B2 ou C2 FORF=FOR0+KCINE0*DDEP IF(FORF.GT.FCINI0)THEN C -->On sort par le haut (B0 ou B2) DEP0=DEP0+(FCINI0-FOR0)/KCINE0 DDEP=DEPF-DEP0 FOR0=FCINI0 C -->On retourne sur B0... si on vient de B0 IF(ABS(DEP0-DPLUS0).LT.XPETIT*DPLUS0)THEN ICAS=1 GOTO 2 C -->On retourne sur B2... si on ne vient PAS de B0 ELSE ICAS=6 GOTO 7 ENDIF ELSEIF(FORF.LT.FCINI0-FCAMP0)THEN C --> On continue sur C2 DEP0=DEP0+(FCINI0-FCAMP0-FOR0)/KCINE0 DDEP=DEPF-DEP0 FOR0=FCINI0-FCAMP0 C C+2002 On repointe "tangent" a la courbe (si possible) C 2003 STRIAL=(FMOIN0-FOR0)/(DMOIN0-DEP0) STRIAL=(FMOIN0-FOR0)/(DMOIN0+OMOIN0-DEP0) DO IE1=1,NCURFM IF(DMOIN0.GT.CURFM(1,IE1))THEN C 2003 SNEXT=(CURFM(2,IE1)-FOR0)/(CURFM(1,IE1)-DEP0) SNEXT=(CURFM(2,IE1)-FOR0)/(CURFM(1,IE1)+OMOIN0-DEP0) IF(SNEXT.GT.STRIAL)THEN DMOIN0=CURFM(1,IE1) STRIAL=SNEXT ELSE GOTO 31 ENDIF ENDIF ENDDO 31 CONTINUE VARF(6)=DMOIN0 C+2002 ICAS=3 GOTO 4 ENDIF C-->Regime normal: On decharge elastiquement VARF(1)=ICAS RETURN C========================================================== C C2: BRANCHE DE UNLOADING ANELASTIQUE - ICAS= 3 C========================================================== 4 CONTINUE C-->Condition de branchement sur B1 IF(DDEP.GT.XZER)THEN ICAS=5 GOTO 6 ENDIF C-->Valeur de ALPHP C 2003ALPHP=(DEP0-FOR0/KCINE0-DTRANM)/(DTRANP-DTRANM) C 2003ALPHP=MAX(XZER,ALPHP) C 2003ALPHP=MIN(UN ,ALPHP) C+2003 CC CALL MSHEA2(DEP0,DTRANP+OPLUS0,DTRANM+OMOIN0, > FOR0,FCAMP0,KCINE0,ICAS, > ALPHP,ALPHM) C+2003 C-->Determination de la taille du sous increment C WARNING DDEP et XINCR sont negatifs XINCR=(CURFM(2,2)-CURFP(2,2))/NPELA NINCR=INT(DDEP/XINCR)+1 XINCR=DDEP/NINCR C-->Determination initiale du point "parfait" que l'on vise (DMOIN0,FMOIN0) C-->Loop sur les sous-increments LSWICH=.FALSE. DO IE1=1,NINCR C-->Traitement du branchement possible sur C0 C 2003 IF(DEP0+XINCR.LT.DMOIN0)THEN C IF(DEP0+XINCR.LT.DMOIN0+OMOIN0)THEN C 2003 IF(DEP0+XINCR.LT.(UN-XPETIT)*DMOIN0)THEN IF(DEP0+XINCR.LT.(UN-XPETIT)*(DMOIN0+OMOIN0))THEN LSWICH=.TRUE. C 2003 XINCR =DMOIN0-DEP0 XINCR =DMOIN0+OMOIN0-DEP0 ENDIF C-->On incremente explicitement tout ce qui doit etre incremente C WARNING:force effective pointee=FMOIN0*(UN-AMOIN0) C 2003 FORF=FOR0+XINCR/(DMOIN0-DEP0)*(FMOIN0*(UN-AMOIN0)-FOR0) FORF=FOR0+XINCR/(DMOIN0+OMOIN0-DEP0)*(FMOIN0*(UN-AMOIN0)-FOR0) DEP0=DEP0+XINCR DENE=ABS(FCAMP0/2*(XINCR-(FORF-FOR0)/KCINE0)) DDINL=DDINL+XINCR+FOR0/KCINE0 FOR0=FORF C EPLUS0=EPLUS0+ ALPHP *DENE C 2003 EMOIN0=EMOIN0+(UN-ALPHP)*DENE EMOIN0=EMOIN0+ ALPHM *DENE * APLUS0=MIN(UN,APLUS0+BETA* ALPHP* DENE) * AMOIN0=MIN(UN,AMOIN0+BETA*(UN-ALPHP)*DENE) C 2003 APLUS0=TANH(BETA*EPLUS0) C 2003 AMOIN0=TANH(BETA*EMOIN0) C-->On calcule les caracteristiques de la surface C Cinematique en tenant compte de la zone de transition > DTRANP,DTRANM, > APLUS0,CURFP,NCURFP,CURKP,NCURKP,CURLP,NCURLP, > AMOIN0,CURFM,NCURFM,CURKM,NCURKM,CURLM,NCURLM, > FCINI0,FCAMP0,KCINE0) C2003> FCINI0,FCAMP0,KCINE0,ALPHP) C+2003 CC CALL MSHEA2(DEP0,DTRANP+OPLUS0,DTRANM+OMOIN0, > FOR0,FCAMP0,KCINE0,ICAS, > ALPHP,ALPHM) C+2003 DDINL=DDINL-FOR0/KCINE0 C-->Switch sur C0 IF(LSWICH)THEN ICAS=4 VARF(3)=EPLUS0 VARF(4)=EMOIN0 VARF(10)=APLUS0 VARF(11)=AMOIN0 GOTO 5 ENDIF C-->Fin normale loop sur les sous-increments ENDDO C FORF=FOR0 C VARF(1)=ICAS VARF(3)=EPLUS0 VARF(4)=EMOIN0 VARF(7)=FCINI0 VARF(8)=FCAMP0 VARF(9)=KCINE0 VARF(10)=APLUS0 VARF(11)=AMOIN0 C RETURN C========================================================== C B0: CAS DU CHARGEMENT MONOTONE DIRECTION - ICAS= 4 C========================================================== 5 CONTINUE C-->Condition de branchement sur B1 IF(DDEP.GT.XZER)THEN ICAS=5 GOTO 6 ENDIF C-->Regime normal: On procede sur la courbe de charge - C 2003DMOINF=DEPF DMOINF=DEPF-OMOIN0 C 2003CALL YOFXCU(DEPF ,CURFM,NCURFM, FORF,DYSDX,KERRE) FORF=FORF*(UN-AMOIN0) VARF(1)=ICAS VARF(6)=DMOINF C-->On calcule et on sauve les caracteristiques de la surface C Cinematique en tenant compte de la zone de transition C 2003CALL MSHEA1(DEPF,ICAS,FORF,DPLUS0,DMOINF, DTRANP,DTRANM, > APLUS0,CURFP,NCURFP,CURKP,NCURKP,CURLP,NCURLP, > AMOIN0,CURFM,NCURFM,CURKM,NCURKM,CURLM,NCURLM, > FCINIF,FCAMPF,KCINEF) C2003> FCINIF,FCAMPF,KCINEF,ALPHP) VARF(7) =FCINIF VARF(8) =FCAMPF VARF(9) =KCINEF C-->Increment de d.p. DDINL=DDINL+DEPF-FORF/KCINEF-(DEP0-FOR0/KCINE0) C+2003 IF(DMOINF.LE.DOCM)THEN IF(OPLUS0.EQ.XZER)THEN OPLUSF=TRFA*(DMOINF-DOCM) ELSE OPLUSF=OPLUS0+TRFA*(DMOINF-DMOIN0) ENDIF VARF(12)=OPLUSF ENDIF C+2003 RETURN C========================================================== C B1: BRANCHE DE RELOADING ELASTIQUE + ICAS= 5 C========================================================== 6 CONTINUE C-->Condition de branchement sur C0, C2 ou B2 FORF=FOR0+KCINE0*DDEP IF(FORF.LT.FCINI0)THEN C -->On sort par le bas (C0 ou C2) DEP0=DEP0+(FCINI0-FOR0)/KCINE0 DDEP=DEPF-DEP0 FOR0=FCINI0 C -->On retourne sur C0... si on vient de C0 IF(ABS(DEP0-DMOIN0).LT.ABS(XPETIT*DMOIN0))THEN ICAS=4 GOTO 5 C -->On retourne sur C2... si on ne vient PAS de C0 ELSE ICAS=3 GOTO 4 ENDIF ELSEIF(FORF.GT.FCINI0+FCAMP0)THEN C --> On continue sur B2 DEP0=DEP0+(FCINI0+FCAMP0-FOR0)/KCINE0 DDEP=DEPF-DEP0 FOR0=FCINI0+FCAMP0 C C2002 On repointe "tangent" a la courbe (si possible) C 2003 STRIAL=(FPLUS0-FOR0)/(DPLUS0-DEP0) STRIAL=(FPLUS0-FOR0)/(DPLUS0+OPLUS0-DEP0) DO IE1=1,NCURFP IF(DPLUS0.LT.CURFP(1,IE1))THEN C 2003 SNEXT=(CURFP(2,IE1)-FOR0)/(CURFP(1,IE1)-DEP0) SNEXT=(CURFP(2,IE1)-FOR0)/(CURFP(1,IE1)+OPLUS0-DEP0) IF(SNEXT.GT.STRIAL)THEN DPLUS0=CURFP(1,IE1) STRIAL=SNEXT ELSE GOTO 61 ENDIF ENDIF ENDDO 61 CONTINUE VARF(5)=DPLUS0 C2002 ICAS=6 GOTO 7 ENDIF C-->Regime normal: On decharge elastiquement VARF(1)=ICAS RETURN C========================================================== C B2: BRANCHE DE UNLOADING ANELASTIQUE - ICAS= 6 C========================================================== 7 CONTINUE C-->Condition de branchement sur C1 IF(DDEP.LT.XZER)THEN ICAS=2 GOTO 3 ENDIF C-->Valeur de ALPHP C 2003ALPHP=(DEP0-FOR0/KCINE0-DTRANM)/(DTRANP-DTRANM) C 2003ALPHP=MAX(XZER,ALPHP) C 2003ALPHP=MIN(UN ,ALPHP) C+2003 CC CALL MSHEA2(DEP0,DTRANP+OPLUS0,DTRANM+OMOIN0, > FOR0,FCAMP0,KCINE0,ICAS, > ALPHP,ALPHM) C+2003 C-->Determination de la taille du sous increment C WARNING DDEP et XINCR sont negatifs XINCR=(CURFP(2,2)-CURFM(2,2))/NPELA NINCR=INT(DDEP/XINCR)+1 XINCR=DDEP/NINCR C-->Determination initiale du point "parfait" que l'on vise (DPLUS0,FPLUS0) C-->Loop sur les sous-increments LSWICH=.FALSE. DO IE1=1,NINCR C-->Traitement du branchement possible sur B0 C 2003 IF(DEP0+XINCR.GT.DPLUS0)THEN C IF(DEP0+XINCR.GT.DPLUS0+OPLUS0)THEN C 2003 IF(DEP0+XINCR.GT.(UN-XPETIT)*DPLUS0)THEN IF(DEP0+XINCR.GT.(UN-XPETIT)*(DPLUS0+OPLUS0))THEN LSWICH=.TRUE. C 2003 XINCR =DPLUS0-DEP0 XINCR =DPLUS0+OPLUS0-DEP0 ENDIF C-->On incremente explicitement tout ce qui doit etre incremente C WARNING:l'increment de d.p. est calcule en 2 steps C WARNING:force effective pointee=FPLUS0*(UN-APLUS0) C 2003 FORF=FOR0+XINCR/(DPLUS0-DEP0)*(FPLUS0*(UN-APLUS0)-FOR0) FORF=FOR0+XINCR/(DPLUS0+OPLUS0-DEP0)*(FPLUS0*(UN-APLUS0)-FOR0) DEP0=DEP0+XINCR DENE=ABS(FCAMP0/2*(XINCR-(FORF-FOR0)/KCINE0)) DDINL=DDINL+XINCR+FOR0/KCINE0 FOR0=FORF C EPLUS0=EPLUS0+ ALPHP *DENE C 2003 EMOIN0=EMOIN0+(UN-ALPHP)*DENE EMOIN0=EMOIN0+ ALPHM *DENE * APLUS0=MIN(UN,APLUS0+BETA* ALPHP* DENE) * AMOIN0=MIN(UN,AMOIN0+BETA*(UN-ALPHP)*DENE) C 2003 APLUS0=TANH(BETA*EPLUS0) C 2003 AMOIN0=TANH(BETA*EMOIN0) C-->On calcule les caracteristiques de la surface C Cinematique en tenant compte de la zone de transition > DTRANP,DTRANM, > APLUS0,CURFP,NCURFP,CURKP,NCURKP,CURLP,NCURLP, > AMOIN0,CURFM,NCURFM,CURKM,NCURKM,CURLM,NCURLM, > FCINI0,FCAMP0,KCINE0) C2003> FCINI0,FCAMP0,KCINE0,ALPHP) C+2003 CC CALL MSHEA2(DEP0,DTRANP+OPLUS0,DTRANM+OMOIN0, > FOR0,FCAMP0,KCINE0,ICAS, > ALPHP,ALPHM) C+2003 DDINL=DDINL-FOR0/KCINE0 C-->Switch sur B0 IF(LSWICH)THEN ICAS=1 VARF(3)=EPLUS0 VARF(4)=EMOIN0 VARF(6)=DMOIN0 VARF(10)=APLUS0 VARF(11)=AMOIN0 GOTO 2 ENDIF C-->Fin normale loop sur les sous-increments ENDDO C FORF=FOR0 C VARF(1)=ICAS VARF(3)=EPLUS0 VARF(4)=EMOIN0 VARF(7)=FCINI0 VARF(8)=FCAMP0 VARF(9)=KCINE0 VARF(10)=APLUS0 VARF(11)=AMOIN0 C RETURN C END
© Cast3M 2003 - Tous droits réservés.
Mentions légales