Télécharger cmicr1.eso

Retour à la liste

Numérotation des lignes :

cmicr1
  1. C CMICR1 SOURCE PV 17/12/08 21:16:05 9660
  2. C MICRO1 SOURCE AM 00/12/13 21:40:25 4045
  3. SUBROUTINE CMICR1(WRK52,WRK53,WRK54,NSTRS1,NVARI,IDECAL
  4. & ,LIMPR,DEFPT,EPSE1,EPSE)
  5. IMPLICIT INTEGER(I-N)
  6.  
  7. -INC PPARAM
  8. -INC CCOPTIO
  9. -INC DECHE
  10. INTEGER NSTRS1,NVARI,ISTRS,ITER,NSIG,IDECAL
  11. LOGICAL CONV,LCP,LIMPR
  12. REAL*8 SEQ,TRDFDS,YOUNG,XNU,DEUXMU,LAMB,R0,DR,DR0,RINF,RI,FTR
  13. REAL*8 FPC,MP,EPSE,R,TEST,TRSIG,F0,DELTL,DELTLT,EPSE1,EPSD0
  14. REAL*8 DEPS3,EPS3,DFDELTL,DFDEPS3,DS3DELTL,DS3DEPS3
  15. REAL*8 A,B,C,A1,B1,C1,A2,B2,C2,DEFPT(6)
  16. *
  17. *
  18. SEGMENT WRKK1
  19. REAL*8 SIGE0(NSTRS1),DFDS(NSTRS1)
  20. END SEGMENT
  21. *
  22. SEGINI WRKK1
  23. YOUNG=XMAT(1)
  24. XNU=XMAT(2)
  25. FPC=XMAT(7)
  26. MP=XMAT(8)
  27. EPSD0=XMAT(5)
  28. EPSE=VAR0(1)
  29. RI=VAR0(2)
  30. R0=EPSD0*YOUNG
  31. * R0=0.4D0*FPC
  32. RINF=0.6d0*FPC
  33. LCP=IFOUR.EQ.-2
  34. DEUXMU=YOUNG/(1.D0+XNU)
  35. LAMB=XNU*DEUXMU/(1.D0-2.D0*XNU)
  36. TEST=1.D-6*R0
  37. DR=0.D0
  38. KERRE=0
  39.  
  40.  
  41. C
  42. C calcul de la matrice elastique
  43. C
  44. CMATE = 'ISOTROPE'
  45. KCAS=1
  46. CALL DOHMAS(XMAT,CMATE,IFOUR,NSTRS1,KCAS,DDHOOK,IRTD)
  47. IF ( IRTD .EQ. 0) THEN
  48. KERRE=123
  49. return
  50. end if
  51. C
  52. C calcul de l'increment de contrainte
  53. C
  54. CALL MATVE1 (DDHOOK,DEPST,NSTRS1,NSTRS1,DSIGT,1)
  55. * print*,'IFOUR=',IFOUR
  56. * print*,'DDHOOK'
  57. * do i=1,3
  58. * print*,(ddhook(i,j),j=1,3)
  59. * end do
  60. * do i=1,3
  61. * print*,'DEPST(',I,')=',DEPST(i)
  62. * print*,'DSIGT(',I,')=',DSIGT(I)
  63. * end do
  64. *
  65. * calcul des parametres du critere de NADAI
  66. *
  67. C-
  68. C- A,B,C : PARAMETRES DU CRITERE DE PLASTICITE (NADAI)
  69. C- ILS SONT DIFFERENTS SUIVANT LE CHARGEMENT
  70. C-
  71.  
  72. CONV=.FALSE.
  73. * CONV=.TRUE.
  74. CALL ZDANUL (DEFP,NSTRS1)
  75. ITER=0
  76. EPS3=0.d0
  77. DELTLT=0.D0
  78. R=RI
  79. A1=0.4d0
  80. B1=(1.d0 - A1) / (1.D0 + A1)
  81. C1=(2.D0 * A1) / (1.D0 + A1)
  82. A2=1.16d0
  83. * B2=(A2 - 1.D0) / (2.D0 * A2 - 1.D0)
  84. B2=0.2
  85. * C2=A2 / (2.D0 * A2 - 1.D0)
  86. C2=0.8
  87. *
  88. * NSIG est la dimension du tenseur des contraintes:
  89. * NSIG=3 sauf 2 en contraintes planes
  90. *
  91. IF (LCP)THEN
  92. NSIG=2
  93. ELSE
  94. NSIG=3
  95. END IF
  96. *
  97. * on recupere les contraintes anelastiques due a l'endommagement
  98. *
  99. DO ISTRS=1,NSTRS1
  100. SIGE0(ISTRS)=VAR0(ISTRS+IDECAL)
  101. END DO
  102. *
  103. * prediction elastique de la contrainte effective
  104. * contrainte + contrainte anelastique + increment de contrainte elastique
  105. *
  106. * l'increment de contrainte est decoupe:
  107. * 1) point de contact avec la surface seuil ???
  108. * 2) decoupage du reste de facon a ce que le pas en contrainte
  109. * equivalente soit inferieur a disons pour le moment E*1.e-04
  110. *
  111. * en deux coups les gros
  112. *
  113. *
  114. * DS=0.d0
  115. * do istrs=1,nstrs
  116. * ds=ds + dsigt(istrs)**2
  117. * end do
  118. * nstep=int(1.e+4*sqrt(ds)/youn)
  119. DO ISTRS=1,NSTRS1
  120. SIGE0(ISTRS)=SIG0(ISTRS)+SIGE0(ISTRS)+DSIGT(ISTRS)
  121. END DO
  122. if(limpr)then
  123. DO ISTRS=1,NSTRS1
  124. PRINT*,'SIG0(',ISTRS,')=',SIGE0(ISTRS)
  125. PRINT*,'DSIGT(',ISTRS,')=',DSIGT(ISTRS)
  126. END DO
  127. endif
  128.  
  129. DO WHILE (ITER .LE. 100 .AND. .NOT. CONV)
  130. ITER=ITER+1
  131. *
  132. * on calcule la contrainte equivalente de Mises (SEQ)
  133. * et la trace des contraintes (TRSIG)
  134. *
  135. * on utilise la fonction modulo:
  136. * MOD( 1,3)= 1
  137. * MOD( 2,3)= 2
  138. * MOD( 3,3)= 0
  139. * MOD( 4,3)= 1
  140. * MOD( 5,3)= 2
  141. * MOD( 6,3)= 0
  142. *
  143. SEQ=0.D0
  144. TRSIG=0.d0
  145. * ici NSIG change en 3 le 6/11/95 (clb)
  146. DO ISTRS=1,3
  147. TRSIG=TRSIG + SIGE0(ISTRS)
  148. SEQ=SEQ+SIGE0(ISTRS)*(SIGE0(ISTRS)-SIGE0(MOD(ISTRS,3)+1))
  149. END DO
  150. DO ISTRS=4,NSTRS1
  151. SEQ=SEQ + 3.D0*SIGE0(ISTRS)**2
  152. END DO
  153. if (limpr) then
  154. print*,'VMIS**2=',SEQ,'TRSIG=',TRSIG
  155. end if
  156. SEQ=SQRT(SEQ)
  157. *
  158. * en fonction de la valeur de la trace de sigma, on determine les
  159. * coef b et c a applique a la surface seuil
  160. *
  161. IF (MOD(ITER-1,3).EQ.0 )then
  162. IF ( TRSIG .GT. (4.D0*(R+R0)*(C2-C1)/(B2-B1)))THEN
  163. * PRINT*,'OUI TRSIG .GT. (R+R0)'
  164. * PRINT*,'(R+R0)*(C2-C1)/(B2-B1)',4.D0*(R+R0)*(C2-C1)/(B2-B1)
  165. * B=B1
  166. * C=C1
  167. B=1.D0
  168. C=2.D0
  169. * C=1.D0
  170. * B=((((0.4D0*FPC)/FTR)*C)-1)
  171. * PRINT*,'B',B
  172. * PRINT*,'C',C
  173. ELSE
  174. * PRINT*,'NON TRSIG .GT. (R+R0)'
  175. * PRINT*,'(R+R0)*(C2-C1)/(B2-B1)',4*(R+R0)*(C2-C1)/(B2-B1)
  176. * B=B2
  177. * C=C2
  178. * B=-1.D0
  179. * C=8.0D0
  180. B=0.25D0
  181. C=3.0D0
  182. * PRINT*,'B',B
  183. * PRINT*,'C',C
  184. ENDIF
  185. ENDIF
  186. * B=1.D0
  187. * C=2.D0
  188. *
  189. * fonction seuil
  190. *
  191. F0=(SEQ + B*TRSIG)/C - (R0 + R)
  192. if (limpr) then
  193. PRINT*,'B=',B,'C=',C,'F0=',F0
  194. PRINT*,'SIGMAEQ=',(SEQ + B*TRSIG)/C
  195. PRINT*,'R0',R0
  196. PRINT*,'(1.D0+B)/C',(1.D0+B)/C
  197. PRINT*,'B', B
  198. PRINT*,'C', C
  199. PRINT*,'TRSIG',TRSIG,'SEQ',SEQ
  200. PRINT*,'F0',F0
  201. end if
  202. *
  203. * le critere de convergence est verifie si la valeur absolue
  204. * de la fonction seuil est plus petite que le critere ou si
  205. * la fonction seuil est negative pour la premiere iteration
  206. *
  207. CONV=(ABS(F0).LE.TEST .AND.
  208. 1 (.NOT. LCP .OR. ABS(SIGE0(3)) .LE. TEST ) )
  209. 2 .OR. (F0 .LE. 0.D0 .AND. ITER .EQ. 1)
  210. *
  211. * dans le cas des contraintes planes on rajoute aussi
  212. * que la valeur absolue de sigma33 est inferieure au critere
  213. *
  214. * PRINT*,'CONV',CONV
  215. * PRINT*,'F(0)',F0
  216. IF (.NOT. CONV) THEN
  217. * PRINT*,'On ecoule'
  218. *
  219. * calcul de dF/dSigma
  220. *
  221. DO ISTRS=1,3
  222. DFDS(ISTRS)=(2.D0*SIGE0(ISTRS)-SIGE0(MOD(ISTRS,3)+1)
  223. & -SIGE0(MOD(ISTRS+1,3)+1) )/(2.D0*C*SEQ) +B/C
  224. END DO
  225. * PRINT*,'DFDS(11)',DFDS(1)
  226. * PRINT*,'DFDS(22)',DFDS(2)
  227. * PRINT*,'DFDS(33)',DFDS(3)
  228. DO ISTRS=4,NSTRS1
  229. DFDS(ISTRS)=3.D0*SIGE0(ISTRS)/(2.d0*C*SEQ)
  230. END DO
  231. TRDFDS=0.D0
  232. DO ISTRS=1,NSIG
  233. TRDFDS=TRDFDS+DFDS(ISTRS)
  234. END DO
  235. if (limpr) then
  236. * on verifie que les valeur ppales sont bonnes
  237. do istrs=1,nstrs
  238. print*,'dfds(',istrs,')=',dfds(istrs)
  239. end do
  240. print*,'trdfds=',trdfds
  241. end if
  242. *
  243. * calcul de dsigma/deltl=C * depsp
  244. * attention !! dans le cas des contraintes planes:epsp33 n'est
  245. * pas une inconnue directe mais c'est depse33
  246. *
  247. *
  248. * R=MP*p -----> DR=MP * Dp =MP*DELTL
  249. * R=Rinf(1-exp(-bR)) ---> dR=b(Rinf-R)deltl
  250. *
  251. * DR = (RINF - R)*MP
  252. * DR=MP
  253. * R=MP*(p)**0.5 ---> DR=0.5 * MP *P**(-05)dp
  254. * Si On prend un écrouissage linéaire
  255. * R=MP*(p)**1.D0 ---> DR= MP dp
  256. *
  257.  
  258. * IF ((EPSE+DELTLT).GE. 1.D-20 )THEN
  259. * DR=0.5*MP*(EPSE+DELTLT)**(-0.5)
  260. DR=MP
  261. * PRINT*,'OUI (EPSE+DELTLT).GE. 1.D-20 )',DR
  262. * ELSE
  263. * DR=0.D0
  264. * END IF
  265. DFDELTL=-DR
  266. DO ISTRS=1,NSIG
  267. DFDELTL=DFDELTL-DFDS(ISTRS)*(DFDS(ISTRS)*DEUXMU+TRDFDS*LAMB)
  268. END DO
  269. DO ISTRS=4,NSTRS1
  270. DFDELTL=DFDELTL - 2.d0*DEUXMU * DFDS(ISTRS)**2
  271. END DO
  272. IF (LCP) THEN
  273. DFDELTL=DFDELTL-DFDS(3)*TRDFDS*LAMB
  274. DFDEPS3=LAMB*TRDFDS + (LAMB+DEUXMU)*DFDS(3)
  275. DS3DELTL=-LAMB*TRDFDS
  276. DS3DEPS3=LAMB + DEUXMU
  277. DELTL=(SIGE0(3)*DFDEPS3 - F0*DS3DEPS3)/
  278. & (DS3DEPS3*DFDELTL - DS3DELTL*DFDEPS3)
  279. DEPS3=-(SIGE0(3)-DS3DELTL*DELTL)/DS3DEPS3
  280. EPS3=EPS3+DEPS3
  281. DELTLT=DELTLT+DELTL
  282. DO ISTRS=1,NSIG
  283. SIGE0(ISTRS)=SIGE0(ISTRS)+LAMB*DEPS3
  284. END DO
  285. SIGE0(3)=SIGE0(3)+(LAMB+DEUXMU)*DEPS3-LAMB*DELTL*TRDFDS
  286. ELSE
  287. DELTL=-F0/DFDELTL
  288. DELTLT=DELTLT+DELTL
  289. END IF
  290. DO ISTRS=1,NSIG
  291. SIGE0(ISTRS)=SIGE0(ISTRS)
  292. & -DELTL*(DEUXMU*DFDS(ISTRS)+LAMB*TRDFDS)
  293. END DO
  294. DO ISTRS=4,NSTRS1
  295. SIGE0(ISTRS)=SIGE0(ISTRS)-DELTL*DEUXMU*DFDS(ISTRS)
  296. END DO
  297. ELSE
  298. DELTL=0.D0
  299. END IF
  300. R=R + DR*DELTL
  301. DO ISTRS=1,3
  302. DEFP(ISTRS)=DEFP(ISTRS)+DELTL*DFDS(ISTRS)
  303. END DO
  304. DO ISTRS=4,NSTRS1
  305. DEFP(ISTRS)=DEFP(ISTRS)+2.D0*DELTL*DFDS(ISTRS)
  306. END DO
  307. if (limpr) then
  308. print*,'ITER=',ITER,'F0=',F0,'DELTL=', DELTL
  309. print*,'DELTLT=',DELTLT,'DR=',DR,'R',R
  310. do istrs=1,nstrs
  311. print*,'SIGMA(',ISTRS,')=', SIGE0(ISTRS)
  312. print*,'DEFP(',ISTRS,')=', DEFP(ISTRS)
  313. end do
  314. end if
  315. * PRINT*,'EPSE+DELTLT',EPSE+DELTLT
  316. END DO
  317. * EN CAS DE NON CONVERGENCE: ON MET KERRE a 1
  318. IF (.NOT. CONV) THEN
  319. KERRE=1
  320. END IF
  321. * PRINT*,'CONVERGENCE OBTENUE APRES ',ITER, 'ITERATIONS'
  322. *
  323. * on remplit les variables finales
  324.  
  325. **
  326. * Je rajoute ça pour les déformations plastiques
  327. *
  328. DO ISTRS=1,NSTRS1
  329. DEFPT(ISTRS)=DEFP(ISTRS)
  330. ENDDO
  331. VARF(1)=EPSE+DELTLT
  332. VARF(2)=R
  333. EPSE1=EPSE*((1.D0+B)/C)
  334. * EPSE=EPSE1*(C/(1.D0+B))
  335. *
  336. * ON REND LES CONTRAINTES
  337. *
  338. DO ISTRS=1,NSTRS1
  339. SIGF(ISTRS)=SIGE0(ISTRS)
  340. * PRINT*,'SIGF(',ISTRS,')=',SIGF(ISTRS)
  341. END DO
  342.  
  343. * ON REND L'INCREMENT DE DEFORMATIONS PLASTIQUES
  344. *
  345.  
  346. SEGSUP WRKK1
  347. RETURN
  348. END
  349. *
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales