File: SERFOU.FT of Tape: Various/ETH/f2
(Source file text)
SUBROUTINE SERFOU(IPASS) C COMMON /TITLE/ ADENT,GLOBAL,RUN,ICREAT COMMON /FITPAR/ JIT,FISTOP,AMARQI,UPMARQ,DNMARQ,VARI, $ UPVAR,DNVAR,VARMIN,MLOOP,LOOPLW,ISTART,ISTOP,ITEST,IDEFIX COMMON /PARAM/ DKHI,SHFACT,CHISQ,ITORQ,IDILA,DK,DL,HANG $ ,HUP,HDOWN,AMI,PS,PT,SOLLT,TEMP,TV,ES,AKL,AKV,CAP,EICH COMMON /PEAKS/ TASWI,KBLOW,KBLOW1,KMAX,K1,K3,CHI, $ Q(11,4),HIGHT(21),INDEX(21) COMMON /VECT/ C(44),D1(11,4),DIAGEL(44),D(44),E(44) COMMON /DATIN/ F(512),NP COMMON /CONST/ PI,TWOPI COMMON /PLOTC/ PLTBUF(400) COMMON /FAF/ A(2049),B(2049),N DIMENSION AR(44,44),Z(44,44) EQUIVALENCE (A,AR),(B,Z) INTEGER RUN REAL K3 LOGICAL ITORQ,IDILA,ITEST,TASWI C REAL NF C 100 FORMAT(1H1,T10,'PASS 1 SEARCH; CHI = ',G14.5,//) 110 FORMAT(1H1,T10,'PASS 2 SEARCH; CHI = ',G14.5,//) 120 FORMAT(1H0,T10,'FINAL SEARCH; CHI = ',G14.5,//) 130 FORMAT(1H ,T10,'NEW KBLOW =',I5,/) 160 FORMAT(1H ,T10,'NF-PH-AF-TA =',4(G14.5,2X),//) C KEEP=K1 KBLMIN=FLOAT(N/NP)*1.5 KLAST=KMAX+1 INEW=ISIGN(1,IPASS) IF (IPASS.GT.0) WRITE(3,100) CHI IF (IPASS.LT.0) WRITE(3,110) CHI IF (IPASS.EQ.0) WRITE(3,120) CHI IF (IPASS.EQ.0) KLAST=KMAX*2+1 IF (IPASS.LE.0) GO TO 6 KBLOW1=FLOAT((N/NP)*KBLOW)/100. TASWI=.F. KLAST=KMAX/2+1 K1=1 2 JA=K1+1 JE=KMAX*2+1 DO 5 J=JA,JE INDEX(J)=0 5 HIGHT(J)=0. GO TO 1 6 DO 4 J=2,K1 HIGHT(J)=ABS(Q(J,3)) 4 INDEX(J)=-INEW*IFIX(Q(J,1)*FLOAT(N)/TWOPI) 1 I=3*N/NP 3 JA=I-KBLOW1 JE=I-1 DO 10 J=JA,JE IF (A(J+1).LT.A(J)) GO TO 15 10 CONTINUE JA=I JE=I+KBLOW1/2-1 DO 12 J=JA,JE IF (A(J+1).GT.A(J)) GO TO 20 12 CONTINUE GO TO 35 15 JA=I JE=I+KBLOW1-1 DO 30 J=JA,JE IF (A(J+1).GT.A(J)) GO TO 20 30 CONTINUE JA=I-KBLOW1/2 JE=I-1 DO 32 J=JA,JE IF (A(J+1).LT.A(J)) GO TO 20 32 CONTINUE 35 HIGH=A(I)*FLOAT(N/NP) IND=I*INEW DO 40 K=2,KLAST IDIST=IABS(I-IABS(INDEX(K))) IF (IDIST.LT.KBLMIN) GO TO 45 IF (IDIST.GE.2*KBLMIN) GO TO 36 DO 37 LL=2,KLAST IF (K.EQ.LL) GO TO 37 IDIST=IABS(IABS(INDEX(K))-IABS(INDEX(LL))) IF (IDIST.LT.KBLMIN) GO TO 45 37 CONTINUE 36 IF (HIGH.LT.HIGHT(K)) GO TO 40 IF (K.EQ.KLAST) GO TO 52 LE=KLAST-K DO 50 LL=1,LE L=KLAST-LL HIGHT(L+1)=HIGHT(L) INDEX(L+1)=INDEX(L) IF (IPASS.EQ.0) GO TO 50 DO 53 M=1,4 53 Q(L+1,M)=Q(L,M) 50 CONTINUE 52 HIGHT(K)=HIGH INDEX(K)=IND IF (K1.LT.KLAST) K1=K1+1 GO TO 45 40 CONTINUE 45 I=I+KBLOW1/2-1 20 I=I+1 IF (I.LE.N/2-KBLOW1) GO TO 3 IF (IPASS.LE.0) GO TO 25 CALL TAUFOU(INDEX(2),FNU,PHI,AF,TAU) IF (ABS(TAU).LT.2.) GO TO 25 IF (TASWI) GO TO 25 TASWI=.T. KBLOW1=KBLOW1*(1.+(ABS(TAU)-2.)/3.) K1=2 WRITE(3,130) KBLOW1 GO TO 2 25 KK=K1 HIGH=CHISQ IF (IPASS.EQ.0) HIGH=CHISQ/100. HIGH=SQRT(HIGH/K1)/2. K1=2 DO 57 I=3,KK IF (HIGHT(I).GT.HIGH) GO TO 56 INDEX(I)=0 HIGHT(I)=0. GO TO 57 56 K1=K1+1 57 CONTINUE DO 60 I=2,K1 IF (INDEX(I)*INEW.LT.0) GO TO 60 CDC REMOVE 5 MID=INDEX(I)*INEW-64 IF (MID.LT.0) MID=0 MIDMAX=N/2-64 IF (MID.GT.MIDMAX) MID=MIDMAX CALL SCOPE(.T.,.T.,MID) CALL TAUFOU(INDEX(I)*INEW,FNU,PHI,AF,TAU) IF (IPASS.EQ.0) GO TO 58 Q(I,1)=TWOPI*FNU/NP Q(I,2)=PHI Q(I,3)=AF Q(I,4)=-TAU 58 NF=FNU/DL PH=PHI*180./PI AM=AF*EICH TA=-TAU/DL WRITE(3,160) NF,PH,AM,TA 60 CONTINUE IF (IPASS.EQ.0) K1=KEEP RETURN END