ottoxx
C OTTOXX SOURCE AM 15/12/16 21:15:20 8753 & VAUX1,VAUX2,VAUX,FC0,DX,DXV1,DXV2, & PRECIE,PRECIZ,BTR,YOUN, & W,WMAX,SMAX,WRUPT,XLTR,XINVL,NFISSU,NVF,VF, & XXMIN,JCRIT,NCRIT,XCOMP,XLAMC,ICOMEL,LERED,KERRE) C========================================================================= C C ENTREES : C SIG0,DSIGT,FC0,PRECIZ C W,WMAX,SMAX,WRUPT,BTR,XLTR,XINVL C VAUX1,VAUX2 C C SORTIES : C JCRIT,XXMIN,STOT,VAUX C C========================================================================== C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO C PARAMETER (XZER=0.D0,UNDEMI=.5D0,UN=1.D0,DEUX=2.D0,TROIS=3.D0) C DIMENSION SIG0(6),DSIGT(6),STOT(6),XCOMP(*) DIMENSION VAUX1(6),VAUX2(6),VAUX(6) DIMENSION DX(*),DXV1(*),DXV2(*) DIMENSION DXVV(3) DIMENSION W(3),WMAX(3),WREOUV(3), & WRUPT(3),XLTR(3),XINVL(3),XXF(3) DIMENSION MM(*),SMAX(*) DIMENSION FC0(*),JCRIT(*) DIMENSION VF(3,3),JFIS(3),JFIS2(3) DIMENSION JCDUM(1) DIMENSION FC2(16),FCT(16),MMA(20) DIMENSION DFF(6),DGG(6) IF(IIMPI.EQ.42) THEN WRITE(IOIMP,55446) ICOMEL 55446 FORMAT(/2X,' ENTREE OTTOXX - ICOMEL =',I4/) ENDIF C C INITIALISATIONS C KERRE=0 LERED=0 XXMIN=1.D0 NCRIT=0 * * DO I=1,6 STOT(I)=SIG0(I)+DSIGT(I) VAUX(I)=VAUX1(I)+VAUX2(I) ENDDO * DO I=1,3 DXVV(I)=DXV1(I)+DXV2(I) ENDDO * * APPEL A OTTOCE * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,32246) 32246 FORMAT(/2X,' DANS OTTOXX - APPEL A OTTOCE POUR FCT'//) ENDIF & XLTR,XINVL,BTR,NFISSU,NVF,FCT,VF,YOUN,PRECIZ, & JFIS,XCOMP,XLAMC,DFF,DGG,KERRE) IF(KERRE.NE.0) RETURN * * MCA=0 DO IC=1,MC JC=MM(IC) * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,30446) IC,JC,FC0(JC),FCT(JC) 30446 FORMAT(/2X,' OTTOXX - IC=',I4,2X,' JC=',I4,2X, & ' FC0(JC)=',1PE12.5,2X,'FCT(JC)=',1PE12.5/) ENDIF * IF(FCT(JC).GT.0.D0)THEN MCA=MCA+1 MMA(MCA)=JC ELSE IF(ABS(FCT(JC)).LE.PRECIZ)THEN MCA=MCA+1 MMA(MCA)=JC IF(FCT(JC).LT.0.D0) FCT(JC)=0.D0 ENDIF ENDDO * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,50446) MCA 50446 FORMAT(/2X,' DANS OTTOXX - MCA =',I4/) WRITE(IOIMP,40446) (MMA(I),I=1,MCA) 40446 FORMAT(/2X,' OTTOXX - MMA =',5I4/) PRINT *, ' PRECIZ = ', PRECIZ ENDIF * * IF(MCA.NE.0) THEN * * FAUT-IL APPELER OTTOXF ? * LAPPEL=0 IZOB = 0 IF(IZOB.GT.0) THEN DO IC=1,MCA JC=MMA(IC) * IF(JC.GE.1.AND.JC.LE.3) THEN * IF(FC0(JC).GT.0.D0.AND.FC0(JC).LT.PRECIZ) THEN * XXMIN=0.D0 JCRIT(1)=JC NCRIT=1 DO I=1,6 STOT(I)=SIG0(I) VAUX(I)=VAUX1(I) ENDDO GO TO 300 ENDIF IF(JFIS(JC).GT.1) LAPPEL=1 ENDIF ENDDO ENDIF * * MLR 9/7/99 * DO IC=1,MCA JC=MMA(IC) IF(ICOMEL.EQ.1.AND.JC.EQ.16) GO TO 77 * IF(FC0(JC)*FCT(JC).GT.0.D0) THEN IF((FC0(JC)*FCT(JC).GT.0.D0).AND. & (ABS(FC0(JC)).GT.PRECIZ.AND.ABS(FCT(JC)).GT.PRECIZ))THEN IF(IIMPI.EQ.42) THEN PRINT *,'##### OTTOXX CRITERES INCOMPATIBLES JC = ',JC PRINT *,' FC0 = ',FC0(JC), ' FCT = ', FCT(JC) ENDIF LERED=1 RETURN ENDIF 77 CONTINUE ENDDO * * APPEL A OTTOXF * IF(LAPPEL.EQ.1) THEN & NFISSU,NVF,XXF,PRECIZ,KERRE) IF(KERRE.NE.0) RETURN * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,44556) (XXF(I),I=1,3) 44556 FORMAT(/2X,' APRES OTTOXF : XXF ',3(1X,1PE12.5)/) ENDIF * **** MLR 9/7/99 * IF(XXF(2).EQ.1.D4.AND.XXF(3).EQ.1.D4) THEN LAPPEL=0 GO TO 50 ENDIF * * IF(JFIS(2).GT.1) THEN I1=1 IF(JFIS(2).EQ.2) I1=2 DO I=I1,3 IF(XXF(I).GT.0.D0) THEN XXFIS=XXF(I) GO TO 50 ENDIF ENDDO IF(IIMPI.EQ.42) THEN WRITE(IOIMP,77453) 77453 FORMAT(2X,'####### PAS DE RACINE POSITIVE #######'/) ENDIF ****** KERRE=70 ****** RETURN * ON SE DONNE UNE DERNIERE CHANCE * LAPPEL=0 ENDIF * 50 CONTINUE * ENDIF * * DO IC=1,MCA JC=MMA(IC) F1=FC0(JC) F2=FCT(JC) IF(IIMPI.EQ.42) THEN PRINT *,' IC=',IC PRINT *,' JC=',JC PRINT *,' FC0=',FC0(JC) PRINT *,' FCT=',FCT(JC) ENDIF * * MLR 9/7/99 * XXDEP=0.D0 IF(ICOMEL.EQ.1.AND.JC.EQ.16) THEN * * SPECIAL RETRAITEMENT DU POINT INITIAL * IF(ABS(F2).LE.PRECIZ) THEN XX=1.D0 GO TO 200 ENDIF * IDITER=0 XX=0.5D0 600 IDITER=IDITER+1 IF(IDITER.GT.100) THEN PRINT *,'IDITER=100 ' KERRE=1 RETURN ENDIF * DO I=1,6 STOT(I)=SIG0(I)+XX*DSIGT(I) VAUX(I)=VAUX1(I)+XX*VAUX2(I) ENDDO * DO I=1,3 DXVV(I)=DXV1(I)+XX*DXV2(I) ENDDO * * JCDUM(1)=JC & XLTR,XINVL,BTR,NFISSU,NVF,FC2,VF,YOUN,PRECIZ, & JFIS2,XCOMP,XLAMC,DFF,DGG,KERRE) IF(KERRE.NE.0) RETURN FF=FC2(JC) IF(ABS(FF).LT.PRECIZ) GO TO 200 * * IF(FF.GT.0.D0) THEN XX=XX/2.D0 GO TO 600 ELSE XXDEP=XX F1=FF ENDIF * ENDIF * IF(IIMPI.EQ.42) THEN PRINT *,'VALEUR DE DEPART XXDEP = ',XXDEP ENDIF * XX1=XXDEP XX2=1.D0 * AM 3/12/15 IF(ABS(F1).LT.PRECIZ.AND.ABS(F2).LT.PRECIZ) THEN XX=1.D0 GO TO 1234 ENDIF IF(F2-F1.EQ.0.D0) THEN IF(IIMPI.EQ.42) THEN PRINT *,'F1 = ', F1, ' F2= ',F2 ENDIF LERED=1 RETURN ENDIF XX= XX2 - F2*(XX2-XX1)/(F2-F1) 1234 CONTINUE IF(IIMPI.EQ.42) THEN PRINT *,'ESTIMATION SECANTE XX = ',XX PRINT *,'JC=',JC,' JFIS(JC)=',JFIS(JC) ENDIF * * IF(JC.GE.1.AND.JC.LE.3.AND.LAPPEL.EQ.1) THEN IF(JFIS(JC).GE.2) THEN * IF(IIMPI.EQ.42) THEN PRINT *,'VALEUR CALCULEE XX = ',XXFIS ENDIF * * MLR 9/7/99 * IF(XX.LE.1.D0.AND.XXFIS.LE.1.D0) THEN XX=XXFIS GO TO 200 * ELSE LAPPEL=0 ENDIF * ENDIF ENDIF * ITER=0 * IF(IIMPI.EQ.42) THEN PRINT *,'PREMIERE ESTIMATION XX = ',XX ENDIF * * ITERATIONS * 100 CONTINUE ITER=ITER+1 * * IF(ITER.GT.2500) THEN PRINT *,' 2500 ITERATIONS DANS OTTOXX' KERRE=1 RETURN ENDIF DO I=1,6 STOT(I)=SIG0(I)+XX*DSIGT(I) VAUX(I)=VAUX1(I)+XX*VAUX2(I) ENDDO * DO I=1,3 DXVV(I)=DXV1(I)+XX*DXV2(I) ENDDO * * JCDUM(1)=JC & XLTR,XINVL,BTR,NFISSU,NVF,FC2,VF,YOUN,PRECIZ, & JFIS2,XCOMP,XLAMC,DFF,DGG,KERRE) IF(KERRE.NE.0) RETURN FF=FC2(JC) IF(ABS(FF).LT.PRECIZ) GO TO 200 * IF(IIMPI.EQ.42) THEN ZOB1 = F1 ZOB2 = F2 ENDIF * IF(FF*F2.GE.0.D0) THEN XX2=XX F2=FF ELSE XX1=XX F1=FF ENDIF * XX= XX2 - F2*(XX2-XX1)/(F2-F1) * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,75461) ITER, ZOB1,ZOB2,XX 75461 FORMAT( 2X, 'I=',I3,2X,'F1=',1PE12.5,2X, & 'F2=',1PE12.5,2X,'XX=',1PE12.5) ENDIF GO TO 100 * 200 CONTINUE * IF(XX.LT.XXMIN) THEN XXMIN=XX ENDIF * ENDDO * * ON IMPRIME XXMIN * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,73361) XXMIN 73361 FORMAT( 2X, ' OTTOXX APRES BOUCLE - XXMIN= ',1PE12.5/) ENDIF * * MISES A JOUR ( NCRIT ) * DO I=1,6 STOT(I)=SIG0(I)+XXMIN*DSIGT(I) VAUX(I)=VAUX1(I)+XXMIN*VAUX2(I) ENDDO * DO I=1,3 DXVV(I)=DXV1(I)+XXMIN*DXV2(I) ENDDO * & XLTR,XINVL,BTR,NFISSU,NVF,FC2,VF,YOUN,PRECIZ, & JFIS2,XCOMP,XLAMC,DFF,DGG,KERRE) IF(KERRE.NE.0) RETURN DO IC=1,MCA JC=MMA(IC) * * TEST SUPPLEMENTAIRE * IF(FC2(JC).GT.PRECIZ) THEN PRINT *,'######### OTTOXX CRITERE INCOHERENT JC = ',JC PRINT *,' FC2 = ',FC2(JC), ' PRECIZ=',PRECIZ KERRE=2 RETURN ENDIF * IF(ABS(FC2(JC)).LT.PRECIZ) THEN NCRIT=NCRIT+1 JCRIT(NCRIT)=JC ENDIF ENDDO * 300 CONTINUE * ENDIF * * SORTIE * IF(IIMPI.EQ.42) THEN WRITE(IOIMP,77000) NCRIT,(JCRIT(I),I=1,NCRIT) 77000 FORMAT( 2X, ' OTTOXX - NCRIT =',I3,4X,'JCRIT = ',15I3/) WRITE(IOIMP,77001) XXMIN 77001 FORMAT( 2X, ' OTTOXX - XXMIN= ',1PE12.5/) ENDIF * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales