Télécharger cren3d.eso

Retour à la liste

Numérotation des lignes :

cren3d
  1. C CREN3D SOURCE PV090527 23/02/13 21:15:05 11592
  2. SUBROUTINE CREN3D(sigef3,precision3d,Rt,Rc,ref,ept3,
  3. # sigdp3,Cdp,delta,M,pt,pc,ncr,actif,fcr,ppcc,pfcc,poro,eplccv)
  4. c test des criteres pour endo3d
  5.  
  6. c 1: rankine direction 1
  7. c 2: rankine direction 2
  8. c 3: rankine direction 3
  9. c 4: Drucker Prager
  10. c 5: CamClay
  11. c (A.Sellier 2021/04/26)
  12.  
  13. implicit real*8 (a-h,o-z)
  14. implicit integer (i-n)
  15.  
  16. real*8 sigef3(3),precision3d,Rt,Rc,sigdp3(3),M,pt,pc,ref,Cdp,delta
  17. integer ncr
  18. real*8 fcr(ncr)
  19. logical actif(ncr)
  20. real*8 taueq,press,sigd3(3),ept3(3),cg,Ptran,ppcc,pfcc
  21. real*8 poro,eplccv
  22.  
  23.  
  24. integer i
  25.  
  26. c ******** criteres de Rankine *************************************
  27.  
  28. do i=1,3
  29. if(sigef3(i).ge.0.) then
  30. fcr(i)=sigef3(i)-Rt
  31. if(fcr(i).gt.(precision3d*Rt)) then
  32. c le critere est actif
  33. actif(i)=.true.
  34. else
  35. actif(i)=.false.
  36. end if
  37. else if (ept3(i).gt.precision3d) then
  38. c refermeture de fissure possible
  39. fcr(i)=sigef3(i)+ref
  40. if(fcr(i).lt.(-precision3d*ref)) then
  41. c refermeture
  42. actif(i)=.true.
  43. else
  44. actif(i)=.false.
  45. fcr(i)=0.d0
  46. end if
  47. else
  48. actif(i)=.false.
  49. fcr(i)=0.d0
  50. end if
  51. end do
  52.  
  53. c ********* citere de Drucker Prager *******************************
  54.  
  55. if(.not.(actif(1).and.actif(2).and.actif(3))) then
  56. c pression
  57. press=0.d0
  58. do i=1,3
  59. sigdp3(i)=sigef3(i)
  60. press=press-sigdp3(i)
  61. end do
  62. press=press/3.d0
  63. c cisaillement
  64. taueq=0.d0
  65. do i=1,3
  66. sigd3(i)=sigdp3(i)+press
  67. taueq=taueq+(sigd3(i))**2
  68. end do
  69. taueq=sqrt(taueq/2.d0)
  70. fcr(4)=taueq-(Cdp+delta*press)
  71. if(fcr(4).ge.(precision3d*Cdp)) then
  72. actif(4)=.true.
  73. else
  74. actif(4)=.false.
  75. c ne pas mettre le critere a zero car il sera utilise
  76. c pour l endo pre pic
  77. end if
  78. else
  79. c les trois rankine sont actifs
  80. c on desactive les autres criteres pour cette iteration
  81. actif(4)=.false.
  82. c ne pas mettre le critere a zero car il sera utilise
  83. c pour l endo pre pic
  84. end if
  85.  
  86.  
  87.  
  88. c ****** critere de CamClay ****************************************
  89.  
  90. if(((.not.actif(1)).and.(.not.actif(2)).and.(.not.actif(3))).and.
  91. # ((poro+eplccv).gt.(3.d0*poro*precision3d))) then
  92. c calcul du critere de Camclay
  93. t4 = M ** 2
  94. t6 = taueq ** 2
  95. t9 = (pc - pt) ** 2
  96. cg = t9 * (t4 * (press - pc) * (press - pt) + t6) / 0.4D1
  97.  
  98. if(cg.ge.precision3d*M*rt) then
  99. c CamClay est actif
  100. actif(5)=.true.
  101. fcr(5)=cg
  102. c calcul de la pression de transition entre DP et CC
  103. t1 = M ** 2
  104. t2 = Rt * t1
  105. t6 = sqrt(0.3D1)
  106. t10 = delta ** 2
  107. t13 = t1 ** 2
  108. t14 = Rt ** 2
  109. t20 = pc ** 2
  110. t23 = t6 * t1
  111. t24 = Rc ** 2
  112. t36 = t24 * t1
  113. t39 = Rc * t1
  114. t43 = pc * t10
  115. t49 = 0.36D2 * Rc * Rt * delta * t23 - 0.36D2 * Rc * delta * pc *
  116. #t23 + 0.18D2 * pc * Rt * t13 - 0.36D2 * t10 * Rt * t39 + 0.24D2 *
  117. #delta * t24 * t23 - 0.12D2 * t10 * t36 + 0.9D1 * t14 * t13 + 0.9D1
  118. # * t20 * t13 + 0.108D3 * t43 * t2 + 0.36D2 * t43 * t39 - 0.36D2 *
  119. #t36
  120. t50 = sqrt(t49)
  121. Ptran = -0.1D1 / (t1 + 0.3D1 * t10) * (0.6D1 * delta * Rc * t6 - 0
  122. #.6D1 * t10 * Rc - 0.3D1 * pc * t1 + 0.3D1 * t2 - t50) / 0.6D1
  123.  
  124.  
  125. * if(.not.(isnan(ptran))) then
  126. if(.not.(ptran.ne.ptran)) then
  127. c il existe une pression de transition
  128. if(press.lt.ptran) then
  129. c desactivation de CamClay
  130. actif(5)=.false.
  131. fcr(5)=0.d0
  132. end if
  133. end if
  134. c on vient tester le depassement des pression limites
  135. if((pc.ge.(PFCC*(1.d0+precision3d))) .or.
  136. # (pc.le.(PPCC*(1.d0-precision3d)))) then
  137. c on doit rester dans la zone de consolidation possible
  138. c donc on empeche l ecoulement
  139. actif(5)=.false.
  140. fcr(5)=0.d0
  141. else
  142. c on autorise pas la deconsolidation
  143. if(press.lt.((pc+pt)*(1.d0+precision3d)*0.5d0)) then
  144. actif(5)=.false.
  145. fcr(5)=0.d0
  146. end if
  147. end if
  148. else
  149. c cc pas actif
  150. actif(5)=.false.
  151. fcr(5)=0.d0
  152. end if
  153. else
  154. c au moins un des rankine est actif on enleve CamClay
  155. actif(5)=.false.
  156. fcr(5)=0.d0
  157. end if
  158. c***********************************************************************
  159.  
  160. return
  161. end
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  

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