Télécharger prvik2.eso

Retour à la liste

Numérotation des lignes :

prvik2
  1. C PRVIK2 SOURCE BP208322 17/03/01 21:18:02 9325
  2. SUBROUTINE PRVIK2(SIG0,NSTRS,DEPST,VAR0,XMAT,NCOMAT,XCAR,ICARA,
  3. 1 NVARI,SIGF,VARF,DEFP,MFR1,DDAUX,CMATE,VALMAT,VALCAR,N2EL,
  4. 2 N2PTEL,NBPGAU,IFOU,IB,IGAU,EPAIST,MELE,NPINT,NBGMAT,
  5. 3 NELMAT,SECT,LHOOK,TXR,XLOC,XGLOB,D1HOOK,ROTHOO,DDHOMU,
  6. 4 CRIGI,DSIGT,KERRE,DT)
  7. comm ******************************************************************
  8. comm * execute le calcul annonce au niveau du p_gauss *
  9. comm * loi viscoplastique : le comportement anelastique est decrit *
  10. comm * par un mecanisme "plastique" (ecrouissage cinematique) *
  11. comm * et un mecanisme "visqueux" (Maxwell) *
  12. comm * en parallele, ce au-dela du seuil de plasticite *
  13. comm * *
  14. comm * il faut donc gerer 2 jeux de variables cachees tensorielles *
  15. comm * *
  16. comm * cette loi est derivee des travaux deja realises a propos du *
  17. comm * comportement mecanique du polyethylene *
  18. comm * (these Kichenin, Ecole Polytechnique, 1992) *
  19. comm * algorithme Nguyen Quoc Son, mise au point J Frelat *
  20. comm * $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*
  21. comm * RECOMMANDATION : *
  22. comm * la chasse au bugs est bienvenue MAIS PAS *
  23. comm * les ameliorations ou nouveaux developpements dans *
  24. comm * l inspiration de VISK2 (rapport SEMT/LAMS 98 Kichenin, Charras)*
  25. comm * Il est preferable d une part de creer une nouvelle loi, d autre*
  26. comm * part de RECOPIER dans un AUTRE fichier les lignes voulues *
  27. comm * MERCI. JK *
  28. comm ******************************************************************
  29. IMPLICIT INTEGER(I-N)
  30. IMPLICIT REAL*8(A-H,O-Z)
  31.  
  32. -INC PPARAM
  33. -INC CCOPTIO
  34. DIMENSION SIG0(*),DEPST(*),VAR0(*),XMAT(*),XCAR(*),SIGF(*),
  35. & VARF(*),DEFP(*)
  36. DIMENSION RSIG0(6),RDSIGT(6),RDEFP(6),RSIGF(6),DSIGT(*)
  37. DIMENSION VALMAT(*),VALCAR(*)
  38. DIMENSION TXR(IDIM,*),CRIGI(12)
  39. DIMENSION DDAUX(LHOOK,*),DDHOMU(LHOOK,*)
  40. DIMENSION XLOC(3,3),XGLOB(3,3)
  41. DIMENSION D1HOOK(LHOOK,*),ROTHOO(LHOOK,*)
  42. CHARACTER*8 CMATE
  43. real*8 lambdav
  44. logical plast
  45. dimension sigpca(6),sigppa(6),sig2(6)
  46. c..
  47. c.. VOIR PB IFOUR IFOURB IFOU
  48. IF (IFOUR.NE.-2.AND.IFOUR.NE.-1.AND.IFOUR.NE.-3.AND.IFOUR.NE.0)
  49. & THEN
  50. iuv1 = 7
  51. ELSE
  52. iuv1 = 5
  53. ENDIF
  54. c..
  55. if((1.+xmat(2)).eq.0.or.(1-2.*xmat(2)).eq.0) then
  56. interr(5)=1
  57. kerre = 82
  58. return
  59. endif
  60. * suppose fondalement isotropie du comportement
  61. x2mu= xmat(1)/(1.+xmat(2))
  62. x2muv=xmat(8)/(1.+xmat(2))
  63. seuil=xmat(5)/1.73205080757
  64. ecrou=xmat(6)
  65. if (x2mu.le.0.or.seuil.lt.0.or.ecrou.lt.0) then
  66. interr(5) = 4
  67. kerre = 82
  68. return
  69. endif
  70. c.. initialise ecrouissage mecanisme plastique
  71. c.. l indice 1 est la deformation plastique equivalente
  72. varf(1) = var0(1)
  73. varf(2) = var0(2)
  74. varf(3) = var0(3)
  75. varf(4) = var0(4)
  76. varf(5) = var0(5)
  77. if (ifour.gt.0) then
  78. varf(6) = var0(6)
  79. varf(7) = var0(7)
  80. endif
  81. c mecanisme visqueux
  82. svxx=var0(iuv1+1)
  83. svyy=var0(iuv1+2)
  84. svzz=var0(iuv1+3)
  85. svxy=var0(iuv1+4)
  86. if (ifour.gt.0) then
  87. svxz=var0(iuv1+5)
  88. svyz=var0(iuv1+6)
  89. endif
  90. c..
  91. c
  92. C CALCUL DE L'INCREMENT DE CONTRAINTES "elastique"
  93. C
  94. CALL CALSIG(DEPST,DDAUX,NSTRS,CMATE,VALMAT,VALCAR,
  95. 1 N2EL,N2PTEL,MFR1,IFOU,IB,IGAU,EPAIST,NBPGAU,
  96. 2 MELE,NPINT,NBGMAT,NELMAT,SECT,LHOOK,TXR,XLOC,
  97. 3 XGLOB,D1HOOK,ROTHOO,DDHOMU,CRIGI,DSIGT,IRTD)
  98. *
  99. IF(IRTD.NE.1) THEN
  100. KERRE=69
  101. GOTO 1000
  102. ENDIF
  103.  
  104.  
  105. plast = .false.
  106. c.. composante plastique + increment elastique : cinematique admissible
  107. sigpca(1)= sig0(1) - svxx + DSIGT(1)
  108. sigpca(2)= sig0(2) - svyy + DSIGT(2)
  109. sigpca(3)= sig0(3) - svzz + DSIGT(3)
  110. sigpca(4)= sig0(4) - svxy + DSIGT(4)
  111. if (ifour.gt.0)then
  112. sigpca(5)= sig0(5) - svxz + DSIGT(5)
  113. sigpca(6)= sig0(6) - svyz + DSIGT(6)
  114. endif
  115. trsigp=0.33333*(sigpca(1)+sigpca(2)+sigpca(3))
  116. c..
  117. c.. evalue cette composante (deviateur) dans le convexe definissant l'ecrouissage
  118. sig2(1)= sigpca(1)-trsigp-varf(2)
  119. sig2(2)= sigpca(2)-trsigp-varf(3)
  120. sig2(3)= sigpca(3)-trsigp-varf(4)
  121. sig2(4)= sigpca(4)-varf(5)
  122. if (ifour.gt.0)then
  123. sig2(5)= sigpca(5)-varf(6)
  124. sig2(6)= sigpca(6)-varf(7)
  125. endif
  126. c.. calcule la norme de Von Mises
  127. fsig2 = sig2(1)*sig2(1) + sig2(2)*sig2(2) + sig2(3)*sig2(3)
  128. fsig2 = fsig2 + 2.d0*sig2(4)*sig2(4)
  129. if(ifour.gt.0)then
  130. fsig2 = fsig2 + 2.d0*sig2(5)*sig2(5) + 2.d0*sig2(6)*sig2(6)
  131. endif
  132. fsig2 = SQRT(0.5d0*fsig2)
  133.  
  134.  
  135. c.. tests
  136. c a l interieur du convexe ou cas pathologique
  137. if ((fsig2-seuil).le.0.or.fsig2.eq.0) then
  138. plast=.false.
  139. coef = 0.
  140. defp(1) = 0.
  141. defp(2) = 0.
  142. defp(3) = 0.
  143. defp(4) = 0.
  144. if (ifour.gt.0) then
  145. defp(5) = 0.
  146. defp(6) = 0.
  147. endif
  148. goto 100
  149. endif
  150. c.. sinon le seuil est franchi
  151. plast = .true.
  152. c.. et il est necessaire de faire un calcul d ecoulement
  153. coef=(fsig2-seuil)/(x2mu+ecrou)/fsig2
  154. c.. increment de la deformation plastique
  155. defp(1) = coef * sig2(1)
  156. defp(2) = coef * sig2(2)
  157. defp(3) = coef * sig2(3)
  158. defp(4) = coef * sig2(4) * 2.
  159. if (ifour.gt.0) then
  160. defp(5) = coef * sig2(5) * 2.
  161. defp(6) = coef * sig2(6) * 2.
  162. endif
  163. 100 continue
  164. c.. increment de la variable d ecrouissage
  165. varf(1) = varf(1) + coef*fsig2*1.414213562
  166. varf(2) = varf(2) + ecrou*defp(1)
  167. varf(3) = varf(3) + ecrou*defp(2)
  168. varf(4) = varf(4) + ecrou*defp(3)
  169. varf(5) = varf(5) + ecrou*defp(4) / 2.
  170. if (ifour.gt.0) then
  171. varf(6) = varf(6) + ecrou*defp(5) / 2.
  172. varf(7) = varf(7) + ecrou*defp(6) / 2.
  173. endif
  174. c.. contrainte plastiquement admissible
  175. sigppa(1) = sigpca(1) - x2mu*defp(1)
  176. sigppa(2) = sigpca(2) - x2mu*defp(2)
  177. sigppa(3) = sigpca(3) - x2mu*defp(3)
  178. sigppa(4) = sigpca(4) - x2mu*defp(4) / 2.
  179. if(ifour.gt.0) then
  180. sigppa(5) = sigpca(5) - x2mu*defp(5) / 2.
  181. sigppa(6) = sigpca(6) - x2mu*defp(6) / 2.
  182. endif
  183.  
  184. fsigpa = sigppa(1)*sigppa(1) + sigppa(2)*sigppa(2)
  185. & + sigppa(3)*sigppa(3) + 2.d0*sigppa(4)*sigppa(4)
  186. if (ifour.gt.0) then
  187. fsigpa = fsigpa + 2.d0*sigppa(5)*sigppa(5)
  188. & + 2.d0*sigppa(6)*sigppa(6)
  189. endif
  190. fsigpa = SQRT(0.5d0*fsigpa)
  191. c..
  192.  
  193. 300 CONTINUE
  194.  
  195. c..
  196. c.. traite le mecanisme visqueux
  197. fsv1 = 0.
  198. comm *................................................................*
  199. comm * viscosite non-lineaire ... si devis est le parametre cache *
  200. comm * increment de deformation-visqueuse, et sigvis le parametre *
  201. comm * contrainte-visqueuse initial, la loi de comportement s ecrit *
  202. comm * eta*dev = (sigvis + loiv*(du-dev))*|sigvis+loiv*(du-dev)|**m *
  203. comm * (m = n-1) le mecanisme visqueux etant somme toute secondaire *
  204. comm * l approche bricolee consiste a evaluer *
  205. comm * fsv1 = |sigvis+loiv*du|**m, dev=0 *
  206. comm * puis ecrire sigv-final = (sigvis + loiv*(du-dev)) * coefv *
  207. comm * le coefv etant evalue a partir de fsv1 et valant *
  208. comm * coefv = 1./(1+x2muv/eta) quand m=0 *
  209. comm *................................................................*
  210. c.. on suppose le comportement visqueux homogene et isotrope
  211. lambdav=xmat(8)*xmat(2)/(1+xmat(2))/(1-2.*xmat(2))
  212. x2muv=xmat(8)/(1.+xmat(2))
  213. if(x2muv.lt.0) then
  214. interr(5)=5
  215. kerre = 82
  216. return
  217. endif
  218. m = nint(xmat(9)) - 1
  219. c.. coefficient applique a la branche visqueuse : mecanisme actif
  220. c.. au-dela du seuil, inactif sinon
  221. if (x2mu.gt.0) then
  222. xambda2 = x2muv/x2mu
  223. endif
  224. if (xambda2.le.0) xambda2 = 0.
  225. c.. viscosite
  226. if (xmat(7).le.0.) then
  227. c.. mecanisme visqueux inactif,
  228. varf(iuv1+1)=0.
  229. varf(iuv1+2)=0.
  230. varf(iuv1+3)=0.
  231. varf(iuv1+4)=0.
  232. if (ifour.gt.0)then
  233. varf(iuv1+5)=0.
  234. varf(iuv1+6)=0.
  235. endif
  236. goto 400
  237. endif
  238. c.. le mecanisme n'est efficace qu a partir d un pas de temps assez grand
  239. c.. et si l on est dans le domaine plastique
  240. if (dt.gt.1.e-15) then
  241. eta=xmat(7)/dt
  242. x2muv2=x2muv+eta
  243. coedev=1./x2muv2
  244. coesph=lambdav/x2muv2/(3.*lambdav+x2muv2)
  245. c..
  246. c.. incremente "elastiquement" la contrainte-visqueuse
  247. svxx=svxx+x2muv * defp(1)
  248. svyy=svyy+x2muv * defp(2)
  249. svzz=svzz+x2muv * defp(3)
  250. svxy=svxy+x2muv * defp(4)
  251. if(ifour.gt.0)then
  252. svxz=svxz+x2muv * defp(5)
  253. svyz=svyz+x2muv * defp(6)
  254. endif
  255. c..
  256. c.. deduit l'increment de deformation-visqueuse
  257. trsv=svxx+svyy+svzz
  258. svxx=eta*(coedev*svxx-coesph*trsv)
  259. svyy=eta*(coedev*svyy-coesph*trsv)
  260. svzz=eta*(coedev*svzz-coesph*trsv)
  261. evxy=eta*coedev*svxy
  262. if(ifour.gt.0)then
  263. svxz=eta*coedev*svxz
  264. svyz=eta*coedev*svyz
  265. endif
  266. c..
  267. fsv1 = svxx*svxx + svyy*svyy + svzz*svzz + 2.*svxy*svxy
  268. if(ifour.gt.0) then
  269. fsv1= fsv1 + 2.*svxz*svxz+2.*svyz*svyz
  270. fsv1 = fsv1/eta
  271. endif
  272. c
  273. c.. coef multiplicateur
  274. if (fsv1.gt.0.and.m.gt.0) fsv1 = (SQRT(0.5*fsv1))**m
  275. if (fsv1.gt.0.and.m.lt.0) fsv1 = (1./SQRT(0.5*fsv1))**(-1.*m)
  276. if (fsv1.gt.0.and.m.eq.0) fsv1 = 1.
  277. * if(igau.eq.4) write(6,*) ' fsv1 ', fsv1
  278. if (fsv1.eq.0) then
  279. c.. composante visqueuse nulle
  280. varf(iuv1+1) = 0.
  281. varf(iuv1+2) = 0.
  282. varf(iuv1+3) = 0.
  283. varf(iuv1+4) = 0.
  284. if (ifour.gt.0) then
  285. varf(iuv1+5) = 0.
  286. varf(iuv1+6) = 0.
  287. endif
  288. goto 400
  289. endif
  290. c.. coeff reducteur
  291. coefv = fsv1/(1. + (m+1)*x2muv*fsv1/eta)
  292. varf(iuv1+1)=svxx*coefv
  293. varf(iuv1+2)=svyy*coefv
  294. varf(iuv1+3)=svzz*coefv
  295. varf(iuv1+4)=svxy*coefv
  296. if (ifour.gt.0)then
  297. varf(iuv1+5)=svxz*coefv
  298. varf(iuv1+6)=svyz*coefv
  299. endif
  300.  
  301. c.. quand le pas de temps est petit la variable cachee est inchangee
  302. else
  303. varf(iuv1+1)=var0(iuv1+1)
  304. varf(iuv1+2)=var0(iuv1+2)
  305. varf(iuv1+3)=var0(iuv1+3)
  306. varf(iuv1+4)=var0(iuv1+4)
  307. if (ifour.gt.0)then
  308. varf(iuv1+5)=var0(iuv1+5)
  309. varf(iuv1+6)=var0(iuv1+6)
  310. endif
  311. endif
  312. comm *................................................................*
  313. comm * calcul de la contrainte finale *
  314. comm *................................................................*
  315. 400 continue
  316. sigf(1) = sigppa(1) + varf(iuv1+1)
  317. sigf(2) = sigppa(2) + varf(iuv1+2)
  318. sigf(3) = sigppa(3) + varf(iuv1+3)
  319. sigf(4) = sigppa(4) + varf(iuv1+4)
  320. if(ifour.gt.0)then
  321. sigf(5) = sigppa(5) + varf(iuv1+5)
  322. sigf(6) = sigppa(6) + varf(iuv1+6)
  323. endif
  324. return
  325.  
  326. 1000 continue
  327. end
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  

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