Télécharger split.eso

Retour à la liste

Numérotation des lignes :

split
  1. C SPLIT SOURCE PV 08/09/23 21:15:07 6164
  2. c*****************************************************************************
  3. c sous rouine utilisee dans l'ecoulement plastique de la loi
  4. c de GURSON
  5. c*****************************************************************************
  6. subroutine split(dphi,wrkgur)
  7. c
  8. c this subroutine split up the strain increment in two if a normal
  9. c evolution reaches a state where phin < phi0
  10. c xi*de is the first strain increment that makes reaches phin=phi0
  11. c
  12. c rho and sqrtj2 have been updated in newsta
  13. c
  14. c--- variables
  15. IMPLICIT INTEGER(I-N)
  16. IMPLICIT REAL*8 (A-H,O-Z)
  17. segment wrkgur
  18. real*8 sigbar, sy0,phi0,rho0,g,b,h
  19. real*8 epn,phin,sqrtj2,rho,sig(6)
  20. real*8 e(7),dt
  21. real*8 conv,tol1,tol2
  22. endsegment
  23. * common/prop/sigbar,sy0,phi0,rho0,g,b,h
  24. * common/state/epn,phin,sqrtj2,rho,sig(6)
  25. c e is the strain rate:
  26. c e(1-6) is the deviatoric part
  27. c e(7) is the trace/3
  28. c dt ist the time increment
  29. * common /delta/ e(7),dt
  30. * common /toler/ conv,tol1,tol2
  31. c
  32. c*** set the bounds
  33. p=(1.d0-phi0)*b*(1.d0-rho0/rho)
  34. syp=1.d0+phi0*phi0-2.d0*phi0*cosh(1.5d0*p/sigbar)
  35. c
  36. if ( syp .le. 0.d0) then
  37. c xi2 is computed such that syp(xi2)=0
  38. xi2=1.d0+(2.d0/3.d0*sigbar*log(phi0)+(1.d0-phi0)*b*
  39. & (1.d0-rho0/rho))
  40. & /(1.d0-phi0)/b/e(7)/dt/3.d0
  41. else
  42. xi2=1.d0
  43. endif
  44. xi1=0.d0
  45. c
  46. call funk(xi1,f1,wrkgur)
  47. call funk(xi2,f2,wrkgur)
  48. c
  49. if ( abs(f2) .le. conv) then
  50. xi=xi2
  51. goto 200
  52. endif
  53. if ( abs(f1) .le. conv) then
  54. xi=xi1
  55. goto 200
  56. endif
  57. c
  58. if ( (f2*f1) .gt. 0.d0) then
  59. write (6,*) 'f2*f1>0 in split'
  60. endif
  61. c
  62. c*** start iterative process (Ridder's method)
  63. do 100 j=1,99
  64. c
  65. xi3=(xi1+xi2)*0.5d0
  66. call funk (xi3,f3,wrkgur)
  67. c
  68. dum=xi3+(xi3-xi1)*sign(1.d0,f1-f2)*f3/sqrt(abs(f3**2-f2*f1))
  69. call funk(dum,fdum,wrkgur)
  70. c
  71. if (fdum .lt. 0.d0) then
  72. xi2=dum
  73. f2=fdum
  74. else
  75. xi1=dum
  76. f1=fdum
  77. endif
  78. c
  79. if ( abs(fdum) .le. conv) then
  80. xi=dum
  81. goto 200
  82. endif
  83. c
  84. 100 continue
  85. c
  86. c split did not converge!'
  87. xi=xi1
  88. c
  89. 200 continue
  90. c
  91. c*** update new state for xi*de strain increment
  92. dphi=phi0-phin
  93. phin=phi0
  94. p=(1.d0-phi0)*b*(1.d0-rho0/rho)+(1-xi)*
  95. & (1.d0-phi0)*b*e(7)*dt*3.d0
  96. syn=sy0+h*epn
  97. syp=1.d0+phi0**2-2.d0*phi0*cosh(-1.5d0*p/sigbar)
  98. c
  99. if (abs(syp) .gt. tol1*tol1) then
  100. a=1.5d0*phi0*(1.d0-phi0)*sinh(-1.5d0*p/sigbar)
  101. & /sqrt(syp)
  102. c
  103. ratio=syn/(2.d0*h)
  104. dep=sqrt(ratio**2+abs(dphi/a)*sigbar/h)-ratio
  105. c
  106. epn=epn+dep
  107. sy=(syn+h*dep)*sqrt(syp)
  108. sqrtj2=sy
  109. c
  110. fac=1.d0+3.d0*g*dep/sqrtj2
  111. c
  112. do 250 i=1,6
  113. sig(i)=(sig(i)-(1.d0-xi)*2.d0*g*e(i)*dt)/fac
  114. 250 continue
  115. c
  116. else
  117. sqrtj2=0.d0
  118. endif
  119. c
  120. c*** evolution under (1-xi)*de
  121. sum=0.d0
  122. c
  123. do 400 i=1,6
  124. e(i)=(1.d0-xi)*e(i)
  125. sig(i)=sig(i)+2*g*e(i)*dt
  126. sum=sum+sig(i)*sig(i)
  127. if (i .gt. 3) then
  128. sum=sum+sig(i)*sig(i)
  129. endif
  130. 400 continue
  131. sqrtj2=sqrt(1.5d0*sum)
  132. c
  133. syn=sy0+h*epn
  134. c
  135. c--- trial state with respect to yield surface
  136. if ( sqrtj2 .gt. syn )then
  137. call prandt(wrkgur)
  138. endif
  139. c
  140. dphi=1.0d0
  141. return
  142. end
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  

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