SUBROUTINE GLBSOI(INPREP,INGES,IIANL,JCAP,NSIG,
     *  NLATH,NLON,INEOFS,NITER,MITER,IOANL,A,
     *  ISAT,JSAT,
     *  ISFC,ISCRA,NBLK,ISCRA3,AMPDIVT,DAMPDIVT,IDIVT,
     *  ON85DT,NTDATA,NSDATA,NWDATA,NPDATA,NQDATA,NPWDAT,NQTDATA,
     *  NSPROF,
     *   ERMAXT,ERMAXW,ERMAXP,ERMAXQ,ERMAXPW,
     *   ERMINT,ERMINW,ERMINP,ERMINQ,ERMINPW,
     *   GROSST,GROSSST,GROSSW,GROSSP,GROSSQ,GROSSPW)
C--------
C$$$  SUBPROGRAM DOCUMENTATION BLOCK
C                .      .    .                                       .
C SUBPROGRAM:    GLBSOI     SPECTRAL OI
C   PRGMMR: PARRISH          ORG: W/NMC22    DATE: 90-10-06
C
C ABSTRACT: EXECUTES SPECTRAL OI ANALYSIS.
C
C PROGRAM HISTORY LOG:
C   90-10-06  PARRISH
C   94-02-11  PARRISH
C
C   INPUT ARGUMENT LIST:
C     INPREP   - UNIT NUMBER FOR PREPDA DATA FILE.
C     INGES    - UNIT NUMBER FOR GUESS SPECTRAL COEFFICIENTS.
C     IIANL    - UNIT NUMBER FOR PREVIOUS ANALYSIS.
C     JCAP     - TRIANGULAR TRUNCATION
C     NSIG     - NUMBER OF SIGMA LEVELS
C     NLATH    - NUMBER OF GAUSSIAN LATS IN ONE HEMISPHERE
C     NLON     - NUMBER OF LONGITUDES
C     INEOFS   - INPUT UNIT FOR STATISTICS
C     NITER    - MAX NUMBER OF ITERATIONS FOR CONJUGATE GRADIENT.
C     MITER    - NUMBER OF OUTER ITERATIONS
C     IOANL    - OUTPUT UNIT FOR UPDATED ANALYSIS.
C     A        - A(4): SCALING FACTORS FOR FORECAST ERROR SPECTRA
C     ISAT     - INPUT FILE FOR SAT. ERROR COVARIANCES
C     JSAT     - SCRATCH FILE USED FOR SAT. DATA
C     ISFC     - INPUT SURFACE BGES FILE
C     ISCRA    - SCRATCH FILE FOR INFOR. FROM CONVENTIONAL DATA
C     NBLK     - BLOCKING FACTOR FOR SCRATCH FILES
C     ISCRA3   - FILE TO SAVE GRID FIELDS NEEDED BY TAN LINEAR DIVT
C     AMPDIVT,DAMPDIVT - PARAMETERS FOR DIVTEND PENALTY
C     IDIVT    - UNIT NUMBER FOR FILE WITH DIVTEND ERROR VARIANCES
C     ERMAXT, ETC. - LIMITS TO OBS ERRORS FOR 
C     ERMINT, ETC. -  GROSS ERROR CHECK
C     GROSST, ETC. - TOSS LIMITS (SCALED BY OBS ERROR) FOR GROSS CHECK
C
C   OUTPUT ARGUMENT LIST:
C     NO OUTPUT ARGUMENTS
C
C ATTRIBUTES:
C   LANGUAGE: CFT77
C   MACHINE:  CRAY YMP
C
C$$$

      CHARACTER*4 ON85DT(8)
      REAL A(4)
C--------
C-------- SCRATCH SPACE FOLLOWS
C--------
C-CRA          DIMENSION RPW(2*NLATH+1,NLON+2),SIGI(NSIG+1)
C-CRA          DIMENSION XHAT((JCAP+1)*(JCAP+2),NSIG,4)
C-CRA          DIMENSION XHATP((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION DEL2((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION TRIGS(NLON*2),IFAX(10)
C-CRA          DIMENSION RLATS(NLATH*2),SLAT(NLATH),CLAT(NLATH)
C-CRA          DIMENSION WGTS(NLATH*2),SIGL(NSIG),PWCON(NSIG)
C-CRA          DIMENSION ISATV(NSIG)
C-CRA          DIMENSION RT(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RU(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RV(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RQ(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RP(2*NLATH+1,NLON+2)
C-CRA          DIMENSION RUS(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RVS(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RTS(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RVORTS(2*NLATH+1,NLON+2,NSIG)
C-CRA          DIMENSION RPLONS(2*NLATH+1,NLON+2)
C-CRA          DIMENSION RPLATS(2*NLATH+1,NLON+2)
C-CRA          DIMENSION RLSG(NSIG),AIBW(NSIG,NSIG),W(NSIG),TBAR(NSIG)
C-CRA          DIMENSION A3(NSIG,NSIG),DSTLAST((JCAP+1)*(JCAP+2),NSIG)
C-CRA          DIMENSION DSTB((JCAP+1)*(JCAP+2),NSIG)
C-CRA          DIMENSION IN((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION PLN((JCAP+1)*(JCAP+2),NLATH)
C-CRA          DIMENSION QLN((JCAP+1)*(JCAP+2),NLATH)
C-CRA          DIMENSION RLN((JCAP+1)*(JCAP+2),NLATH)
C-CRA          DIMENSION MLAD(0:JCAP,0:JCAP)
C-CRA          DIMENSION ML2LM((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION FACTSLM((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION FACTVLM((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION LMAD(0:JCAP,0:JCAP)
C-CRA          DIMENSION LM2ML((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION FACTSML((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION FACTVML((JCAP+1)*(JCAP+2))
C-CRA          DIMENSION QFILE(17*NQDATA),UVFILE(18*NWDATA),TFILE(17*NTDATA)
C-CRA          DIMENSION SFILE((4+(28+2)*30)*NSPROF),PWFILE(12*NPWDAT)
C-CRA          DIMENSION PSFILE(11*NPDATA)

          DIMENSION RPW(2*48+1,192+2),SIGI(28+1)
          DIMENSION XHAT((62+1)*(62+2),28,4)
          DIMENSION XHATP((62+1)*(62+2))
          DIMENSION DEL2((62+1)*(62+2))
          DIMENSION TRIGS(192*2),IFAX(10)
          DIMENSION RLATS(48*2),SLAT(48),CLAT(48)
          DIMENSION WGTS(48*2),SIGL(28),PWCON(28)
          DIMENSION ISATV(28)
          DIMENSION RT(2*48+1,192+2,28)
          DIMENSION RU(2*48+1,192+2,28)
          DIMENSION RV(2*48+1,192+2,28)
          DIMENSION RQ(2*48+1,192+2,28)
          DIMENSION RP(2*48+1,192+2)
          DIMENSION RUS(2*48+1,192+2,28)
          DIMENSION RVS(2*48+1,192+2,28)
          DIMENSION RTS(2*48+1,192+2,28)
          DIMENSION RVORTS(2*48+1,192+2,28)
          DIMENSION RPLONS(2*48+1,192+2)
          DIMENSION RPLATS(2*48+1,192+2)
          DIMENSION RLSG(28),AIBW(28,28)
          DIMENSION W(28),TBAR(28)
          DIMENSION A3(28,28)
          DIMENSION DSTLAST((62+1)*(62+2),28)
          DIMENSION DSTB((62+1)*(62+2),28)
          DIMENSION IN((62+1)*(62+2))
          DIMENSION PLN((62+1)*(62+2),48)
          DIMENSION QLN((62+1)*(62+2),48)
          DIMENSION RLN((62+1)*(62+2),48)
          DIMENSION MLAD(0:62,0:62)
          DIMENSION ML2LM((62+1)*(62+2))
          DIMENSION FACTSLM((62+1)*(62+2))
          DIMENSION FACTVLM((62+1)*(62+2))
          DIMENSION LMAD(0:62,0:62)
          DIMENSION LM2ML((62+1)*(62+2))
          DIMENSION FACTSML((62+1)*(62+2))
          DIMENSION FACTVML((62+1)*(62+2))
          DIMENSION QFILE(17*15000),UVFILE(18*85000) 
          DIMENSION TFILE(17*60000)
          DIMENSION SFILE((4+(28+2)*30)*10000)
          DIMENSION PWFILE(12*1)
          DIMENSION PSFILE(11*18000)
C--------
C-------- SETUP VARIOUS CONSTANTS
C
C--------
C-------- SET UP INDEX ARRAYS TO CONVERT COEFS TO INTERNAL FORMAT
C--------
      II=-1
      DO L=0,JCAP
       DO M=0,JCAP-L
        II=II+2
        MLAD(M,L)=II
       END DO
      END DO
      II=-1
      DO M=0,JCAP
       DO L=0,JCAP-M
        II=II+2
        LMAD(M,L)=II
       END DO
      END DO
      II=-1
      DO M=0,JCAP
       DO L=0,JCAP-M
        II=II+2
        ML2LM(II)=MLAD(M,L)
        ML2LM(II+1)=ML2LM(II)+1
       END DO
      END DO
      II=-1
      DO L=0,JCAP
       DO M=0,JCAP-L
        II=II+2
        LM2ML(II)=LMAD(M,L)
        LM2ML(II+1)=LM2ML(II)+1
       END DO
      END DO
      II=-1
      DO M=0,JCAP
       II=II+2
       FACTSLM(II)=1.
       FACTSLM(II+1)=0.
       IF(M.LT.JCAP) THEN
        DO L=1,JCAP-M
         II=II+2
         FACTSLM(II)=1.
         FACTSLM(II+1)=1.
        END DO
       END IF
      END DO
C-CRA          FACTVLM=FACTSLM
          DO I=1,(JCAP+1)*(JCAP+2)
          FACTVLM(I)=FACTSLM(I)
          ENDDO
      FACTVLM(1)=0.
      II=-1
      DO L=0,JCAP
       ONE=1.
       ZERO=MIN(1,L)
       DO M=0,JCAP-L
         II=II+2
        FACTSML(II)=ONE
        FACTSML(II+1)=ZERO
       END DO
      END DO
C-CRA          FACTVML=FACTSML
          DO I=1,(JCAP+1)*(JCAP+2)
          FACTVML(I)=FACTSML(I)
          ENDDO
      FACTVML(1)=0.
C------------------PICK UP HYDROSTATIC MATRIX FROM BACKGROUND STATS FILE
       REWIND INEOFS
       READ(INEOFS)NSIGSTAT,IDUM,NMDSZH,JCAPSTAT,
     *     RLSG,AIBW,W,ROGC,TBAR,A3
       WRITE(6,*) 'INEOFS=',INEOFS,' READ'
       CLOSE(INEOFS)
C---------------------PICK UP VERT DIM FOR SAT ER COVAR MATRICES
       REWIND ISAT
       READ(ISAT,5050)NSIGSAT
5050   FORMAT(1X,I3)
       WRITE(6,*) 'ISAT=',ISAT,' READ'
       CLOSE(ISAT)
C--------------------PICK UP VERT AND HORIZ NUMBERS FOR DIVT ERRORS
       REWIND IDIVT
       READ(IDIVT)NSIGDIVT,JCAPDIVT
       WRITE(6,*) 'IDIVT=',IDIVT,' READ'
       CLOSE(IDIVT)
      II=-1
      DO M=0,JCAP
       DO L=0,JCAP-M
        II=II+2
        IN(II)=M+L
        IN(II+1)=M+L
       END DO
      END DO
      NUMCOEFS=II+1
      NC=(JCAP+1)*(JCAP+2)
      WRITE(6,*)' (JCAP+1)*(JCAP+2)=',NC,' NUMCOEFS=',NUMCOEFS
C---------------------TEST VARIOUS ADJOINTS
C     CALL TSTHOPER(INEOFS,PWCON,JCAP,NSIG,NLATH,NLON,AP,BP,AQR,
C    *    BQR,GR,DEL2,WGTS,SLAT,CLAT,TRIGS,IFAX,PE0,QE0,RO0,LMIX,
C    *    LASTMIX,LPAIRS,IN,RLATS,RT,RU,RV,RQ,RP,
C    *    NSIGSTAT,NMDSZH,JCAPSTAT,A)
C----------------------
C--------
C-------- INITIALIZE VARIOUS TRANSFORM CONSTANTS
C-------- READ DATA, DO VARIOUS STUFF, OUTPUT F0 AND
C-------- INVERSE OF SUPEROB ERROR VARIANCES
C--------

      DO JITER=1,MITER
       INEXT=INGES
       IF(JITER.GT.1) INEXT=IOANL
       CALL SETUPRHS(SIGL,JITER,RPW,SIGI,
     *   INEXT,IIANL,JCAP,NSIG,
     *   NLATH,NLON,PWCON,
     *   NTDATA,NSDATA,NWDATA,NPDATA,NQDATA,NPWDAT,NQTDATA,
     *   NTRECS,NWRECS,NPRECS,NQRECS,NPWRECS,
     *   ISAT,NSIGSAT,JSAT,MSAT,
     *   RLATS,DEL2,PLN,QLN,RLN,WGTS,TRIGS,IFAX,IN,
     *   ISFC,ISATV,ISCRA,NBLK,RT,RU,RV,RQ,RP,
     *   A3,AMPDIVT,DAMPDIVT,DSTLAST,DSTB,ISCRA3,
     *   ERMAXT,ERMAXW,ERMAXP,ERMAXQ,ERMAXPW,
     *   ERMINT,ERMINW,ERMINP,ERMINQ,ERMINPW,
     *   GROSST,GROSSST,GROSSW,GROSSP,GROSSQ,GROSSPW,
     *   MLAD,ML2LM,FACTSLM,FACTVLM,
     *   LMAD,LM2ML,FACTSML,FACTVML,
     *   RUS,RVS,RTS,RVORTS,RPLONS,RPLATS,
     *   QFILE,UVFILE,TFILE,SFILE,PWFILE,PSFILE,NSPROF)

C--------
C-------- SOLVE OI EQUATION, ADD INCREMENT TO GUESS COEFS AND
C-------- WRITE OUT.
C--------
       CALL PCGSOI(INEOFS,XHAT,XHATP,PWCON,JSAT,MSAT,
     *   NITER,MITER,JITER,JCAP,NSIG,NLATH,
     *   NLON,DEL2,WGTS,PLN,QLN,RLN,TRIGS,IFAX,IN,ISATV,
     *   NTDATA,NWDATA,NPDATA,NQDATA,NPWDAT,
     *   NTRECS,NWRECS,NPRECS,NQRECS,NPWRECS,
     *   ISCRA,NBLK,ON85DT,IOANL,INEXT,INGES,RLATS,A,RT,RU,RV,RPW,RQ,RP,
     *   NSIGSTAT,NMDSZH,JCAPSTAT,AMPDIVT,DAMPDIVT,IDIVT,
     *   NSIGDIVT,JCAPDIVT,A3,SIGL,SIGI,DSTLAST,DSTB,ISCRA3,RRM0,
     *   MLAD,ML2LM,FACTSLM,FACTVLM,
     *   LMAD,LM2ML,FACTSML,FACTVML,
     *   RUS,RVS,RTS,RVORTS,RPLONS,RPLATS,
     *   QFILE,UVFILE,TFILE,SFILE,PWFILE,PSFILE,NSPROF)
      END DO
      RETURN
      END