File: FITFOU.FT of Tape: Various/ETH/f2
(Source file text)
SUBROUTINE FITFOU 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 CDC JUST SO WE DON'T MISS THIS VITAL DECLARATION!! C DIMENSION=KMAX*4 REAL DEL(44),ROT(44) LOGICAL IMAX C 600 FORMAT(1H0,T10,'LOOP =',I4,' VARIANCE CHI =',F8.5//) 601 FORMAT(T10,'REDUCED LINEARITY RANGE =',F6.3) 602 FORMAT(T10,'PARAMETER NO. ',I2,' TRUNCATED') 603 FORMAT(T10,'MARQUARDT PARAM. =',F10.3) 605 FORMAT(///T10,'FIT NICHT BEENDET') C NA=K1*4 K3=SQRT(FLOAT(K1)) AMARQ=AMARQI LOOP=0 VAR=VARI C TEST OUTPUT 110 CALL OUTFOU(0) CALL SUBFOU(.F.) WRITE(3,600) LOOP,CHI IF (LOOP.EQ.0) GO TO 129 IF (CHISQ.LT.CHILST) GO TO 126 DO 120 J=1,NA J1=((J-1)/4)+1 J2=J-J1*4+4 Q(J1,J2)=Q(J1,J2)-DEL(J) 120 DEL(J)=0. LOOPLW=LOOP+1 IF (VAR.GT.VARMIN) GO TO 122 IF (AMARQI.EQ.0) GO TO 350 AMARQ=AMARQ*UPMARQ WRITE(3,603) AMARQ GO TO 180 122 VAR=VAR*DNVAR WRITE(3,601) VAR CALL SETFOU(VAR) DO 124 J=1,NA ROT(J)=ROT(J)/DNVAR IF (ABS(ROT(J)).LT.1.) GO TO 124 ROT(J)=SIGN(1.,ROT(J)) ASSIGN 124 TO MAXRET GO TO 400 124 CONTINUE GO TO 240 126 IF (AMARQ.LE.AMARQI) GO TO 127 AMARQ=AMARQ*DNMARQ GO TO 130 127 VAR=VARI C OR 127 IF (VAR.LT.VARI) VAR=VAR*UPVAR IF (IMAX) GO TO 130 IF (LOOP.LE.LOOPLW) GO TO 130 IF (SNORM.LT.FISTOP) GO TO 360 GO TO 130 129 CHIINI=CHI 130 IMAX=.FALSE. LOOP=LOOP+1 CHILST=CHISQ*(1.+FISTOP) IF (LOOP.GT.MLOOP) GO TO 350 CALL SETFOU(VAR) CALL NORFOU 180 DO 190 J=1,NA 190 AR(J,J)=DIAGEL(J)*(1.+AMARQ) CALL TRIFOU(NA) CALL DIAFOU(NA) DO 210 J=1,NA C COMPULSORY FOR SECOND DERIVS. D(J)=ABS(D(J)) ROT(J)=0. DO 220 K=1,NA 220 ROT(J)=ROT(J)+Z(K,J)*C(K) IF (ABS(ROT(J)).LT.D(J)) GO TO 230 ROT(J)=SIGN(1.,ROT(J)) ASSIGN 214 TO MAXRET GO TO 400 230 ROT(J)=ROT(J)/D(J) 214 CONTINUE 210 CONTINUE 240 SNORM=0. DO 300 J=1,NA DEL(J)=.0 TNORM=.0 DO 310 K=1,NA TNORM=TNORM+Z(J,K)*Z(J,K)/D(K) DEL(J)=DEL(J)+Z(J,K)*ROT(K) 310 CONTINUE IF (IMAX) GO TO 330 SNORM=SNORM+DEL(J)*DEL(J)/TNORM 330 J1=((J-1)/4)+1 J2=J-J1*4+4 DEL(J)=DEL(J)*D1(J1,J2) Q(J1,J2)=Q(J1,J2)+DEL(J) IF (J2.NE.4) GO TO 320 IF (ABS(Q(J1,4)).LT.30.) GO TO 320 QM=SIGN(30.,Q(J1,4)) DEL(J)=QM-Q(J1,4)+DEL(J) Q(J1,4)=QM 320 AR(J,J)=TNORM*CHISQ*D1(J1,J2)*D1(J1,J2) 300 CONTINUE GO TO 110 C C FINAL OUTPUT C 350 WRITE(3,605) 360 CALL OUTFOU(1) RETURN C C TRUNCATION INTERNAL SUBROUTINE C 400 TEMAX=0. DO 410 M=1,NA TEMTST=ABS(Z(M,J)) IF (TEMTST.LT.TEMAX) GO TO 410 TEMAX=TEMTST MAXI=M 410 CONTINUE IMAX=.TRUE. IF (ITEST) WRITE(3,602) MAXI GO TO MAXRET,(124,214) C END