couple
C COUPLE SOURCE CB215821 17/11/30 21:15:45 9639 .ICRIME,ICRIMT,XLAMAX,PREC,RFSG,RFEP,RFPR,KERRE) C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO C DIMENSION SIGEL(*),DSIGP(*),DLAMBD(*),XLAMBD(*) DIMENSION DF1(6),DF2(6),SIG(6),DSIG(6) C C IC1 INDICE DU CRITERE 1 C IC2 INDICE DU CRITERE 2 C DLAMBD(IC1) INCREMENT DLMBDA POUR LE CRITERE 1 C DLAMBD(IC2) INCREMENT DLMBDA POUR LE CRITERE 2 C DDLAM1 CORRECTION A DLAMBD(IC1) AU COURS DES ITERATIONS INTERNES C DDLAM2 CORRECTION A DLAMBD(IC2) AU COURS DES ITERATIONS INTERNES C SIG ETAT DE CONTRAINTES FINAL PROJETTE C SIGEL ETAT DE CONTRAINTES INITIAL C DSIGP INCREMENT DE CONTRAINTES A ECOULER C MAXITE NOMBRE MAXIMAL D'ITERATIONS INTERNES C PREC PRECISION POUR LA CONVERGENCE DES ITERATIONS INTERNES C MAXITE=15 KOUPE=0 IC1=0 R1=0.D0 R2=0.D0 R3=0.D0 C 20 DO 1 I=1,6 SIG(I)=SIGEL(I) 1 CONTINUE C IF(LMIC5.EQ.1.AND.ICAS.GE.5.AND.ICAS.NE.8) GO TO 316 C IF(IIMPI.EQ.9) WRITE(IOIMP,3001) (SIGEL(I),I=1,6) IF(IIMPI.EQ.9) WRITE(IOIMP,3002) (DSIGP(I),I=1,6) .IC1,IC2,DGLAP1,DGLAP2,DGLAM1,DGLAM2,DGLA1,DGLA2,DL1,DL2,DI1,DI2, .KERRE) IF(IIMPI.EQ.9) WRITE(IOIMP,8000)ICAS,IC1,IC2 C C INITIALISATIONS C ITER=0 ICOUP=0 ICRIME=0 IBOU=6 XXX=0.D0 ICONCA=0 VMELA0=VMELAS DPEL20=DPELA2 POREL0=PORELA C C DLAM01=DLAMBD(IC1) DLAM02=DLAMBD(IC2) DLAMBD(IC1)=DGLA1 DLAMBD(IC2)=DGLA2 DDLAM1=DGLAP1 DDLAM2=DGLAP2 C C C CAS DE DECHARGE ||||||||||||||| C C IF(ABS(DLAMBD(IC1)).LE.RFEP) DLAMBD(IC1)=0.D0 IF(ABS(DLAMBD(IC2)).LE.RFEP) DLAMBD(IC2)=0.D0 C IF(DLAMBD(IC1).GT.0.D0.AND.DLAMBD(IC2).GT.0.D0) GO TO 19 IF(DLAMBD(IC1).GT.0.D0.OR.DLAMBD(IC2).GT.0.D0) GO TO 312 IF(DLAMBD(IC1).EQ.0.D0.AND.DLAMBD(IC2).EQ.0.D0) GO TO 313 WRITE(IOIMP,901) IC1,DLAMBD(IC1),IC2,DLAMBD(IC2) GO TO 314 C 19 IF(IIMPI.EQ.9) WRITE(IOIMP,5000)ITER,DDLAM1,DDLAM2 C C ON RENTRE DANS LE SCHEMA D'ITERATIONS INTERNES C ON VA CALCULER LA PREMIERE ESTIMATION DU DELTA LAMDA C ITER=1 DLAMBD(IC1)=0.D0 DLAMBD(IC2)=0.D0 .KERRE) .KERRE) DO 2 I=1,6 SIG(I)=SIG(I)-DF1(I)*DL1-DF2(I)*DL2 2 DSIG(I)=DSIGP(I)-DF1(I)*DGLAP1-DF2(I)*DGLAP2 IF(IIMPI.EQ.9) WRITE(IOIMP,3002) (DSIGP(I),I=1,6) IF(IIMPI.EQ.9) WRITE(IOIMP,3003) (SIG(I),I=1,6) IF(IIMPI.EQ.9) WRITE(IOIMP,3004) (DSIG(I),I=1,6) C C ON TRIE |||||||||||||||| C IF(ICAS.GT.3) GO TO 555 IF(ICRIMT.NE.0) GO TO 555 C C SI ON EST DANS LE CAS ICAS =4 5 6 7 8 ,ON S'EN VA. C C C ITERATIONS INTERNES C C POUR ICAS= 1 , 2 , OU 3 C C'EST LE CAS OU IL PEUT Y AVOIR UNE POSSIBILITE DE TRIPLAGE C C IC3=4-ICAS GO TO(1001,1002,1003),IC3 WRITE(IOIMP,12) IC3 KERRE=640 RETURN C GO TO 1004 GO TO 1004 C 1004 CONTINUE C C SI LE CRITERE IC3 EST ATTEINT ET SI DXX < 0 , ON MET DXX = 0 C DO 24 I=1,6 24 CONTINUE C IF(IIMPI.EQ.9) WRITE(IOIMP,2004) .IC3,VMELAS,DPELAS,DPELA1,DPELA2,PORELA,R1,R2,R3,FSIG,FC C IF(DXX.LT.0.D0.AND.FC.GT.0.D0) DXX=0.D0 IF(DXX.LT.0.D0.OR.DXX.GE.1.D0) DXX=1.D0 C DO 3 I=1,6 SIG(I)=SIG(I)+DSIG(I)*DXX 3 CONTINUE C C XXX REPRESENTE LES DXX CUMULES C XXX=DXX IF(IIMPI.EQ.9) WRITE(IOIMP,2000)XXX,DXX DDLAM1=DGLAP1*DXX+DL1 DDLAM2=DGLAM2*DXX+DL2 DLAMBD(IC1)=DDLAM1 DLAMBD(IC2)=DDLAM2 C C ON REPASSE DANS KRITER POUR REMETTRE A JOUR LES RAYONS DES CRITERES C 444 ITER=ITER+1 C C ON ENTRE DANS BRILAM DONT LES SORTIES SONT: C DGLAP DGLAM DGLA DL DI|||||||| C .IC1,IC2,DGLAP1,DGLAP2,DGLAM1,DGLAM2,DGLA1,DGLA2,DL1,DL2,DI1,DI2, .KERRE) .KERRE) .KERRE) DO 4 I=1,IBOU DSIG(I)=DSIGP(I)-DF1(I)*DGLA1-DF2(I)*DGLA2 CONTINUE IF(IIMPI.EQ.9) WRITE(IOIMP,3004) (DSIG(I),I=1,6) IF(IIMPI.EQ.9) WRITE(IOIMP,3003) (SIG(I),I=1,6) C C ON CALCULE LA VALEUR DE DXX AVEC LA METHODE DE LINEARISATION C IF(IIMPI.EQ.9) WRITE(IOIMP,2004) .IC3,VMELAS,DPELAS,DPELA1,DPELA2,PORELA,R1,R2,R3,FSIG,FC C DXX=1.D0 IF(FC.GT.0.D0) .,DPELA2,PORELA,R1,R2,R3,FSIG,F1ST,F2ST,CC,SS,CS,ITRAC,IRZ,DXX, .PREC,RFSG,RFEP,RFPR,KERRE) IF(DXX.LT.0.D0) DXX=0.D0 XXX=XXX+DXX IF(XXX.LE.1.D0) GO TO 5 DXX=DXX+1.D0-XXX XXX=1.D0 5 IF(IIMPI.EQ.9) WRITE(IOIMP,2000)XXX,DXX DO 6 I=1,6 DSIG(I)=DSIG(I)*DXX 6 SIG(I)=SIG(I)+DSIG(I) DDLAM1=DGLA1*DXX+DI1 IF(IIMPI.EQ.9) WRITE(IOIMP,2003)DDLAM1,DDLAM2 DLAMBD(IC1)=DLAMBD(IC1)+DDLAM1 DLAMBD(IC2)=DLAMBD(IC2)+DDLAM2 C IF(ABS(DLAMBD(IC1)).LE.RFEP) DLAMBD(IC1)=0.D0 IF(ABS(DLAMBD(IC2)).LE.RFEP) DLAMBD(IC2)=0.D0 C IF(DLAMBD(IC1).GT.0.D0.AND.DLAMBD(IC2).GT.0.D0) GO TO 410 IF(DLAMBD(IC1).GT.0.D0.OR.DLAMBD(IC2).GT.0.D0) GO TO 317 IF(DLAMBD(IC1).EQ.0.D0.AND.DLAMBD(IC2).EQ.0.D0) GO TO 318 WRITE(IOIMP,901) IC1,DLAMBD(IC1),IC2,DLAMBD(IC2) GO TO 314 C C TESTS C 410 DETR1=DLAMBD(IC1) DETR2=DLAMBD(IC2) DETR1= MAX(DETR1,RFEP) DETR2= MAX(DETR2,RFEP) TEST2=ABS(DDLAM2)/DETR2 IF(ITER.LE.MAXITE) GO TO 444 KERRE=640 RETURN C C 411 IF(XXX.GT.1.D0) XXX=1.D0 DELXXX=1.D0-XXX DO 442 I=1,6 442 DSIGP(I)=DSIGP(I)*DELXXX IF(DELXXX.LE.0.) GO TO 311 C C IL Y A TRIPLAGE C ICOUP=3 C C VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 C DLAMBD(IC1)=DLAMBD(IC1)+DLAM01 DLAMBD(IC2)=DLAMBD(IC2)+DLAM02 DO 9 I=1,5 XLAMBD(I)=XLAMBD(I)+DLAMBD(I) DLAMBD(I)=0.D0 9 CONTINUE DO 412 I=1,IBOU SIGEL(I)=SIG(I) 412 CONTINUE RETURN C C POUR ICAS= 4 , 5 , 6 , 7 OU 8 C C'EST LE CAS ORDINAIRE|||| CE QUI SIGNIFIE QUE L'ON A UN C COUPLAGE SIMPLE SANS CALCUL DE DXX SAUF C C DANS LES CAS OU IL Y A LE CRITERE (5) C C ITERATIONS INTERNES. C C 555 DXX=0.D0 IF(ICAS.NE.5.OR.ICAS.NE.6.OR.ICAS.NE.7) GO TO 551 IF(ABS(DDLAM2).LE.0.D0.AND.ITER.EQ.1) GO TO 33 IF(ABS(DDLAM2).LE.0.D0) GO TO 34 DDLMAX=XLAMAX-XLAMBD(5)-DLAMBD(5)-DLAM02 C C ON ETUDIE LE CAS DU CRITERE (5) DONT ON VEUT LIMITER C L'ECROUISSAGE NEGATIF.ON DETERMINE UNE VALEUR DE LAMDA C MAXIMUM. C TSTDDL=DDLMAX-DDLAM2 IF(TSTDDL.GE.0.D0.AND.ITER.EQ.1) GO TO 551 IF(TSTDDL.GT.0.D0) DXX=1.D0-XXX IF(TSTDDL.LT.0.D0) DXX=(DDLMAX-DL2)/DDLAM2 C 34 XXX=XXX+DXX IF(XXX.LE.1.D0) GO TO 7 DXX=DXX+1.D0-XXX XXX=1.D0 GO TO 7 C 551 XXX=1.D0 IF(ITER.EQ.1) DXX=1.D0 C 7 DDLAM1=DDLAM1*DXX+DL1 DDLAM2=DDLAM2*DXX+DL2 DLAMBD(IC1)=DDLAM1+DLAMBD(IC1) DLAMBD(IC2)=DDLAM2+DLAMBD(IC2) DO 17 I=1,6 17 SIG(I)=SIG(I)+DSIG(I)*DXX C C ON PASSE DANS KRITER POUR METTRE LES RAYONS A JOUR C IF(ITER.EQ.1) GO TO 37 C IF(ABS(DLAMBD(IC1)).LE.RFEP) DLAMBD(IC1)=0.D0 IF(ABS(DLAMBD(IC2)).LE.RFEP) DLAMBD(IC2)=0.D0 C IF(DLAMBD(IC1).GT.0.D0.AND.DLAMBD(IC2).GT.0.D0) GO TO 510 IF(DLAMBD(IC1).GT.0.D0.OR.DLAMBD(IC2).GT.0.D0) GO TO 312 IF(DLAMBD(IC1).EQ.0.D0.AND.DLAMBD(IC2).EQ.0.D0) GO TO 313 WRITE(IOIMP,901) IC1,DLAMBD(IC1),IC2,DLAMBD(IC2) GO TO 314 C C TESTS C 510 DETR1=DLAMBD(IC1) DETR2=DLAMBD(IC2) DETR1= MAX(DETR1,RFEP) DETR2= MAX(DETR2,RFEP) TEST2=ABS(DDLAM2)/DETR2 IF(ITER.LE.MAXITE) GO TO 37 KERRE=640 RETURN C C ITERATIONS INTERNES C 37 ITER=ITER+1 .SIGMAT,IC1,IC2,DGLAP1,DGLAP2,DGLAM1,DGLAM2,DGLA1,DGLA2, .KERRE) .KERRE) DO 32 I=1,6 DSIG(I)=DSIGP(I)-DF1(I)*DGLA1-DF2(I)*DGLA2 C DL1=DI1 DL2=DI2 DDLAM1=DGLA1 DDLAM2=DGLA2 GO TO 555 C 511 IF(XXX.GT.1.D0) XXX=1.D0 DELXXX=1.D0-XXX DO 35 I=1,6 35 DSIGP(I)=DSIGP(I)*DELXXX IF(DELXXX.LE.0.D0) GO TO 311 ICOUP=2 ICRIT1=IC1 ICRIT2=IC2 ICRIME=5 XX=0.D0 GO TO 39 C C IL Y A COUPLAGE MAIS IL RESTE ENCORE DE L INCREMENT DE CONTRAINTES C 311 ICOUP=2 ICRIT1=IC1 ICRIT2=IC2 ICRIME=0 DO 36 I=1,6 DSIGP(I)=0.D0 36 CONTINUE C C VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 C DLAMBD(IC1)=DLAMBD(IC1)+DLAM01 DLAMBD(IC2)=DLAMBD(IC2)+DLAM02 DO 8 I=1,5 XLAMBD(I)=XLAMBD(I)+DLAMBD(I) DLAMBD(I)=0.D0 8 CONTINUE DO 18 I=1,IBOU SIGEL(I)=SIG(I) 18 CONTINUE RETURN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C IL N Y A PAS DE COUPLAGE C C CAS DE DECHARGE C 33 DLAMBD(IC1)=DDLAM1 DLAMBD(IC2)=DDLAM2 C 312 ICOUP=1 ICRIT1=IC1 ICRIME=IC2 IF(DLAMBD(IC1).LE.0.D0) ICRIT1=IC2 IF(ICRIT1.EQ.IC2) ICRIME=IC1 XX=0.D0 DLAMBD(IC1)=DLAM01 DLAMBD(IC2)=DLAM02 VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 IF(ICAS.EQ.3.AND.KOUPE.EQ.1) ICRIMT=4 IF(ICAS.EQ.7.AND.KOUPE.EQ.1) ICRIMT=2 IF(ICAS.NE.4) RETURN C C CAS DE COUPLAGE ENTRE LE DRUCKER DUCTILE ET LE DRUKER FRAGILE FIXE C IF(ICRIT1.EQ.2) GO TO 21 IF(ICRIT1.EQ.4) GO TO 22 WRITE(IOIMP,13) ICAS,ICRIT1,ICRIME KERRE=640 RETURN C 21 IF(IDED.EQ.1.OR.IDED.EQ.3) RETURN ICAS=3 KOUPE=1 GO TO 20 C 22 IF(IDED.EQ.2.OR.IDED.EQ.3) RETURN ICAS=7 KOUPE=1 GO TO 20 C C IL N Y A PAS D ENDOMMAGEMENT SELON COUPLE C MAIS PEUT ETRE IL Y EN A SELON TRIPLE C 317 IF(ABS(XXX).GT.RFPR) GO TO 312 IF(ICRIME.EQ.1.OR.ICRIME.EQ.2.OR.ICRIME.EQ.3) GO TO 312 IF(ICRIMT.EQ.1.OR.ICRIMT.EQ.2.OR.ICRIMT.EQ.3) GO TO 312 GO TO 319 C 318 IF(ABS(XXX).GT.RFPR) GO TO 313 IF(ICRIME.EQ.1.OR.ICRIME.EQ.2.OR.ICRIME.EQ.3) GO TO 313 IF(ICRIMT.EQ.1.OR.ICRIMT.EQ.2.OR.ICRIMT.EQ.3) GO TO 313 C 319 ICOUP=3 XX=0.D0 DLAMBD(IC1)=DLAM01 DLAMBD(IC2)=DLAM02 VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 RETURN C C IL N Y A PAS D ENDOMMAGEMENT SELON COUPLE C 313 ICOUP=0 XX=0.D0 DLAMBD(IC1)=DLAM01 DLAMBD(IC2)=DLAM02 VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 RETURN C C DLAMBD1 ET DLAMBD2 SONT NEGATIFS C 314 ICOUP=1 ICRIME=IC1 ICRIMT=IC2 IF(ICRIT1.EQ.0) GO TO 315 XX=0.D0 DLAMBD(IC1)=DLAM01 DLAMBD(IC2)=DLAM02 VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 RETURN C C CAS DE DECHARGE DANS COUPLE C 315 DO 38 I=1,6 DSIGMA(I)=DSIGP(I) DSIGP(I)=0.D0 38 CONTINUE XX=0.D0 DLAMBD(IC1)=DLAM01 DLAMBD(IC2)=DLAM02 VMELAS=VMELA0 DPELA2=DPEL20 PORELA=POREL0 RETURN C C CAS DE LMIC5=1LE CRITERE DE DRUCKER FRAGILE ECROUISSABLE EST C COMPLETEMENT ENDOMMAGE . IL N Y A PAS DE COUPLAGE C 316 ICOUP=1 ICRIT1=IC1 ICRIME=5 XX=0.D0 C 12 FORMAT(1X,'ERREUR DANS COUPLE DANS LA VALEUR DE IC3 =',I4) 13 FORMAT(1X,'ERREUR DANS COUPLE ',/, . 1X,'ICAS =',I4,1X,'ICRIT1=',I4,1X,'ICRIME=',I4) C 900 FORMAT(1X,'ERREUR DANS COUPLE - NON CONVERGENCE',/, 901 FORMAT(1X,'ERREUR DANS COUPLE',/, . 1X,'DLAMBD(',I1,')=',1PD12.5, . 1X,'DLAMBD(',I1,')=',1PD12.5) 2000 FORMAT(1X,'XXX =',1PD12.5,1X,'DXX =',1PD12.5) . 1X,'DPELA1=',1PD12.5,1X,'DPELA2=',1PD12.5, . 1X,'PORELA=',1PD12.5,/, . 1X,'R1 =',1PD12.5,1X,'R2 =',1PD12.5, . 1X,'R3 =',1PD12.5,/, . 1X,'FSIG =',1PD12.5,1X,'FC =',1PD12.5) 2003 FORMAT(1X,'DDLAM1=',1PD12.5,1X,'DDLAM2=',1PD12.5) 3001 FORMAT(1X,'SIGEL =',6(1X,1PD12.5)) 3002 FORMAT(1X,'DSIGP =',6(1X,1PD12.5)) 3003 FORMAT(1X,'SIG =',6(1X,1PD12.5)) 3004 FORMAT(1X,'DSIG =',6(1X,1PD12.5)) 3005 FORMAT(1X,'SIGMAT=',6(1X,1PD12.5)) C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales