1 : C MOCU2D SOURCE CHAT 11/03/16 21:28:01 6902 2 : C MOCU2D SOURCE GOUNAND 97/10/13 22:21:06 2872 3 : SUBROUTINE MOCU2D(IPCURZ,IPAXIA,IPMODL,IPCAR,IPEPAX,IPMOMZ 4 : . ,TOL,mtable,zveri) 5 : ********************************************************************** 6 : * 7 : * OPERATEUR MOCU2D (MOment/CUrvature) 8 : * 9 : * IPCURZ : Histoire en courbure 10 : * IPAXIA : Histoire en effort normal 11 : * IPMODL : Modele 12 : * IPCAR : Materiau 13 : * IPEPAX : Histoire allongement axial 14 : * IPMOMZ : Histoire en moment 15 : * TOL: Tolerance 16 : * 17 : ********************************************************************** 18 : * D'APRES MOCUR DC 98 19 : ********************************************************************** 20 : IMPLICIT INTEGER(I-N) 21 : IMPLICIT REAL*8(A-H,O-Z) 22 : C 23 : DIMENSION DEPSI(3),SIGMA(3),CRIGI(12),CMASS(12) 24 : logical bool,zveri 25 : character*1 char1 26 : 27 : C 28 : -INC CCOPTIO 29 : -INC SMLREEL 30 : -INC CCGEOME 31 : -INC CCREEL 32 : -INC SMMODEL 33 : -INC SMCHAML 34 : -INC SMTABLE 35 : POINTEUR IPCURZ.MLREEL,IPAXIA.MLREEL 36 : POINTEUR IPMOMZ.MLREEL,IPEPAX.MLREEL 37 : C 38 : NMAXIT=50 39 : NSTRS2 = 3 40 : C 41 : * 42 : ICOUL1=IDCOUL 43 : C 44 : C------- NSTEPS -- 45 : C 46 : SEGACT,IPCURZ,IPAXIA 47 : NSTEPS=IPCURZ.PROG(/1) 48 : IF(IPAXIA.PROG(/1).NE.NSTEPS)THEN 49 : SEGDES,IPCURZ,IPAXIA 50 : RETURN 51 : ENDIF 52 : C 53 : if (zveri) then 54 : m=3 55 : segini mtable 56 : m=nsteps + 1 57 : segini mtab1 57 : call ecctab (mtable,'MOT ',ii,xva,'CONTRAINTES',bool,iob, 58 : $ 'TABLE ',ii,xva,char1,bool,mtab1) 59 : segini mtab2 59 : call ecctab (mtable,'MOT ',ii,xva,'VARIABLES_INTERNES',bool,iob 60 : $ ,'TABLE ',ii,xva,char1,bool,mtab2) 61 : segini mtab3 61 : call ecctab (mtable,'MOT ',ii,xva,'DEFORMATIONS', 62 : $ bool,iob, 63 : $ 'TABLE ',ii,xva,char1,bool,mtab3) 64 : segdes mtable 65 : endif 66 : c 67 : C-------- INITIALIZING --------------- 68 : C 68 : CALL ZEROP(IPMODL,'CONTRAIN',IPSIG0) 68 : CALL ZEROP(IPMODL,'VARINTER',IPVAR0) 69 : DO IE1=1,3 70 : SIGMA(IE1)=0.D0 71 : END DO 72 : SZERO=0.0D0 73 : if (zveri) then 73 : call ecctab(mtab1,'ENTIER',0,xva,char1,bool,iob, 74 : $ 'MCHAML',ii,xva,char1,bool,ipsig0) 74 : call ecctab(mtab2,'ENTIER',0,xva,char1,bool,iob, 75 : $ 'MCHAML',ii,xva,char1,bool,ipvar0) 75 : call ecctab(mtab3,'ENTIER ',0,xva,char1,bool,iob, 76 : $ 'FLOTTANT',ii,szero,char1,bool,iob) 77 : endif 78 : C 79 : JG=NSTEPS 80 : SEGINI,IPMOMZ,IPEPAX 81 : C 82 : C INITIAL STIFNESS 83 : C 83 : CALL FRIGIE(IPMODL,IPCAR,CRIGI,CMASS) 84 : XKFXEX=CRIGI(1) 85 : XKFXCZ=-CRIGI(2) 86 : C 87 : C NULL DEFORMATION INCREMENT 88 : C 89 : DEPSI(2)=0.D0 90 : C 91 : ZAUX0=0.D0 92 : ZAXI0=0.D0 93 : DEFOA=0.D0 94 : C 95 : C-------- LOOP --------------- 96 : C 97 : DO 2000 I=1,NSTEPS 98 : C 99 : ZAUX1=IPCURZ.PROG(I) 100 : ZAXI1=IPAXIA.PROG(I) 101 : DZCURV=ZAUX1-ZAUX0 102 : DFAXIA=ZAXI1-ZAXI0 103 : C 104 : SIGPRE=ZAXI0 105 : XKFXEX=CRIGI(1) 106 : DSITER=(DFAXIA-XKFXCZ*DZCURV)/XKFXEX 107 : SZERO =DSITER 108 : C 109 : DEPSI(3)=DZCURV 110 : C 111 : DO 5000 NITER=1,NMAXIT 112 : DEPSI(1)=SZERO 113 : C 113 : CALL FCOUL1(DEPSI,IPMODL,IPSIG0,IPVAR0,IPCAR, 114 : $ SIGMA,IPSIGF,IPVARF,IRETO,NSTRS2) 115 : IF(IRETO.EQ.0) THEN 116 : SEGSUP,IPMOMZ,IPEPAX 117 : RETURN 118 : ENDIF 119 : C 120 : DSITET=(ZAXI1-SIGMA(1))/XKFXEX 121 : C 122 : IF(IIMPI.EQ.1789)THEN 123 : write(IOIMP,999)I,NITER,XKFXEX,DSITET 124 : 999 format(1x,'I=',I4,' NITER=',I2,' XKFXEX=', 125 : $ 1pd12.5,' DSITET=',1pd12.5) 126 : ENDIF 127 : C 128 : IF(ABS(DSITET).LT.TOL)GOTO 5010 129 : C 130 : C on tente une approximation quasi-newton apres la prediction ... 131 : C 132 : IF(NITER.GT.1) XKFXEX=(SIGMA(1)-SIGPRE)/DSITER 133 : SIGPRE=SIGMA(1) 134 : DSITER=(ZAXI1-SIGMA(1))/XKFXEX 135 : SZERO=SZERO+DSITER 136 : C 136 : CALL DTCHAM(IPSIGF) 136 : CALL DTCHAM(IPVARF) 137 : C 138 : 5000 CONTINUE 139 : C 140 : INTERR(1)=NMAXIT 140 : CALL ERREUR(638) 140 : CALL DTCHAM(IPSIG0) 140 : CALL DTCHAM(IPVAR0) 141 : SEGSUP,IPMOMZ,IPEPAX 142 : SEGDES,IPCURZ,IPAXIA 143 : RETURN 144 : C 145 : 5010 ZAXI0=SIGMA(1) 146 : ZAUX0=ZAUX1 147 : DEFOA=DEFOA+SZERO 148 : C 149 : if (.not.zveri) then 149 : CALL DTCHAM(IPSIG0) 149 : CALL DTCHAM(IPVAR0) 150 : endif 151 : IPSIG0=IPSIGF 152 : IPVAR0=IPVARF 153 : c 154 : if (zveri) then 154 : call ecctab(mtab1,'ENTIER',0,xva,char1,bool,iob, 155 : $ 'MCHAML',ii,xva,char1,bool,ipsig0) 155 : call ecctab(mtab2,'ENTIER',0,xva,char1,bool,iob, 156 : $ 'MCHAML',ii,xva,char1,bool,ipvar0) 156 : call ecctab(mtab3,'ENTIER ',I,xva,char1,bool,iob, 157 : $ 'FLOTTANT ',ii,DEFOA,char1,bool,iob) 158 : endif 159 : C 160 : IPMOMZ.PROG(I)=SIGMA(3) 161 : IPEPAX.PROG(I)=DEFOA 162 : C 163 : C 164 : 2000 CONTINUE 165 : C 166 : if (zveri) then 167 : segdes,mtab1,mtab2,mtab3 168 : else 168 : CALL DTCHAM(IPSIG0) 168 : CALL DTCHAM(IPVAR0) 169 : endif 170 : SEGDES,IPCURZ,IPAXIA 171 : C 172 : SEGDES,IPMOMZ,IPEPAX 173 : C 174 : RETURN 175 : END 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 : 193 :
© Cast3M 2003 - All rights reserved.
Disclaimer