ntape6
C NTAPE6 SOURCE CHAT 05/01/13 02:02:22 5004 * M,N,NVD,IVFP,IVFQ,MVDU,MVDL,IVB,IVD,IVN,II,KK,IVDR,IDVD, * NDR,TERMIN,IVLL,IVUL,IPBASE) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) LOGICAL TERMIN -INC TMXMAT -INC SMLENTI -INC PPARAM -INC CCOPTIO -INC SMLREEL POINTEUR MLREE4.MLREEL,MLREE5.MLREEL,MLREE6.MLREEL,MLREE7.MLREEL IVXL1=0 IVXU1=0 IVU1=0 IVN1=0 IVD1=0 IVGM1=0 IVGE1=0 IVLAM1=0 N11 = N + 1 II=-1 KK=-1 MLREEL=IVDR JG=N11 SEGINI MLREE1,MLREE2 IVPZ=MLREE2 IVQZ=MLREE1 MXMAT=MCQ MXMAT=MCP ALPMAX=1.E25 MLREE1=IVLAMB IPB=0 DO 1 I=1,M IPB=I ENDIF ENDIF 1 CONTINUE IF(IIMPI.EQ.1799) *WRITE(IOIMP,FMT='('' ALPHAMAX IPB = '',E12.5,2X,I3)')ALPMAX,IPB NDIS=0 MLENTI=IDVD DO 7 I=1,NVD NDIS=NDIS+LECT(I)-1 7 CONTINUE JG=(NDIS-NVD)+2*(N11-NVD)+2 SEGINI MLREE6,MLENT1,MLENT2 MLENT1.LECT(1)=-3 MLENT2.LECT(1)=0 * * CALCUL DES ALPHA CRITIQUES * ON COMMENCE PAR LES VARIABLES CONTINUES * IP=1 MLREEL=IVD MLREE1=IVN MLREE2=IVMINU MLREE3=IVMINL MLREE4=IVQZ MLREE5=IVPZ DO 2 I=NVD+1,N11 IP=IP+1 IF(CD.EQ.0.D0) CD=1.D-35 MLENT1.LECT(IP)=I-NVD MLENT2.LECT(IP)=-1 2 CONTINUE MLREE2=IVMAXU MLREE3=IVMAXL DO 3 I=NVD+1,N11 IP=IP+1 IF(CD.EQ.0.D0) CD=1.D-35 MLENT1.LECT(IP)=I-NVD MLENT2.LECT(IP)=-1 3 CONTINUE * * POUR LES VARIABLES DISCRETES * IF(NVD.NE.0) THEN IF(IIMPI.EQ.1799) * WRITE(IOIMP,FMT='('' IL Y A'',I4,'' VARIABLES DISCRETES'')')NVD MXMAT=MVDU MXMA1=MVDL DO 4 I=1,NVD DO 4 J = 3,LECT(I) IP=IP+1 IF(CD.EQ.0.D0) CD=1.D-35 MLENT1.LECT(IP)=I MLENT2.LECT(IP)=J 4 CONTINUE ENDIF MAC2=MLENT1 MAC3=MLENT2 SEGSUP MLREE4,MLREE5 * * ON ENTRE ALPHA MAX DANS LE TABLEAU DES ALPHA * IP=IP+1 * MLREEL=MLREE6 * * TRI DES ALPHA * SEGINI MLREE1 SEGINI MLENT1,MLENT2 MORDRE=MLENT1 DO 5 I=1,JG MLENT1.LECT(I)=I 5 CONTINUE IF(IIMPI.EQ.1799) WRITE(IOIMP,FMT='('' LISTE DES ALPHA APRES TRI SEGSUP MLREE1,MLENT2 * * ELIMINATION DES ALPHA NON ADMISSIBLES * IDL=0 IFL=IP+2 DO 6 I=1,IP IF(IFL.EQ.IP+2) IFL=I-1 MLENT1.LECT(I)=-2 ENDIF 6 CONTINUE IFL=MIN(IFL,IP) IF(IIMPI.EQ.1799) WRITE(IOIMP,FMT='('' LISTE DES ALPHA APRES TRI * * RECHERCHE DU PAS ALPHA OPTIMUM * MLREE1=IVLAMB MLREE2=IVDR SEGINI,MLREE3=MLREE1 IVLAM1=MLREE3 * * CALCUL DU PREMIER POINT * I=IDL INPINF=IDL 8 CONTINUE IF(IIMPI.EQ.1799) WRITE(IOIMP,FMT='('' VALEUR DU LAMBDA POUR ALPHA * IVMINL,IVMAXU,IVMAXL,IVU1,IVN1,IVD1,IVUL,IVLL,IVXU1,IVXL1) *IVGM1,IVLAM1,IPBASE) XLP1=0.D0 MLREE4=IVGE1 9 CONTINUE IF(IIMPI.EQ.1799) WRITE(IOIMP,FMT='('' 1ER ALPHA , PROD SCAL :'' * ,1X,E12.5,'' , '',E12.5)')QQZ,XLP1 MLREE4=IVXU1 MLREE5=IVU1 MLREE6=IVN1 SEGSUP MLREE4,MLREE5,MLREE6 MLREE4=IVD1 MLREE5=IVGM1 MLREE6=IVGE1 MLREE7=IVXL1 SEGSUP MLREE4,MLREE5,MLREE6,MLREE7 IVXL1=0 IVXU1=0 IVU1=0 IVN1=0 IVD1=0 IVGM1=0 IVGE1=0 * * CALCUL SUR LE DERNIER POINT * INPSUP=IFL I=IFL 10 CONTINUE * IVMINL,IVMAXU,IVMAXL,IVU1,IVN1,IVD1,IVUL,IVLL,IVXU1,IVXL1) *IVGM1,IVLAM1,IPBASE) XLP2=0.D0 MLREE4=IVGE1 11 CONTINUE IF(IIMPI.EQ.1799) WRITE(IOIMP,FMT='('' DERNIER ALPHA , PROD SCAL * :'',1X,E12.5,'' , '',E12.5)')QQZ,XLP2 * * RECHERCHE PAR DICHOTOMIE SUR LES INDICES pour trouver l'interval * de alpha interessant * IF(XLP1 * XLP2.GE.0.D0) THEN ALPHA=ALPMAX IF (ALPMAX.LT.1E25) THEN KK = -3 II=IPB ENDIF GO TO 20 ENDIF 12 CONTINUE IK=(INPINF+INPSUP)/2 IF(IK.EQ.INPINF) GO TO 15 MLREE4=IVXU1 MLREE5=IVU1 MLREE6=IVN1 SEGSUP MLREE4,MLREE5,MLREE6 MLREE4=IVD1 MLREE5=IVGM1 MLREE6=IVGE1 MLREE7=IVXL1 SEGSUP MLREE4,MLREE5,MLREE6,MLREE7 IVXL1=0 IVXU1=0 IVU1=0 IVN1=0 IVD1=0 IVGM1=0 IVGE1=0 I=IK 13 CONTINUE * IVMINL,IVMAXU,IVMAXL,IVU1,IVN1,IVD1,IVUL,IVLL,IVXU1,IVXL1) *IVGM1,IVLAM1,IPBASE) XLP3=0.D0 MLREE4=IVGE1 14 CONTINUE IF(XLP1*XLP3.LE.0.D0) THEN XLP2=XLP3 INPSUP=I ELSE XLP1=XLP3 INPINF=I ENDIF GO TO 12 15 CONTINUE * * RECHERCHE PAR DICHOTOMIE pour determiner la valeur de alpha donnant le * min de l(lambda + alpha * grad) * IPP=0 60 CONTINUE IPP=IPP + 1 IF(IPP.GT.100) THEN RETURN ENDIF ALPHA0=ALPHA MLREE4=IVXU1 MLREE5=IVU1 MLREE6=IVN1 SEGSUP MLREE4,MLREE5,MLREE6 MLREE4=IVD1 MLREE5=IVGM1 MLREE6=IVGE1 MLREE7=IVXL1 SEGSUP MLREE4,MLREE5,MLREE6,MLREE7 IVXL1=0 IVXU1=0 IVU1=0 IVN1=0 IVD1=0 IVGM1=0 IVGE1=0 * IF(IIMPI.EQ.1799) WRITE(IOIMP,FMT='('' ALPHA '',E12.5)')ALPHA QQZ=ALPHA 17 CONTINUE * IVMINL,IVMAXU,IVMAXL,IVU1,IVN1,IVD1,IVUL,IVLL,IVXU1,IVXL1) *IVGM1,IVLAM1,IPBASE) XLP3=0.D0 MLREE4=IVGE1 50 CONTINUE IF(XLP1*XLP3.LE.0.D0) THEN XLP2=XLP3 ALGR=ALPHA ELSE XLP1=XLP3 ALPE=ALPHA ENDIF TERMIN=.TRUE. GO TO 20 ENDIF 20 CONTINUE MLENT1=MAC2 MLENT2=MAC3 MLENT3=MORDRE IF (KK.NE.-3)THEN * ****************** TEST SI ARRET SUR PLAN DE DISCONTINUITE ************ * KK=MLENT2.LECT(MLENT3.LECT(INPSUP)) II=MLENT1.LECT(MLENT3.LECT(INPSUP)) ALPHA=ALPHA1 ENDIF KK=MLENT2.LECT(MLENT3.LECT(INPINF)) II=MLENT1.LECT(MLENT3.LECT(INPINF)) ALPHA=ALPHA2 ENDIF ENDIF 21 CONTINUE IF (KK.EQ.-3)THEN ENDIF ALPHA0=ALPHA MLREE4=IVXU1 MLREE5=IVU1 MLREE6=IVN1 SEGSUP MLREE4,MLREE5,MLREE6 MLREE4=IVD1 MLREE5=IVGM1 MLREE6=IVGE1 MLREE7=IVXL1 SEGSUP MLREE4,MLREE5,MLREE6,MLREE7 IVLAMB=IVLAM1 SEGSUP MLENT1,MLENT2,MLREEL,MLENT3 RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales