dlamd
C DLAMD SOURCE CHAT 05/01/12 22:52:44 5004 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) DIMENSION TENS(3),DTENS(3) ITEST=0 XLAM3=0.D0 C C-------------------------------------------------------- C CETTE ROUTINE PERMET DE CALCULER LA VALEUR C DU DLAMDA ASSOCIE AU DRUCKER-PRAGER C-------------------------------------------------------- C A=ADP*(DTENS(1)+DTENS(2))+HDP A=-A*A A=A+DTENS(1)*DTENS(1)+DTENS(2)*DTENS(2)+3.D0*DTENS(3)*DTENS(3) 1 -DTENS(1)*DTENS(2) B=2.D0*(ADP*(DTENS(1)+DTENS(2))+HDP)*(RDP-ADP*(TENS(1)+TENS(2))) 1 +2.D0*DTENS(1)*TENS(1)+2.D0*DTENS(2)*TENS(2)+ 1 6.D0*DTENS(3)*TENS(3)-DTENS(1)*TENS(2)-DTENS(2)*TENS(1) C=RDP-ADP*(TENS(1)+TENS(2)) C=C*C C=-C+TENS(1)*TENS(1)+TENS(2)*TENS(2)+3.D0*TENS(3)*TENS(3) 1 -TENS(2)*TENS(1) X1=0.D0 X2=0.D0 IF(A.EQ.0.D0) GOTO 1000 B=B/A C=C/A A=1.D0 DIS=B*B-4.D0*A*C ADIS=ABS(DIS) IF(DIS.GE.0.D0) THEN DIS=SQRT(ADIS) X2=(-B+DIS)/2.D0 X1=(-B-DIS)/2.D0 GOTO 2000 ENDIF ITEST=1 RETURN 1000 IF(B.EQ.0.D0) THEN X1=0.D0 X2=0.D0 GOTO 2000 ENDIF X1=-C/B X2=X1 2000 CONTINUE S1=RDP-ADP*(TENS(1)+TENS(2)+X1*(DTENS(1)+DTENS(2)))-HDP*X1 S2=RDP-ADP*(TENS(1)+TENS(2)+X2*(DTENS(1)+DTENS(2)))-HDP*X2 IF(RDP.NE.0.D0) THEN S1=S1/RDP S2=S2/RDP ENDIF IF(S1.GE.-1.E-10.AND.S2.GE.-1.E-10) THEN XLAM31=MIN(X1,X2) XLAM32=MAX(X1,X2) IF(XLAM31.LT.-1.D-10) XLAM31=XLAM32 RETURN ENDIF IF(S1.GE.-1.E-10.AND.S2.LT.-1.E-10) THEN XLAM31=X1 XLAM32=X1 RETURN ENDIF IF(S1.LT.-1.E-10.AND.S2.GE.-1.E-10) THEN XLAM31=X2 XLAM32=X2 RETURN ENDIF IF(S1.LT.-1.E-10.AND.S2.LT.-1.E-10) THEN XLAM31=0.D0 XLAM32=0.D0 RETURN ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales