acti3
C ACTI3 SOURCE CB215821 16/04/21 21:15:04 8920
C ACTI3
C
C ==================================================================
C Deux criteres de traction compression: DRUCKER PRAGER
C 3D
C ==================================================================
C CE SOUS-PROGRAMME EST APPELE DANS "BONE3D".
C
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION SIG0(NSTRSS),SIGF(NSTRSS)
DIMENSION DFSIG1(6),DFSIG2(6),VEC1(6),VEC2(6),SIGE(6)
DIMENSION AC1(6),AC2(6)
DIMENSION DJAC0(2,2),DJI(4,4),A(6,6),AI(6,6),AIM(6,6),D(6,6)
DIMENSION FCRI0(2),FCRI1(2),DEPSI(6),DLAM1(2),DLAM0(2)
C
SEGMENT BETINSA
REAL*8 RT,RC,YOUN,XNU,GFT,GFC,CAR
REAL*8 DKT,DKC,SEQT,SEQC,ENDT,ENDC
INTEGER IFIS,IPLA,IBB,IGAU
ENDSEGMENT
C
IAPEX=0
PRB=1.D-5
PRB2=1.D-2
ITER=1
ITR = 1500
IET=0
IEC=0
IBROY=0
ITANG=0
CRIMAX=0.D0
SEQ = 0.D0
SEQ1 = 0.D0
SEQ2 = 0.D0
C
DO 10 I=1,NSTRSS
SIGE(I)=SIGF(I)
10 CONTINUE
C
C ************ Le point est fissure pour 1ere fois ***********
C
12 CONTINUE
FCRI0(1) = SEQTE - SEQT
FCRI0(2) = SEQCE - SEQC
CRIMAX=ABS(100.D0*FCRI0(1))
IF (FCRI0(1).LT.0.D0.AND.FCRI0(2).LT.0.D0) THEN
IET=1
IEC=1
ENDIF
IF (FCRI0(1).LT.0.D0.AND.FCRI0(2).GE.0.D0) THEN
IET=1
IEC=0
ENDIF
IF (FCRI0(1).GE.0.D0.AND.FCRI0(2).LT.0.D0) THEN
IET=0
IEC=1
ENDIF
C
15 CONTINUE
C
DO 16 I=1,NSTRSS
SIGF(I)=SIGE(I)
16 CONTINUE
C
IF (IET.EQ.1.AND.IEC.EQ.1) THEN
GOTO 100
ENDIF
C
IF (IET.EQ.1.AND.IEC.EQ.0) THEN
GOTO 100
ENDIF
C
IF (IET.EQ.0.AND.IEC.EQ.1) THEN
GOTO 100
ENDIF
C
DK1=DKT
DK2=DKC
DLAM0(1)=0.D0
DLAM0(2)=0.D0
C
18 CONTINUE
C
C ************ CALCUL DU JACOBIEN INITIAL ********************
C
C ---------------- direction de traction ------------------
C
C
DO 20 I=1,NSTRSS
AC1(I)=0.D0
DO 20 J=1,NSTRSS
AC1(I)=AC1(I)+D(I,J)*DFSIG1(J)
20 CONTINUE
C
C ---------------- direction de compression ----------------
C
C
DO 25 I=1,NSTRSS
AC2(I)=0.D0
DO 25 J=1,NSTRSS
AC2(I)=AC2(I)+D(I,J)*DFSIG2(J)
25 CONTINUE
C------------------------------------------------------------
F1DF1=0.D0
DO 30 J=1,NSTRSS
F1DF1=F1DF1+DFSIG1(J)*AC1(J)
30 CONTINUE
F1DF2=0.D0
DO 31 J=1,NSTRSS
F1DF2=F1DF2+DFSIG1(J)*AC2(J)
31 CONTINUE
F2DF2=0.D0
DO 32 J=1,NSTRSS
F2DF2=F2DF2+DFSIG2(J)*AC2(J)
32 CONTINUE
F2DF1=0.D0
DO 33 J=1,NSTRSS
F2DF1=F2DF1+DFSIG2(J)*AC1(J)
33 CONTINUE
C
C
DJAC0(1,1)=-(F1DF1+PAECT)
DJAC0(1,2)=-(F1DF2)
DJAC0(2,2)=-(F2DF2+PAECC)
DJAC0(2,1)=-(F2DF1)
C
DO 43 I=1,2
DO 43 J=1,2
DJI(I,J)=DJAC0(I,J)
43 CONTINUE
C
IF (ISING.EQ.1) THEN
WRITE(*,*)'MATRICE DJI singuliere ds ACTI3'
ENDIF
C
C ************ DEBUT ITERATION INTERNES *******************
C
40 CONTINUE
C
C *************** Determination de DK et DLAM ******************
C
C
C
DLAM1(1)=DLAM0(1)-DJI(1,1)*FCRI0(1)-DJI(1,2)*FCRI0(2)
DLAM1(2)=DLAM0(2)-DJI(2,1)*FCRI0(1)-DJI(2,2)*FCRI0(2)
C
IF (DLAM1(1).LE.0.D0) IET=1
IF (DLAM1(2).LE.0.D0) IEC=1
IF (IET.EQ.1.OR.IEC.EQ.1) THEN
C WRITE(*,*)'Dans ACTI3, DLAMDA1 est negatif:',DLAM1(1)
C WRITE(*,*)'Dans ACTI3, DLAMDA2 est negatif:',DLAM1(2)
C WRITE(*,*)'A l iteration :',ITER
GOTO 15
ENDIF
C
DK1=DKT+DLAM1(1)
DK2=DKC+DLAM1(2)
C
C
C ************** Determination de DPHI1 et 2 ******************
C
C
C--------------- Cas de l'apex -----------------------------
C
IF (ABS(DPHI1).LE.10E-10.AND.
*ABS(DPHI2).GT.10E-10) THEN
IAPEX=1
C WRITE(*,*)'IAPEX ds ACTI3 =',IAPEX
C WRITE(*,*)'Dans l element',IBB
C WRITE(*,*)'et au point d intégration',IGAU
DO 50 I=1,NSTRSS
DO 50 J=1,NSTRSS
AI(I,J)=0.D0
50 CONTINUE
AI(1,1)=1./3.
AI(1,2)=AI(1,1)
AI(1,2)=AI(1,1)
AI(1,3)=AI(1,1)
AI(2,1)=AI(1,1)
AI(2,2)=AI(1,1)
AI(2,3)=AI(1,1)
AI(3,1)=AI(1,1)
AI(3,2)=AI(1,1)
AI(3,3)=AI(1,1)
GOTO 75
ENDIF
C
C---------- Cas du critere reduit a un point ----------------
C
IF (ABS(DPHI2).LE.10E-10) THEN
IAPEX=2
C WRITE(*,*)'IAPEX ds ACTI3 =',IAPEX
C WRITE(*,*)'Dans l element',IBB
C WRITE(*,*)'et au point d intégration',IGAU
DO 52 I=1,NSTRSS
DO 52 J=1,NSTRSS
AI(I,J)=0.D0
52 CONTINUE
AI(1,1)=1./3.
AI(1,2)=AI(1,1)
AI(1,2)=AI(1,1)
AI(1,3)=AI(1,1)
AI(2,1)=AI(1,1)
AI(2,2)=AI(1,1)
AI(2,3)=AI(1,1)
AI(3,1)=AI(1,1)
AI(3,2)=AI(1,1)
AI(3,3)=AI(1,1)
GOTO 75
ENDIF
C
C ************** Mise a jour des contraintes ***************
C
C ---------------- calcul de la matrice A ------------------
C
DO 60 I=1,NSTRSS
DO 60 J=1,NSTRSS
A(I,J)=0.D0
60 CONTINUE
C
DG=YOUN/(1.D0+XNU)
C
A(1,1)=1.D0+2.*(DLAM1(1)*DG)/2.D0/DPHI1
A(1,1)=A(1,1)+2.*(DLAM1(2)*DG)/2.D0/DPHI2
A(2,2)=A(1,1)
A(3,3)=A(1,1)
A(1,2)=-(DLAM1(1)*DG)/2.D0/DPHI1-(DLAM1(2)*DG)/2.D0/DPHI2
A(1,3)=A(1,2)
A(2,1)=A(1,2)
A(2,3)=A(1,2)
A(3,1)=A(1,2)
A(3,2)=A(1,2)
A(4,4)=1.D0+3.*(DLAM1(1)*DG)/2.D0/DPHI1
A(4,4)=A(4,4)+3.*(DLAM1(2)*DG)/2.D0/DPHI2
A(5,5)=A(4,4)
A(6,6)=A(4,4)
C
C -------------- invertion de la matrice A -----------------
C
C
DO 70 I=1,3
DO 70 J=1,3
AIM(I,J)=A(I,J)
70 CONTINUE
IF (ISING.EQ.1) THEN
WRITE(*,*)'MATRICE AIM singuliere ds ACTI3'
ENDIF
DO 72 I=1,3
DO 72 J=1,3
AI(I,J)=AIM(I,J)
72 CONTINUE
AI(4,4) = 1./A(4,4)
AI(5,5) = 1./A(5,5)
AI(6,6) = 1./A(6,6)
C
C -------------- mise a jour des contraintes ------------
C
75 CONTINUE
C
DO 80 I=1,NSTRSS
DEPSI(I)=SIGE(I)-DLAM1(1)*VEC1(I)
DEPSI(I)=DEPSI(I)-DLAM1(2)*VEC2(I)
80 CONTINUE
C
DO 90 I=1,NSTRSS
SIGF(I)=0.0D+00
DO 90 J=1,NSTRSS
SIGF(I)=SIGF(I)+AI(I,J)*DEPSI(J)
90 CONTINUE
C
C ******** Verification des criteres ****************
C
FCRI1(1) = SEQTT - SEQ1
FCRI1(2) = SEQCC - SEQ2
C
IF (IAPEX.EQ.2) FCRI1(1)=0.D0
C
IF (IBROY.EQ.0.AND.(ABS(FCRI1(1)).GE.CRIMAX.OR
* .ABS(FCRI1(2)).GE.CRIMAX)) THEN
C WRITE(*,*)'****************************************'
C WRITE(*,*)'LE RESIDU DIVERGE AVEC BROYDEN'
C WRITE(*,*)'on passe donc a la secante'
C WRITE(*,*)'Dans l element',IBB
C WRITE(*,*)'et au point d intégration',IGAU
C WRITE(*,*)'CRIMAX=',CRIMAX
C WRITE(*,*)'****************************************'
ITER=ITR
ENDIF
C
C ******* Compteur sur la methode de resolution ****
C
IF (IBROY.EQ.0.AND.ITER.EQ.ITR) THEN
IBROY=1
ITANG=1
ITER=1
IAPEX=0
IET=0
IEC=0
GOTO 12
ENDIF
C
C ******* non convergence **************************
C
IF ((ABS(FCRI1(1)).GT.PRB.OR.ABS(FCRI1(2)).GT.PRB)
*.AND.ITER.LT.ITR) THEN
IF (IBROY.EQ.0) THEN
DLAM0(1)=DLAM1(1)
DLAM0(2)=DLAM1(2)
FCRI0(1)=FCRI1(1)
FCRI0(2)=FCRI1(2)
IF (ITER.GE.(ITR-1)) THEN
C WRITE(*,*)'***********************'
C WRITE(*,*)'BROYDEN n a pas aboutit'
C WRITE(*,*)'ITER=',ITER
C WRITE(*,*)'FCRIT=',FCRI0(1)
C WRITE(*,*)'FCRIC=',FCRI0(2)
C WRITE(*,*)'Dans l element',IBB
C WRITE(*,*)'et au point d intégration',IGAU
C WRITE(*,*)'***********************'
ENDIF
ITER=ITER+1
GOTO 40
ENDIF
IF (IBROY.EQ.1.AND.ITANG.EQ.1) THEN
DLAM0(1)=DLAM1(1)
DLAM0(2)=DLAM1(2)
FCRI0(1)=FCRI1(1)
FCRI0(2)=FCRI1(2)
IF (ITER.GE.(ITR-5)) THEN
C WRITE(*,*)'ITER=',ITER
C WRITE(*,*)'FCRIT=',FCRI0(1)
C WRITE(*,*)'FCRIC=',FCRI0(2)
ENDIF
ITER=ITER+1
GOTO 18
ENDIF
ENDIF
IF (ITER.GE.ITR.AND.(ABS(FCRI1(1)).GT.PRB2.OR.
* ABS(FCRI1(2)).GT.PRB2)) THEN
WRITE(*,*)'NON CONVERGENCE INTERNE dans BEHAV3'
WRITE(*,*)'Dans l element',IBB
WRITE(*,*)'et au point d intégration',IGAU
WRITE(*,*)'FCRIT=',FCRI0(1)
WRITE(*,*)'FCRIC=',FCRI0(2)
WRITE(*,*)'IPLA=',IPLA
WRITE(*,*)'IFIS=',IFIS
C STOP
ENDIF
C
C **************** Fin des iterations internes *******************
C
DKT=DK1
DKC=DK2
SEQT=SEQ1
SEQC=SEQ2
C
C ********************************************************************
100 CONTINUE
IET=0
IEC=0
CRIMAX=0.D0
C
RETURN
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales