DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦8cf2e3f9f⟧ TextFile

    Length: 92928 (0x16b00)
    Types: TextFile
    Names: »taldiscr«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦this⟧ »taldiscr« 

TextFile

(mode list.yes
discrlist=set 400
discrete=set 200
scope day discrete discrlist
head cpu
if listing.yes
o discrlist
discrete=fortran cardmode.yes cond.yes names.yes,
   index.no trunc.yes
o c
head cpu
mode list.no
finisb)
c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      program discrete
c     version 1980-11-13
c     common adjusted for logical variables
c     double presicion removed
c     character handling changed
c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C-----------------------------------------------------------------------
C  DISCRETE - VERSION 1A (MARCH 1976).  FOR THE AUTOMATIC ANALYSIS OF
C      MULTICOMPONENT EXPONENTIAL DECAY DATA FOR UP TO 5 COMPONENTS.
C  MUST BE RUN ON A COMPUTER WITH AT LEAST 7 SIGNIFICANT FIGURES IN
C      ITS SINGLE PRECISION FORTRAN ARITHMETIC.  OTHERWISE THE DOUBLE
C      PRECISION VERSION 1B SHOULD BE USED.
C  REFERENCES - S. W. PROVENCHER (1976) WRITE UP OF DISCRETE,
C                                (1976) IN PREPARATION,
C                                (1976) J. CHEM. PHYS., VOL. 64, 2772,
C                                (1976) BIOPHYS. J., VOL. 16, 27-41.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - BLOCKDATA, DATAIO, WEIGHT, FANLYZ, YANLYZ
C  WHICH IN TURN CALL - LSTSQR, EVAR, VARF, ETHEOR, PIVOT, PIVOT1,
C                       ANLERR, FISHER, RESIDU, PLPRES
C-----------------------------------------------------------------------
c----------------------------------------------------------------------
c  change of input to read beam foil data in free format
c----------------------------------------------------------------------
      external in,out; zone in,out
      external freadb,freadr,ifreadi,freadra; logical freadb
      LOGICAL LAST, REGINT, LBLOKA
      COMMON /BLOK/ RBLOKA(3535), IBLOKA(169), NMAX, NINTMX, IBLOKB(9),
a     ibloka 149->169
     1 REGINT, LBLOKA(38)
A    ADJUSTED FROM 29 TO 38
C
C***********************************************************************
C***********************************************************************
C
C  THE FOLLOWING INSTRUCTIONS DESCRIBE ALL POSSIBLE NECESSARY CHANGES
C  THAT YOU MAY HAVE TO MAKE IN THE MAIN PROGRAM. (SEE ALSO THE
C  BLOCKDATA SUBPROGRAM.)
C
C***********************************************************************
C  IF YOU CHANGE NMAX IN THE BLOCKDATA SUBPROGRAM, YOU MUST READJUST
C  THE DIMENSIONS IN THE FOLLOWING STATEMENT TO NMAX -
C
      DIMENSION T(333), Y(333), SQRTW(333), YLYFIT(333)
C
C***********************************************************************
C  ORDINARILY E SHOULD BE DIMENSIONED E(NMAX,6) IN THE FOLLOWING
C  STATEMENT.  HOWEVER, IF YOU WILL ALWAYS INPUT REGINT=.TRUE., AND
C  IF NMAX IS GREATER THAN 333, YOU CAN SAVE STORAGE BY DIMENSIONING
C  IT AS E(1,6) -
C
      DIMENSION E(333,6)
C
C***********************************************************************
C  ORDINARILY GSE SHOULD BE DIMENSIONED GSE(500,4).  HOWEVER, IF YOU
C  WILL ALWAYS INPUT REGINT=.FALSE., AND IF NMAX IS LESS THAN 333,
C  YOU CAN SAVE A LITTLE STORAGE BY DIMENSIONING IT AS GSE(1,4) IN
C  THE FOLLOWING STATEMENT -
C
      DIMENSION GSE(500,4)
C
C***********************************************************************
C  IF YOU CHANGE NINTMX IN THE BLOCKDATA SUBPROGRAM, YOU MUST
C  READJUST THE DIMENSIONS IN THE FOLLOWING STATEMENT TO NINTMX -
C
      DIMENSION TSTART(10), NT(10), DELTAT(10)
C
C  THIS IS THE END OF ALL POSSIBLE CHANGES YOU MAY HAVE TO MAKE IN
C  THE MAIN PROGRAM.
C
C***********************************************************************
C***********************************************************************
C
      EQUIVALENCE (E(1,1),GSE(1,1))
C-----------------------------------------------------------------------
C  DATAIO IS FOR INPUT AND OUTPUT OF INPUT DATA
  100 CALL DATAIO (T,Y,SQRTW,NMAX,TSTART,DELTAT,NT,NINTMX,LAST)
      IF (REGINT) GO TO 110
      NDIME=NMAX
      NDIMG=1
      GO TO 200
  110 NDIME=1
      NDIMG=500
C-----------------------------------------------------------------------
C  WEIGHT GENERATES CRUDE STARTING VALUES FOR CONSTRAINED LEAST SQUARES
C      FITS TO RAW DATA TO GENERATE WEIGHTS AND DOES INITIAL
C      COMPUTATIONS OF QUANTITIES FOR LATER USE.
  200 CALL WEIGHT (.FALSE.,Y,T,SQRTW,YLYFIT,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
C-----------------------------------------------------------------------
C  FANLYZ IS FOR THE CONSTRAINED STEPWISE LEAST SQUARES ANALYSIS OF
C      THE RAW DATA AND THE TRANSFORMS TO GET STARTING ESTIMATES
C      FOR THE FINAL LEAST SQUARES ANALYSES OF THE RAW DATA.
      CALL FANLYZ (T,Y,SQRTW,YLYFIT,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
C-----------------------------------------------------------------------
C  WEIGHT USES STARTING VALUES FROM FANLYZ FOR CONSTRAINED LEAST
C      SQUARES FITS TO RAW DATA TO GENERATE WEIGHTS FOR THE FINAL
C      LEAST SQUARES FITS TO THE RAW DATA.
      CALL WEIGHT (.TRUE.,Y,T,SQRTW,YLYFIT,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
C-----------------------------------------------------------------------
C  YANLYZ IS FOR THE CONSTRAINED STEPWISE LEAST SQUARES ANALYSIS OF
C      THE RAW DATA (USING THE STARTING VALUES OBTAINED FROM FANLYZ
C      AND THE WEIGHTS FROM WEIGHT).
      CALL YANLYZ (T,Y,SQRTW,YLYFIT,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
C-----------------------------------------------------------------------
      IF (.NOT.LAST) GO TO 100
      STOP
      END
      SUBROUTINE BLOCKDATA
      LOGICAL REGINT, FAILED, PRPREL, NOBASE, WTED, REPEAT, PLOTRS,
     1 NONNEG, FFAIL, PIVALP, PRFINL
      REAL LAMST, LAMF, LAMNMX
      LONG LABEL
      COMMON /BLOK/ TRBASE(11), GF(11,126), DGFL(11,126), DGRIDF,
     1 GFSTL, FHAT(11), DELTA, VARMIN, FHATMX, SUMWTY,
     2 SUMWT, ZERO(6), CONVRG, LAMST(5), LAMF(5,5,2), DGRIDE, GESTL,
     3 VAR, LAMNMX(2,2), PALPHA(6), PLAM(6), PRECIS, SIGYY, ENPHI,
     4 SE(6,6), SIGMAP(11), PCERR(11), VGRID2(252), PLMTRY(6),
     5 DELTAP(10), DFCAPL(6,5), SFDE(5), ADUB(11,11), DDSE(5,5)
      COMMON /BLOK/ DTOLER(11), F(11,6), DF(11,6), JGEADD, NBINOM(20,5),
     1 NVGRID(5), NPERG2(5), MDIMA, IBASE, IWTSGN, MINTER, MLAMMX,
     2 NGRID2(5), NLAMMX, IWT, LABEL(20), NINT, NF, N, IWRITE, IREAD,
     3 LINEPG, NMAX, NINTMX, MTRY, ITER, JLAMP1, NFTRY(5), NSIGFG,
     4 REGINT, FAILED, PRPREL, NOBASE, WTED, REPEAT, PLOTRS, NONNEG,
     5 FFAIL(5,2), PIVALP(11), PRFINL
C
C***********************************************************************
C***********************************************************************
C
C  THE FOLLOWING INSTRUCTIONS DESCRIBE ALL POSSIBLE NECESSARY CHANGES
C  THAT YOU MAY HAVE TO MAKE IN THE BLOCKDATA SUBPROGRAM. (SEE THE
C  MAIN PROGRAM ALSO.)
C
C***********************************************************************
C  ALL STATEMENTS FOR READING CARDS AND FOR PRINTING OUTPUT ARE OF
C  THE FORM READ (IREAD,... AND WRITE(IWRITE,....  THUS, IREAD AND
C  IWRITE MAY HAVE TO BE CHANGED TO THE VALUES APPROPRIATE FOR YOUR
C  COMPUTER CENTER IN THE FOLLOWING STATEMENT -
C
      DATA IREAD/5/,IWRITE/6/
C
C***********************************************************************
C  IN THE FOLLOWING STATEMENT, NSIGFG MUST BE SET TO THE NUMBER OF
C  SIGNIFICANT FIGURES CARRIED IN THE SINGLE PRECISION FLOATING POINT
C  ARITHMETIC OF YOUR COMPUTER (E.G., 7 FOR IBM 360, 8 FOR
C  UNIVAC 1108, ETC.) -
C
      DATA NSIGFG/11/
C
C***********************************************************************
C  IN THE FOLLOWING STATEMENT, LINEPG MUST BE SET TO THE NUMBER OF
C  LINES PER PAGE AVAILABLE FOR PRINTED OUTPUT ON YOUR PRINTER -
C
      DATA LINEPG/66/
C
C***********************************************************************
C  NMAX MUST BE GREATER THAN OR EQUAL TO THE MAXIMUM NUMBER OF DATA
C  POINTS YOU WILL EVER USE.  CORE STORAGE CAN BE SAVED BY KEEPING
C  NMAX AS LITTLE ABOVE THIS MAXIMUM AS POSSIBLE.  IF YOU CHANGE NMAX
C  IN THE FOLLOWING STATEMENT, YOU MUST ALSO RESET THE DIMENSIONS AS
C  DIRECTED IN THE MAIN PROGRAM -
C
      DATA NMAX/333/
C
C***********************************************************************
C  NINTMX MUST BE GREATER THAN OR EQUAL TO THE MAXIMUM VALUE OF NINT
C  YOU WILL EVER USE WITH REGINT=.TRUE.. IF YOU CHANGE
C  NINTMX IN THE FOLLOWING STATEMENT, YOU MUST ALSO RESET THE
C  DIMENSIONS AS DIRECTED IN THE MAIN PROGRAM -
C
      DATA NINTMX /10/
C
C  THIS IS THE END OF ALL POSSIBLE NECESSARY CHANGES YOU MAY HAVE TO
C  MAKE IN THE BLOCK DATA SUBPROGRAM
C
C***********************************************************************
C***********************************************************************
C
      DATA NGRID2/0, 20, 12, 10, 10/,MINTER/7/,
     1 CONVRG/5.E-5/,MLAMMX/5/, SIGMAP/11*0./
      END
C-----------------------------------------------------------------------
C  SUBROUTINE DATAIO.  FOR INPUT AND OUTPUT OF INITIAL INPUT DATA
C-----------------------------------------------------------------------
C  CALLS NO EXTERNAL SUBPROGRAMS.
C-----------------------------------------------------------------------
      SUBROUTINE DATAIO (T,Y,SQRTW,NMAX,TSTART,DELTAT,NT,NINTMX,LAST)
      external in,out; zone in,out
      external freadb,freadr,ifreadi,freadra; logical freadb
      LOGICAL REGINT, LAST, NONNEG, NOBASE, PRY, PRPREL, PLOTRS, REPEAT,
     1 LBLOKA, LBLOKB, LBLOKC, ABORT, PRFINL
      LONG LA(9), LATF(2),LABEL
      COMMON /BLOK/ RBLOKA(3535), IBLOKA(113), IWTSGN, IBLOKB, MLAMMX,
     1 IBLOKC(5), NLAMMX, IWT, LABEL(20), NINT, IBLOKD, N, IWRITE,
     2 IREAD, IBLOKE(3), MTRY, IBLOKF(8), REGINT, LBLOKA, PRPREL,
     3 NOBASE, LBLOKB, REPEAT, PLOTRS, NONNEG, LBLOKC(21), PRFINL
      DIMENSION T(NMAX), Y(NMAX), SQRTW(NMAX), TSTART(NINTMX),
     1 NT(NINTMX), DELTAT(NINTMX)
      LATF(1)='T     '
      LATF(2)='F     '
 5010 FORMAT (12A6)
      READ (IREAD,5010) LABEL
 5020 FORMAT (35H1DISCRETE - VERSION 1A (MARCH 1976))
      WRITE (IWRITE,5020)
 5222 FORMAT(12A6)
      WRITE(IWRITE,5222) LABEL
      ABORT=.FALSE.
c     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
c5100 FORMAT (9A1,3I3)
c     READ (IREAD,5100) LA,NLAMMX,IWT,MTRY
      read(iread,5100) la
 5100 format(9a1)
      nlammx=ifreadi(in)
      iwt   =ifreadi(in)
      mtry  =ifreadi(in)
c     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      DO 101 J=1,9
      IF (LA(J).EQ.LATF(1) .OR. LA(J).EQ.LATF(2)) GO TO 101
 5101 FORMAT (/43H THE FOLLOWING CARD HAS NO T OR F IN COLUMN,I2)
      WRITE (IWRITE,5101) J
      ABORT=.TRUE.
  101 CONTINUE
      IF (NLAMMX.GE.1 .AND. NLAMMX.LE.MLAMMX) GO TO 102
 5102 FORMAT (/9H NLAMMX =,I4,21H IS NOT BETWEEN 1 AND,I2)
      WRITE (IWRITE,5102) NLAMMX, MLAMMX
      ABORT=.TRUE.
  102 IF (IWT.EQ.1 .OR. IABS(IWT).EQ.2 .OR. IABS(IWT).EQ.3
     1 .OR. IWT.EQ.4) GO TO 103
 5103 FORMAT (/1X,I4,29H IS AN IMPROPER VALUE FOR IWT)
      WRITE (IWRITE,5103) IWT
      ABORT=.TRUE.
  103 IF (MTRY.GE.1 .AND. MTRY.LE.45) GO TO 104
 5104 FORMAT (/7H MTRY =,I4,24H IS NOT BETWEEN 1 AND 45)
      WRITE (IWRITE,5104) MTRY
      ABORT=.TRUE.
  104 IF (.NOT.ABORT) GO TO 105
 5105 FORMAT (/21H ERRONEOUS CARD IMAGE,10X,9A1,3I3)
      WRITE (IWRITE,5105) LA,NLAMMX,IWT,MTRY
      STOP
  105 LAST=LA(1) .EQ. LATF(1)
      REGINT=LA(2) .EQ. LATF(1)
      NOBASE=LA(3) .EQ. LATF(1)
      NONNEG=LA(4) .EQ. LATF(1)
      PRY=LA(5) .EQ. LATF(1)
      PRPREL=LA(6) .EQ. LATF(1)
      PRFINL=LA(7) .EQ. LATF(1)
      PLOTRS=LA(8) .EQ. LATF(1)
      REPEAT=LA(9) .EQ. LATF(1)
 5106 FORMAT (/7H LAST =,L2,1X,8HREGINT =,L2,2X,8HNOBASE =,L2,2X,
     1 8HNONNEG =,L2,2X,5HPRY =,L2/9H PRPREL =,L2,2X,8HPRFINL =,L2,2X,
     2 8HPLOTRS =,L2,2X,8HREPEAT =,L2/9H NLAMMX =,I2,1X,8HIWT    =,
     3 I2,2X,8HMTRY   =,I3)
      WRITE (IWRITE,5106) LAST,REGINT,NOBASE,NONNEG,PRY,PRPREL,PRFINL,
     1 PLOTRS,REPEAT,NLAMMX,IWT,MTRY
      IWTSGN=IWT
      IWT=IABS(IWT)
      IF (REGINT) GO TO 150
C-----------------------------------------------------------------------
C  READS IN T VALUES (REGINT=.FALSE.).
C-----------------------------------------------------------------------
c     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
c     READ (IREAD,5110) N
 5110 FORMAT (I5)
c     READ (IREAD,5120) (T(J),J=1,N)
 5120 FORMAT (5E15.6)
      n=ifreadi(in);
      call freadra(in,t,n)
c     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      NINT=1
      TSTART(1)=0.
      DELTAT(1)=0.
      NT(1)=N
      GO TO 200
C-----------------------------------------------------------------------
C  CALCULATES T VALUES FROM TSTART, TEND, AND NT (REGINT=.TRUE.).
C-----------------------------------------------------------------------
c 150 READ (IREAD,5110) NINT
  150 nint=ifreadi(in)
      IF (NINT.LE.NINTMX .AND. NINT.GE.1) GO TO 160
 5160 FORMAT (///7H NINT =,I5,30H IS NOT BETWEEN 1 AND NINTMX =,I2)
      WRITE (IWRITE,5160) NINT,NINTMX
      STOP
 5165 FORMAT (///9X,6HTSTART,11X,4HTEND,3X,2HNT)
  160 WRITE (IWRITE,5165)
      N=0
      DO 170 J=1,NINT
c     READ (IREAD,5170) TSTART(J),TEND,NT(J)
      tstart(j)=freadr(in); tend=freadr(in); nt(j)=ifreadi(in)
 5170 FORMAT (2E15.6,I5)
      WRITE (IWRITE,5170) TSTART(J),TEND,NT(J)
      IF (NT(J) .GE. 2) GO TO 175
 5175 FORMAT (/24H ABOVE NT IS LESS THAN 2)
      WRITE (IWRITE,5175)
      STOP
  175 DUM=(TEND-TSTART(J))/FLOAT(NT(J)-1)
      N=N+1
      T(N)=TSTART(J)
      L=NT(J)
      DELTAT(J)=DUM
      DO 180 K=2,L
      N=N+1
  180 T(N)=T(N-1)+DUM
  170 CONTINUE
C-----------------------------------------------------------------------
C  READS IN Y VALUES.
C-----------------------------------------------------------------------
  200 IF (N.GT.2*NLAMMX+1 .AND. N.LE.NMAX) GO TO 205
 5205 FORMAT (///4H N =,I5,37H IS NOT BETWEEN 2*NLAMMX+1 AND NMAX =,I5)
      WRITE (IWRITE,5205) N,NMAX
      STOP
  205 IF (PRY) WRITE (IWRITE,5004)
 5004 FORMAT (///1X)
c     READ (IREAD,5120) (Y(J),J=1,N)
      call freadra(in,y,n)
  210 IF (IWT .EQ. 4) GO TO 220
      IF (.NOT.PRY) GO TO 500
 5210 FORMAT (2(16X,1HT,12X,1HY)/)
      WRITE (IWRITE,5210)
 5220 FORMAT (2(1PE17.5,E13.5))
      WRITE (IWRITE,5220) (T(J),Y(J),J=1,N)
      GO TO 500
C-----------------------------------------------------------------------
C  READS IN SPECIAL WEIGHTS (IWT=4).
C-----------------------------------------------------------------------
c 220 READ (IREAD,5120) (SQRTW(J),J=1,N)
  220 call freadra(in,sqrtw,n)
      DO 227 J=1,N
  227 SQRTW(J)=SQRT(SQRTW(J))
      IF (.NOT.PRY) GO TO 500
 5230 FORMAT (2(17X,1HT,12X,1HY,5X,8HSQRT(WT))/)
      WRITE (IWRITE,5230)
 5240 FORMAT (2(1PE18.5,2E13.5))
      WRITE (IWRITE,5240) (T(J),Y(J),SQRTW(J),J=1,N)
  500 RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE WEIGHT.  DOES INITIAL LEAST SQUARES FITS TO RAW DATA TO
C      GENERATE WEIGHTS, EVALUATES DATA TRANSFORMS, TRANSFORM AND
C      EXPONENTIAL SUMS AT GRID POINTS FOR INTERPOLATION, AND OTHER
C      QUANTITIES FOR LATER USE.
C  IF FINAL=.TRUE. USES LAMF (VALUES FROM FANLYZ).
C  IF FINAL=.FALSE., GENERATES ITS OWN CRUDE STARTING LAMBDAS.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - LSTSQR, ETHEOR
C  WHICH IN TURN CALL - EVAR, PIVOT, PIVOT1, ANLERR
C-----------------------------------------------------------------------
      SUBROUTINE WEIGHT (FINAL,Y,T,SQRTW,TIMU,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
      EXTERNAL EVAR
      LOGICAL FINAL, REGINT, NOBASE, WTED, FAILED, LDUM, LBLOKA, PRPREL,
     1 LBLOKB, FFAIL
      REAL LAMNMX, LAMST, LAMF, MU
      LONG ALPH(3,2), LABEL
      COMMON /BLOK/ TRBASE(11), GF(11,126), DGFL(11,126), DGRIDF,
     1 GFSTL, FHAT(11), DELTA, VARMIN, FHATMX, SUMWTY,
     2 SUMWT, ZERO(6), CONVRG, LAMST(5), LAMF(5,5,2), DGRIDE, GESTL,
     3 VAR, LAMNMX(2,2), PALPHA(6), PLAM(6), PRECIS, RBLOKA(652)
      COMMON /BLOK/ JGEADD, NBINOM(20,5), NVGRID(5),
     1 NPERG2(5), MDIMA, IBASE, IWTSGN, MINTER, MLAMMX, NGRID2(5),
     2 NLAMMX, IWT, LABEL(20), NINT, NF, N, IWRITE, IBLOKA(12), NSIGFG,
     3 REGINT, FAILED, PRPREL, NOBASE, WTED, LBLOKA(6), FFAIL(5,2),
     4 LBLOKB(14)
a      lbloka 3->6, lblokb 12->14
      DIMENSION E(NDIME,6), WTALP(6), WTLAM(6), MU(11)
      DIMENSION Y(NMAX), T(NMAX), SQRTW(NMAX), TIMU(NMAX),
     1 TSTART(NINTMX), DELTAT(NINTMX), NT(NINTMX), GSE(NDIMG,4),
     2 TNLAMN(2), GAMMA(21)
C++++++++++
      ALPH(1,1)='TRAN'; ALPH(2,1)='SFOR'; ALPH(3,2)='MS'
      ALPH(1,2)='RAW' ; ALPH(2,2)='DATA'; ALPH(3,2)=' '
      TNLAMN(1)=.2    ; TNLAMN(2)=.02
      T1LAMX=2.08
      NGRID1=240
      NG2MAX=20
C++++++++++
      IF (FINAL) GO TO 120
      FHATMX=0.
      PRECIS=EXP(-2.303*(FLOAT(NSIGFG)-2.))
      PRECIS=AMAX1(1.E-7,PRECIS)
      MDIMA=2*MLAMMX+1
      K=MLAMMX+1
      DO 105 J=1,K
  105 ZERO(J)=0.
      TN=-1.E+20
      DDUM=-1.E+20
      DO 106 K=1,5
      DUM=1.E+20
      DO 107 J=1,N
      IF (K .EQ. 1) TN=AMAX1(TN,T(J))
  107 IF (T(J).GT.DDUM .AND. T(J).LT.DUM) DUM=T(J)
      DDUM=DUM+1.E-5*ABS(DUM)
      IF (K .EQ. 1) T1=DUM
      IF (K .EQ. 2) T2=DUM
  106 CONTINUE
      T5=DUM
      TNL1=-1.E+20
      DUM=TN-1.E-5*ABS(TN)
      DO 108 J=1,N
  108 IF (T(J) .LT. DUM) TNL1=AMAX1(TNL1,T(J))
      DUM=.25*(T5-T1)
      DELTA=DUM-T1
C-----------------------------------------------------------------------
C  LAMNMX(J,K) = MIN. (J=1) AND MAX. (J=2) ALLOWED VALUES OF LAMBDA
C      FOR LEAST SQUARES PARAMETERS (K=1) AND FOR STARTING VALUES (K=2).
C-----------------------------------------------------------------------
      LAMNMX(2,1)=T1LAMX/(T1+DELTA)
      LAMNMX(2,2)=AMIN1(LAMNMX(2,1),.693/(T1+DELTA))
      LAMNMX(1,2)=TNLAMN(1)/(TN+DELTA)
      IF (NOBASE) GO TO 110
      NPARMX=2*NLAMMX+1
      IBASE=1
      LAMNMX(1,1)=LAMNMX(1,2)
      GO TO 115
  110 IBASE=0
      NPARMX=2*NLAMMX
      FHAT(NPARMX+1)=0.
      LAMNMX(1,1)=TNLAMN(2)/(TN+DELTA)
C-----------------------------------------------------------------------
C  IF NECESSARY, INCREASE DELTA SO THAT DISTANCE BETWEEN FIRST TWO
C      POINTS ON X=ALOG(T+DELTA) AXIS IS LESS THAN A HALF-PERIOD OF
C      THE HIGHEST FREQUENCY USED IN THE TRANSFORMS
C-----------------------------------------------------------------------
  115 XRANGE=ALOG((TN+DELTA)**2/((T1+DELTA)*(TNL1+DELTA)))
      IF (ALOG((T2+DELTA)/(T1+DELTA))*FLOAT(2*NLAMMX) .LT. XRANGE)
     1 GO TO 150
      DELTA=DELTA+DUM
      GO TO 115
  120 IWT=IABS(IWTSGN)
      IF (IWT.EQ.1 .OR. IWT.EQ.4) RETURN
      DO 130 J=1,N
  130 Y(J)=Y(J)/SQRTW(J)
  150 IF (IWT .EQ. 4) GO TO 400
      SUMWT=FLOAT(N)
      SUMWTY=0.
      VARMIN=0.
      DO 160 J=1,N
      SUMWTY=SUMWTY+Y(J)
      VARMIN=VARMIN+Y(J)*Y(J)
  160 SQRTW(J)=1.
      VARMIN=VARMIN*CONVRG**2
      IF (IWT.EQ.1) GO TO 400
      WTED=.FALSE.
      VARBES=1.E+20
      RATIOL=LAMNMX(2,2)/LAMNMX(1,2)
C-----------------------------------------------------------------------
C  START OF MAIN LOOP FOR STEPWISE ANALYSIS
C-----------------------------------------------------------------------
      DO 200 JLAM=1,NLAMMX
      NF=2*JLAM+IBASE
 5200 FORMAT (1H1,12A6//5X,
     1 41HPRELIMINARY ANALYSIS TO DETERMINE WEIGHTS/5X,
     2 17HANALYSIS ASSUMING,I2,11H COMPONENTS)
      IF (PRPREL) WRITE (IWRITE,5200) LABEL,JLAM
      IF (FINAL) GO TO 220
      FFAIL(JLAM,1)=.TRUE.
      DUM=RATIOL**(1./FLOAT(JLAM+1))
      LAMST(1)=LAMNMX(1,2)*DUM
      IF (JLAM .EQ. 1) GO TO 240
      DO 210 J=2,JLAM
  210 LAMST(J)=LAMST(J-1)*DUM
      GO TO 240
  220 DO 230 J=1,JLAM
  230 LAMST(J)=LAMF(J,JLAM,1)
  240 CALL LSTSQR (LAMST,JLAM,.TRUE.,N,Y,T,JLAM+IBASE,EVAR,GSE,NDIMG,
     1 SQRTW,TIMU,E,NMAX,TSTART,DELTAT,NT,NINT,1,FFAIL(JLAM,1),NDIME,
     2 .FALSE.,PRPREL)
      IF (FAILED .OR. VAR.GE.VARBES) GO TO 300
      VARBES=VAR
      NLINWT=JLAM+IBASE
      DO 260 J=1,NLINWT
      WTALP(J)=PALPHA(J)
  260 WTLAM(J)=PLAM(J)
      IF (IWTSGN .LT. 0) NLINWT=JLAM
  200 CONTINUE
  300 IF (VARBES .LT. 1.E+20) GO TO 310
 5300 FORMAT (////34H 1-COMPONENT ANALYSIS TO DETERMINE,
     1 54H WEIGHTS SOMEHOW FAILED - UNIT WEIGHTS WILL BE USED.  ,
     2 11(2H**))
      WRITE (IWRITE,5300)
      IWT=1
      GO TO 400
C-----------------------------------------------------------------------
C  CALCULATE WEIGHTS INCLUDING ERRFIT (STANDARD ERROR IN REGION OF
C      THE THEORETICAL CURVE WHERE IT IS CLOSEST TO Y=0., WHERE A
C      WEIGHT COULD OTHERWISE BE DISASTROUSLY LARGE IF ERRFIT WERE
C      NOT ACCOUNTED FOR).
C-----------------------------------------------------------------------
  310 DUM=1.E+20
      DO 320 K=1,N
      S=0.
      DDUM=T(K)
      DO 330 J=1,NLINWT
  330 S=S+WTALP(J)*EXP(-DDUM*WTLAM(J))
      TIMU(K)=S
      IF (ABS(S) .GE. DUM) GO TO 320
      DUM=ABS(S)
      L=K
  320 CONTINUE
      K=MIN0(N,L+5)
      I=MAX0(1,K-9)
      DUM=0.
      DDUM=0.
      IF (IWTSGN.LT.0 .AND. .NOT.NOBASE) DDUM=WTALP(NLINWT+1)
      DO 340 J=I,K
  340 DUM=DUM+(Y(J)-TIMU(J)-DDUM)**2
      ERRFIT=SQRT(DUM/FLOAT(K-I+1))
      DO 350 K=1,N
      SQRTW(K)=1./(ABS(TIMU(K))+ERRFIT)
      IF (IWT .EQ. 2) SQRTW(K)=SQRT(SQRTW(K))
  350 CONTINUE
      L=1
      IF (FINAL) L=2
 5350 FORMAT (/////41H PARAMETERS USED TO GENERATE WEIGHTS FOR ,
     1 3A4//5X,6HLAMBDA,9X,5HALPHA,
     2 /49HERRFIT (UNCERTAINTY TERM ADDED TO ABSOLUTE VALUES,
     3 24H OF THEORETICAL CURVE) =,1PE9.2/(1X,1PE10.3,E14.3))
      WRITE (IWRITE,5350) (ALPH(J,L),J=1,3),ERRFIT,(WTLAM(K),WTALP(K),
     1 K=1,NLINWT)
  400 WTED=IWT.NE.1
      IF (FINAL) GO TO 600
C-----------------------------------------------------------------------
C  INITIAL COMPUTATION OF QUANTITIES TO BE USED LATER
C-----------------------------------------------------------------------
      DGRIDE=ALOG(LAMNMX(2,2)/LAMNMX(1,2))/FLOAT(NGRID1-1)
      RGRIDE=EXP(DGRIDE)
      JGEADD=MINTER/2
      IF (NOBASE) JGEADD=JGEADD+(ALOG(LAMNMX(1,2)/LAMNMX(1,1))/
     1 DGRIDE+.5)
      GEST=LAMNMX(1,2)/RGRIDE**(JGEADD+1)
      GESTL=ALOG(GEST)
      NGE1=NGRID1+JGEADD+(ALOG(2.*LAMNMX(2,1)/LAMNMX(2,2))/DGRIDE+
     1 .5)+MINTER/2
      IF (NGE1 .LE. 500) GO TO 401
 5401 FORMAT (////20H FIX LAMNMX.  NGE1 =,I9,1X,51(2H**))
      WRITE (IWRITE,5401) NGE1
      STOP
  401 JGEADD=JGEADD+1
      IF (NLAMMX .EQ. 1) GO TO 403
      DO 402 J=2,NLAMMX
  402 NPERG2(J)=NGRID1/NGRID2(J)
  403 GAMMA(1)=1.
      DO 404 J=1,NG2MAX
  404 GAMMA(J+1)=GAMMA(J)*FLOAT(J)
      DO 405 J=1,NLAMMX
      DO 406 K=J,NG2MAX
      L=K-J+1
  406 NBINOM(K,J)=(GAMMA(K)/(GAMMA(L)*GAMMA(J))+.5)
      IF (J .EQ. 1) GO TO 405
      L=NGRID2(J)+1
      K=L-J
      NVGRID(J)=(GAMMA(L)/(GAMMA(J+1)*GAMMA(K))+.5)
  405 CONTINUE
      NGF=NGRID1/2+2*(MINTER/2)
      DGRIDF=ALOG(LAMNMX(2,1)/LAMNMX(1,1))/FLOAT(NGRID1/2-1)
      RGRIDF=EXP(DGRIDF)
      GFST=LAMNMX(1,1)/RGRIDF**(MINTER/2+1)
      GFSTL=ALOG(GFST)
C-----------------------------------------------------------------------
C  COMPUTE FHAT (TRANSFORMS OF DATA) AND GF AND DGFL (INTERPOLATION
C      GRID POINTS FOR TRANSFORMS AND THEIR DERIVATIVES W.R.T.
C      ALOG(LAMBDA))
C-----------------------------------------------------------------------
      IF (.NOT.REGINT) GO TO 420
      DO 410 J=1,NINT
  410 TSTART(J)=TSTART(J)+DELTA
  420 DO 430 J=1,N
  430 T(J)=T(J)+DELTA
      MU(1)=6.283185/XRANGE
      DO 440 K=1,NPARMX
      IF (K .GT. 1) GO TO 450
      DO 445 J=1,N
      FHATMX=FHATMX+SQRTW(J)*ABS(Y(J))
  445 TIMU(J)=SQRTW(J)
      GO TO 470
  450 L=K/2
      IF (L+L .LT. K) GO TO 460
      DUM=MU(1)
      IF (L .GT. 1) DUM=MU(L-1)+DUM
      MU(L)=DUM
      DO 455 J=1,N
  455 TIMU(J)=COS(ALOG(T(J))*DUM)*SQRTW(J)
      GO TO 470
  460 DUM=MU(L)
      DO 465 J=1,N
  465 TIMU(J)=SIN(ALOG(T(J))*DUM)*SQRTW(J)
  470 DUM=0.
      DDUM=0.
      DO 475 J=1,N
      DUM=DUM+Y(J)*TIMU(J)
  475 DDUM=DDUM+TIMU(J)
      FHAT(K)=DUM
      TRBASE(K)=DDUM
      DUM=GFST
      DO 480 L=1,NGF
      DUM=DUM*RGRIDF
      S=0.
      SS=0.
      IF (REGINT) GO TO 500
      DO 490 J=1,N
      DDUM=EXP(-DUM*T(J))*TIMU(J)
      S=S+DDUM
  490 SS=SS-DDUM*T(J)
      GO TO 550
C-----------------------------------------------------------------------
C  USE RECURSION RELATIONS IF REGINT=.TRUE.
C-----------------------------------------------------------------------
  500 J=0
      DO 510 JJ=1,NINT
      DDUM=EXP(-DUM*DELTAT(JJ))
      DDDUM=EXP(-DUM*TSTART(JJ))
      II=NT(JJ)
      DO 520 I=1,II
      J=J+1
      SSS=DDDUM*TIMU(J)
      S=S+SSS
      SS=SS-T(J)*SSS
      DDDUM=DDDUM*DDUM
  520 CONTINUE
  510 CONTINUE
  550 GF(K,L)=S
      DGFL(K,L)=SS*DUM
  480 CONTINUE
  440 CONTINUE
      IF (PRPREL) WRITE (IWRITE,5560) DELTA,FHAT(1),(MU(K),FHAT(2*K),
     1 FHAT(2*K+1),K=1,NLAMMX)
 5560 FORMAT (////6X,2HMU,13X,
     1 38HREAL AND IMAGINARY PARTS OF TRANSFORMS,15X,7HDELTA =,1PE9.2
     2 /4X,4H.000,1PE17.3/(1X,0PF7.3,1PE17.3,E14.3))
      DO 560 J=1,N
  560 T(J)=T(J)-DELTA
      IF (.NOT.REGINT) GO TO 600
      DO 570 J=1,NINT
  570 TSTART(J)=TSTART(J)-DELTA
  600 IF (.NOT.WTED) GO TO 620
      VARMIN=0.
      SUMWT=0.
      SUMWTY=0.
      DO 610 J=1,N
      Y(J)=Y(J)*SQRTW(J)
      VARMIN=VARMIN+Y(J)*Y(J)
      IF (NOBASE) GO TO 610
      SUMWT=SUMWT+SQRTW(J)*SQRTW(J)
      SUMWTY=SUMWTY+SQRTW(J)*Y(J)
  610 CONTINUE
      VARMIN=VARMIN*CONVRG**2
  620 IF (FINAL .OR. .NOT.REGINT) GO TO 900
C-----------------------------------------------------------------------
C  COMPUTE GSE (INTERPOLATION GRID POINTS FOR EXPONENTIAL SUMS)
C-----------------------------------------------------------------------
      DUM=GEST
      L=NGE1-(.69315/DGRIDE)
      DO 630 K=1,NGE1
      DUM=DUM*RGRIDE
      LDUM=K .LE. L
      CALL ETHEOR (DUM,.TRUE.,WTED,T,SQRTW,Y,NMAX,TSTART,DELTAT,NT,
     1 NINT,S,SS,SSS,DDDUM,.TRUE.,LDUM)
      GSE(K,1)=S
      GSE(K,2)=SS
      GSE(K,3)=SSS
      GSE(K,4)=DDDUM
  630 CONTINUE
  900 RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE FANLYZ.  DOES CONSTRAINED STEPWISE LEAST SQUARES ANALYSIS
C      OF RAW DATA (USING GRID SEARCH IF NECESSARY) TO GET STARTING
C      VALUES FOR ANALYSIS OF TRANSFORMS, WHICH YEILD LAMF (STARTING
C      VALUES FOR FINAL ANALYSIS OF RAW DATA IN YANLYZ).
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - LSTSQR, EVAR
C  WHICH IN TURN CALL - PIVOT, PIVOT1, ETHEOR, VARF
C-----------------------------------------------------------------------
      SUBROUTINE FANLYZ (T,Y,SQRTW,YLYFIT,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
      EXTERNAL VARF, EVAR
      LOGICAL PRPREL, WTED, FAILED, SEARCH, LDUM, FFAIL, LBLOKA,
     1 LBLOKB, LBLOKC, LBLOKD, SAVEPK
      REAL LAMNMX, LAMST, LAMF
      LONG LABEL
      COMMON /BLOK/ RBLOKA(2808), LAMST(5), LAMF(5,5,2), DGRIDE, GESTL,
     1 VAR, LAMNMX(2,2), PALPHA(6), PLAM(6), RBLOKB(61), VGRID2(252),
     2 RBLOKC(340), JGEADD, IBLOKA(100), NVGRID(5), NPERG2(5), IBLOKB,
     3 IBASE, IBLOKC(2), MLAMMX, NGRID2(5), NLAMMX, IWT,
     4 LABEL(20), NINT, NF, N, IWRITE, IBLOKD(4), MTRY, IBLOKE(2),
     5 NFTRY(5), IBLOKF, LBLOKA, FAILED, PRPREL, LBLOKB, WTED
      COMMON /BLOK/ LBLOKC(6), FFAIL(5,2), LBLOKD(14)
a     lblokc 3->6, lblokd 12->14
      DIMENSION E(NDIME,6), LENDEQ(5), LEQ(5), JCENTR(20), LSTART(5,45)
      DIMENSION T(NMAX), Y(NMAX), SQRTW(NMAX), GSE(NDIMG,4),
     1 YLYFIT(NMAX), TSTART(NINTMX), DELTAT(NINTMX), NT(NINTMX)
      EQUIVALENCE (LENDEQ(1),LEND1), (LENDEQ(2),LEND2), (LENDEQ(3),
     1 LEND3), (LENDEQ(4),LEND4), (LENDEQ(5),LEND5),
     2 (LEQ(1),L1), (LEQ(2),L2), (LEQ(3),L3), (LEQ(4),L4), (LEQ(5),L5)
C++++++++
      LLPEAK=1
C++++++++
      WTED=IWT .NE. 1
      LAMST(1)=SQRT(LAMNMX(2,2)*LAMNMX(1,2))
C-----------------------------------------------------------------------
C  START OF MAIN LOOP FOR STEPWISE ANALYSIS
C-----------------------------------------------------------------------
      DO 200 JLAM=1,NLAMMX
C-----------------------------------------------------------------------
C  INITIALIZE FOR FITS ASSUMING JLAM COMPONENTS
C-----------------------------------------------------------------------
 5150 FORMAT (1H1,5X,12A6/)
      IF (PRPREL) WRITE (IWRITE,5150) LABEL
      VARE=1.E+20
      VARTRY=1.E+20
      NF=2*JLAM+IBASE
      IF (JLAM .EQ. 1) GO TO 220
      LVGRID=NVGRID(JLAM)
      DO 210 J=1,LVGRID
  210 VGRID2(J)=0.
  220 JLAML1=JLAM-1
      JLAMP1=JLAM+1
      IF (PRPREL) WRITE (IWRITE,5210) JLAM
 5210 FORMAT (5X,45HINITIAL ANALYSIS OF THE RAW DATA AND THEN THE,
     2 22H TRANSFORMS - ASSUMING,I2,11H COMPONENTS)
C-----------------------------------------------------------------------
C  START OF LOOP FOR UP TO MTRY JLAM-COMPONENT FITS
C-----------------------------------------------------------------------
      DO 300 JTRY=1,MTRY
 5310 FORMAT (////5X,22HFIT USING STARTING SET,I3)
      IF (PRPREL) WRITE (IWRITE,5310) JTRY
      IF (JLAM.EQ.1) GO TO 600
      IF (JTRY-2) 315,350,500
C-----------------------------------------------------------------------
C  SELECT FIRST SET OF STARTING VALUES
C-----------------------------------------------------------------------
  315 DO 320 J=1,JLAML1
  320 LAMST(J)=LAMF(J,JLAML1,2)
      IF (LPEAK.EQ.1 .OR. LPEAK.EQ.JLAM) GO TO 345
      LAMST(JLAM)=SQRT(LAMF(LPEAK-1,JLAML1,2)*LAMF(LPEAK,JLAML1,2))
      GO TO 600
  345 IF (LPEAK .EQ. 1) LAMST(JLAM)=SQRT(LAMNMX(1,2)*LAMF(1,JLAML1,2))
      IF (LPEAK .EQ. JLAM) LAMST(JLAM)=SQRT(LAMF(JLAML1,JLAML1,2)*
     1 LAMNMX(2,2))
      GO TO 600
C-----------------------------------------------------------------------
C  DO COARSE GRID SEARCH
C-----------------------------------------------------------------------
  350 L=NGRID2(JLAM)-JLAM
      DO 360 J=1,JLAM
      L=L+1
  360 LENDEQ(J)=L
      IF (JLAM .EQ. MLAMMX) GO TO 368
      DO 365 J=JLAMP1,MLAMMX
  365 LENDEQ(J)=LENDEQ(JLAM)
  368 JCENTR(1)=JGEADD-1+(NPERG2(JLAM)+1)/2
      L=NGRID2(JLAM)
      DO 370 J=2,L
  370 JCENTR(J)=JCENTR(J-1)+NPERG2(JLAM)
      SEARCH=.TRUE.
C-----------------------------------------------------------------------
C  ENTRY POINT TO FIND STARTING LAMBDA VALUES FROM GRID
C-----------------------------------------------------------------------
  400 LOC=0
      DO 410 L1=1,LEND1
      LST2=L1+1
      DO 420 L2=LST2,LEND2
      LST3=L2+1
      IF (JLAM .LT. 3) LST3=LEND3
      DO 430 L3=LST3,LEND3
      LST4=L3+1
      IF (JLAM .LT. 4) LST4=LEND4
      DO 440 L4=LST4,LEND4
      LST5=L4+1
      IF (JLAM .LT. 5) LST5=LEND5
      DO 450 L5=LST5,LEND5
      LOC=LOC+1
      IF (SEARCH) GO TO 498
      IF (VGRID2(LOC) .GT. VGMAX) GO TO 496
      MINDIF=1000
      IF (JTRY .LE. 2) GO TO 493
      L=JTRY-1
      DO 491 J=2,L
      I=0
      DO 492 K=1,JLAM
  492 I=I+IABS(LEQ(K)-LSTART(K,J))
      MINDIF=MIN0(MINDIF,I)
  491 CONTINUE
      IF (MINDIF-MAXDIF) 496,493,494
  493 IF (VGRID2(LOC) .GE. VGBEST) GO TO 496
  494 VGBEST=VGRID2(LOC)
      MAXDIF=MINDIF
      DO 495 J=1,JLAM
  495 LSTART(J,JTRY)=LEQ(J)
  496 IF (LOC .LT. LVGRID) GO TO 450
      DO 497 J=1,JLAM
      L=LSTART(J,JTRY)
  497 LAMST(J)=EXP(GESTL+FLOAT(JCENTR(L))*DGRIDE)
      GO TO 600
  498 DO 499 J=1,JLAM
      L=LEQ(J)
  499 PLAM(J)=EXP(GESTL+FLOAT(JCENTR(L))*DGRIDE)
      CALL EVAR (0.,JLAM,DUM,T,SQRTW,NMAX,TSTART,DELTAT,NT,
     1 NINT,.FALSE.,LDUM,E,Y,YLYFIT,JLAM+IBASE,1.E+20,0,NDIME,.TRUE.,
     2 GSE,NDIMG,J)
  450 CONTINUE
  440 CONTINUE
  430 CONTINUE
  420 CONTINUE
  410 CONTINUE
C-----------------------------------------------------------------------
C  FIND LOWEST VARIANCE ON COARSE GRID
C-----------------------------------------------------------------------
  500 VGMAX=1.E+20
      DO 510 J=1,LVGRID
  510 VGMAX=AMIN1(VGMAX,VGRID2(J))
      IF (JTRY .GT. 2) VGMAX=10.*VGMAX
      MAXDIF=-1
      SEARCH=.FALSE.
      VGBEST=1.E+20
      GO TO 400
C-----------------------------------------------------------------------
C  DO LEAST SQUARES FITS
C-----------------------------------------------------------------------
  600 LDUM=JTRY.EQ.1
      CALL LSTSQR (LAMST,JLAM,.TRUE.,N,Y,T,JLAM+IBASE,
     1 EVAR,GSE,NDIMG,SQRTW,YLYFIT,E,NMAX,TSTART,DELTAT,NT,NINT,
     2 2, LDUM    ,NDIME,.TRUE.,PRPREL)
      FAILED=FAILED .OR. VAR.GT.VARE
      IF (VAR .GT. VARE) GO TO 300
      VARE=VAR
      DO 605 J=1,JLAM
  605 LAMF(J,JLAM,1)=PLAM(J)
      SAVEPK=VARTRY .GE. 1.E+20
      IF (FAILED) GO TO 610
 5600 FORMAT (/51H END OF FIT TO RAW DATA, START OF FIT TO TRANSFORMS)
      IF (PRPREL) WRITE (IWRITE,5600)
      CALL LSTSQR (PLAM,JLAM,.FALSE.,NF,Y,T,JLAM+IBASE,
     1 VARF,GSE,NDIMG,SQRTW,YLYFIT,E,NMAX,TSTART,DELTAT,NT,NINT,
     2 3,.FALSE.,NDIME,.TRUE.,PRPREL)
      IF (FAILED .AND. VAR.GE.VARTRY) GO TO 300
      SAVEPK=.TRUE.
      VARTRY=VAR
      DO 608 J=1,JLAM
  608 LAMF(J,JLAM,2)=PLAM(J)
  610 IF (.NOT.SAVEPK .AND. JLAM.NE.1) GO TO 300
      IF (JLAM .EQ. NLAMMX) GO TO 670
C-----------------------------------------------------------------------
C  FINDS MAX SUM OF ABSOLUTE ADJACENT AMPLITUDES FOR LATER DETERMINATION
C      OF STARTING VALUE FOR LAMST(JLAMP1)
C-----------------------------------------------------------------------
      DUM=ABS(PALPHA(1))+ABS(PALPHA(JLAMP1))
      LLPEAK=1
      IF (DUM .GT. ABS(PALPHA(JLAM))) GO TO 620
      LLPEAK=JLAMP1
      DUM=ABS(PALPHA(JLAM))
  620 IF (JLAM .EQ. 1) GO TO 690
      DO 630 J=2,JLAM
      DDUM=ABS(PALPHA(J-1))+ABS(PALPHA(J))
      IF (DDUM .LE. DUM) GO TO 630
      DUM=DDUM
      LLPEAK=J
  630 CONTINUE
  670 IF (.NOT.FAILED .OR. JLAM.EQ.1) GO TO 690
  300 CONTINUE
      JTRY=MTRY
  690 LPEAK=LLPEAK
      NFTRY(JLAM)=JTRY
      FFAIL(JLAM,2)=FAILED
      FFAIL(JLAM,1)=VARTRY .GE. 1.E+20
      IF (.NOT.FFAIL(JLAM,1)) GO TO 200
      DO 695 J=1,JLAM
  695 LAMF(J,JLAM,2)=LAMF(J,JLAM,1)
  200 CONTINUE
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE YANLYZ.  FOR CONSTRAINED STEPWISE LEAST SQUARES ANALYSIS
C      OF RAW DATA USING LAMF (STARTING VALUES OBTAINED FROM FANLYZ).
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - LSTSQR, FISHER, RESIDU
C  WHICH IN TURN CALL - EVAR, ETHEOR, PIVOT, PIVOT1, PLPRES
C-----------------------------------------------------------------------
      SUBROUTINE YANLYZ (T,Y,SQRTW,YLYFIT,E,NMAX,NDIME,
     1 TSTART,DELTAT,NT,NINTMX,GSE,NDIMG)
      EXTERNAL EVAR
      LOGICAL NOBASE, PRFINL, PLOTRS, REPEAT, WTED, FAILED, YFAIL, DONE,
     1 REGINT, FFAIL, LBLOKA, LBLOKB, LBLOKC
      REAL LAMNMX, LAMST, LAMF
      LONG NEXBES(2,5), AFFAIL(9,2), LABEL
      COMMON /BLOK/ RBLOKA(2808), LAMST(5), LAMF(5,5,2), RBLOKB(2),
     1 VAR, LAMNMX(2,2), PALPHA(6), PLAM(6), RBLOKC, SIGYY, ENPHI,
     2 RBLOKD(36), SIGMAP(11), PCERR(11), RBLOKE(592), IBLOKA(112),
     3 IBASE, IBLOKB(8), NLAMMX, IWT, LABEL(20), NINT, NF, N,
     4 IWRITE, IBLOKC, LINEPG, IBLOKD(3), ITER, JLAMP1, NFTRY(5),
     5 IBLOKE, REGINT, FAILED, LBLOKA, NOBASE, WTED, REPEAT, PLOTRS
      COMMON /BLOK/ LBLOKB, FFAIL(5,2), LBLOKC(11), PRFINL
      DIMENSION E(NDIME,6), YFAIL(5), ASAVE(6,5,6),
     1 PROBSV(5), VARSV(5), SIGYSV(5), ITERSV(5),
     2 ENPHSV(5), PROBLN(5), DONE(5)
      DIMENSION T(NMAX), Y(NMAX), SQRTW(NMAX), GSE(NDIMG,4),
     1 YLYFIT(NMAX), TSTART(NINTMX), DELTAT(NINTMX),
     2 NT(NINTMX), PUNCOR(6)
C++++++++
      NEXBES(1,1)=' '  ; NEXBES(2,1)=' '
      NEXBES(1,2)='SECO'; NEXBES(2,2)='ND'
      NEXBES(1,3)=' THI'; NEXBES(2,3)='RD'
      NEXBES(1,4)='FOUR'; NEXBES(2,4)='TH'
      NEXBES(1,5)=' FIF'; NEXBES(2,5)='TH'
      AFFAIL(1,1)=' '; AFFAIL(2,1)=' '; AFFAIL(3,1)=' '
      AFFAIL(4,1)=' '; AFFAIL(5,1)=' '; AFFAIL(6,1)=' '
      AFFAIL(7,1)=' '; AFFAIL(8,1)=' '; AFFAIL(9,1)=' '
      AFFAIL(1,2)='(NO'; AFFAIL(2,2)='EXAC'; AFFAIL(3,2)='T FI'
      AFFAIL(4,2)='T TO'; AFFAIL(5,2)=' TRA'; AFFAIL(6,2)='NSFO'
      AFFAIL(7,2)='RMS'; AFFAIL(8,2)='FOUN' ; AFFAIL(9,2)='D'
C++++++++
      WTED=IWT .NE. 1
      JLAMBS=1
      VARBES=1.E+20
      VARMIN=1.E+20
      ABSYMX=0.
      DO 180 J=1,N
  180 ABSYMX=AMAX1(ABSYMX,ABS(Y(J)))
C-----------------------------------------------------------------------
C  START OF MAIN LOOP FOR STEPWISE ANALYSIS
C-----------------------------------------------------------------------
      DO 200 JLAM=1,NLAMMX
      JLAMP1=JLAM+1
      NF=2*JLAM+IBASE
      IF (.NOT.PRFINL) GO TO 210
 5200 FORMAT (1H1,5X,12A6/)
      WRITE (IWRITE,5200) LABEL
 5240 FORMAT (5X,23HFINAL ANALYSIS ASSUMING,I2,11H COMPONENTS)
      WRITE (IWRITE,5240) JLAM
  210 DO 220 J=1,JLAM
  220 LAMST(J)=LAMF(J,JLAM,2)
      CALL LSTSQR (LAMST,JLAM,.TRUE.,N,Y,T,JLAM+IBASE,EVAR,
     1 GSE,NDIMG,SQRTW,YLYFIT,E,NMAX,TSTART,DELTAT,NT,NINT,
     2 4,FFAIL(JLAM,2),NDIME,.FALSE.,PRFINL)
      YFAIL(JLAM)=FAILED
      IF (.NOT.FAILED) GO TO 225
      IF (FFAIL(JLAM,1)) GO TO 250
 5222 FORMAT (////43H SECOND ATTEMPT USING STARTING LAMBDAS FROM,
     1 29H INITIAL ANALYSIS OF RAW DATA)
      IF (PRFINL) WRITE (IWRITE,5222)
      DO 222 J=1,JLAM
  222 LAMST(J)=LAMF(J,JLAM,1)
      CALL LSTSQR (LAMST,JLAM,.TRUE.,N,Y,T,JLAM+IBASE,EVAR,
     1 GSE,NDIMG,SQRTW,YLYFIT,E,NMAX,TSTART,DELTAT,NT,NINT,
     2 4,.FALSE.,NDIME,.FALSE.,PRFINL)
      YFAIL(JLAM)=FAILED
      IF (FAILED) GO TO 250
C-----------------------------------------------------------------------
C  SAVE VALUES FOR LATER USE AND FOR FINAL OUTPUT
C-----------------------------------------------------------------------
  225 SIGYSV(JLAM)=SIGYY
      VARSV(JLAM)=VAR
      ITERSV(JLAM)=ITER
      ENPHSV(JLAM)=ENPHI
      I=JLAM
      DO 230 K=1,JLAM
      ASAVE(K,JLAM,1)=PALPHA(K)
      ASAVE(K,JLAM,2)=PLAM(K)
      ASAVE(K,JLAM,3)=SIGMAP(K)
      I=I+1
      ASAVE(K,JLAM,4)=SIGMAP(I)
      ASAVE(K,JLAM,5)=PCERR(K)
      ASAVE(K,JLAM,6)=PCERR(I)
  230 CONTINUE
      IF (NOBASE) GO TO 240
      ASAVE(JLAMP1,JLAM,2)=0.
      ASAVE(JLAMP1,JLAM,3)=0.
      ASAVE(JLAMP1,JLAM,5)=0.
      ASAVE(JLAMP1,JLAM,1)=PALPHA(JLAMP1)
      ASAVE(JLAMP1,JLAM,4)=SIGMAP(NF)
      ASAVE(JLAMP1,JLAM,6)=PCERR(NF)
C-----------------------------------------------------------------------
C  TEST IF THIS SOLUTION IS THE BEST SO FAR
C-----------------------------------------------------------------------
  240 IF (VARBES .GE. 1.E+20) GO TO 248
      IF (VAR .GE. VARMIN) GO TO 200
      K=N-NF
      DUM=VARBES/VAR-1.
      L=2*(JLAM-JLAMBS)
      IF (FISHER(FLOAT(K)*DUM/(FLOAT(L)*(1.+ENPHI*FLOAT((NF+2)*N)/
     1 FLOAT(NF*K))),L,K) .LE. .5) GO TO 250
  248 JLAMBS=JLAM
      VARBES=VAR
  250 VARMIN=AMIN1(VARMIN,VAR)
  200 CONTINUE
C-----------------------------------------------------------------------
C  END OF MAIN LOOP FOR STEPWISE ANALYSIS
C-----------------------------------------------------------------------
      IF (VARBES .LT. 1.E+20) GO TO 300
 5300 FORMAT (///50H ALL ANALYSES OF THE RAW DATA FAILED - CHECK INPUT,
     1 22H DATA FOR GROSS ERRORS   )
      WRITE (IWRITE,5300)
      RETURN
C-----------------------------------------------------------------------
C  CALCULATE PROBSV AND PROBLN (PROBABILITY AND UNCORRECTED PROBABILITY
C      (I.E., USING ENPHI=0.) THAT THE BEST SOLUTION IS ACTUALLY
C      BETTER THAN THE OTHERS)
C-----------------------------------------------------------------------
  300 PNXBES=1.E+20
      JLAMNX=JLAMBS
      DO 310 J=1,NLAMMX
      PROBSV(J)=2.
      IF (J.EQ.JLAMBS .OR. YFAIL(J)) GO TO 310
      I=2*MAX0(JLAMBS,J)+IBASE
      K=N-I
      L=2*(JLAMBS-J)
      DUM=VARSV(J)/VARBES
      IF (L .LT. 0) GO TO 315
      DDUM=FLOAT(K)*(DUM-1.)/FLOAT(L)
      DDDUM=1.+ENPHSV(JLAMBS)*FLOAT((I+2)*N)/FLOAT(I*K)
      PROBSV(J)=FISHER(DDUM/DDDUM,L,K)
      PROBLN(J)=FISHER(DDUM,L,K)
      GO TO 325
  315 IF (DUM .LT. 1.) GO TO 320
      PROBSV(J)=1.
      PROBLN(J)=1.
      GO TO 325
  320 DDUM=FLOAT(K)*(1.-1./DUM)/FLOAT(L)
      DDDUM=1.+ENPHSV(J)*FLOAT((I+2)*N)/FLOAT(I*K)
      PROBLN(J)=1.-FISHER(DDUM,-L,K)
      PROBSV(J)=1.-FISHER(DDUM/DDDUM,-L,K)
  325 IF (PROBSV(J) .GE. PNXBES) GO TO 310
      PNXBES=PROBSV(J)
      PNXLIN=PROBLN(J)
      JLAMNX=J
  310 CONTINUE
      PROBSV(JLAMBS)=0.
      IF (PNXBES .LT. 1.E+20) GO TO 330
      PNXBES=1.
      PNXLIN=1.
C-----------------------------------------------------------------------
C  FINAL SUMMARY OF RESULTS - SUMMARIZES UP TO BEST 5 SOLUTIONS.
C-----------------------------------------------------------------------
  330 CALL RESIDU (JLAMBS,PLOTRS,T,Y,SQRTW,YLYFIT,NMAX,PUNCOR,ASAVE)
 5330 FORMAT(35H1DISCRETE - VERSION 1A (MARCH 1976),/12A6/)
  340 WRITE (IWRITE,5330) LABEL
      DO 350 J=1,NLAMMX
  350 DONE(J)=YFAIL(J)
      L=17+JLAMBS+IBASE
 5350 FORMAT (5X,A4,A3,13HBEST SOLUTION,I13,11H COMPONENTS)
      WRITE (IWRITE,5350) (NEXBES(J,1),J=1,2),JLAMBS
      IF (PNXBES .GT. .95) GO TO 360
 5360 FORMAT (48H ++++++ NOTE - THE APPROX. PROBABILITY THAT THIS,
     1 34H SOLUTION IS ACTUALLY BEST IS ONLY,F6.3,1H.,
     2 /35HLOOK AT SECOND BEST SOLUTION ALSO. ,6(1H+))
      WRITE (IWRITE,5360) PNXBES
      L=L-1
  360 DO 370 J=1,NLAMMX
      IF (J .GT. 1) GO TO 375
      DONE(JLAMBS)=.TRUE.
      I=JLAMBS
      GO TO 400
  375 DUM=1.E+20
      DO 380 K=1,NLAMMX
      IF (PROBSV(K).GT.DUM .OR. DONE(K)) GO TO 380
      DUM=PROBSV(K)
      I=K
  380 CONTINUE
      IF (DUM.GE.1.E+20 .OR. J.GT.5) GO TO 500
      DONE(I)=.TRUE.
      CALL RESIDU (I,.FALSE.,T,Y,SQRTW,YLYFIT,NMAX,PUNCOR,ASAVE)
      L=L+15+I+IBASE
      IF (L-2 .LE. LINEPG) GO TO 385
      L=14+I+IBASE
      WRITE (IWRITE,5999)
 5999 FORMAT (1H1)
      GO TO 390
  385 WRITE (IWRITE,5001)
      WRITE (IWRITE,5001)
 5001 FORMAT (1X)
  390 IF (DUM .GT. .95) WRITE (IWRITE,5350) (NEXBES(K,J),K=1,2),I
      IF (DUM .LE. .95) WRITE (IWRITE,5385) (NEXBES(K,J),K=1,2),I
 5385 FORMAT (5X,A4,A3,13HBEST SOLUTION,I13,11H COMPONENTS,3X,
     1 30H-   A SIGNIFICANT POSSIBILITY ,25(1H+))
  400 WRITE (IWRITE,5001)
      WRITE (IWRITE,5400)
 5400 FORMAT (1X,54(1H*))
      WRITE (IWRITE,5402) NFTRY(I)
 5402 FORMAT (2H *,4X,22HALPHA+-STD ERR PERCENT,3X,
     1 27HLAMBDA+-STD ERR PERCENT*   ,
     2 38HSTART LAMBDA (FROM FIT TO TRANSFORMS -,
     3 I4,7H TRIES))
 5404 FORMAT (2H *,1PE9.3,2H+-,E7.1,0PF8.3,1PE9.3,2H+-,
     1 E7.1,0PF8.3,1H*,1PE10.3,1X, 9A4)
      JJ=1
      IF (FFAIL(I,2)) JJ=2
      WRITE (IWRITE,5404) (ASAVE(K,I,1),ASAVE(K,I,4),ASAVE(K,I,6),
     1 ASAVE(K,I,2),ASAVE(K,I,3),ASAVE(K,I,5),LAMF(K,I,2),
     2 (AFFAIL(KK,JJ),KK=1,9),K=1,I)
      IF (NOBASE) GO TO 410
      K=I+1
      WRITE (IWRITE,5404) ASAVE(K,I,1),ASAVE(K,I,4),ASAVE(K,I,6),
     1 ASAVE(K,I,2),ASAVE(K,I,3),ASAVE(K,I,5)
  410 WRITE (IWRITE,5400)
      IF (J.EQ.1 .AND. PNXBES.GT..95) WRITE (IWRITE,5410) JLAMNX,
     1 JLAMBS, PNXBES
 5410 FORMAT (43X,20(1H*)/34H APPROXIMATE PROBABILITY THAT THIS,
     1 56H SOLUTION IS REALLY BETTER THAN THE SECOND BEST SOLUTION,
     2 /9H = * PNG(,I1,1H/,I1,3H) =,F6.3,2H */43X,20(1H*))
 5412 FORMAT (/5H PNG(,I1,1H/,I1,1H),12X,1H=,F21.3,13X,4HNPHI,13X,
     1 1H=,1PE11.2,13X,25H(UNCORRECTED PNG WOULD BE,0PF8.3,1H))
      IF (J .GT. 1) WRITE (IWRITE,5412) I,JLAMBS,PROBSV(I),ENPHSV(I),
     1 PROBLN(I)
 5414 FORMAT (22H ITERATIONS IN FIT   =,I21,3X,
     1 18HSTD. DEV. OF FIT =,1PE11.4,
     2 /27HSIGNAL/NOISE RATIO OF FIT =,0PF7.0)
      DDUM=ABSYMX/SIGYSV(I)
      IF (WTED) WRITE (IWRITE,5414) ITERSV(I),SIGYSV(I)
      IF (.NOT.WTED) WRITE (IWRITE,5414) ITERSV(I),SIGYSV(I),DDUM
 5416 FORMAT (21H LAMBDA HELD BETEWEEN,1PE9.2,4H AND,E9.2,3X,
     1 4HNPHI,3X,1H=,E11.2)
      IF (J .EQ. 1) WRITE (IWRITE,5416) LAMNMX(1,1),LAMNMX(2,1),
     1 ENPHSV(JLAMBS)
 5418 FORMAT (/4H LAG,15X,5(2X,3HK =,I2),3X,16(1H*)/
     1 20H PROB. RESIDU UNCORR,5F9.3,4X,
     2 22HWEIGHTED AV = * PUNC =,F6.3,2H *)
      WRITE (IWRITE,5418) (K,K=1,5),PUNCOR
 5422 FORMAT (1X,71(1H=))
      IF (L-1 .LE. LINEPG) WRITE (IWRITE,5422)
      IF (L .LE. LINEPG) WRITE (IWRITE,5422)
  370 CONTINUE
  500 IF (.NOT.REPEAT) RETURN
      REPEAT=.FALSE.
      CALL RESIDU (JLAMBS,.FALSE.,T,Y,SQRTW,YLYFIT,NMAX,PUNCOR,ASAVE)
      GO TO 340
      END
C-----------------------------------------------------------------------
C  SUBROUTINE LSTSQR.  CONSTRAINED LEAST SQUARES FIT USING STEPWISE
C      REGRESSION APPROACH.
C  N = NO. OF DATA POINTS TO BE FIT, I.E., =N (RAWDAT=.TRUE.) OR
C      =2*JLAM+IBASE (RAWDAT=.FALSE.).
C  Y,T = RAW DATA, REGARDLESS OF RAWDAT.
C  ITYPE=1,2,3,4 FOR PRELIMINARY DETERMINATION OF WEIGHTS, FIT TO RAW
C      DATA WITH INTERPOLATION, FIT TO TRANSFORMS, AND FINAL FIT TO
C      RAW DATA, RESPECTIVELY.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - VARDUM (A DUMMY NAME), PIVOT, ANLERR
C  WHICH IN TURN CALL - PIVOT1, ETHEOR
C-----------------------------------------------------------------------
      SUBROUTINE LSTSQR (LAMST,JLAM,RAWDAT,N,Y,T,NLIN,VARDUM,
     1 GSE,NDIMG,SQRTW,YLYFIT,E,NMAX,TSTART,DELTAT,NT,NINT,
     2 ITYPE,SPLIT,NDIME,INTER,PRLSQ)
      EXTERNAL VARDUM
      REAL LAMNMX, LAMST
      LONG HOLRTH(2), LABEL
      LOGICAL RAWDAT, NOBASE, PRLSQ, FAILED, ALLPIV(2), PIVLAM,
     1 LDUM, INTER, PIVALP, LBLOKA, LBLOKB, LBLOKC, LBLOKD, SPLIT
      COMMON /BLOK/ RBLOKA(2796), DELTA, VARMIN, FHATMX, RBLOKB(8),
     1 CONVRG, RBLOKC(57), VAR, LAMNMX(2,2), PALPHA(6), PLAM(6),
     2 PRECIS, RBLOKD(38), SIGMAP(11), PCERR(11), RBLOKE(252),
     3 PLMTRY(6), DELTAP(10), DFCAPL(6,5), SFDE(5), ADUB(11,11),
     4 DDSE(5,5), DTOLER(11), F(11,6), DF(11,6), IBLOKA(111), MDIMA,
     5 IBLOKB(52), NF, IBLOKC, IWRITE, IBLOKD(5), ITER, JLAMP1
a     iblokb 32->52
      COMMON /BLOK/ IBLOKE(6), LBLOKA, FAILED, LBLOKB, NOBASE,
     1 LBLOKC(18), PIVALP(11), LBLOKD
a     lblokc 14->18
      DIMENSION PIVLAM(5), R(6), DALPL(6,5)
      DIMENSION LAMST(JLAM), Y(NMAX), T(NMAX),
     1  SQRTW(NMAX), YLYFIT(NMAX),
     2 E(NDIME,NLIN), TSTART(NINT), QT(3), VT(3), GSE(NDIMG,4),
     3 DELTAT(NINT), NT(NINT), MXITER(4), RLAMMN(2)
C++++++++
      qmin=.001
      holrth(1)=' '; holrth(2)='*'
      mconv=3; nabort=4
      mxiter(1)=30; mxiter(2)=30; mxiter(3)=40; mxiter(4)=40
      rlammn(1)=1.1; rlammn(2)=2
      dflat=-1.e-2
c++++++++
      ISPLIT=1
      IF (SPLIT) ISPLIT=2
      JLAMP1=JLAM+1
      NCONV=0
      NVARUP=0
      NFLAT=0
      ALLPIV(2)=.TRUE.
      IF (NOBASE) PALPHA(JLAMP1)=0.
      PLAM(JLAMP1)=0.
      PLMTRY(JLAMP1)=0.
      PIVALP(JLAMP1)=.TRUE.
C-----------------------------------------------------------------------
C  PUT PLAM IN ASCENDING ORDER AND SEPARATE THEM IF NECESSARY
C-----------------------------------------------------------------------
      DO 150 J=1,JLAM
      PIVLAM(J)=.FALSE.
  150 DELTAP(J)=0.
      DO 160 J=1,JLAM
      DUM=1.E+20
      DO 165 K=1,JLAM
      IF (PIVLAM(K) .OR. LAMST(K).GT.DUM) GO TO 165
      L=K
      DUM=LAMST(K)
  165 CONTINUE
      PIVLAM(L)=.TRUE.
      IF (J .EQ. 1) PLAM(J)=AMAX1(DUM,LAMNMX(1,ISPLIT))
      IF (J .GT. 1) PLAM(J)=AMIN1(AMAX1(DUM,RLAMMN(ISPLIT)*PLAM(J-1)),
     1 LAMNMX(2,1))
  160 CONTINUE
      VAROLD=1.E+20
      VARG=1.E+20
      ITER=-1
      Q=0.
      IF (PRLSQ) WRITE (IWRITE,5205)
 5205 FORMAT (/4H ITR,1X,8HVARIANCE,2X,6HDAMP Q,1X,8HBASELINE,
     1 5(4X,5HALPHA,2X,6HLAMBDA))
C-----------------------------------------------------------------------
C  START OF MAIN LOOP FOR THE LEAST SQUARES FIT
C-----------------------------------------------------------------------
  210 NTRY=1
  215 ITER=ITER+1
  220 CALL VARDUM (Q,JLAM,VAR,T,SQRTW,NMAX,TSTART,DELTAT,NT,
     1 NINT,.TRUE.,LDUM,E,Y,YLYFIT,NLIN,VARG,NTRY,NDIME,INTER,
     2 GSE,NDIMG,IERROR)
      IF (IERROR .EQ. 5) GO TO 800
      ALLPIV(1)=LDUM
      IF (VAR.LE.VARG .OR. NTRY.EQ.2) GO TO 240
      NTRY=2
      Q=QG
      GO TO 220
  240 DO 242 J=1,JLAM
      R(J)=PALPHA(J)
      IF (.NOT.RAWDAT) R(J)=PALPHA(J)*EXP(-PLMTRY(J)*DELTA)
  242 PLAM(J)=PLMTRY(J)
      DUM=VAR-VAROLD
      IF (.NOT.PRLSQ) GO TO 250
      DDUM=HOLRTH(1)
      IF (DUM .GT. 0.) DDUM=HOLRTH(2)
      DO 244 J=1,JLAM
      PCERR(J)=HOLRTH(1)
      IF (.NOT.PIVLAM(J)) PCERR(J)=HOLRTH(2)
  244 CONTINUE
 5240 FORMAT (1X,I2,1PE9.4,A1,E8.2,A1,E8.2,5(1P2E8.2,A1))
      WRITE (IWRITE,5240) ITER,VAR,DDUM,Q,HOLRTH(NTRY),PALPHA(JLAMP1),
     1 (R(J),PLAM(J),PCERR(J),J=1,JLAM)
C-----------------------------------------------------------------------
C  TESTS FOR CONVERGENCE AND DIVERGENCE
C-----------------------------------------------------------------------
  250 IF ((ABS(DUM).GT.AMAX1(VARMIN,VAROLD*CONVRG) .AND. RAWDAT) .OR.
     1 (VAR.GT.FLOAT(NF)*(CONVRG*FHATMX)**2 .AND. .NOT.RAWDAT))
     2 GO TO 270
      NCONV=NCONV+1
      IF (NCONV.GE.MCONV .OR. .NOT.RAWDAT) GO TO 800
      NVARUP=0
      GO TO 300
  270 NCONV=0
      IF (DUM .LE. 0.) GO TO 275
      NVARUP=NVARUP+1
      IF (NVARUP.LT.NABORT .OR. ITER.LT.JLAM) GO TO 280
      IERROR=1
      GO TO 800
  275 NVARUP=0
  280 IF (ITER.LT.MXITER(ITYPE)) GO TO 290
      IERROR=2
      GO TO 800
  290 IF (DUM/VAROLD.LT.DFLAT .OR. RAWDAT) GO TO 295
      NFLAT=NFLAT+1
      IF (NFLAT .LT. NABORT) GO TO 300
      IERROR=3
      GO TO 800
  295 NFLAT=0
C-----------------------------------------------------------------------
C  FINISH COMPUTATION OF DFCAPL (PARTIAL OF FCAP W.R.T. LAMBDA)
C-----------------------------------------------------------------------
  300 DO 310 K=1,JLAM
      DO 320 J=1,NLIN
      DFCAPL(J,K)=DFCAPL(J,K)*PALPHA(K)
  320 CONTINUE
      DFCAPL(K,K)=DFCAPL(K,K)+SFDE(K)
  310 CONTINUE
C-----------------------------------------------------------------------
C  CALCULATE DALPL (PARTIAL OF PALPHA W.R.T. LAMBDA) FROM MATRIX
C  PRODUCT ADUB*DFCAPL
C-----------------------------------------------------------------------
      DO 400 J=1,NLIN
      DO 400 K=1,JLAM
  400 DALPL(J,K)=0.
      DO 410 K=1,JLAM
      IF (.NOT.PIVALP(K)) GO TO 410
      DO 420 J=1,NLIN
      IF (.NOT.PIVALP(J)) GO TO 420
      DUB=0.
      DO 430 I=1,NLIN
      IF (PIVALP(I)) DUB=DUB+ADUB(J,I)*DFCAPL(I,K)
  430 CONTINUE
      DALPL(J,K)=DUB
  420 CONTINUE
  410 CONTINUE
C-----------------------------------------------------------------------
C  CALCULATE ADUB (NORMAL EQUATION MATRIX FOR NONLINEAR LEAST SQUARES)
C  AND INVERT IT
C-----------------------------------------------------------------------
      IF (.NOT.RAWDAT) GO TO 550
      DO 510 K=1,JLAM
      DO 520 J=1,K
      DUM=0.
      DO 530 L=1,NLIN
  530 DUM=DUM-DALPL(L,J)*DFCAPL(L,K)
      IF (ABS(PALPHA(K)) .GT. ABS(PALPHA(J))) GO TO 540
      DUM=DUM+DALPL(J,K)*SFDE(J)
      DUM=DUM+DALPL(K,J)*SFDE(K)
      GO TO 545
  540 DUM=DUM+DALPL(K,J)*SFDE(K)
      DUM=DUM+DALPL(J,K)*SFDE(J)
  545 DDUM=PALPHA(K)*PALPHA(J)*DDSE(J,K)
      ADUB(J,K)=DUM+DDUM
  520 CONTINUE
      DTOLER(K)=DDUM
      ADUB(K,JLAMP1)=PALPHA(K)*SFDE(K)
  510 CONTINUE
      GO TO 590
  550 DO 560 J=1,JLAM
      DTOLER(J)=0.
      R(J)=0.
      DO 565 K=J,JLAMP1
  565 ADUB(J,K)=0.
  560 CONTINUE
      DO 570 NU=1,N
      DO 575 K=1,JLAM
      IF (.NOT.PIVALP(K)) GO TO 575
      DUM=0.
      DO 578 J=1,NLIN
  578 DUM=DUM+F(NU,J)*DALPL(J,K)
      DDUM=DF(NU,K)*PALPHA(K)
      DTOLER(K)=DTOLER(K)+DDUM*DDUM
      R(K)=DUM+DDUM
  575 CONTINUE
      DDUM=YLYFIT(NU)
      DO 580 K=1,JLAM
      IF (.NOT.PIVALP(K)) GO TO 580
      DUM=R(K)
      DO 585 J=1,K
  585 ADUB(J,K)=ADUB(J,K)+R(J)*DUM
      ADUB(K,JLAMP1)=ADUB(K,JLAMP1)+R(K)*DDUM
  580 CONTINUE
  570 CONTINUE
  590 DO 595 J=1,JLAM
      DTOLER(J)=PRECIS*AMAX1(DTOLER(J),ADUB(J,J))
  595 R(J)=ADUB(J,JLAMP1)
      ADUB(JLAMP1,JLAMP1)=0.
      CALL PIVOT (ADUB,MDIMA,JLAM,.FALSE.,.FALSE.,.TRUE.,LAMNMX(1,1),
     1 LAMNMX(2,1),PLAM,DTOLER,DELTAP,LDUM,QG,PIVLAM,JLAM,QMAX,IERROR)
      IF (IERROR .EQ. 5) GO TO 800
      ALLPIV(2)=LDUM
C-----------------------------------------------------------------------
C  USE MODIFICATION-A OF G. E. P. BOX TO ESTIMATE BEST Q (FRACTIONAL
C  STEP SIZE)
C-----------------------------------------------------------------------
      VAROLD=VAR
      DDUM=0.
      DO 600 J=1,JLAM
  600 DDUM=DDUM+DELTAP(J)*R(J)
      IF (DDUM .GT. 0.) GO TO 610
 5610 FORMAT (42H GAUSS VECTOR POINTING IN WRONG DIRECTION.,2X,
     1 14(2H**))
      IF (PRLSQ) WRITE (IWRITE,5610)
      NTRY=2
      Q=AMIN1(QMIN,QMAX)
      GO TO 215
  610 CALL VARDUM (QG,JLAM,VARG,T,SQRTW,NMAX,TSTART,DELTAT,NT,
     1 NINT,.FALSE.,LDUM,E,Y,YLYFIT,NLIN,VAR,NTRY,NDIME,INTER,
     2 GSE,NDIMG,IERROR)
      IF (IERROR .EQ. 5) GO TO 800
      ALLPIV(1)=LDUM
      DUM=VARG-VAROLD+2.*DDUM*QG
      IF (DUM .LE. 0.) DUM=.25*DDUM*QG*QG
      Q=AMIN1(DDUM*QG*QG/DUM,4.,QMAX)
      IF (VARG.LE.VAROLD .OR. (Q.GE..125*QG .AND. RAWDAT)) GO TO 210
C-----------------------------------------------------------------------
C  PUT QUADRATIC PARABOLA THRU ACTUAL VARIANCE SURFACE WHEN A
C      STRONG NONLINEARITY IS INDICATED BY A SMALL Q
C-----------------------------------------------------------------------
      QT(1)=AMIN1(.125*QG,AMAX1(Q,.02))
      IF (Q .GT. .125*QG) QT(1)=Q
      CALL VARDUM (QT(1),JLAM,DUM,T,SQRTW,NMAX,TSTART,DELTAT,NT,
     1 NINT,.FALSE.,LDUM,E,Y,YLYFIT,NLIN,VAR,NTRY,NDIME,INTER,
     2 GSE,NDIMG,IERROR)
      IF (IERROR .EQ. 5) GO TO 800
      VT(1)=DUM
      IF (VT(1) .GE. VAROLD) GO TO 615
      QT(2)=4.*QT(1)
      IF (QT(1) .LE. .125*QG) GO TO 617
      QT(2)=0.
      VT(2)=VAROLD
      QT(3)=QG
      VT(3)=VARG
      GO TO 630
  615 QT(2)=.5*QT(1)
      QT(2)=AMIN1(QT(2),.05)
  617 CALL VARDUM (QT(2),JLAM,DUM,T,SQRTW,NMAX,TSTART,DELTAT,NT,
     1 NINT,.FALSE.,LDUM,E,Y,YLYFIT,NLIN,VAR,NTRY,NDIME,INTER,
     2 GSE,NDIMG,IERROR)
      IF (IERROR .EQ. 5) GO TO 800
      VT(2)=DUM
      IF (VT(1).GE.VAROLD .OR. VT(2).GE.VT(1)) GO TO 620
      QT(3)=QG
      VT(3)=VARG
      GO TO 630
  620 QT(3)=0.
      VT(3)=VAROLD
  630 VARG=AMIN1(VT(1),VT(2),VARG)
      IF (VT(1) .LE. VARG) QG=QT(1)
      IF (VT(2) .LE. VARG) QG=QT(2)
      DUM=(VT(1)-VT(3))/(QT(1)-QT(3))
      DDUM=(DUM-(VT(2)-VT(3))/(QT(2)-QT(3)))/(QT(1)-QT(2))
      IF (DDUM .GT. 0.) GO TO 650
  640 Q=AMIN1(Q,.125*QT(2),.01)
      GO TO 210
  650 DUM=.5*((QT(1)+QT(3))-DUM/DDUM)
      IF (DUM .LE. 0.) GO TO 640
      Q=AMIN1(DUM,8.,QMAX)
      GO TO 210
C-----------------------------------------------------------------------
C  CHECK FOR ABNORMAL EXIT AND CALL ANLERR
C-----------------------------------------------------------------------
  800 FAILED=IERROR.NE.0 .OR. .NOT.ALLPIV(1)
      IF (.NOT.RAWDAT) GO TO 890
      FAILED=FAILED  .OR. .NOT.ALLPIV(2)
      IF (.NOT.FAILED .OR. ITYPE.EQ.4) CALL ANLERR (JLAM,T,SQRTW,NMAX,E,
     1 NLIN,NDIME,TSTART,DELTAT,NT,NINT,N,ITYPE,INTER,PRLSQ)
  890 IF (.NOT.(PRLSQ .AND. FAILED)) GO TO 950
 5889 FORMAT (/47H VARIANCE DID NOT SIGNIFICANTLY DECREASE IN THE,
     1 5H LAST,I2,7H TIMES.,5X,6(11H***TOO SLOW))
      IF (IERROR .EQ. 3) WRITE (IWRITE,5889) NABORT
 5890 FORMAT (/41H MAXIMUM ITERATIONS WITHOUT CONVERGENCE. ,
     1 7(13H***ITERATIONS))
      IF (IERROR .EQ. 2) WRITE (IWRITE,5890)
 5892 FORMAT (/28H VARIANCE INCREASED THE LAST,I2,8H TIMES. ,
     1 3X,7(13H***DIVERGENCE))
      IF (IERROR .EQ. 1) WRITE (IWRITE,5892) NVARUP
 5894 FORMAT (/42H NEARLY SINGULAR NORMAL EQUATIONS MATRIX. ,
     1 6(15H****SINGULARITY))
      IF (IERROR .EQ. 5) WRITE (IWRITE,5894)
C-----------------------------------------------------------------------
C  PUT PLAM IN ASCENDING ORDER
C-----------------------------------------------------------------------
  950 DO 960 J=1,JLAM
      DUM=1.E+20
      DO 985 K=J,JLAM
      IF (PLAM(K) .GT. DUM) GO TO 985
      L=K
      DUM=PLAM(K)
  985 CONTINUE
      PLAM(L)=PLAM(J)
      PLAM(J)=DUM
      DUM=PALPHA(L)
      PALPHA(L)=PALPHA(J)
      PALPHA(J)=DUM
      IF (.NOT.RAWDAT) GO TO 960
      DUM=SIGMAP(L)
      SIGMAP(L)=SIGMAP(J)
      SIGMAP(J)=DUM
      K=L+JLAM
      JK=J+JLAM
      DUM=SIGMAP(K)
      SIGMAP(K)=SIGMAP(JK)
      SIGMAP(JK)=DUM
      PCERR(J)=100.*SIGMAP(J)/PLAM(J)
      IF (ABS(PALPHA(J)) .GT. 0.) PCERR(JK)=100.*SIGMAP(JK)/ABS(PALPHA
     1 (J))
  960 CONTINUE
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE EVAR.  FOR FRACTIONAL STEP SIZE Q, EVALUATES PALPHA
C      (LINEAR LEAST SQUARES PARAMETERS), VAR (WEIGHTED VARIANCE) AND
C      ACCUMULATES IT IN VGRID2 (COARSE GRID SUM), AND, IF
C      INVERT=.TRUE., EVALUATES ARRAYS SFDE, DFCAPL, AND FULL UPPER
C      TRIANGLES OF DDSE AND SE FOR LATER USE IN NONLINEAR LEAST
C      SQUARES.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - ETHEOR, PIVOT
C  WHICH IN TURN CALL - PIVOT1
C-----------------------------------------------------------------------
      SUBROUTINE EVAR (Q,JLAM,VAR,T,SQRTW,NMAX,TSTART,DELTAT,NT,NINT,
     1 INVERT,ALLPIV,E,Y,YLYDUM,NLIN,VARG,NTRY,NDIME,INTER,GSE,NDIMG,
     2 IERROR)
      LOGICAL INVERT, ALLPIV, LDDUM, INTER, LBLOKA, LBLOKB, LBLOKC,
     1 LBLOKD, NOTINV, NOBASE, WTED, REGINT, NONNEG, PIVALP
      REAL LAMNMX
      LONG LABEL
      COMMON /BLOK/ RBLOKA(2799), SUMWTY, SUMWT, ZERO(6),
     1 RBLOKB(56), DGRIDE, GESTL, RBLOKC, LAMNMX(2,2), PALPHA(6),
     2 PLAM(6), PRECIS, RBLOKD(2), SE(6,6), RBLOKE(22), VGRID2(252),
     3 PLMTRY(6), DELTAP(10), DFCAPL(6,5), SFDE(5), ADUB(11,11),
     4 DDSE(5,5), DTOLER(11), RBLOKF(132), JGEADD, NBINOM(20,5),
     5 IBLOKA(5), NPERG2(5), MDIMA, IBLOKB(4), NGRID2(5),IBLOKC(44), N
a     iblokc 24->44
      COMMON /BLOK/ IBLOKD(14), REGINT, LBLOKA(4), NOBASE, WTED,
     1 LBLOKB(4), NONNEG, LBLOKC(10), PIVALP(11), LBLOKD
a     lbloka 2->4, lblokb 2->4
      DIMENSION ADUM(6), FACTOR(5), XEXP(5), JG2(5)
      DIMENSION T(NMAX), SQRTW(NMAX), TSTART(NINT), DELTAT(NINT),
     1 NT(NINT), E(NDIME,NLIN), Y(NMAX), YLYDUM(1), GSE(NDIMG,4)
      DO 110 J=1,JLAM
  110 PLMTRY(J)=PLAM(J)+Q*DELTAP(J)
      NLINP=NLIN+1
      DO 160 K=1,NLINP
  160 ADUB(K,NLINP)=0.
      IF (NOBASE) GO TO 170
      PLMTRY(NLIN)=0.
      ADUB(NLIN,NLIN)=SUMWT
      ADUB(NLIN,NLINP)=SUMWTY
  170 NOTINV=.NOT.INVERT
      IF (REGINT) GO TO 300
C-----------------------------------------------------------------------
C  ORDINARY COMPUTATION OF E (EXPONENTIALS), ADUB (NORMAL EQUATIONS
C      MATRIX FOR LINEAR LEAST SQUARES) AND, IF INVERT=.TRUE., PART
C      OF DFCAPL (PARTIAL OF FCAP W.R.T. LAMBDA) WHEN REGINT=.FALSE.
C-----------------------------------------------------------------------
      DO 190 K=1,NLIN
      DO 195 J=1,K
      IF (J .GT. JLAM) GO TO 190
      ADUB(J,K)=0.
      DFCAPL(K,J)=0.
  195 IF (K .LE. JLAM) DDSE(J,K)=0.
  190 CONTINUE
      DO 200 J=1,N
      DUM=-T(J)
      DO 210 K=1,JLAM
      ADUM(K)=SQRTW(J)*EXP(PLMTRY(K)*DUM)
  210 E(J,K)=ADUM(K)
      IF (NOBASE) GO TO 215
      ADUM(NLIN)=SQRTW(J)
      E(J,NLIN)=ADUM(NLIN)
  215 DO 220 K=1,NLIN
      DDUM=ADUM(K)
      LDDUM=K .LE. JLAM
      DO 230 L=1,K
      IF (L .GT. JLAM) GO TO 220
      DDDUM=ADUM(L)*DDUM
      ADUB(L,K)=ADUB(L,K)+DDDUM
      IF (NOTINV) GO TO 230
      DDDUM=DDDUM*DUM
      DFCAPL(K,L)=DFCAPL(K,L)-DDDUM
      IF (LDDUM) DDSE(L,K)=DDSE(L,K)+DDDUM*DUM
  230 CONTINUE
      ADUB(K,NLINP)=ADUB(K,NLINP)+DDUM*Y(J)
  220 CONTINUE
  200 CONTINUE
      GO TO 500
C-----------------------------------------------------------------------
C  EVALUATE ADUB AND, IF INVERT=.TRUE., PART OF DFCAPL AND DDSE
C      (SECOND DERIVATIVES OF EXPONENTIAL SUMS W.R.T. LAMBDA)
C      BY HERMITE AND LAGRANGE INTERPOLATION, IF REGINT=INTER=.TRUE.
C-----------------------------------------------------------------------
  300 IF (.NOT.INTER) GO TO 400
      DO 310 K=1,NLIN
      LDDUM=K .LE. JLAM
      DO 320 J=1,K
      IF (J .GT. JLAM) GO TO 310
      XLAM=PLMTRY(K)+PLMTRY(J)
      DUM=(ALOG(XLAM)-GESTL)/DGRIDE
      JZ=(DUM+.5)
      HZ=DUM-FLOAT(JZ)
      IF (ABS(HZ) .GT. 1.E-5) GO TO 330
      ADUB(J,K)=GSE(JZ,1)
      IF (NOTINV) GO TO 320
      DFCAPL(K,J)=-GSE(JZ,2)/XLAM
      IF (LDDUM) DDSE(J,K)=(GSE(JZ,3)-GSE(JZ,2))/(XLAM*XLAM)
      GO TO 320
  330 JM=(DUM)
      JP=JM+1
      H=DUM-FLOAT(JM)
      HH=1.-H
      DDUM=1.+3.*H
      DDDUM=1.+3.*HH
      DX=H*DGRIDE
      DDX=-HH*DGRIDE
      ADUB(J,K)=HH*HH*HH*((DDUM+6.*H*H)*GSE(JM,1)+DX*(DDUM*GSE(JM,2)+
     1 .5*DX*GSE(JM,3)))+H*H*H*((DDDUM+6.*HH*HH)*GSE(JP,1)+
     2 DDX*(DDDUM*GSE(JP,2)+.5*DDX*GSE(JP,3)))
      IF (NOTINV) GO TO 320
      HH=HZ*HZ
      DX=(HH-1.)*HZ*.5
      DUM=1./(HZ+1.)
      DDUM=1./HZ
      DDDUM=1./(HZ-1.)
      H=DX*DX*(((3.*HZ+4.)*GSE(JZ-1,2)*DUM+DGRIDE*GSE(JZ-1,3))*DUM+
     1 4.*DDUM*(DDUM*GSE(JZ,2)+DGRIDE*GSE(JZ,3))+DDDUM*((4.-3.*HZ)*
     2 GSE(JZ+1,2)*DDDUM+DGRIDE*GSE(JZ+1,3)))
      DFCAPL(K,J)=-H/XLAM
      IF (.NOT.LDDUM) GO TO 320
      DUM=DX*(HH-4.)*(HH-9.)*(GSE(JZ+3,3)/(HZ-3.)+GSE(JZ-3,3)/(HZ+3.)-
     1 6.*(GSE(JZ+2,3)/(HZ-2.)+GSE(JZ-2,3)/(HZ+2.))+15.*
     2 (GSE(JZ+1,3)*DDDUM+GSE(JZ-1,3)*DUM)-20.*GSE(JZ,3)*DDUM)/360.
      DDSE(J,K)=(DUM-H)/(XLAM*XLAM)
  320 CONTINUE
      DUM=(ALOG(PLMTRY(K))-GESTL)/DGRIDE
      JZ=(DUM+.5)
      HZ=DUM-FLOAT(JZ)
      IF (ABS(HZ) .GT. 1.E-5) GO TO 340
      ADUB(K,NLINP)=GSE(JZ,4)
      GO TO 310
  340 HH=HZ*HZ
      ADUB(K,NLINP)=HZ*(HH-1.)*(HH-4.)*(HH-9.)*(GSE(JZ+3,4)/(HZ-3.)+
     1 GSE(JZ-3,4)/(HZ+3.)-6.*(GSE(JZ+2,4)/(HZ-2.)+GSE(JZ-2,4)/
     2 (HZ+2.))+15.*(GSE(JZ+1,4)/(HZ-1.)+GSE(JZ-1,4)/(HZ+1.))
     3 -20.*GSE(JZ,4)/HZ)/720.
  310 CONTINUE
      GO TO 500
C-----------------------------------------------------------------------
C  EVALUATE ADUB, PART OF DFCAPL, AND DDSE BY CALLING ETHEOR
C      IF REGINT=.TRUE. AND INTER=.FALSE.
C-----------------------------------------------------------------------
  400 DO 410 K=1,NLIN
      LDDUM=K .LE. JLAM
      DO 420 J=1,K
      IF (J .GT. JLAM) GO TO 410
      XLAM=PLMTRY(K)+PLMTRY(J)
      CALL ETHEOR (XLAM,INVERT,WTED,T,SQRTW,Y,NMAX,TSTART,DELTAT,
     1 NT,NINT,DUM,DDUM,DDDUM,S,.TRUE.,.FALSE.)
      ADUB(J,K)=DUM
      IF (NOTINV) GO TO 420
      DFCAPL(K,J)=-DDUM/XLAM
      IF (LDDUM) DDSE(J,K)=(DDDUM-DDUM)/(XLAM*XLAM)
  420 CONTINUE
      CALL ETHEOR (PLMTRY(K),.FALSE.,WTED,T,SQRTW,Y,NMAX,TSTART,DELTAT,
     1 NT,NINT,DUM,DDUM,DDDUM,S,.FALSE.,.TRUE.)
      ADUB(K,NLINP)=S
  410 CONTINUE
  500 DO 510 K=1,NLIN
      DTOLER(K)=10.*PRECIS*ADUB(K,K)
      DO 515 J=1,K
  515 SE(J,K)=ADUB(J,K)
  510 CONTINUE
C-----------------------------------------------------------------------
C  SOLVE NORMAL EQUATIONS FOR PALPHA USING STEPWISE REGRESSION
C-----------------------------------------------------------------------
      CALL PIVOT (ADUB,MDIMA,NLIN,.FALSE.,INVERT,NONNEG,0.,
     1 1.E+20,ZERO,DTOLER,PALPHA,ALLPIV,DUM,PIVALP,JLAM,S,IERROR)
      IF (IERROR .NE. 5) GO TO 518
      VAR=1.E+20
      RETURN
C-----------------------------------------------------------------------
C  CALCULATE VAR AND, IF INVERT=.TRUE., SFDE (SUMS OF RESIDUALS
C      TIMES DERIVATIVES OF NONLINEAR TERMS)
C-----------------------------------------------------------------------
  518 VAR=0.
      IF (NOTINV) GO TO 528
      DO 520 K=1,JLAM
      SFDE(K)=0.
      DO 525 J=1,K
  525 DFCAPL(J,K)=DFCAPL(K,J)
  520 CONTINUE
  528 IF (.NOT.REGINT) GO TO 600
      K=0
      DO 530 J=1,NINT
      DO 540 L=1,JLAM
      FACTOR(L)=EXP(-PLMTRY(L)*DELTAT(J))
  540 XEXP(L)=EXP(-PLMTRY(L)*TSTART(J))
      KK=NT(J)
      DO 550 LL=1,KK
      K=K+1
      DUM=SQRTW(K)
      YLYFIT=Y(K)
      IF (.NOT.NOBASE) YLYFIT=YLYFIT-PALPHA(NLIN)*DUM
      DO 560 L=1,JLAM
      ADUM(L)=XEXP(L)*DUM
      YLYFIT=YLYFIT-ADUM(L)*PALPHA(L)
      XEXP(L)=XEXP(L)*FACTOR(L)
  560 CONTINUE
      VAR=VAR+YLYFIT*YLYFIT
      IF (NOTINV) GO TO 550
      DDUM=T(K)
      DO 570 L=1,JLAM
  570 SFDE(L)=SFDE(L)-DDUM*YLYFIT*ADUM(L)
  550 CONTINUE
  530 CONTINUE
      GO TO 700
  600 DO 610 J=1,N
      YLYFIT=Y(J)
      DO 620 K=1,NLIN
  620 YLYFIT=YLYFIT-PALPHA(K)*E(J,K)
      VAR=VAR+YLYFIT*YLYFIT
      IF (NOTINV) GO TO 610
      DUM=T(J)
      DO 630 K=1,JLAM
  630 SFDE(K)=SFDE(K)-DUM*YLYFIT*E(J,K)
  610 CONTINUE
  700 IF (JLAM.EQ.1 .OR. .NOT.INTER) GO TO 800
C-----------------------------------------------------------------------
C  ADD VAR INTO VGRID2 (COARSE GRID SUM)
C-----------------------------------------------------------------------
      J2MAX=0
      DO 710 L=1,JLAM
      IF (PLMTRY(L).LT.LAMNMX(1,2) .OR. PLMTRY(L).GT.LAMNMX(2,2))
     1 GO TO 800
      JG2(L)=(((ALOG(PLMTRY(L))-GESTL)/DGRIDE+.5)-JGEADD)/
     1 NPERG2(JLAM)+1
      IF (JG2(L) .LT. J2MAX) GO TO 710
      J2MAX=JG2(L)
      LMAX=L
  710 CONTINUE
      JG2(LMAX)=0
      LOC=1
      DO 720 J=1,JLAM
      J2NEXT=0
      DO 730 L=1,JLAM
      IF (JG2(L) .LT. J2NEXT) GO TO 730
      J2NEXT=JG2(L)
      LNEXT=L
  730 CONTINUE
      L=J2NEXT+1
      IF (J2MAX-L) 800,750,740
  740 LL=J2MAX-1
      DO 745 K=L,LL
      KK=NGRID2(JLAM)-K+1
  745 LOC=LOC+NBINOM(KK,J)
  750 J2MAX=J2NEXT
      JG2(LNEXT)=0
  720 CONTINUE
      DUM=VAR
      LOC=MIN0(LOC,252)
      IF (.NOT.INVERT .OR. (VAR.GT.VARG .AND. NTRY.EQ.1)) DUM=DUM*1.E-6
      VGRID2(LOC)=VGRID2(LOC)+DUM
  800 RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE VARF.  SAME AS EVAR, EXCEPT FOR TRANSFORMS INSTEAD OF
C      EXPONENTIALS AND DOES NO ACCUMULATION IN A COARSE GRID.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - PIVOT
C  WHICH IN TURN CALL - PIVOT1
C-----------------------------------------------------------------------
      SUBROUTINE VARF (Q,JLAM,VAR,T,SQRTW,NMAX,TSTART,DELTAT,NT,NINT,
     1 INVERT,ALLPIV,E,Y,YLYFIT,NLIN,VARG,NTRY,NDIME,INTDUM,GSE,NDIMG,
     2 IERROR)
      LOGICAL INVERT, ALLPIV, INTDUM, LBLOKA, LBLOKB, LBLOKC,
     1 LBLOKD, NOBASE, NONNEG, PIVALP, NOTINV
      LONG LABEL
      COMMON /BLOK/ TRBASE(11), GF(11,126), DGFL(11,126), DGRIDF,
     1 GFSTL, FHAT(11), RBLOKA(5), ZERO(6), RBLOKB(63),
     2 PALPHA(6), PLAM(6), PRECIS, RBLOKC(312), PLMTRY(6),
     3 DELTAP(10), DFCAPL(6,5), RBLOKD(5), ADUB(11,11), RBLOKE(25),
     4 DTOLER(11), F(11,6), DF(11,6), IBLOKA(111), MDIMA, IBLOKB(52),
     5 NF, IBLOKC(15), LBLOKA(6), NOBASE, LBLOKB(6), NONNEG, LBLOKC(10)
a     iblokb 32->52
      COMMON /BLOK/ PIVALP(11), LBLOKD
a     lbloka 3->6, lblokb 3->6
      DIMENSION T(1), SQRTW(1), TSTART(1), DELTAT(1), NT(1), E(1,1),
     1 Y(1), YLYFIT(NMAX), ADUM(9), GSE(1,1)
      NLINP=NLIN+1
      NOTINV=.NOT.INVERT
      IF (NOBASE) GO TO 190
      PLMTRY(NLIN)=0.
      DO 130 J=1,NF
  130 F(J,NLIN)=TRBASE(J)
C-----------------------------------------------------------------------
C  COMPUTE F (NONLINEAR TERMS) AND, IF INVERT=.TRUE., DF (THEIR
C      DERIVATIVES W.R.T. LAMBDA) BY HERMITE AND LAGRANGE
C      INTERPOLATION.
C-----------------------------------------------------------------------
  190 DO 200 J=1,JLAM
      PLMTRY(J)=PLAM(J)+Q*DELTAP(J)
      RLAM=1./PLMTRY(J)
      DUM=(ALOG(PLMTRY(J))-GFSTL)/DGRIDF
      JZ=(DUM+.5)
      HZ=DUM-FLOAT(JZ)
      IF (ABS(HZ) .GT. 1.E-5) GO TO 220
      DO 210 K=1,NF
      F(K,J)=GF(K,JZ)
  210 IF (INVERT) DF(K,J)=DGFL(K,JZ)*RLAM
      GO TO 200
  220 ADUM(7)=1./HZ
      ADUM(1)=4.*ADUM(7)*ADUM(7)
      ADUM(2)=4.*DGRIDF*ADUM(7)
      ADUM(8)=1./(HZ+1.)
      ADUM(3)=(3.*HZ+4.)*ADUM(8)*ADUM(8)
      ADUM(4)=DGRIDF*ADUM(8)
      ADUM(9)=1./(HZ-1.)
      ADUM(5)=(4.-3.*HZ)*ADUM(9)*ADUM(9)
      ADUM(6)=DGRIDF*ADUM(9)
      HH=HZ*HZ
      DDUM=(HH-1.)*HZ*.5
      DDDUM=DDUM*DDUM
      DO 230 K=1,NF
  230 F(K,J)=DDDUM*(ADUM(1)*GF(K,JZ)+ADUM(2)*DGFL(K,JZ)+ADUM(3)*
     1 GF(K,JZ-1)+ADUM(4)*DGFL(K,JZ-1)+ADUM(5)*GF(K,JZ+1)+ADUM(6)*
     2 DGFL(K,JZ+1))
      IF (NOTINV) GO TO 200
      ADUM(1)=-20.*ADUM(7)
      ADUM(2)=15.*ADUM(8)
      ADUM(3)=15.*ADUM(9)
      ADUM(4)=-6./(HZ+2.)
      ADUM(5)=-6./(HZ-2.)
      ADUM(6)=1./(HZ+3.)
      ADUM(7)=1./(HZ-3.)
      DDDUM=DDUM*(HH-4.)*(HH-9.)*RLAM/360.
      DO 240 K=1,NF
  240 DF(K,J)=DDDUM*(ADUM(1)*DGFL(K,JZ)+ADUM(2)*DGFL(K,JZ-1)+ADUM(3)*
     1 DGFL(K,JZ+1)+ADUM(4)*DGFL(K,JZ-2)+ADUM(5)*DGFL(K,JZ+2)+
     2 ADUM(6)*DGFL(K,JZ-3)+ADUM(7)*DGFL(K,JZ+3))
  200 CONTINUE
C-----------------------------------------------------------------------
C  COMPUTE AND INVERT ADUB (NORMAL EQUATIONS MATRIX FOR LINEAR
C      LEAST SQUARES
C-----------------------------------------------------------------------
      ADUB(NLINP,NLINP)=0.
      DO 300 K=1,NLIN
      DO 310 J=1,K
      DUM=0.
      DO 320 L=1,NF
  320 DUM=DUM+F(L,J)*F(L,K)
      ADUB(J,K)=DUM
  310 CONTINUE
      DTOLER(K)=10.*PRECIS*ADUB(K,K)
      DUM=0.
      DO 330 L=1,NF
  330 DUM=DUM+F(L,K)*FHAT(L)
      ADUB(K,NLINP)=DUM
  300 CONTINUE
      CALL PIVOT (ADUB,MDIMA,NLIN,.FALSE.,INVERT,NONNEG,0.,
     1 1.E+20,ZERO,DTOLER,PALPHA,ALLPIV,DUM,PIVALP,JLAM,DDUM,IERROR)
          IF (IERROR .EQ. 5) RETURN
C-----------------------------------------------------------------------
C  CALCULATE VAR (WEIGHTED VARIANCE OF FIT) AND YLYFIT (WEIGHTED
C      RESIDUALS), AND,IF INVERT=.TRUE., PART OF DFCAPL FOR
C      LATER USE IN NONLINEAR LEAST SQUARES
C-----------------------------------------------------------------------
      VAR=0.
      DO 410 L=1,NF
      DUM=FHAT(L)
      DO 420 J=1,NLIN
  420 DUM=DUM-PALPHA(J)*F(L,J)
      YLYFIT(L)=DUM
      VAR=VAR+DUM*DUM
  410 CONTINUE
      IF (NOTINV .OR. (VAR.GT.VARG .AND. NTRY.EQ.1)) RETURN
      DO 450 K=1,JLAM
      DO 470 J=1,NLIN
      DUM=0.
      DO 480 L=1,NF
  480 DUM=DUM-F(L,J)*DF(L,K)
      DFCAPL(J,K)=DUM
  470 CONTINUE
  450 CONTINUE
      RETURN
      END
C-----------------------------------------------------------------------
C++++++++++++
      FUNCTION EXPSMA(S)
      EXPSMA=S*(720-S*(360-S*(120-S*(30-S*(6-S)))))/720
      RETURN
      END
C+++++++++++
C  SUBROUTINE ETHEOR.  IF DOE=.TRUE., PUTS EXPONENTIAL SUM AND, IF
C      INVERT=.TRUE., ITS FIRST AND SECOND DERIVATIVES W.R.T.
C      ALOG(LAMBDA) IN SE, DSE, DDSE.  IF DOYE=.TRUE., PUTS SUM OF Y
C      TIMES EXPONENTIALS IN SYE.  DONE IN SINGLE PRECISION.
C  CAN ONLY BE USED WHEN REGINT=.TRUE..
C  IF WTED=.TRUE., USES RECURSION RELATIONS, AND IF WTED=.FALSE. USES
C      GEOMETRIC SUM FORMULAS FOR SE, DSE, AND DDSE.
C  NO COMMON BLOCKS NEEDED.
C-----------------------------------------------------------------------
C  CALLS NO SUBPROGRAMS.
C-----------------------------------------------------------------------
      SUBROUTINE ETHEOR (PLAMBD,INVERT,WTED,T,SQRTW,Y,NMAX,TSTART,
     1 DELTAT,NT,NINT,SE,DSE,DDSE,SYE,DOE,DOYE)
      REAL AN, B, C, DDDUM, DDSEI, DDUM,
     1 DEDNL, DL, DNL, DSEI, DUM, EDL, ELTS, ENTS, RDEDL, SEI, S,
     2 SS, SYEI, DDT, DTS, DPLAM
      LOGICAL INVERT, NOTINV, WTED, DOE, DOYE, LDDUM
      DIMENSION SQRTW(NMAX), TSTART(NINT), DELTAT(NINT), NT(NINT),
     1 T(NMAX), Y(NMAX)
A     EXPSMA(S)=S*(720.D0-S*(360.D0-S*(120.D0-S*(30.D0-S*(6.D0-S)))))/
A    1 720.D0
      DPLAM=(PLAMBD)
      IF (DOE) SEI=0.D0
      IF (INVERT) DSEI=0.D0
      IF (INVERT) DDSEI=0.D0
      NOTINV=.NOT.INVERT
      IF (.NOT.(DOYE .OR. WTED)) GO TO 200
      IF (DOYE) SYEI=0.D0
      LDDUM=.NOT.(DOE .AND. WTED)
      J=0
      DO 110 L=1,NINT
      DDUM=EXP(-DPLAM*(DELTAT(L)))
      DDDUM=EXP(-DPLAM*(TSTART(L)))
      KK=NT(L)
      DO 120 K=1,KK
      J=J+1
      DUM=DDDUM*SQRTW(J)
      DDDUM=DDDUM*DDUM
      IF (DOYE) SYEI=SYEI+DUM*Y(J)
      IF (LDDUM) GO TO 120
      DUM=DUM*SQRTW(J)
      SEI=SEI+DUM
      IF (NOTINV) GO TO 120
      DUM=DUM*T(J)
      DSEI=DSEI-DUM
      DDSEI=DDSEI+DUM*T(J)
  120 CONTINUE
  110 CONTINUE
      IF (DOYE) SYE=(SYEI)
      IF (.NOT.DOE) RETURN
      IF (WTED) GO TO 300
C-----------------------------------------------------------------------
C  USE GEOMETRIC SUM FORMULAS WHEN WTED=.FALSE.
C-----------------------------------------------------------------------
  200 DO 210 L=1,NINT
      DDT=(DELTAT(L))
      DTS=(TSTART(L))
      DL=DPLAM*DDT
      AN=(FLOAT(NT(L)))
      DNL=AN*DL
      IF (ABS(DL) .LE. 1.D-3) GO TO 214
      RDEDL=1.D0/(1.D0-EXP(-DL))
      DEDNL=1.D0-EXP(-DNL)
      GO TO 218
  214 RDEDL=1.D0/EXPSMA(DL)
      IF (ABS(DNL) .LE. 1.D-3) DEDNL=EXPSMA(DNL)
      IF (ABS(DNL) .GT. 1.D-3) DEDNL=1.D0-EXP(-DNL)
  218 ELTS=EXP(-DPLAM*DTS)
      S=ELTS*DEDNL*RDEDL
      SEI=SEI+S
      IF (NOTINV) GO TO 210
      B=DDT*RDEDL
      EDL=EXP(-DL)
      ENTS=ELTS*EXP(-DNL)
      C=AN*ENTS-S*EDL
      SS=B*C-DTS*S
      DSEI=DSEI+SS
      DDSEI=DDSEI-DTS*SS-B*(EDL*(B*C+SS-S*DDT)+AN*(AN*DDT+DTS)*ENTS)
  210 CONTINUE
  300 SE=(SEI)
      IF (NOTINV) RETURN
      DUM=DPLAM*DSEI
      DSE=(DUM)
      DDSE=(DUM+DDSEI*DPLAM*DPLAM)
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE PIVOT.  DOES GAUSS-JORDAN PIVOTS ON ALL NP DIAGONAL
C      ELEMENTS OF AUGMENTED MATRIX ADUB EXCEPT THOSE THAT HAVE A
C      TOLERANCE LESS THAN DTOLER OR THAT CAUSE A VIOLATION OF THE
C      CONSTRAINT PMIN .LE. P .LE. PMAX.
C  ONLY NEEDS FULL UPPER TRIANGLE OF MATRIX ON INPUT, AND OVERWRITES IT
C      WITH INVERSE AND SOLUTION.
C  NEEDS NO COMMON BLOCKS.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - PIVOT1
C-----------------------------------------------------------------------
      SUBROUTINE PIVOT (ADUB,MDIMA,NP,ONLYIN,INVERT,CONSTR,PMIN,
     1 PMAX,P,DTOLER,DELTAP,ALLPIV,QG,PIV,JLAM,QMAX,IERROR)
      LOGICAL ONLYIN, ALLPIV, CONSTR, INVERT, PIV(NP)
      DIMENSION DELTAP(NP), P(NP), ADUB(MDIMA,MDIMA), DTOLER(NP)
      IERROR=0
      QG=1.
      QMAX=999.
      NPP=NP+1
      IF (ONLYIN) NPP=NP
      DO 110 J=1,NP
  110 PIV(J)=.FALSE.
      IF (NPP .EQ. 1) GO TO 190
      DO 120 J=2,NPP
      L=J-1
      DO 120 K=1,L
      ADUB(J,K)=ADUB(K,J)
  120 CONTINUE
C-----------------------------------------------------------------------
C  MAIN LOOP FOR COMPLETE PIVOTING
C-----------------------------------------------------------------------
  190 DO 200 NPIV=1,NP
C-----------------------------------------------------------------------
C  FIND NEXT PIVOT ELEMENT
C-----------------------------------------------------------------------
      DUM=0.
      DO 210 J=1,NP
      IF (PIV(J) .OR. ADUB(J,J).LE.DTOLER(J)) GO TO 210
      DDUM=ADUB(J,NPP)*ADUB(J,NPP)/ADUB(J,J)
      IF (DDUM .LE. DUM) GO TO 210
      DUM=DDUM
      L=J
  210 CONTINUE
      IF (DUM .LE. 0.) GO TO 300
      PIV(L)=.TRUE.
      CALL PIVOT1 (ADUB,MDIMA,NPP,L)
  200 CONTINUE
      NPIV=NP+1
  300 NPIV=NPIV-1
      IF (ONLYIN .OR. .NOT.CONSTR) GO TO 400
C-----------------------------------------------------------------------
C  ENFORCE CONSTRAINTS BY MAKING QG.LT.1. OR BY UNPIVOTING
C-----------------------------------------------------------------------
      DO 330 J=1,JLAM
      DUM=1.E+20
      DO 340 K=1,JLAM
      IF (.NOT.PIV(K)) GO TO 340
      RDELTA=1./ADUB(K,NPP)
      DDUM=AMAX1((PMIN-P(K))*RDELTA,(PMAX-P(K))*RDELTA)
      IF (DDUM .GE. DUM) GO TO 340
      DUM=DDUM
      L=K
  340 CONTINUE
      IF (DUM .GT. 1.E-5) GO TO 350
      NPIV=NPIV-1
      PIV(L)=.FALSE.
      CALL PIVOT1 (ADUB,MDIMA,NPP,L)
  330 CONTINUE
C-----------------------------------------------------------------------
C  IF ALL ELEMENTS ARE SOMEHOW UNPIVOTED, TAKE ERROR EXIT
C-----------------------------------------------------------------------
  350 IF (NPIV .GT. 0) GO TO 390
      IERROR=5
      RETURN
  390 QG=AMIN1(DUM,1.)
      QMAX=DUM
  400 ALLPIV=NPIV .EQ. NP
      IF (ONLYIN) RETURN
      DO 430 J=1,NP
      DELTAP(J)=0.
  430 IF (PIV(J)) DELTAP(J)=ADUB(J,NPP)
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE PIVOT1. DOES A GAUSS-JORDAN PIVOT ON DIAGONAL ELEMENT LPIV
C  NEEDS NO COMMON BLOCKS.
C-----------------------------------------------------------------------
C  CALLS NO SUBPROGRAMS
C-----------------------------------------------------------------------
      SUBROUTINE PIVOT1 (ADUB,MDIMA,NPP,LPIV)
      DIMENSION ADUB(MDIMA,MDIMA)
      DUB=1./ADUB(LPIV,LPIV)
      DO 110 J=1,NPP
      IF (J .EQ. LPIV) GO TO 110
      DDUB=ADUB(J,LPIV)*DUB
      DO 120 K=1,NPP
  120 IF (K .NE. LPIV) ADUB(J,K)=ADUB(J,K)-ADUB(LPIV,K)*DDUB
  110 CONTINUE
      DO 130 J=1,NPP
      ADUB(J,LPIV)=-ADUB(J,LPIV)*DUB
  130 ADUB(LPIV,J)=ADUB(LPIV,J)*DUB
      ADUB(LPIV,LPIV)=DUB
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE ANLERR.  DOES FINAL ERROR ANALYSIS OF FIT AND CALCULATES
C      NONLINEARITY TERM ENPHI OF BEALE FOR LATER USE.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - PIVOT
C  WHICH IN TURN CALL - PIVOT1
C-----------------------------------------------------------------------
      SUBROUTINE ANLERR (JLAM,T,SQRTW,NMAX,E,NLIN,NDIME,TSTART,DELTAT,
     1 NT,NINT,N,ITYPE,INTER,PRLSQ)
      LOGICAL LDUM, NOBASE, PIVALP, FAILED, PRLSQ, REGINT,
     1 LBLOKA, LBLOKB, LBLOKC, INTER
      LONG HOLRTH, ALPLAM(5,2), LABEL
      COMMON /BLOK/ RBLOKA(2800), SUMWT, RBLOKB(64), VAR, RBLOKC(4),
     1 PALPHA(6), PLAM(6), PRECIS, SIGYY, ENPHI, SE(6,6), SIGMAP(11),
     2 PCERR(11), RBLOKD(268), DFCAPL(6,5), RBLOKE(5), ADUB(11,11),
     3 DDSE(5,5), DTOLER(11), RBLOKF(132), IBLOKA(111), MDIMA, IBLOKB,
     4 IWTSGN, IBLOKC(50), NF, IBLOKD, IWRITE, IBLOKE(6), JLAMP1,
     5 IBLOKF(6), REGINT, FAILED, LBLOKA, NOBASE, LBLOKB(18), PIVALP(11)
a     iblokc 30->50
a      lblokb 14->18
      COMMON /BLOK/ LBLOKC
      DIMENSION CUI(11), CSTAR(11), DELT(10,10),
     1 CCSUM(11,10), ADUM(6)
      DIMENSION SUM(4), T(NMAX), E(NDIME,NLIN), SQRTW(NMAX),
     1 TSTART(NINT), DELTAT(NINT), NT(NINT)
c+++++++++
      holrth='base'
      alplam(1,1)='lam1'; alplam(2,1)='lam2'; alplam(3,1)='lam3'
      alplam(4,1)='lam4'; alplam(5,1)='lam5'
      alplam(1,2)='alp1'; alplam(2,2)='alp2'; alplam(3,2)='alp3'
      alplam(4,2)='alp4'; alplam(5,2)='alp5'
c++++++++
C-----------------------------------------------------------------------
C  COMPUTE CORRELATION COEFFICIENTS AND STANDARD ERROR ESTIMATES
C      USING FULL NORMAL EQUATIONS MATRIX (ADUB) WITH ALL PARAMETERS
C      ASSUMED INDEPENDENT
C-----------------------------------------------------------------------
      DO 110 K=1,JLAM
      KK=K+JLAM
      DO 120 J=1,K
      JJ=J+JLAM
      ADUB(J,K)=PALPHA(J)*PALPHA(K)*DDSE(J,K)
      ADUB(J,KK)=-DFCAPL(K,J)*PALPHA(J)
      ADUB(K,JJ)=-DFCAPL(J,K)*PALPHA(K)
      ADUB(JJ,KK)=SE(J,K)
  120 CONTINUE
      DTOLER(K)=ADUB(K,K)*PRECIS
      DTOLER(KK)=ADUB(KK,KK)*PRECIS
      IF (NOBASE) GO TO 110
      ADUB(K,NF)=-DFCAPL(NLIN,K)*PALPHA(K)
      ADUB(KK,NF)=SE(K,NLIN)
  110 CONTINUE
      IF (NOBASE) GO TO 150
      ADUB(NF,NF)=SUMWT
      DTOLER(NF)=SUMWT*PRECIS
  150 CALL PIVOT (ADUB,MDIMA,NF,.TRUE.,.TRUE.,.FALSE.,0.,
     1 0.,CUI,DTOLER,CSTAR,LDUM,DUM,PIVALP,JLAM,DDUM,J)
      SIGYY=SQRT(VAR/FLOAT(N-NF))
      IF (.NOT.LDUM .OR. J.EQ.5) GO TO 172
      DO 170 J=1,NF
      IF (ADUB(J,J) .LE. 0.) GO TO 172
      CSTAR(J)=1./SQRT(ADUB(J,J))
      SIGMAP(J)=SIGYY/CSTAR(J)
  170 CONTINUE
      GO TO 174
  172 FAILED=.TRUE.
 5172 FORMAT (//51H0SINGULARITY IN INVERTING FULL LEAST SQUARES MATRIX,
     1 30H - NO CORRELATIONS CALCULATED.,3X,24(2H**))
      IF (PRLSQ) WRITE (IWRITE,5172)
      RETURN
  174 IF (INTER) RETURN
      K=JLAM
      DO 176 J=1,JLAM
      PCERR(J)=100.*SIGMAP(J)/PLAM(J)
      CUI(J)=ALPLAM(J,1)
      K=K+1
      PCERR(K)=100.*SIGMAP(K)/ABS(PALPHA(J))
      CUI(K)=ALPLAM(J,2)
  176 CONTINUE
      IF (NOBASE) GO TO 178
      CUI(NF)=HOLRTH
      PCERR(NF)=100.*SIGMAP(NF)/ABS(PALPHA(JLAMP1))
 5176 FORMAT (//5X,24HCORRELATION COEFFICIENTS/7X,10(3X,A4))
  178 IF (.NOT.PRLSQ) GO TO 190
      K=NF-1
      WRITE (IWRITE,5176) (CUI(J),J=1,K)
      DO 179 J=2,NF
      DUM=CSTAR(J)
      JK=J-1
      DO 180 K=1,JK
  180 DTOLER(K)=ADUB(J,K)*DUM*CSTAR(K)
 5180 FORMAT (1X,A4,2X,10F7.3)
      WRITE (IWRITE,5180) CUI(J),(DTOLER(K),K=1,JK)
  179 CONTINUE
C-----------------------------------------------------------------------
C  TO PREVENT A VERY SMALL COMPONENT (EFFECTIVELY A SECOND BASELINE)
C      THAT IS HIGHLY CORRELATED WITH THE BASELINE FROM INTERFERING
C      WITH THE CALCULATION OF THE WEIGHTS
C-----------------------------------------------------------------------
  190 IF (IWTSGN.GT.0 .OR. ITYPE.NE.1) GO TO 200
      DUM=1.E+20
      DO 195 J=1,JLAM
      IF (PLAM(J) .GT. DUM) GO TO 195
      DUM=PLAM(J)
      L=J
  195 CONTINUE
      IF (PCERR(L) .LT. 1000.) GO TO 200
      FAILED=.TRUE.
 5195 FORMAT (//47H SMALLEST LAMBDA HAS TOO HIGH A STANDARD ERROR.,
     1 60H  THIS COULD LEAD TO INACCURATE WEIGHTS - SOLUTION REJECTED.,
     2 3X,11(2H**))
      IF (PRLSQ) WRITE (IWRITE,5195)
  200 IF (FAILED .OR. ITYPE.NE.4) GO TO 282
C-----------------------------------------------------------------------
C  CALCULATION OF ENPHI (EQ. 3.25 OF E. M. L. BEALE FOR F RATIO
C  CORRECTION FACTOR DUE TO NONLINEARITY)
C-----------------------------------------------------------------------
      NUJ=JLAM
      DO 210 J=1,JLAM
      DUM=ADUB(J,J)
      NUJ=NUJ+1
      NUK=JLAM
      DO 220 K=1,JLAM
      NUK=NUK+1
      DELT(J,K)=DUM*ADUB(K,K)+2.*ADUB(J,K)*ADUB(J,K)
      DELT(J,NUK)=DUM*ADUB(K,NUK)+2.*ADUB(J,K)*ADUB(J,NUK)
      DELT(NUJ,K)=ADUB(J,NUJ)*ADUB(K,K)+2.*ADUB(J,K)*ADUB(NUJ,K)
      DELT(NUJ,NUK)=ADUB(J,NUJ)*ADUB(K,NUK)+ADUB(J,K)*ADUB(NUJ,NUK)
     1 +ADUB(J,NUK)*ADUB(NUJ,K)
      DO 230 L=1,4
  230 SUM(L)=0.
      NU=0
      DO 240 L=1,NINT
      CUI(1)=EXP(-PLAM(J)*DELTAT(L))
      CUI(2)=EXP(-PLAM(K)*DELTAT(L))
      CUI(3)=EXP(-PLAM(J)*TSTART(L))
      CUI(4)=EXP(-PLAM(K)*TSTART(L))
      II=NT(L)
      DO 242 I=1,II
      NU=NU+1
      TNU=T(NU)
      IF (REGINT) GO TO 244
      SS=E(NU,J)
      DDDUM=TNU*E(NU,K)
      GO TO 246
  244 SS=SQRTW(NU)*CUI(3)
      DDDUM=TNU*SQRTW(NU)*CUI(4)
      CUI(3)=CUI(3)*CUI(1)
      CUI(4)=CUI(4)*CUI(2)
  246 S=PALPHA(J)*TNU*SS
      DDUM=PALPHA(K)*TNU*DDDUM
      SUM(1)=SUM(1)-S*DDUM
      SUM(2)=SUM(2)+S*DDDUM
      SUM(3)=SUM(3)+SS*DDUM
      SUM(4)=SUM(4)-SS*DDDUM
  242 CONTINUE
  240 CONTINUE
      CCSUM(J,K)=SUM(1)
      CCSUM(J,NUK)=SUM(2)
      CCSUM(NUJ,K)=SUM(3)
      CCSUM(NUJ,NUK)=SUM(4)
  220 CONTINUE
      IF (NOBASE) GO TO 210
      S=0.
      SS=0.
      NU=0
      DO 250 L=1,NINT
      DUM=EXP(-PLAM(J)*DELTAT(L))
      DDUM=EXP(-PLAM(J)*TSTART(L))
      II=NT(L)
      DO 252 I=1,II
      NU=NU+1
      IF (REGINT) GO TO 254
      SSS=E(NU,J)
      GO TO 256
  254 SSS=DDUM*SQRTW(NU)
      DDUM=DDUM*DUM
  256 DDDUM=T(NU)*SSS*SQRTW(NU)
      SS=SS-DDDUM
      S=S+PALPHA(J)*T(NU)*DDDUM
  252 CONTINUE
  250 CONTINUE
      CCSUM(NF,J)=S
      CCSUM(NF,NUJ)=SS
  210 CONTINUE
      LDUM=.NOT.NOBASE
      ENPHI=0.
      DO 260 NU=1,N
      TNU=T(NU)
      DO 261 J=1,NLIN
  261 ADUM(J)=SQRTW(NU)*EXP(-PLAM(J)*TNU)
      NUJ=JLAM
      DO 262 J=1,JLAM
      NUJ=NUJ+1
      SUM(1)=0.
      SUM(2)=0.
      NUK=JLAM
      DO 264 K=1,JLAM
      S=0.
      IF (LDUM) S=SQRTW(NU)*ADUB(K,NF)
      NUI=JLAM
      DO 266 I=1,JLAM
      NUI=NUI+1
      CUI(NUI)=ADUM(I)
      CUI(I)=-PALPHA(I)*TNU*CUI(NUI)
      S=S+ADUB(K,I)*CUI(I)+ADUB(K,NUI)*CUI(NUI)
  266 CONTINUE
      SUM(1)=SUM(1)+CCSUM(K,J)*S
      SUM(2)=SUM(2)+CCSUM(K,NUJ)*S
      NUK=NUK+1
      S=0.
      IF (LDUM) S=SQRTW(NU)*ADUB(NUK,NF)
      NUI=JLAM
      DO 268 I=1,JLAM
      NUI=NUI+1
      S=S+ADUB(NUK,I)*CUI(I)+ADUB(NUK,NUI)*CUI(NUI)
  268 CONTINUE
      SUM(1)=SUM(1)+CCSUM(NUK,J)*S
      SUM(2)=SUM(2)+CCSUM(NUK,NUJ)*S
  264 CONTINUE
      IF (NOBASE) GO TO 272
      S=0.
      IF (LDUM) S=SQRTW(NU)*ADUB(NF,NF)
      NUI=JLAM
      DO 270 I=1,JLAM
      NUI=NUI+1
      S=S+ADUB(NF,I)*CUI(I)+ADUB(NF,NUI)*CUI(NUI)
  270 CONTINUE
      SUM(1)=SUM(1)+CCSUM(NF,J)*S
      SUM(2)=SUM(2)+CCSUM(NF,NUJ)*S
  272 DUM=TNU*ADUM(J)
      CSTAR(J)=PALPHA(J)*TNU*DUM-SUM(1)
      CSTAR(NUJ)=-2.*(DUM+SUM(2))
  262 CONTINUE
      SUM(1)=0.
      NUJ=JLAM
      DO 280 J=1,JLAM
      NUJ=NUJ+1
      S=0.
      SS=0.
      NUK=JLAM
      DO 281 K=1,JLAM
      NUK=NUK+1
      S=S+CSTAR(K)*DELT(J,K)+CSTAR(NUK)*DELT(J,NUK)
      SS=SS+CSTAR(K)*DELT(NUJ,K)+CSTAR(NUK)*DELT(NUJ,NUK)
  281 CONTINUE
      SUM(1)=SUM(1)+CSTAR(J)*S+CSTAR(NUJ)*SS
  280 CONTINUE
      ENPHI=ENPHI+SUM(1)
  260 CONTINUE
      ENPHI=ENPHI*SIGYY**2/FLOAT(NF+2)
 5282 FORMAT (36H STANDARD DEVIATION OF FIT = SIGYY =,1PE12.5//
     1 6X,27HLAMBDA+-STD. ERROR  PERCENT,7X,
     2 26HALPHA+-STD. ERROR  PERCENT)
 5002 FORMAT (/1X)
  282 IF (.NOT.PRLSQ) RETURN
      WRITE (IWRITE,5002)
      IF (.NOT. (FAILED .OR. ITYPE.NE.4)) WRITE (IWRITE,5283) ENPHI
 5283 FORMAT ( 7H NPHI =,1PE10.3)
      WRITE (IWRITE,5282) SIGYY
      K=JLAM
      DO 284 J=1,JLAM
      K=K+1
 5284 FORMAT (2(1PE14.4,2H+-,E10.3,0PF9.3))
      WRITE (IWRITE,5284) PLAM(J),SIGMAP(J),PCERR(J),PALPHA(J),
     1 SIGMAP(K),PCERR(K)
  284 CONTINUE
 5286 FORMAT (4X,8HBASELINE,19X,1PE14.4,2H+-,E10.3,0PF9.3)
      IF (.NOT.NOBASE) WRITE(IWRITE,5286) PALPHA(JLAMP1),SIGMAP(NF),
     1 PCERR(NF)
      RETURN
      END
C-------------------------- VERSION 1A OR 1B ---------------------------
C  FUNCTION FISHER.  CALCULATES PROBABILITY THAT FS(NU1,NU2) IS LESS
C  THAN F FOR FISHER F-TEST.
C  NU2 MUST BE .GE. 3
C  SUMS UNTIL A TERM IS FOUND LESS THAN TOL*(CURRENT VALUE OF SUM).
C  EQUATION NUMBERS REFER TO ABRAMOWITZ AND STEGUN, P. 946.
C  NO COMMON BLOCKS NEEDED.
C-----------------------------------------------------------------------
C  CALLS NO SUBPROGRAMS.
C-----------------------------------------------------------------------
      FUNCTION FISHER (FS,NU1,NU2)
      TOL=1.E-9
      RNU1=FLOAT(NU1)
      RNU2=FLOAT(NU2)
      X=RNU2/(RNU2+RNU1*FS)
      IF (X.LT.1. .OR. FS.LT.0.) GO TO 105
      FISHER=0.
      RETURN
  105 IF (MOD(NU1,2) .NE. 0) GO TO 200
C-----------------------------------------------------------------------
C  EVALUATES EQ. 26.6.4
C-----------------------------------------------------------------------
      Q=1.
      IF (NU1 .EQ. 2) GO TO 150
      TERM=1.
      TX=1.-X
      TN=RNU2-2.
      K=NU1-2
      DO 110 J=2,K,2
      TN=TN+2.
      TERM=TERM*TN*TX/FLOAT(J)
      Q=Q+TERM
      IF (TERM .LE. TOL*Q) GO TO 150
  110 CONTINUE
  150 FISHER=1.-X**(.5*RNU2)*Q
      RETURN
  200 IF (MOD(NU2,2) .EQ. 0) GO TO 300
C-----------------------------------------------------------------------
C  EVALUATES EQ. 26.6.8
C-----------------------------------------------------------------------
      TH=ATAN(SQRT(RNU1*FS/RNU2))
      CTH=COS(TH)
      CC=CTH*CTH
      STH=SIN(TH)
      SS=STH*STH
      TERM=1.
      Q=1.
      K=NU2-2
      PR=1.
      TN=0.
      IF (K .LT. 3) GO TO 220
      DO 210 J=3,K,2
      TN=TN+2.
      DUM=TN/FLOAT(J)
      PR=PR*DUM
      TERM=TERM*CC*DUM
      Q=Q+TERM
      IF (TERM .LE. TOL*Q) GO TO 220
  210 CONTINUE
      J=K
  220 FISHER=TH+STH*CTH*Q
      Q=0.
      IF (NU1 .EQ. 1) GO TO 290
      TN=TN+2.
      PR=PR*TN
      IF (J .EQ. K) GO TO 240
      L=J+2
      DO 230 J=L,K,2
      TN=TN+2.
  230 PR=PR*TN/FLOAT(J)
  240 TN=RNU2-1.
      Q=1.
      TERM=1.
      K=NU1-2
      IF (K .LT. 3) GO TO 260
      DO 250 J=3,K,2
      TN=TN+2.
      TERM=TERM*TN*SS/FLOAT(J)
      Q=Q+TERM
      IF (TERM .LE. TOL*Q) GO TO 260
  250 CONTINUE
  260 FISHER=FISHER-Q*PR*STH*CTH**NU2
  290 FISHER=FISHER*.6366198
      RETURN
C-----------------------------------------------------------------------
C  EVALUATES EQ. 26.6.5
C-----------------------------------------------------------------------
  300 TERM=1.
      Q=1.
      K=NU2-2
      TN=RNU1-2.
      DO 310 J=2,K,2
      TN=TN+2.
      TERM=TERM*TN*X/FLOAT(J)
      Q=Q+TERM
      IF (TERM .LE. TOL*Q) GO TO 320
  310 CONTINUE
  320 FISHER=SQRT(1.-X)*Q
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE RESIDU. CALCULATES WEIGHTED RESIDUALS FROM ASAVE(J,JLAM,1)
C      AND ASAVE(J,JLAM,2), WHICH CORRESPOND TO ALPHA AND LAMBDA,
C      RETURNS PUNCOR (APPROX. PROBABILITY THAT THE RESIDUALS ARE
C      UNCORRELATED FOR LAGS 1 THRU 5) AND WEIGHTED AVERAGE IN
C      PUNCOR(6), AND, IF PLOT=.TRUE., CALLS PLPRES TO PLOT WEIGHTED
C      RESIDUALS ON PRINTER.
C-----------------------------------------------------------------------
C  CALLS SUBPROGRAMS - FISHER, PLPRES
C-----------------------------------------------------------------------
      SUBROUTINE RESIDU (JLAM,PLOT,T,Y,SQRTW,YLYFIT,NMAX,PUNCOR,ASAVE)
      LOGICAL PLOT, NOBASE, WTED, LDUM, LBLOKA, LBLOKB
      COMMON /BLOK/ RBLOKA(3535), IBLOKA(165), N, IWRITE, IBLOKB,
     1 LINEPG, IBLOKC(11), LBLOKA(6), NOBASE, WTED, LBLOKB(30)
a     ibloka 145->165
a      lbloka 3->6, lblokb 25->30
      DIMENSION ASAVE(6,5,6)
      DIMENSION T(NMAX), Y(NMAX), SQRTW(NMAX), YLYFIT(NMAX), PUNCOR(6)
      JLAMP1=JLAM+1
      LDUM=.NOT.NOBASE
      IF (LDUM) DUM=ASAVE(JLAMP1,JLAM,1)
      DO 110 K=1,N
      YLYFIT(K)=Y(K)
  110 IF (LDUM) YLYFIT(K)=YLYFIT(K)-DUM*SQRTW(K)
      DO 120 J=1,JLAM
      DUM=ASAVE(J,JLAM,1)
      DDUM=ASAVE(J,JLAM,2)
      DO 125 K=1,N
  125 YLYFIT(K)=YLYFIT(K)-DUM*EXP(-DDUM*T(K))*SQRTW(K)
  120 CONTINUE
      RSUMST=0.
      IF (LDUM) GO TO 140
      DO 130 K=1,N
  130 RSUMST=RSUMST+YLYFIT(K)
  140 RSUMEN=RSUMST
C-----------------------------------------------------------------------
C  CALCULATE AUTOCOVARIANCES AND PROBABILITIES THAT RESIDUALS ARE
C  UNCORRELATED (HAMILTON, P. 183)
C-----------------------------------------------------------------------
      PUNCOR(6)=0.
      DO 150 L=1,5
      NEND=N-L
      RSUMST=RSUMST-YLYFIT(NEND+1)
      RSUMEN=RSUMEN-YLYFIT(L)
      STBAR=RSUMST/FLOAT(NEND)
      ENBAR=RSUMEN/FLOAT(NEND)
      SS=0.
      SE=0.
      EE=0.
      J=L
      DO 152 K=1,NEND
      S=YLYFIT(K)-STBAR
      J=J+1
      E=YLYFIT(J)-ENBAR
      SS=SS+S*S
      SE=SE+S*E
      EE=EE+E*E
  152 CONTINUE
      RSQ=SE*SE/(SS*EE)
      PUNCOR(L)=1.-FISHER(FLOAT(NEND-2)*RSQ/(1.-RSQ),1,NEND-2)
      PUNCOR(6)=PUNCOR(6)+PUNCOR(L)/FLOAT(L)
  150 CONTINUE
      PUNCOR(6)=PUNCOR(6)/2.283333
      IF (PLOT) CALL PLPRES (YLYFIT,NMAX,N,WTED,IWRITE,LINEPG)
      RETURN
      END
C-----------------------------------------------------------------------
C  SUBROUTINE PLPRES. PLOTS RESIDUALS ON PRINTER WITH X-AXIS HORIZONTAL.
C  NEEDS NO COMMON BLOCKS
C-----------------------------------------------------------------------
C  CALLS NO EXTERNAL SUBPROGRAMS.
C-----------------------------------------------------------------------
      SUBROUTINE PLPRES (YLYFIT,NMAX,N,WTED,IWRITE,LINEPG)
      LOGICAL WTED
      DIMENSION YLYFIT(NMAX), JCHAR(8), LINE(131), LABEL(6), BOUND(21),
     1 LCHARJ(20), LINE1(20)
c++++++++
      jchar(1)=42; jchar(2)=45;
      jchar(3)=111 .shift. 8 + 117
      jchar(4)= 32 .shift. 8 + 108
      jchar(5)= 32 .shift. 8 +  32
      jchar(6)= 32 .shift. 8 +  48
      jchar(7)= 61 ; jchar(8)= 43
c++++++++
      IF (LINEPG .GE. 17) GO TO 100
 5100 FORMAT (/////47H NO PLOT OF RESIDUALS POSSIBLE BECAUSE LINEPG =,
     1 I2,2X,40(2H**)//)
      WRITE (IWRITE,5100) LINEPG
      RETURN
  100 MPLOT=(LINEPG-1)/16
      MLINE=MIN0(20,(LINEPG-1)/MPLOT-3)
      RMIN=1.E+20
      RMAX=-1.E+20
      DO 110 J=1,N
      RMIN=AMIN1(RMIN,YLYFIT(J))
  110 RMAX=AMAX1(RMAX,YLYFIT(J))
 5200 FORMAT(55H1PLOT OF RESIDUALS MULTIPLIED BY SQUARE-ROOT OF WEIGHTS
     1 ,21H - FOR BEST SOLUTION.,4X,15HMAX RESIDUAL=U=,1PE8.1,4X,
     2 15HMIN RESIDUAL=L=,1PE8.1)
      IF (WTED) WRITE (IWRITE,5200) RMAX,RMIN
 5202 FORMAT (18H1PLOT OF RESIDUALS
     1 ,21H - FOR BEST SOLUTION.,4X,15HMAX RESIDUAL=U=,1PE8.1,4X,
     2 15HMIN RESIDUAL=L=,1PE8.1)
      IF (.NOT.WTED) WRITE (IWRITE,5202) RMAX,RMIN
      DELTA=(RMAX-RMIN)/FLOAT(MLINE-1)
      BOUND(1)=RMAX+.5*DELTA
      K=MLINE+1
      DO 120 J=2,K
      BOUND(J)=BOUND(J-1)-DELTA
  120 IF (BOUND(J)*BOUND(J-1) .LT. 0.) JAXIS=J-1
      LABEL(1)=-110
      DO 130 J=2,6
  130 LABEL(J)=LABEL(J-1)+20
      K=MLINE-1
      DO 140 J=2,K
      LINE1(J)=JCHAR(5)
  140 LCHARJ(J)=5
      LINE1(1)=JCHAR(3)
      LINE1(JAXIS)=JCHAR(6)
      LINE1(MLINE)=JCHAR(4)
      LCHARJ(1)=7
      LCHARJ(JAXIS)=2
      LCHARJ(MLINE)=7
      NPOINT=0
      DO 200 NPAGE=1,30
      IF (NPAGE .GT. 1) WRITE(IWRITE,5999)
 5999 FORMAT (1H1)
      DO 210 NPLOT=1,MPLOT
      NST=NPOINT+1
      NEND=NPOINT+130
      NPOINT=NEND
      NLIM=MIN0(NEND,N)
      DO 220 NLINE=1,MLINE
      LCHAR=LCHARJ(NLINE)
      LINE(1)=LINE1(NLINE)
      BMAX=BOUND(NLINE)
      BMIN=BOUND(NLINE+1)
      K=1
      DO 230 J=NST,NLIM
      K=K+1
      LINE(K)=JCHAR(LCHAR)
      IF (YLYFIT(J).LT.BMAX .AND. YLYFIT(J).GE.BMIN) LINE(K)=JCHAR(1)
  230 CONTINUE
      K=NLIM-NST+2
      IF (NLINE .NE. MLINE) GO TO 235
      DO 232 J=21,K,20
  232 IF (LINE(J) .NE. JCHAR(1)) LINE(J)=JCHAR(8)
 5230 FORMAT (A2,130A1)
  235 WRITE (IWRITE,5230) (LINE(J),J=1,K)
  220 CONTINUE
      DO 240 J=1,6
  240 LABEL(J)=LABEL(J)+130
 5240 FORMAT (3X,6(16X,I4)/)
      WRITE (IWRITE,5240) LABEL
      IF (NLIM .EQ. N) RETURN
  210 CONTINUE
  200 CONTINUE
 5250 FORMAT (49H NO MORE THAN 30 PAGES OF RESIDUAL PLOTS ALLOWED.,
     1 2X,38(2H**))
      WRITE (IWRITE,5250)
      RETURN
      END
▶EOF◀