Télécharger sbstep.eso

Retour à la liste

Numérotation des lignes :

sbstep
  1. C SBSTEP SOURCE OF166741 26/08/05 21:15:06 12616
  2. CCC
  3. C **********************************************************************
  4. CCC
  5. SUBROUTINE SBSTEP
  6. . (sigini,varini,dsigtr,sigfin,varfin,
  7. . ddefpl,Kmat,ndims,ndimv,ndimk,
  8. . xmat,kerre,precis,nitmax,nescri,ues,
  9. . nmodel,nnumer,deltax,nsteps,
  10. . isub,ntotiter,iincre)
  11. c
  12. c IN:
  13. c sigini Initial stresses
  14. c varini Initial internal variables
  15. c dsigtr Increment of trial stresses
  16. c ndims Stress dimension
  17. c ndimv Internal variable dimension
  18. c ndimk Tangent stiffness matrix dimension
  19. c xmat Material parameters
  20. c precis Tolerance for local problem iterations
  21. c nitmax Maximun iterations for local problem
  22. c nescri Write intermediate results (0:no, 1: yes)
  23. c ues Output unit
  24. c nmodel Plasticity model
  25. c nnumer Generalized flow vector computation
  26. c 0:analytical
  27. c 1:1st forward differences
  28. c 2:1st centered differences
  29. c 3:1st complex approximation
  30. c deltax Relative stepsize value
  31. c nsteps Number of substeps
  32. c OUT:
  33. c sigfin Final stresses
  34. c varfin Final internal variables
  35. c ddefpl Increment of plastic strains
  36. c Kmat Consistent tangent stiffness matrix
  37. c kerre Error control flag
  38. IMPLICIT INTEGER(I-N)
  39. IMPLICIT REAL*8(A-H,O-Z)
  40. integer ndims,ndimv,ndimk,kerre,nitmax,nescri,iterlocal,
  41. . nnumer,ues,nmodel,nsteps,isub,ntotiter,iincre
  42. real*8 sigini(*),varini(*),ddefpl(*),
  43. . dsigtr(*),sigfin(*),varfin(*),
  44. . Kmat(*),xmat(*),precis,deltax
  45. integer ips,i,k,ivoid,ndimx,flagini,iaux,ic,jf
  46. real*8 sig1(6),sig2(6),ddsigtr(6),dddefpl(6),
  47. . var1(4),var2(4),Kmat0(64),Kmat1(64),Kmat2(64),
  48. . alphai
  49.  
  50. real*8 sigy0,kiso,siginf,velo
  51. common /j2j2data/ sigy0,kiso,siginf,velo
  52.  
  53. do i=1,2
  54. var1(i)=0.D0
  55. var2(i)=0.D0
  56. enddo
  57. do i=1,6
  58. sig1(i)=0.D0
  59. sig2(i)=0.D0
  60. ddsigtr(i)=0.D0
  61. dddefpl(i)=0.D0
  62. enddo
  63. do i=1,64
  64. Kmat0(i)=0.D0
  65. Kmat1(i)=0.D0
  66. Kmat2(i)=0.D0
  67. enddo
  68. c nescri=1
  69. c variable de ecoj2 que no se usa
  70. ivoid=0
  71. c dimension de sigma ampliado
  72. if (nmodel.eq.1) then
  73. call carac_mate_j2(xmat)
  74. if ((kiso.eq.0.D0).and.(velo.eq.0.D0)) then
  75. ndimx=ndims
  76. else
  77. ndimx=ndims+1
  78. endif
  79. else if (nmodel.eq.2) then
  80. ndimx=ndims
  81. else if (nmodel.ge.20) then
  82. ndimx=ndims+2
  83. c* else
  84. c* call erreur(5)
  85. endif
  86. c posicion en el step (valor de i inicial)
  87. ips =0
  88. c contador de substeps
  89. isub =0
  90. c contador de iteraciones
  91. ntotiter=0
  92. c flag de primer substep para la mtc
  93. flagini=1
  94. c poner sigma y varint iniciales
  95. do i=1,ndims
  96. sig1(i)=sigini(i)
  97. enddo
  98. do i=1,ndimv
  99. var1(i)=varini(i)
  100. enddo
  101. do while (ips.lt.nsteps)
  102. 100 continue
  103. c proporcion de carga para el substep
  104. alphai=float(iincre)/float(nsteps)
  105. c dividir incremento de sigma
  106. do k=1,ndims
  107. ddsigtr(k)=dsigtr(k)*alphai
  108. enddo
  109. c integra un substep
  110. if (nmodel.eq.1) then
  111. call eco_j2(sig1,var1,ddsigtr,sig2,var2,
  112. . dddefpl,ivoid,ndims,xmat,kerre,
  113. . precis,nitmax,nescri,ues,iterlocal)
  114. else if (nmodel.eq.2) then
  115. call eco_rhmc(sig1,var1,ddsigtr,sig2,var2,
  116. . dddefpl,ivoid,ndims,xmat,kerre,
  117. . precis,nitmax,nescri,ues,iterlocal)
  118. else
  119. call eco_MRSMAC(sig1,var1,ddsigtr,sig2,var2,
  120. . dddefpl,ivoid,ndims,xmat,kerre,
  121. . precis,nitmax,nescri,ues,nnumer,deltax,
  122. . iterlocal)
  123. endif
  124. c criterio de aceptacion
  125. if (kerre.eq.1) then
  126. if (iincre.eq.1) then
  127. write(*,*) ' Numero de substeps max. insuficiente'
  128. return
  129. else
  130. iincre=int(iincre/2)
  131. iaux=nsteps-(ips+iincre)
  132. if (iaux.lt.0) iincre=nsteps-ips
  133. c repite el step dividido por la mitad
  134. kerre=0
  135. goto 100
  136. endif
  137. endif
  138. c añadir defor plastica del step
  139. do i=1,ndims
  140. ddefpl(i)=dddefpl(i)
  141. enddo
  142. do i=1,6
  143. dddefpl(i)=0.D0
  144. enddo
  145. c poner como inicial las sigma y varint finales del step
  146. do i=1,ndims
  147. sig1(i)=sig2(i)
  148. enddo
  149. do i=1,ndimv
  150. var1(i)=var2(i)
  151. enddo
  152. c actualizar la i de posicion en el step
  153. ips=ips+iincre
  154. c añadir uno al contador de steps
  155. isub=isub+1
  156. c añadir el numero de iteraciones al total
  157. ntotiter=ntotiter+(iterlocal)
  158. c calcula la nx.nx de la inversa del jacobiano (sin E^-1 en la diagonal)
  159. if (nmodel.eq.1) then
  160. call jac_J2(Kmat1,ndimx,sig2,ndims,var2(1),var2(2),xmat,
  161. . nescri,ues,kerre)
  162. else if (nmodel.eq.2) then
  163. call jac_rhmc(Kmat1,ndimx,sig2,ndims,var2(2),xmat,
  164. . nescri,ues,kerre)
  165. else
  166. call jac_mrsmac(Kmat1,ndimx,sig2,ndims,
  167. . var2(1),var2(2),var2(3),var2(4),
  168. . xmat,nescri,ues,nnumer,deltax,kerre)
  169. endif
  170. if (flagini.eq.1) then
  171. c se guardan ns columnas de Kmat1 en Kmat0 multiplicadas por alphai
  172. do ic=1,ndims
  173. do jf=1,ndimx
  174. Kmat0(ndimx*(ic-1)+jf)=Kmat1(ndimx*(ic-1)+jf)*alphai
  175. enddo
  176. enddo
  177. flagini=0
  178. do i=1,ndimx*ndimx
  179. Kmat1(i)=0.D0
  180. enddo
  181. else
  182. c suma (Anterior + P*alphai) [nx.ns+nx.ns]
  183. do ic=1,ndims
  184. Kmat0(ndimx*(ic-1)+ic)=Kmat0(ndimx*(ic-1)+ic)+alphai
  185. enddo
  186. c multiplica Kmat2=Kmat1*Kmat0 [nx.ns=nx.nx*nx.ns];
  187. c corresponde a JSS^-1*()
  188. do ic=1,ndims
  189. do jf=1,ndimx
  190. do k=1,ndimx
  191. Kmat2(ndimx*(ic-1)+jf)=Kmat2(ndimx*(ic-1)+jf)+
  192. . Kmat1(ndimx*(k-1)+jf)*Kmat0(ndimx*(ic-1)+k)
  193. enddo
  194. enddo
  195. enddo
  196. c guarda Kmat2 en Kmat0 para el siguiente paso
  197. do i=1,ndimx*ndims
  198. Kmat0(i)=Kmat2(i)
  199. enddo
  200. do i=1,ndimx*ndimx
  201. Kmat1(i)=0.D0
  202. enddo
  203. do i=1,ndimx*ndims
  204. Kmat2(i)=0.D0
  205. enddo
  206. c write(ues,999)((Kmat0(ndims*(jf-1)+i),jf=1,ndims),i=1,ndims)
  207. endif
  208. enddo
  209. c poner las sigma y varint finales
  210. do i=1,ndims
  211. sigfin(i)=sig2(i)
  212. enddo
  213. do i=1,ndimv
  214. varfin(i)=var2(i)
  215. enddo
  216. c Kmat2 = Matriz de hook
  217. ivoid=1
  218. call MatHok(Kmat2,ndimx,ndims,ivoid)
  219. c calcular (Pt*Kmat0)*E [(ns.nx*nx.ns)*ns.ns]
  220. do ic=1,ndims
  221. do jf=1,ndims
  222. Kmat(ndimk*(ic-1)+jf)=0.D0
  223. do k=1,ndims
  224. Kmat(ndimk*(ic-1)+jf)=Kmat(ndimk*(ic-1)+jf)+
  225. . Kmat0(ndimx*(k-1)+jf)*Kmat2(ndimx*(ic-1)+k)
  226. enddo
  227. enddo
  228. enddo
  229. return
  230. end
  231.  
  232.  
  233.  

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