Download dsdrucke.eso

Back to the list

   1 : C DSDRUCKE  SOURCE    AM        12/02/28    21:15:09     7291           
   2 :       SUBROUTINE dsigDrucker(fc,fb,sigma,dfc,alpha,P2,pi2,i1,i6,lcp)  
   3 :                                               
   4 : c     This subroutine calculates the derivative of the Drucker Prager 
   5 : c     plastic function with respect to sigma
   6 : c                                       
   7 : c     fc = dsqrt (3 J2) + alpha I1  with  J2 : 2nd invariant of the deviatoric stress                                           
   8 : c                                    and  I1 : 1st invariant of the stress 
   9 : 
  10 :       IMPLICIT REAL*8 (A-B,D-H,O-Z)
  11 :       implicit integer (I-K,M,N)
  12 :       implicit logical (L)
  13 :       implicit character*10 (C)
  14 :    
  15 : ****  dimension vloc(i6),sigma(i6),P2(i6,i6),pi2(i6)
  16 :       dimension vloc(6),sigma(i6),P2(i6,i6),pi2(i6)
  17 : ****  dimension dfc(i6),vloc1(i1),vloc2(i6)
  18 :       dimension dfc(6),vloc1(1),vloc2(6)
  19 : 
  20 : 
  21 : *****
  22 : *     MESSAGES D'ERREUR ( SUPPRESSION DES AUTOMATIC OBJECTS)
  23 :       IF(I1.GT.1) PRINT *, ' DSIGDRUCKER - ERREUR  I1 = ', I1, ' > 1 '
  24 :       IF(I6.GT.6) PRINT *, ' DSIGDRUCKER - ERREUR  I6 = ', I6, ' > 6 '
  25 : *****
  26 : 
  27 : 
  28 :       r1 = 1.
  29 :       r2 = 2.
  30 :       i3 = 3
  31 :       alpha  = (fb-fc)/(2.*fb-fc)
  32 : 
  32 :       call mulAB(P2,sigma,vloc,i6,i6,i6,i1)             
  33 : c         [6;1]=[6;6]x[6;1]
  34 :       do iloc=1,6
  35 :         vloc2(iloc) = vloc(iloc)
  36 :       end do 
  36 :       call mulATB(sigma,vloc,vloc1,i6,i1,i6,i1)     
  37 : c         [1]=[1;6]x[6;1]
  38 :       rloc = (r1/r2)* vloc1(i1)
  39 :       if (rloc.le.0.d0) then
  40 :         psi2 = 0.d0
  41 :       else
  42 :         psi2 = dsqrt(rloc)
  43 : c       psi2 = dsqrt(3 * J2)
  44 :       endif
  45 :      
  45 :       call mulATB(pi2,sigma,vloc1,i6,i1,i6,i1)          
  46 : c         [1]=[1;6]x[6;1]
  47 :       test = alpha*vloc1(i1)
  48 : c     test = alpha*I1
  49 : 
  50 :       psi2lim=max(1.E-7*test,1.d-3)
  51 :       f_compr = DPfunc(sigma,alpha)
  52 :       if (dabs(psi2).le.psi2lim) then
  53 :         do iloc=i1,i6
  54 :           dfc(iloc) = alpha * pi2(iloc)
  55 :         enddo        
  56 :       else if (dabs(f_compr).le.100.) then
  57 : c       APEX of the Drucker-Prager surface
  58 :         do iloc=i1,i6
  59 :           dfc(iloc) = 10.E+12 * vloc2(iloc)
  60 :         end do
  61 :       else
  62 :         do iloc=i1,i6
  63 :           dfc(iloc) = ((vloc2(iloc)/(2.*psi2)) + alpha * pi2(iloc))
  64 :         end do
  65 :       endif
  66 : 
  67 :       RETURN
  68 :       END
  69 : 
  70 : 
  71 : 
  72 :       
  73 :  

© Cast3M 2003 - All rights reserved.
Disclaimer