!-------------------------------------- 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 GARAND1998NADON (CLDFLAG, btobs,tg,tt,gz,nlev, & 3,2
     &                            nchn,nprf,ptop_eq,ntop_eq,ichref)

#if defined (DOC)
!***********************************************************************
!
!**ID GARAND1998NADON -- DETERMINE IF PROFILES ARE CLEAR OR CLOUDY
!
!       SCIENCE:  L. GARAND AND S. NADON
!       AUTHOR:   A. BEAULNE (CMDA/SMC)      June 2004
!                 A. BEAULNE (CMDA/SMC)     March 2006  (ADAPT TO 3DVAR)                 
!
!       REVISION:
!
!       OBJECT:   DETERMINE IF THE PROFILES ARE CLEAR OR CLOUDY BASED ON
!          THE ALGORITHM OF GARAND & NADON 98 J.CLIM V11 PP.1976-1996
!          WITH CHANNEL IREF
!
!       ARGUMENTS:
!          INPUT:
!            -BTOBS(NCHN,NPRF) : OBSERVED BRIGHTNESS TEMPERATURES (DEG K)
!            -TG(NPRF)         : GUESS SKIN TEMPERATURES (DEG K)
!            -TT(NLEV,NPRF)    : GUESS TEMPERATURE PROFILES (DEG K)
!            -GZ(NLEV,NPRF)    : GUESS HEIGHT PROFILE ABOVE GROUND (M)
!            -NLEV             : NUMBER OF VERTICAL LEVELS
!            -NCHN             : NUMBER OF CHANNELS
!            -NPRF             : NUMBER OF PROFILES
!            -PTOP_EQ(NPRF)    : CHOSEN EQUIVALENT CLOUD TOPS (M)
!            -NTOP_EQ(NPRF)    : NUMBER OF POSSIBLE PTOP_EQ SOLUTIONS
!            -ICHREF(NPRF)     : CHOSEN REFERENCE SURFACE CHANNEL
!
!          INPUT/OUTPUT:
!            -CLDFLAG(NPRF)  : CLEAR(0), CLOUDY(1), UNDEFINED(-1) PROFILES
!
!
!***********************************************************************
#endif


      IMPLICIT NONE

      INTEGER    :: JN,NLEV,NCHN,NPRF,NINV
      INTEGER    :: CLDFLAG(NPRF),NTOP_EQ(NPRF)
      INTEGER    :: ICHREF(NPRF)
      REAL(8)    :: BTOBS(NCHN,NPRF),PTOP_EQ(NPRF)
      REAL(8)    :: TG(NPRF),GZ(NLEV,NPRF),TT(NLEV,NPRF)
      REAL(8)    :: LEV(2)

      
      LEV(1) = 222.
      LEV(2) = 428.


      profiles: DO JN = 1, NPRF

        IF ( CLDFLAG(JN) == -1 ) CYCLE profiles

        IF ( BTOBS(ICHREF(JN),JN) >= TG(JN)-3. .AND. BTOBS(ICHREF(JN),JN) <= TG(JN)+3. ) THEN
         CLDFLAG(JN) = 0
         CYCLE profiles
        END IF

        IF ( BTOBS(ICHREF(JN),JN) >= TG(JN)-4. .AND. BTOBS(ICHREF(JN),JN) <= TG(JN)-3. ) THEN
         IF ( PTOP_EQ(JN) > 1100. ) THEN
          CLDFLAG(JN) = 1
          CYCLE profiles
         ELSE
          CLDFLAG(JN) = 0
          CYCLE profiles
         END IF
        END IF

        IF ( PTOP_EQ(JN) > 728. ) THEN
         CLDFLAG(JN) = 1
         CYCLE profiles
        END IF

        IF ( TG(JN)-BTOBS(ICHREF(JN),JN) > 8. ) THEN 
         IF ( NTOP_EQ(JN) >= 3 ) THEN
          IF ( PTOP_EQ(JN) > 73. ) THEN
           CLDFLAG(JN)=1
           CYCLE profiles
          ELSE
           CLDFLAG(JN)=0
           CYCLE profiles
          END IF
         ELSE
          CALL MONOTONIC_INVERSION (NINV, tg(jn),tt(:,jn),gz(:,jn),nlev,lev(1))
          IF ( NINV == 1 ) THEN
           IF ( PTOP_EQ(JN) > 222. ) THEN
            CLDFLAG(JN) = 1
            CYCLE profiles
           ELSE
            CLDFLAG(JN) = 0 
            CYCLE profiles
           END IF
          ELSE
           CLDFLAG(JN) = 0
           CYCLE profiles
          END IF
         END IF
        END IF

        IF ( TG(JN)-BTOBS(ICHREF(JN),JN) > 5. ) THEN
         IF ( NTOP_EQ(JN) >= 3 ) THEN
          IF ( PTOP_EQ(JN) > 222. ) THEN
           CLDFLAG(JN) = 1
           CYCLE profiles
          ELSE
           CLDFLAG(JN) = 0
           CYCLE profiles
          END IF
         ELSE
          CALL MONOTONIC_INVERSION (NINV, tg(jn),tt(:,jn),gz(:,jn),nlev,lev(2))
          IF ( NINV == 1) THEN
           IF( PTOP_EQ(JN) > 428. ) THEN
            CLDFLAG(JN) = 1
            CYCLE profiles
           ELSE
            CLDFLAG(JN) = 0
            CYCLE profiles
           END IF
          ELSE
           CLDFLAG(JN) = 0
          END IF
         END IF
        ELSE
         CLDFLAG(JN)=0
        END IF

      END DO profiles


      END SUBROUTINE GARAND1998NADON