Télécharger dpin3d.eso

Retour à la liste

Numérotation des lignes :

dpin3d
  1. C DPIN3D SOURCE PV090527 23/01/27 21:15:26 11574
  2. subroutine dpin3d(NBRINC,NCMAX,NDIMG,IPHASE,
  3. # BETA,DELTA,COHE,RTP,SEFF3,FC1,DPFCDS3,DGFCDS3,
  4. # ACTIFC1,FTH3,PRECISION3D,AFFICHE,ERR1)
  5.  
  6. c critere de cisaillement icr avec les contraintes demarrant a
  7. c idebut
  8.  
  9. implicit real*8 (a-h,o-z)
  10. implicit integer (i-n)
  11.  
  12. integer NBRINC,NCMAX,IPHASE,icr,NBRACC,ndimg,err1
  13. real*8 SEFF3(3)
  14. real*8 FTH3(3)
  15. real*8 BETA(0:NBRINC),DELTA(0:NBRINC),COHE(0:NBRINC)
  16. real*8 RTP(0:NBRINC)
  17. real*8 FC1
  18. real*8 precision3d
  19. real*8 DPFCDS3(3),DGFCDS3(3)
  20. logical affiche,ACTIFC1
  21.  
  22.  
  23. real*8 press,dilatance,cohesion,frottement,taueq,press_lim
  24. integer idir
  25. real*8 x3(3),y3(3),resc_lim,som,cohe_min
  26. logical affiche_local
  27.  
  28.  
  29. affiche_local=affiche
  30. c affiche_local=.true.
  31. if(affiche_local) then
  32. print*,'On est dans dpin3d'
  33. end if
  34.  
  35.  
  36. c calul de la pression effective
  37. press=0.d0
  38. do idir=1,3
  39. c x3(idir)=min(SEFFG(idir),RTP(iphase))
  40. x3(idir)=SEFF3(idir)
  41. press=press-x3(idir)
  42. end do
  43. c on prend la convention MMC des pressions
  44. press=press/3.d0
  45. c pression limite du critere jamais atteinte car coupure par
  46. c rankine
  47. dilatance=BETA(iphase)
  48. frottement=DELTA(iphase)
  49. cohesion=COHE(iphase)
  50.  
  51. cohe_min=max(
  52. # RTP(iphase)*(1/sqrt(3.d0)+frottement/3.d0),
  53. # RTP(iphase)*frottement)
  54.  
  55. c verif coherence des donnes
  56. if(cohesion.le.cohe_min) then
  57. print*,'Cohesion incoherente / traction dans Dpinc3d'
  58. print*,'Il faut une cohession minimale de:',cohe_min
  59. print*,'pour la phase', iphase
  60. err1=1
  61. return
  62. end if
  63.  
  64. press_lim=-RTP(iphase)/3.d0
  65. c DP activable que si press> press_lim
  66. if(press.gt.press_lim) then
  67. taueq=0.d0
  68. do idir=1,3
  69. y3(idir)=x3(idir)+press
  70. taueq=taueq+y3(idir)**2
  71. end do
  72. taueq=sqrt(taueq/2.d0)
  73. c cisaillement limite
  74. taulim=frottement*press+cohesion
  75. c residu en cisaillement pour cette phase
  76. FC1=taueq-taulim
  77. c valeur limite du residu en cisaillement pour cette phase
  78. resc_lim=cohesion*precision3d
  79. c initialisation direction ecoulement non associe
  80. if(FC1.gt.resc_lim) then
  81. if(affiche_local) then
  82. write(*,'(A39,1X,A23,E10.3)')
  83. # 'Plasticite en cisaillement dans dpin3d',
  84. # 'Residu de cisaillement:', FC1
  85. end if
  86. c direction de l ecoulement non associe
  87. do idir=1,3
  88. DPFCDS3(idir)=(y3(idir)/taueq)/2.d0
  89. DGFCDS3(idir)=DPFCDS3(idir)
  90. if(Dilatance.ge.0.d0) then
  91. DGFCDS3(idir)=DGFCDS3(idir)+Dilatance/3.d0
  92. end if
  93. if(frottement.ge.0.d0) then
  94. DPFCDS3(idir)=DPFCDS3(idir)+frottement/3.d0
  95. end if
  96. end do
  97. ACTIFC1=.true.
  98. end if
  99.  
  100. end if
  101.  
  102. if(affiche_local) then
  103. if(ACTIFC1) then
  104. write(*,'(A20,I2)')
  105. # ' Cisaillement phase:',iphase
  106. write(*,'(A3,E10.3,1X,A5,E10.3,1X,A3,E10.3)')
  107. # 'TAU',taueq,'PRESS',press,'FC',FC1
  108. do idir=1,3
  109. write(*,'(A6,I2,A2,E10.3)')
  110. # 'Seffg(',idir,')=',SEFF3(idir)
  111. end do
  112. do idir=1,3
  113. write(*,'(2(A7,I2,A2,E10.3,1X))')
  114. # 'DPFCDS(',idir,')=',DPFCDS3(idir),
  115. # 'DGFCDS(',idir,')=',DGFCDS3(idir)
  116. end do
  117. read*
  118. else
  119. write(*,'(A27,I2)')
  120. # ' Pas de cisaillement phase:',iphase
  121. end if
  122. end if
  123.  
  124.  
  125. return
  126. end
  127.  
  128.  
  129.  
  130.  

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