C OTTOXF SOURCE CHAT 05/01/13 02:08:01 5004 SUBROUTINE OTTOXF(SIG0,DSIGT,XINVL,XLTR,NFISSU,NVF, & XXF,PRECIZ,KERRE) * C========================================================================== C C ENTREES : C SIG0,DSIGT,NFISSU,NVF,XLTR,XINVL C C SORTIES : C XXF C========================================================================== C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO C PARAMETER (XZER=0.D0,UN=1.D0) C DIMENSION SIG0(6),DSIGT(6),XLTR(3),XINVL(3) * DIMENSION A3(3,3),B3(3,3),D3(3),XXF(3) * DO IC=1,3 XXF(IC)=1.D4 ENDDO C C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C LES TROIS DIRECTIONS SONT DEJA FISSUREES C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C IF (NFISSU.EQ.3) THEN RETURN ENDIF C C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C DEUX DIRECTIONS SONT DEJA FISSUREES C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C IF (NFISSU.EQ.2) THEN C C SEULE LA DIRECTION no IFIS N EST PAS FISSUREE C IF ((XINVL(1)*XINVL(2)).NE.XZER) IFIS=3 IF ((XINVL(1)*XINVL(3)).NE.XZER) IFIS=2 IF ((XINVL(2)*XINVL(3)).NE.XZER) IFIS=1 * IF (DSIGT(IFIS).NE.XZER) THEN XXF(IFIS)=(XLTR(IFIS)-SIG0(IFIS))/DSIGT(IFIS) ENDIF ENDIF C C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C UNE DIRECTION EST DEJA FISSUREE C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C IF (NFISSU.EQ.1) THEN C C SEULE LA DIRECTION no IFIS EST FISSUREE C IF (XINVL(1).NE.XZER) IFIS=1 IF (XINVL(2).NE.XZER) IFIS=2 IF (XINVL(3).NE.XZER) IFIS=3 * * IF(IIMPI.EQ.42) THEN * WRITE(IOIMP,77004) IFIS *77004 FORMAT( 2X, 'OTTOXF - IFIS =',I4/) * ENDIF C C CAS 1 : C DEUX DIRECTIONS DE FAIBLESSE NON FISSUREE, UNE DIRECTION FISSUREE C C remarque : ce cas est identique a une direction de faiblesse C non fissuree et une direction de fissuration. C IF (NVF.EQ.2.OR.NVF.EQ.1) THEN C C direction 1 fissuree C IF (IFIS.EQ.1) THEN IF (DSIGT(2).NE.XZER) THEN XXF(2)=(XLTR(2)-SIG0(2))/DSIGT(2) ENDIF IF (DSIGT(3).NE.XZER) THEN XXF(3)=(XLTR(3)-SIG0(3))/DSIGT(3) ENDIF ENDIF C C direction 2 fissuree C IF (IFIS.EQ.2) THEN IF (DSIGT(1).NE.XZER) THEN XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1) ENDIF IF (DSIGT(3).NE.XZER) THEN XXF(3)=(XLTR(3)-SIG0(3))/DSIGT(3) ENDIF ENDIF C C direction 3 fissuree C C remarque : ce cas est impossible s il n y a qu une direction imposee C et une direction de fissuration. C IF (IFIS.EQ.3) THEN IF (DSIGT(1).NE.XZER) THEN XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1) ENDIF IF (DSIGT(2).NE.XZER) THEN XXF(2)=(XLTR(2)-SIG0(2))/DSIGT(2) ENDIF ENDIF ENDIF C C CAS 2 : PAS DE DIRECTION DE FAIBLESSE C C---------rq XLTR(2)=XLTR(3) puisque l on n a pas fissure--------- C-----------et qu il n y a pas de direction de faiblesse---------- C IF (NVF.EQ.0) THEN C CALL ZERO(A3,3,3) CALL ZERO(B3,3,3) A3(1,1)=SIG0(2)-XLTR(2) A3(1,2)=SIG0(6) A3(2,1)=SIG0(6) A3(2,2)=SIG0(3)-XLTR(2) * B3(1,1)=DSIGT(2) B3(1,2)=DSIGT(6) B3(2,1)=DSIGT(6) B3(2,2)=DSIGT(3) CALL OTTOB3(A3,B3,2,D3,KERRE) IF(KERRE.NE.0) RETURN C XXF(2)=D3(1) XXF(3)=D3(2) ENDIF RETURN ENDIF C C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C AUCUNE DIRECTION DEJA FISSUREE C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C IF (NFISSU.EQ.0) THEN C C CAS 1 : DEUX OU TROIS DIRECTIONS DE FAIBLESSE C IF (NVF.EQ.2.OR.NVF.EQ.3) THEN IF (DSIGT(1).NE.XZER) THEN XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1) ENDIF IF (DSIGT(2).NE.XZER) THEN XXF(2)=(XLTR(2)-SIG0(2))/DSIGT(2) ENDIF IF (DSIGT(3).NE.XZER) THEN XXF(3)=(XLTR(3)-SIG0(3))/DSIGT(3) ENDIF ENDIF C C CAS 2 : UNE DIRECTION DE FAIBLESSE C IF (NVF.EQ.1) THEN IF (DSIGT(1).NE.XZER) THEN XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1) ENDIF C CALL ZERO(A3,3,3) CALL ZERO(B3,3,3) * A3(1,1)=SIG0(2)-XLTR(2) A3(1,2)=SIG0(6) A3(2,1)=SIG0(6) A3(2,2)=SIG0(3)-XLTR(2) * B3(1,1)=DSIGT(2) B3(1,2)=DSIGT(6) B3(2,1)=DSIGT(6) B3(2,2)=DSIGT(3) * CALL OTTOB3(A3,B3,2,D3,KERRE) IF(KERRE.NE.0) RETURN * XXF(2)=D3(1) XXF(3)=D3(2) ENDIF C C CAS 3 : PAS DE DIRECTION DE FAIBLESSE C IF (NVF.EQ.0) THEN * A3(1,1)=SIG0(1)-XLTR(1) A3(1,2)=SIG0(4) A3(1,3)=SIG0(5) A3(2,1)=SIG0(4) A3(2,2)=SIG0(2)-XLTR(1) A3(2,3)=SIG0(6) A3(3,1)=SIG0(5) A3(3,2)=SIG0(6) A3(3,3)=SIG0(3)-XLTR(1) * B3(1,1)=DSIGT(1) B3(1,2)=DSIGT(4) B3(1,3)=DSIGT(5) B3(2,1)=DSIGT(4) B3(2,2)=DSIGT(2) B3(2,3)=DSIGT(6) B3(3,1)=DSIGT(5) B3(3,2)=DSIGT(6) B3(3,3)=DSIGT(3) * CALL OTTOB3(A3,B3,3,D3,KERRE) IF(KERRE.NE.0) RETURN * XXF(1)=D3(1) XXF(2)=D3(2) XXF(3)=D3(3) ENDIF ENDIF RETURN END