Télécharger jafl3d.eso

Retour à la liste

Numérotation des lignes :

jafl3d
  1. C JAFL3D SOURCE PV090527 23/01/27 21:15:44 11574
  2. subroutine jacobflu3d(tauk1,psi1,taum1,taumdtt1,CM1,dt1,Jf,err1)
  3.  
  4. c calul du Jacobien de [Depse,Depsk,Depsm*]/[v*,epse0,epsk0]
  5. c avec v*=(Depsimpose-Depsepl)/Dt si dt .ne. 0.
  6. c et v*=(Depsimpose-Depsepl) si dt.eq.0.
  7.  
  8. IMPLICIT INTEGER(I-N)
  9. IMPLICIT REAL*8(A-H,O-Z)
  10. c variables externes
  11. real*8 tauk1,psi1,taum1,taumdtt1,CM1,dt1
  12. real*8 tauk,psi,taum,taumdtt,dt,CM
  13. real*8 Jf(3,3)
  14. c variables locales
  15. real*8 tauf
  16. c erreur
  17. integer err1
  18.  
  19. c limite de calcul
  20. real*8 grand,petit
  21. parameter(grand=1.0d7,petit=1.0d-7)
  22.  
  23. c affichage
  24. logical affiche,approx
  25. affiche=.false.
  26.  
  27. c copie sur variables locales
  28. dt=dt1
  29. tauk=tauk1
  30. taum=taum1
  31. taumdtt=taumdtt1
  32. c prise en compte de la reduction de la deformation de maxwell pour
  33. c les chargements inferieurs au seuil
  34. cm=min(cm1,1.d0)
  35. psi=psi1
  36.  
  37.  
  38. c temps global de maxwell
  39.  
  40. if((taumdtt.gt.0.).and.(taum.gt.0.)) then
  41. tauf=(taum**(-1)+taumdtt**(-1))**(-1)
  42. else
  43. tauf=taum
  44. end if
  45.  
  46. c limitation de tauf et tauk sur dt pour permettre le calcul numerique en double rpecision
  47. if(dt.gt.0.d0) then
  48. approx=.false.
  49. if(tauf.gt.grand*dt) then
  50. tauf=grand*dt
  51. if(affiche) then
  52. print*,'reduction de TAUF dans jacobflu3d'
  53. end if
  54. approx=.true.
  55. end if
  56. if(tauk.gt.grand*dt) then
  57. tauk=grand*dt
  58. if(affiche) then
  59. print*,'reduction de TAUK dans jacobflu3d'
  60. end if
  61. approx=.true.
  62. end if
  63. if(psi.gt.grand) then
  64. psi=grand
  65. if(affiche) then
  66. print*,'reduction de PSI dans jacobflu3d'
  67. end if
  68. approx=.true.
  69. endif
  70. if(CM.gt.grand*psi) then
  71. CM=grand*psi
  72. if(affiche) then
  73. print*,'reduction de CM dans jacobflu3d'
  74. end if
  75. approx=.true.
  76. end if
  77. if(approx.and.affiche) then
  78. print*,'Donnees approchee dans jafl3d'
  79. print*,'tauk',tauk
  80. print*,'psi',psi
  81. print*,'taum*cc',taum
  82. print*,'taumdtt*cc',taumdtt
  83. print*,'tauf',tauf
  84. print*,'cm',CM
  85. print*,'dt',dt
  86. read*
  87. end if
  88.  
  89. c if(cm.ne.0.) then
  90. c termes de la matrice jacobienne
  91. c print*,'Donnees dans jafl3d'
  92. c print*,'tauk',tauk,'tauf',tauf
  93. c print*,'psi',psi
  94. c print*,'taum*cc',taum
  95. c print*,'taumadtt',taumdtt
  96. c print*,'cm',CM
  97. c print*,'dt',dt
  98. goto 20
  99. if(abs(tauk-tauf).lt.(petit*tauf)) then
  100. tauk=(1.d0-petit)*max(tauf,tauk)
  101. end if
  102.  
  103. 20 t1 = CM + psi
  104. t2 = psi - CM
  105. t3 = psi ** 2
  106. t4 = tauk * psi
  107. t5 = t2 * tauf
  108. t6 = t1 ** 2 * tauf ** 2 + t3 * tauk ** 2 - 0.2D1 * t5 * t4
  109. t7 = t6 ** (-0.1D1 / 0.2D1)
  110. t6 = t6 * t7
  111. t8 = t1 * tauf
  112. t9 = t4 + t8 - t6
  113. t10 = 0.1D1 / tauk
  114. t11 = 0.1D1 / psi
  115. t12 = 0.1D1 / tauf
  116. t13 = exp(-t9 * dt * t10 * t11 * t12 / 0.2D1)
  117. t14 = t4 + t8 + t6
  118. t10 = exp(-t14 * dt * t10 * t11 * t12 / 0.2D1)
  119. t12 = 0.2D1 * t6
  120. t15 = -t12 + (-t4 + t8 + t6) * t13 - (-t4 + t8 - t6) * t10
  121. t16 = t5 - t4 + t6
  122. t5 = t5 - t4 - t6
  123. t17 = t13 - t10
  124. t18 = -t10 * t9 + t13 * t14 - t12
  125. t2 = t4 * t2
  126. t14 = 0.1D1 / t14
  127. t9 = 0.1D1 / t9
  128. t3 = 0.2D1 * t3
  129. Jf(1,1) = -t15 * tauf * t7 / 0.2D1
  130. Jf(1,2) = -(t10 * t5 / 0.2D1 - t13 * t16 / 0.2D1 + t12 / 0.2D1) *
  131. #t7
  132. Jf(1,3) = psi * tauf * t17 * t7
  133. Jf(2,1) = -t18 * CM * tauf * t7 * t11 / 0.2D1
  134. Jf(2,2) = t17 * CM * tauf * t7
  135. Jf(2,3) = (t10 * t16 / 0.2D1 - t13 * t5 / 0.2D1 - t12 / 0.2D1) * t
  136. #7
  137. Jf(3,1) = 0.2D1 * t4 * tauf * ((0.2D1 * psi * dt - 0.2D1 * t8) * t
  138. #6 + tauf * (t10 * (t1 * (-t8 + t6) + t2) + t13 * (t1 * (t8 + t6) -
  139. # t2))) * t7 * t9 * t14
  140. Jf(3,2) = -t3 * t15 * tauk * tauf * t7 * t9 * t14
  141. Jf(3,3) = -t3 * t18 * tauk * tauf * t7 * t9 * t14
  142.  
  143.  
  144.  
  145. c else
  146. cc cas cm=0
  147. c t1 = exp(-0.1D1 / tauf * dt)
  148. c t2 = 0.1D1 - t1
  149. c t3 = exp(-dt / tauk)
  150. c t4 = tauk - tauf
  151. c t4 = 0.1D1 / t4
  152. c Jf(1,1) = t2 * tauf
  153. c Jf(1,2) = -t2
  154. c Jf(1,3) = -tauf * (t1 - t3) * t4
  155. c JF(2,1) = 0.d0
  156. c JF(2,2) = 0.d0
  157. c Jf(2,3) = -0.1D1 + t3
  158. c
  159. c end if
  160.  
  161.  
  162. if(approx.and.affiche) then
  163. print*,'Resultats'
  164. print*,'jf(1,1)',jf(1,1)
  165. c read*
  166. end if
  167.  
  168. else
  169. c dt=0 : pas de fluage
  170. print*,'dt=0 dans jacobFlu3d appele par couplage3d'
  171. print*,'dans fldo3d'
  172. err1=1
  173. return
  174. end if
  175. c if((dt.lt.0.11).and.(dt.gt.0.099)) then
  176. c print*,'tauk',tauk
  177. c print*,'psi',psi
  178. c print*,'taum*cc',taum
  179. c print*,'taumdtt*cc',taumdtt
  180. c print*,'tauf',tauf
  181. c print*,'cm',CM
  182. c print*,'dt',dt
  183. c do i=1,2
  184. c do j=1,3
  185. c print*,'ds jacobflu3d jf(',i,j,')=',jf(i,j)
  186. c end do
  187. c end do
  188. c err1=1
  189. c return
  190. c end if
  191.  
  192.  
  193. c print*,'jacobflu3d'
  194. c print*,tauk,psi,taum,taumdtt,dt,Jf
  195. c read*
  196.  
  197. return
  198. end
  199.  
  200.  
  201.  
  202.  

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