C OTTOEC SOURCE CHAT 05/01/13 02:07:24 5004 SUBROUTINE OTTOEC(NCA,NN,SIGMA,W,WMAX,SMAX,BILIN,WRUPT,BTR, & XLTR,XINVL,SBILI,FCRIT,FCRIT2,PENTE,PENTE2,LEBIL,ISING, & PRECIE,PRECIZ,XCOMP,XLAMC,KERRE) C========================================================================= C C ENTREES : C SIGMA,W,WMAX,SMAX,BILIN,WRUPT,BTR,XLTR,XINVL,SBILI C C C SORTIES : C FCRIT C C========================================================================== C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC CCOPTIO C PARAMETER (XZER=0.D0,UNDEMI=.5D0,UN=1.D0,DEUX=2.D0,TROIS=3.D0) PARAMETER (NC=4) C DIMENSION SIGMA(6),W(3),WMAX(3),BILIN(3),WREOUV(3), & WRUPT(3),XLTR(3),XINVL(3),SBILI(3) DIMENSION FCRIT(*),FCRIT2(*),NN(*),SMAX(*),XCOMP(*) DIMENSION LEBIL(*),ISING(*) DIMENSION PENTE(*),PENTE2(*) * DIMENSION DFF(6),DGG(6) C C INITIALISATIONS C KERRE=0 DO IC=1,NC FCRIT(IC)=-1.D4*PRECIZ FCRIT2(IC)=-1.D4*PRECIZ LEBIL(IC)=0 ENDDO * * DO IC=1,NCA JC=NN(IC) * GO TO (1,1,1,4),JC * KERRE=99 RETURN * 1 CONTINUE *----------------- * IF (XINVL(JC).NE.XZER) THEN * WREOUV(JC) = BTR*MIN(WMAX(JC),WRUPT(JC)) PRECIW=PRECIE/XINVL(JC) IF(IIMPI.EQ.42) THEN PRINT *,' ' PRINT *,'OTTOEC - JC =',JC PRINT *,'OTTOEC - W =',W(JC) PRINT *,'OTTOEC - WMAX =',WMAX(JC) PRINT *,'OTTOEC - WREOUV =',WREOUV(JC) PRINT *,'OTTOEC - WRUPT =',WRUPT(JC) PRINT *,'OTTOEC - ISING =',ISING(JC) ENDIF * * * cas ou le materiau n'est pas totalement casse * --------------------------------------------- * IF(WMAX(JC).LT.WRUPT(JC)) THEN IF(ABS(W(JC)-WREOUV(JC)).LT.PRECIW) THEN IF(WMAX(JC).EQ.0.D0.OR.BTR.EQ.UN) THEN * * le materiau vient d'atteindre la limite * CALL OTTOFU(XINVL,XLTR,WRUPT,BTR,BILIN,SBILI,W, & WMAX,SMAX,PENTE,JC) FCRIT(JC)=SIGMA(JC)-SMAX(JC) ELSE * * IF(IIMPI.EQ.42) THEN PRINT *,'CAS W=WREOUV DANS OTTOEC' ENDIF FCRIT(JC)=SIGMA(JC) IF(FCRIT(JC).GE.-PRECIZ) THEN * * ici on pourrait aussi tester que w > wreouv * PENTE(JC) = SMAX(JC)/(WMAX(JC)-WREOUV(JC)) LEBIL(JC)=1 FCRIT(JC)= SIGMA(JC) - & PENTE(JC)*(W(JC)-WREOUV(JC)) ENDIF ENDIF * ELSE IF(W(JC).GT.WREOUV(JC)) THEN IF(W(JC)-WMAX(JC).GT.PRECIW) THEN PRINT *,' OTTOEC - W > WMAX SELON ',JC PRINT *,'W(JC) =',W(JC) PRINT *,'WMAX(JC) =',WMAX(JC) KERRE=7 RETURN * ELSE IF(ABS(W(JC)-WMAX(JC)).LT.PRECIW) THEN * * IF(IIMPI.EQ.42) THEN PRINT *,'CAS W=WMAX DANS OTTOEC' PRINT *,'ISING(JC) =',ISING(JC) ENDIF * CALL OTTOFU(XINVL,XLTR,WRUPT,BTR,BILIN, & SBILI,W,WMAX,SMAX,PENTE,JC) FCRIT(JC)=SIGMA(JC)-SMAX(JC) IF(IIMPI.EQ.42) THEN PRINT *,'SIGMA=',SIGMA(JC) PRINT *,'SMAX =',SMAX(JC) PRINT *,'FCRIT=',FCRIT(JC) ENDIF * * CAS ISING=0 ON CALCULE 2 PENTES * PENTE2(JC) = SMAX(JC)/(WMAX(JC)-WREOUV(JC)) FCRIT2(JC) = SIGMA(JC)-PENTE2(JC)*(W(JC)-WREOUV(JC)) * IF(ISING(JC).EQ.0) THEN LEBIL(JC)=2 ISING(JC)=1 * * CAS ISING=2 : PENTE POST-PIC * ELSE IF(ISING(JC).EQ.2) THEN LEBIL(JC)=0 * * CAS ISING=3 : PENTE SECANTE * ELSE IF(ISING(JC).EQ.3) THEN LEBIL(JC)=1 PENTE(JC)=PENTE2(JC) * IF(W(JC).LT.WMAX(JC)) THEN FCRIT(JC)= SIGMA(JC) - & PENTE(JC)*(W(JC)-WREOUV(JC)) ENDIF ENDIF ELSE IF(W(JC).LT.WMAX(JC)) THEN PENTE(JC) = SMAX(JC)/(WMAX(JC)-WREOUV(JC)) FCRIT(JC)= SIGMA(JC) - PENTE(JC)*(W(JC)-WREOUV(JC)) LEBIL(JC)=1 ENDIF ELSE IF(W(JC).LT.WREOUV(JC)) THEN PRINT *,' OTTOEC - W < WREOUV SELON ',JC PRINT *,'W(JC) =',W(JC) PRINT *,'WREOUV(JC) =',WREOUV(JC) KERRE=7 RETURN ENDIF * * cas ou le materiau est totalement casse * --------------------------------------- * ELSE IF(WMAX(JC).GE.WRUPT(JC)) THEN FCRIT(JC)=SIGMA(JC) IF(IIMPI.EQ.42) THEN PRINT *,'W(JC) =',W(JC) PRINT *,'WREOUV(JC) =',WREOUV(JC) ENDIF * IF(ABS(W(JC)-WREOUV(JC)).LT.PRECIW) THEN IF(IIMPI.EQ.42) THEN PRINT *,' OTTOEC - ON EST A LA LIMITE ' ENDIF * IF(FCRIT(JC).GE.-PRECIZ) THEN PENTE(JC)=0.D0 LEBIL(JC)=1 ENDIF * ELSE IF(W(JC).GT.WREOUV(JC)) THEN LEBIL(JC)=1 PENTE(JC)=0.D0 ENDIF ENDIF ENDIF GO TO 100 * 4 CONTINUE *----------------- * CALL OTTOCP(SIGMA,FCR4,XLTR,DFF,DGG,H4, & PRECIE,PRECIZ,XCOMP,XLAMC,KERRE) FCRIT(4) = FCR4 * IF(IIMPI.EQ.42) THEN * WRITE(IOIMP,78000) FCR4 *78000 FORMAT( 2X, ' OTTOEC - FCR4 ' * & /(1(1X,1PE12.5)/)/) * ENDIF GO TO 100 * 100 CONTINUE * ENDDO * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,77000) (FCRIT(IC),IC=1,4) 77000 FORMAT( 2X, ' OTTOEC - FCRIT '/(4(1X,1PE12.5)/)/) WRITE(IOIMP,77001) (LEBIL(IC),IC=1,4) 77001 FORMAT( 2X, ' OTTOEC - LEBIL '/(4I4)/) WRITE(IOIMP,77003) (PENTE(IC),IC=1,4) 77003 FORMAT( 2X, ' OTTOEC - PENTE '/(4(1X,1PE12.5)/)/) ENDIF * RETURN END