!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!

      SUBROUTINE SUGOESST 1,4
#if defined (DOC)
*
***s/r SUGOESST - Read the observation error statistics and
*                 utilization flag for GOES processing.
*
*
*Author  : N. Wagneur June 2001
*
*
*    -------------------
**    Purpose: Read the observation error statistics and
*              utilization flag for GOES processing. This information
*              resides on an ASCII file and is read using a free format.
#endif
      IMPLICIT NONE
*implicits
#include "partov.cdk"
#include "cparamgoes.cdk"
#include "comgoes.cdk"
#include "comgoesst.cdk"
#include "comlun.cdk"
C
      INTEGER IER, ILUGO, JI, JJ, JK, JL, INDX
      INTEGER INUMSAT, INUMCHN, ISAT, ICHN
      INTEGER FNOM, FCLOS, ISRCHEQ
      INTEGER ISATID (JPNSATGO)
      INTEGER IUTILST (JPCHGO,JPMXCLD,JPMXREG,JPNSATGO)
C
      CHARACTER*132  CLDUM
      CHARACTER*13   CLCLD(JPMXCLD)
      CHARACTER*13   CLREG(JPMXREG)
C
      DATA CLCLD / 'CLEAR        ' ,
     S             'PARTLY CLOUDY' ,
     S             'CLOUDY       ' /
cnwa      DATA MLISCLD / 32, 16, 08 /
      DATA MLISCLDGO / 08, 16, 32 /
      DATA CLREG / 'OCEAN        ' ,
     S             'CONTINENT    ' /
      DATA MLISREGGO / 1, 0 /
C
      EXTERNAL FNOM, FCLOS, ISRCHEQ
      EXTERNAL ABORT3D
C
      WRITE(NULOUT,FMT=9000)
 9000 FORMAT(//,10x,"-SUGOESST: reading observation error statistics"
     S     ," required for GOES processing")
C
C
C*    1. Initialize
C     .  ----------
C
 100  CONTINUE
      NREGSTGO = 0
      NCLDSTGO = 0
      DO JL = 1, JPNSATGO
         DO JK = 1, JPMXREG
            DO JJ = 1, JPMXCLD
               NCHNAGO(JJ,JK,JL) = 0
               DO JI = 1, JPCHGO
                  GOERRST(JI,JJ,JK,JL) = 0.D0
                  IUTILST(JI,JJ,JK,JL) = 0
                  MLISCHNAGO(JI,JJ,JK,JL) = 0
               ENDDO
            ENDDO
         ENDDO
      ENDDO
C
C*    2. Open the file
C     .  -------------
C
 200  CONTINUE
      ilugo = 0
      IER =  FNOM(ILUGO,'stats_goes','SEQ+FMT',0)
      IF(IER.LT.0)THEN
         WRITE ( NULOUT, '(" SUGOESST: Problem opening ",
     S         "file stats_goes ")' )
         CALL ABORT3D ( NULOUT,'SUGOESST         ')
      END IF
C
C*    3. Print the file contents
C     .  -----------------------
C
 300  CONTINUE
C
      WRITE(NULOUT,'(20X,"ASCII dump of stats_goes file: "//)')
      DO JI = 1, 9999999
         READ (ILUGO,'(A)',ERR=900,END=400) CLDUM
         WRITE(NULOUT,'(A)')   CLDUM
      ENDDO
C
C*    4. Read number of satellites, regions and cloud classes
C     .  ----------------------------------------------------
C
 400  CONTINUE
C
      REWIND(ILUGO)
      READ (ILUGO,*,ERR=900)
      READ (ILUGO,*,ERR=900) INUMSAT, NREGSTGO, NCLDSTGO
C
C*    5. Read the satellite identification, the number of channels,
C*    .  the observation errors and the utilization flags
C     .  ----------------------------------------------------------
C
 500  CONTINUE
C
      DO JL = 1, INUMSAT
         READ (ILUGO,*,ERR=900)
         READ (ILUGO,*,ERR=900) ISATID(JL), INUMCHN
         DO JI = 1, 6
            READ (ILUGO,*,ERR=900)
         ENDDO
C
C**      Is this satellite to be assimilated?
C
         ISAT = ISRCHEQ ( NIDSATGO, NSATGO, ISATID(JL) )
         IF ( ISAT .NE. 0 ) THEN
            DO JI = 1, INUMCHN
               READ (ILUGO,*,ERR=900) ICHN,
     S                   ((GOERRST(ICHN,JJ,JK,ISAT),
     S                     IUTILST (ICHN,JJ,JK,ISAT),
     S                     JJ=1,NCLDSTGO), JK=1,NREGSTGO)
            ENDDO
         ELSE
            DO JI = 1, INUMCHN
               READ (ILUGO,*,ERR=900)
            ENDDO
         ENDIF
      ENDDO
C
C**   Check that oberservation error statistics have been defined for
C*    all the satellites specified in the namelist.
C
      DO JL = 1, NSATGO
         ISAT = ISRCHEQ ( ISATID, INUMSAT, NIDSATGO(JL) )
         IF ( ISAT .EQ. 0 ) THEN
            WRITE ( NULOUT, '(" SUGOESST: Observation errors not ",
     S         "defined for satellite ", I3)' ) NIDSATGO(JL)
            CALL ABORT3D ( NULOUT,'SUGOESST         ')
         END IF
      ENDDO
C
C
C*    6. Construct a list of channels to be assimilated
C     .  ----------------------------------------------
C
 600  CONTINUE
C
      WRITE(NULOUT,'(//5X,"Observation errors of GOES data",
     S                     " to be assimilated: "/)')
      DO JL = 1, NSATGO
         DO JK = 1, JPMXREG
            DO JJ = 1, JPMXCLD
               INDX = 0
               DO JI = 1, JPCHGO
                  IF ( IUTILST(JI,JJ,JK,JL) .NE. 0 ) THEN
                     NCHNAGO(JJ,JK,JL) = NCHNAGO(JJ,JK,JL) + 1
                     INDX = INDX + 1
                     MLISCHNAGO(INDX,JJ,JK,JL) = JI
                  ENDIF
               ENDDO
               WRITE(NULOUT,'(/7X,"Satellite: ",I2,5X,2A)')
     S            NIDSATGO(JL), CLREG(JK), CLCLD(JJ)
               WRITE(NULOUT,'(7X,"Channels   : ",30(T22,27I4/))')
     S           (MLISCHNAGO(JI,JJ,JK,JL),JI=1,NCHNAGO(JJ,JK,JL))
               WRITE(NULOUT,'(7X,"Obs. errors: ",30(T22,27(f4.2,X)))')
     S           (GOERRST(MLISCHNAGO(JI,JJ,JK,JL),JJ,JK,JL),
     S           JI=1,NCHNAGO(JJ,JK,JL))
            ENDDO
         ENDDO
      ENDDO
C
C*    7. Close the file
C     .  --------------
C
 700  CONTINUE
C
      IER = FCLOS(ILUGO)
      IF(IER.NE.0)THEN
         CALL ABORT3D ( NULOUT,'SUGOESST         ')
      END IF
      RETURN
C
C*    Read error
C
900   WRITE ( NULOUT, '(" SUGOESST: Problem reading ",
     S         ,"file stats_goes ")' )
      CALL ABORT3D ( NULOUT,'SUGOESST         ')
C
      RETURN
      END