Télécharger lr123d.eso

Retour à la liste

Numérotation des lignes :

lr123d
  1. C LR123D SOURCE PV090527 23/02/13 21:15:10 11592
  2. SUBROUTINE LR12LDP3D(K,G,b,d,s1,s2,s3,Hdp,f1,R1,f2,R2,f3,
  3. # lr1,lr2,ldp,precision3d,log_err)
  4. c Multiplicateur plastique Rankine 1 et 2 et Drucker Prager en 3 couples
  5. c (A.Sellier 2021/04/22)
  6. implicit real*8 (a-h,o-z)
  7. implicit integer (i-n)
  8.  
  9. real*8 K,G,b,d,s1,s2,s3,Hdp,f1,R1,f2,R2,f3,lr1,lr2,ldp
  10. real*8 precision3d
  11. real*8 DD(3,3),denom
  12. logical log_err
  13.  
  14. log_err=.false.
  15.  
  16. t2 = -0.4D1 / 0.3D1 * G - K
  17. t4 = -K + 0.2D1 / 0.3D1 * G
  18. t5 = R1 ** 2
  19. t9 = R2 ** 2
  20. t13 = s3 ** 2
  21. t14 = 0.3D1 * t13
  22. t16 = (0.3D1 * t5 + 0.3D1 * R1 * (-R2 - s3) + 0.3D1 * t9 - 0.3D1
  23. # * R2 * s3 + t14)
  24. if(t16.gt.0.d0) then
  25. t16=sqrt(t16)
  26. else
  27. c print*,'Pb dans lr12ldp3d t16<0'
  28. log_err=.true.
  29. goto 10
  30. end if
  31. t17 = 0.1D1 / t16
  32. t18 = b * K
  33. t19 = t16 * t18
  34. t29 = 0.2D1 * R2
  35. t36 = s1 ** 2
  36. t40 = s2 ** 2
  37. t45 = (0.3D1 * t36 + 0.3D1 * (-s2 - s3) * s1 + 0.3D1 * t40 - 0.3D1
  38. # * s2 * s3 + t14)
  39. if(t45.gt.0.d0) then
  40. t45=sqrt(t45)
  41. else
  42. c print*,'Pb dans lr12ldp3d t45<0'
  43. log_err=.true.
  44. goto 10
  45. end if
  46. t46 = t45 * d * K
  47. t51 = 0.1D1 / t45
  48. DD(1,1) = t2
  49. DD(1,2) = t4
  50. DD(1,3) = -0.4D1 / 0.3D1 * (0.3D1 / 0.4D1 * t19 + 0.3D1 / 0.2D1 *
  51. #(R1 - R2 / 0.2D1 - s3 / 0.2D1) * G) * t17
  52. DD(2,1) = t4
  53. DD(2,2) = t2
  54. DD(2,3) = (-t19 + (R1 - t29 + s3) * G) * t17
  55. DD(3,1) = t51 * (-t46 + (-0.2D1 * s1 + s2 + s3) * G)
  56. DD(3,2) = t51 * (-t46 + G * (s1 - 0.2D1 * s2 + s3))
  57. DD(3,3) = 0.3D1 / 0.2D1 * t17 * t51 * (0.2D1 / 0.3D1 * t16 * t45 *
  58. # (-d * t18 - Hdp) + (-0.2D1 * t13 + (s2 + R1 + R2 + s1) * s3 + (
  59. #-0.2D1 * R1 + R2) * s1 + (R1 - t29) * s2) * G)
  60. d11=dd(1,1)
  61. d12=dd(1,2)
  62. d13=dd(1,3)
  63. d21=dd(2,1)
  64. d22=dd(2,2)
  65. d23=dd(2,3)
  66. d31=dd(3,1)
  67. d32=dd(3,2)
  68. d33=dd(3,3)
  69. denom=(d11 * d22 * d33 -
  70. # d11 * d23 * d32 - d12 * d21 * d33 + d12 * d23 * d31 + d13 * d21 *
  71. # d32 - d13 * d22 * d31)
  72.  
  73. if(abs(denom).lt.precision3d) then
  74. log_err=.true.
  75. goto 10
  76. else
  77. lr1 = -(d12 * d23 * f3 - d12 * d33 * f2 - d13 * d22 * f3 + d13
  78. # * d32 * f2 + d22 * d33 * f1 - d23 * d32 * f1) /denom
  79. lr2 = (d11 * d23 * f3 - d11 * d33 * f2 - d13 * d21 * f3 + d13 *
  80. # d31 * f2 + d21 * d33 * f1 - d23 * d31 * f1) / denom
  81. ldp = -(d11 * d22 * f3 - d11 * d32 * f2 - d12 * d21 * f3 + d12
  82. # * d31 * f2 + d21 * d32 * f1 - d22 * d31 * f1) / denom
  83. end if
  84. 10 if(log_err.or.lr1.ne.lr1.or.lr2.ne.lr2.or.isnanldp.ne.ldp) then
  85. c print*,'Pb de resolution dans lr12ldp3d'
  86. c print*,'t16',t16
  87. c print*,'t45',t45
  88. c print*,'denom=',denom
  89. c print*,'K,G,b,d,s1,s2,s3,Hdp,f1,R1,f2,R2,f3,lr1,lr2,ldp,prec'
  90. c print*,K,G,b,d,s1,s2,s3,Hdp,f1,R1,f2,R2,f3,
  91. c # lr1,lr2,ldp,precision3d
  92. log_err=.true.
  93. lr1=0.d0
  94. lr2=0.d0
  95. ldp=0.d0
  96. end if
  97. c print*,'denom',denom
  98. c print*,'f',f1,f2,f3
  99. c print*,lr1,lr2,ldp
  100.  
  101. c attention: mettre s1=R1, s2=R2 dans le gradient (Vdep)
  102.  
  103. return
  104. end
  105.  
  106.  
  107.  
  108.  
  109.  

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