Télécharger elnlin.eso

Retour à la liste

Numérotation des lignes :

elnlin
  1. C ELNLIN SOURCE CB215821 26/06/25 21:15:08 12581
  2. subroutine ELNLIN (da, uel, force, XMKel,
  3. & delta_prec, Ftr, delta,deltamax)
  4.  
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8(A-H,O-Z)
  7. *
  8. DIMENSION da(20), XMKel(5,5), uel(5), force(5), Ftr(5)
  9. DIMENSION Res(3), AA(3,3),AA1(3,3),DVM(3)
  10. *
  11. a=da(8)
  12. b=da(9)
  13. c=da(10)
  14. d=da(11)
  15. e=da(12)
  16. f=da(13)
  17. a9=da(15)
  18. *
  19. A1=2.5D0
  20. epsilon2=1.D-12
  21. C Calcul de la limite élastique en décollement.
  22. uelu =sqrt(uel(3)**2+uel(5)**2)
  23. forceu =sqrt(force(3)**2+force(5)**2)
  24. XMKelu =1.D0/sqrt(2.D0)*sqrt(XMKel(3,3)**2+XMKel(5,5)**2)
  25. *
  26. if (a9.eq.1) then
  27. q_1=4.D0
  28. q_2=1.D0
  29. else
  30. if (a9.eq.2) then
  31. q_1=4.D0
  32. q_2=1.D0
  33. else
  34. q_1=6.D0
  35. q_2=2.D0
  36. endif
  37. endif
  38. *
  39. fe=forceu**2.D0-(force(1)/q_1*EXP(-A1*force(1)))**2
  40. *
  41. if (fe.le.0.D0) then
  42. call MATVE1 (XMKel, uel, 5,5, Ftr,2)
  43. delta=delta_prec
  44. else
  45. *
  46. deltamax=1.D0
  47. *
  48. ff1=(force(1)*(EXP(-A1*force(1))
  49. & +q_2*(delta_prec*deltamax)))/q_1-forceu
  50. gg1=-(((delta_prec/1.D0)/(1-(delta_prec/1.D0))
  51. & +LOG(1.D0-(delta_prec/1.D0)))
  52. & *force(1)*EXP(-A1*force(1)))
  53. & /(2.D0*q_1*XMKelu)+force(1)/XMKel(1,1)-uel(1)
  54. Xhh1=((delta_prec/1.D0)**2.D0*force(1)*EXP(-A1*force(1)))/q_1
  55. & +(1.D0-(delta_prec/1.D0))*(forceu-XMKelu*uelu)
  56. Res(1)=-ff1
  57. Res(2)=-gg1
  58. Res(3)=-Xhh1
  59. XNorm_Res=SQRT(Res(1)**2.D0+Res(2)**2.D0+Res(3)**2.D0)
  60. do while (XNorm_Res.gt.epsilon2)
  61. dff1dV=(EXP(-A1*force(1))+q_2*(delta_prec*deltamax))/q_1
  62. & -(A1*force(1)*EXP(-A1*force(1)))/q_1
  63. dff1dM=-1.D0
  64. dff1ddelta=1.D0*deltamax*q_2*force(1)/q_1
  65. dgg1dV=(((delta_prec/1.D0)/(1.D0-(delta_prec/1.D0))
  66. & +LOG(1.D0-(delta_prec/1.D0)))*A1*force(1)*EXP(-A1*force(1)))
  67. & /(2.D0*q_1*XMKelu)
  68. & -(((delta_prec/1.D0)/(1.D0-(delta_prec/1.D0))
  69. & +LOG(1.D0-(delta_prec/1.D0)))
  70. & *EXP(-A1*force(1)))/(2.D0*q_1*XMKelu)+1.D0/XMKel(1,1)
  71. dgg1dM=0.D0
  72. dgg1ddelta=-1.D0/1.D0*(((delta_prec/1.D0)*force(1)
  73. & *EXP(-A1*force(1)))/
  74. & (2.D0*q_1*(1.D0-(delta_prec/1.D0))**2.D0*XMKelu))
  75. dhh1dV=((delta_prec/1.D0)**2.D0*EXP(-A1*force(1)))/q_1
  76. & -((delta_prec/1.D0)**2.D0*A1*force(1)*EXP(-A1*force(1)))/q_1
  77. dhh1dM=1.D0-(delta_prec/1.D0)
  78. dhh1ddelta=1.D0/1.D0*(2.D0*((delta_prec/1)*force(1)
  79. & *EXP(-A1*force(1)))/q_1-forceu+XMKelu*uelu)
  80. AA(1,1)=dff1dV
  81. AA(1,2)=dff1dM
  82. AA(1,3)=dff1ddelta
  83. AA(2,1)=dgg1dV
  84. AA(2,2)=dgg1dM
  85. AA(2,3)=dgg1ddelta
  86. AA(3,1)=dhh1dV
  87. AA(3,2)=dhh1dM
  88. AA(3,3)=dhh1ddelta
  89. call HINV33(AA,AA1)
  90. call MATVE1(AA1,Res,3,3,DVM,2)
  91. force(1)=force(1)+DVM(1)
  92. forceu=forceu+DVM(2)
  93. delta_prec=delta_prec+DVM(3)
  94. *
  95. ff1=(force(1)*(EXP(-A1*force(1))
  96. & +q_2*(delta_prec*deltamax)))/q_1-forceu
  97. gg1=-(((delta_prec/1.D0)/(1.D0-(delta_prec/1.D0))
  98. & +LOG(1.D0-(delta_prec/1.D0)))
  99. & *force(1)*EXP(-A1*force(1)))
  100. & /(2.D0*q_1*XMKelu)+force(1)/XMKel(1,1)-uel(1)
  101. Xhh1=((delta_prec/1.D0)**2.D0*force(1)*EXP(-A1*force(1)))/q_1
  102. & +(1.D0-(delta_prec/1.D0))*(forceu-XMKelu*uelu)
  103. Res(1)=-ff1
  104. Res(2)=-gg1
  105. Res(3)=-Xhh1
  106. XNorm_Res=SQRT(Res(1)**2+Res(2)**2+Res(3)**2)
  107. enddo
  108. force(2)=XMKel(2,2)*uel(2)
  109. force(4)=XMKel(2,2)*uel(4)
  110. force(3)=uel(3)/uelu*forceu
  111. force(5)=uel(5)/uelu*forceu
  112. uelu1=sqrt(uel(3)**2+uel(5)**2)
  113. DO I=1,5
  114. Ftr(I)=force(I)
  115. ENDDO
  116. delta=delta_prec
  117. endif
  118. return
  119. end
  120.  
  121.  
  122.  

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