SUBROUTINE CUADJTQSAD &
 &(KIDIA,    KFDIA,    KLON,     KLEV,&
 & KK,&
 & PSP5,     PT5,      PQ5,&
 & PSP,      PT,       PQ,       LDFLAG,   KCALL)  

!**   *CUADJTQSAD* - SIMPLIFIED VERSION OF MOIST ADJUSTMENT
!                    (Adjoint)

!     J.F. MAHFOUF      ECMWF         

!     PURPOSE.
!     --------
!     TO PRODUCE T,Q AND L VALUES FOR CLOUD ASCENT

!     INTERFACE
!     ---------
!     THIS ROUTINE IS CALLED FROM SUBROUTINES:

!       *CONDAD*     
!       *CUBMADJAD*  
!       *CUBMDAD*    

!     INPUT ARE UNADJUSTED T AND Q VALUES,
!     IT RETURNS ADJUSTED VALUES OF T AND Q

!     PARAMETER     DESCRIPTION                                   UNITS
!     ---------     -----------                                   -----
!     INPUT PARAMETERS (INTEGER):

!    *KIDIA*        START POINT
!    *KFDIA*        END POINT
!    *KLON*         NUMBER OF GRID POINTS PER PACKET
!    *KLEV*         NUMBER OF LEVELS
!    *KK*           LEVEL
!    *KCALL*        DEFINES CALCULATION AS
!                      KCALL=0  ENV. T AND QS IN*CUINI*
!                      KCALL=1  CONDENSATION IN UPDRAFTS  (E.G. CUBASE, CUASC)
!                      KCALL=2  EVAPORATION IN DOWNDRAFTS (E.G. CUDLFS,CUDDRAF)

!     INPUT PARAMETERS (LOGICAL):

!    *LDLAND*       LAND-SEA MASK (.TRUE. FOR LAND POINTS)

!     INPUT PARAMETERS (REAL):

!    *PSP5*         PRESSURE                                    (Trajectory)
!    *PSP*          PRESSURE                                        PA

!     UPDATED PARAMETERS (REAL):

!    *PT5*          TEMPERATURE                                (Trajectory) 
!    *PQ5*          SPECIFIC HUMIDITY                          (Trajectory) 
!    *PT*           TEMPERATURE                                     K
!    *PQ*           SPECIFIC HUMIDITY                             KG/KG

!----------------------------------------------------------------------

USE PARKIND1  ,ONLY : JPIM     ,JPRB
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK

USE YOMCST   , ONLY : RETV     ,RLVTT    ,RLSTT    ,RTT
USE YOETHF   , ONLY : R2ES     ,R3LES    ,R3IES    ,R4LES    ,&
 & R4IES    ,R5LES    ,R5IES    ,R5ALVCP  ,R5ALSCP  ,&
 & RALVDCP  ,RALSDCP  ,RTWAT    ,RTICE    ,RTICECU  ,&
 & RTWAT_RTICE_R      ,RTWAT_RTICECU_R  

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KLON 
INTEGER(KIND=JPIM),INTENT(IN)    :: KLEV 
INTEGER(KIND=JPIM),INTENT(IN)    :: KIDIA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFDIA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KK 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSP5(KLON) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PT5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PQ5(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PSP(KLON) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PT(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PQ(KLON,KLEV) 
LOGICAL           ,INTENT(IN)    :: LDFLAG(KLON) 
INTEGER(KIND=JPIM),INTENT(IN)    :: KCALL 
REAL(KIND=JPRB) ::     ZCOND5(KLON),           ZQP5(KLON)

REAL(KIND=JPRB) ::     ZCOND(KLON),            ZQP(KLON)

REAL(KIND=JPRB) ::     Z3ES(KLON),             Z4ES(KLON),&
 & Z5ALCP(KLON),           ZALDCP(KLON)  

REAL(KIND=JPRB) ::     ZTARG5(KLON),           ZFOEEW5(KLON),&
 & ZQSAT5(KLON),           ZCOR5(KLON),&
 & Z2S5(KLON),             ZCOND15(KLON)  

REAL(KIND=JPRB) ::     ZTARG(KLON),            ZFOEEW(KLON),&
 & ZQSAT(KLON),            ZCOR(KLON),&
 & Z2S(KLON),              ZCOND1(KLON)  

!*        EXTRA LOCAL STORAGE FOR TRAJECTORY ARRAYS

REAL(KIND=JPRB) ::     zqsat55c(klon),         zcor55a(klon),&
 & z2s55a(klon),           ztarg55a(klon),&
 & zqsat55a(klon),         zfoeew55a(klon),&
 & zqsat55d(klon),         zcor55b(klon),&
 & z2s55b(klon),           ztarg55b(klon),&
 & zqsat55b(klon),         zfoeew55b(klon),&
 & zq55a(klon),            zq55b(klon)  

LOGICAL ::  lltest1(klon),          lltest2(klon),&
 & lltest3(klon),          lltest4(klon),&
 & lltest5      ,          lltest6   

INTEGER(KIND=JPIM) :: ISUM, JL

REAL(KIND=JPRB) :: ZQMAX
REAL(KIND=JPRB) :: ZHOOK_HANDLE

!DIR$ VFUNCTION EXPHF
#include "fcttre.h"
!----------------------------------------------------------------------

!     1.           DEFINE CONSTANTS
!                  ----------------

IF (LHOOK) CALL DR_HOOK('CUADJTQSAD',0,ZHOOK_HANDLE)
ZQMAX=0.5_JPRB

!----------------------------------------------------------------------

!*              ------  TRAJECTORY COMPUTATIONS  ------

!----------------------------------------------------------------------

!     2.           CALCULATE CONDENSATION AND ADJUST T AND Q ACCORDINGLY
!                  -----------------------------------------------------

!*    ICE-WATER THERMODYNAMICAL FUNCTIONS

DO JL=KIDIA,KFDIA
  IF (PT5(JL,KK) > RTT) THEN
    Z3ES(JL)=R3LES
    Z4ES(JL)=R4LES
    Z5ALCP(JL)=R5ALVCP
    ZALDCP(JL)=RALVDCP
  ELSE
    Z3ES(JL)=R3IES
    Z4ES(JL)=R4IES
    Z5ALCP(JL)=R5ALSCP
    ZALDCP(JL)=RALSDCP
  ENDIF
ENDDO

IF (KCALL == 1 ) THEN

  ISUM=0
!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL)) THEN
      ZQP5(JL)=1.0_JPRB/PSP5(JL)
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      zfoeew55b(jl)=zfoeew5(jl)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      lltest2(jl)=ZQSAT5(JL) > ZQMAX
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV*ZQSAT5(JL))
      zqsat55d(jl)=zqsat5(jl)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      ztarg55b(jl)=ztarg5(jl)
      Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      zqsat55b(jl)=zqsat5(jl)
      zcor55b(jl)=zcor5(jl)
      z2s55b(jl)=z2s5(jl)
      zq55b(jl)=pq5(jl,kk)
      ZCOND5(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      lltest4(jl)=ZCOND5(JL) < 0.0_JPRB
      IF (ZCOND5(JL) < 0.0_JPRB) THEN
        ZCOND5(JL)=0.0_JPRB
      ENDIF
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND5(JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND5(JL)
      IF(ZCOND5(JL) /= 0.0_JPRB) ISUM=ISUM+1
    ELSE
      ZCOND5(JL)=0.0_JPRB
    ENDIF
  ENDDO

  lltest6=ISUM == 0
  IF(ISUM == 0) GO TO 2315

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    lltest3(jl)=LDFLAG(JL).AND.ZCOND5(JL) /= 0.0_JPRB
    IF(LDFLAG(JL).AND.ZCOND5(JL) /= 0.0_JPRB) THEN
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      zfoeew55a(jl)=zfoeew5(jl)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      lltest1(jl)=ZQSAT5(JL) > ZQMAX
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV*ZQSAT5(JL))
      zqsat55c(jl)=zqsat5(jl)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      ztarg55a(jl)=ztarg5(jl)
      Z2S5(JL)=Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      zqsat55a(jl)=zqsat5(jl)
      zcor55a(jl)=zcor5(jl)
      z2s55a(jl)=z2s5(jl)
      zq55a(jl)=pq5(jl,kk)
      ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
    ENDIF
  ENDDO

  2315 CONTINUE

ENDIF

IF(KCALL == 2) THEN

  ISUM=0
!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL)) THEN
      ZQP5(JL)=1.0_JPRB/PSP5(JL)
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      zfoeew55b(jl)=zfoeew5(jl)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      lltest2(jl)=ZQSAT5(JL) > ZQMAX
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
      zqsat55d(jl)=zqsat5(jl)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      ztarg55b(jl)=ztarg5(jl)
      Z2S5(JL)=Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      zqsat55b(jl)=zqsat5(jl)
      zcor55b(jl)=zcor5(jl)
      z2s55b(jl)=z2s5(jl)
      zq55b(jl)=pq5(jl,kk)
      ZCOND5(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      lltest4(jl)=ZCOND5(JL) > 0.0_JPRB
      IF (ZCOND5(JL) > 0.0_JPRB) THEN
        ZCOND5(JL)=0.0_JPRB
      ENDIF
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND5(JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND5(JL)
      IF(ZCOND5(JL) /= 0.0_JPRB) ISUM=ISUM+1
    ELSE
      ZCOND5(JL)=0.0_JPRB
    ENDIF
  ENDDO

  lltest5=ISUM == 0
  IF(ISUM == 0) GO TO 3315

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    lltest3(jl)=LDFLAG(JL).AND.ZCOND5(JL) /= 0.0_JPRB
    IF(LDFLAG(JL).AND.ZCOND5(JL) /= 0.0_JPRB) THEN
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      zfoeew55a(jl)=zfoeew5(jl)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      lltest1(jl)=ZQSAT5(JL) > ZQMAX
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
      zqsat55c(jl)=zqsat5(jl)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      ztarg55a(jl)=ztarg5(jl)
      Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      zqsat55a(jl)=zqsat5(jl)
      zcor55a(jl)=zcor5(jl)
      z2s55a(jl)=z2s5(jl)
      zq55a(jl)=pq5(jl,kk)
      ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
    ENDIF
  ENDDO

  3315 CONTINUE

ENDIF

IF(KCALL == 0) THEN

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZQP5(JL)=1.0_JPRB/PSP5(JL)
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    zfoeew55b(jl)=zfoeew5(jl)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    lltest2(jl)=ZQSAT5(JL) > ZQMAX
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    zqsat55d(jl)=zqsat5(jl)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    ztarg55b(jl)=ztarg5(jl)
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    zqsat55b(jl)=zqsat5(jl)
    zcor55b(jl)=zcor5(jl)
    z2s55b(jl)=z2s5(jl)
    zq55b(jl)=pq5(jl,kk)
    ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
  ENDDO

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    zfoeew55a(jl)=zfoeew5(jl)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    lltest1(jl)=ZQSAT5(JL) > ZQMAX
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    zqsat55c(jl)=zqsat5(jl)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    ztarg55a(jl)=ztarg5(jl)
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    zqsat55a(jl)=zqsat5(jl)
    zcor55a(jl)=zcor5(jl)
    z2s55a(jl)=z2s5(jl)
    zq55a(jl)=pq5(jl,kk)
    ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
  ENDDO

ENDIF

IF(KCALL == 4) THEN

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZQP5(JL)=1.0_JPRB/PSP5(JL)
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    zfoeew55b(jl)=zfoeew5(jl)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    lltest2(jl)=ZQSAT5(JL) > ZQMAX
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    zqsat55d(jl)=zqsat5(jl)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    ztarg55b(jl)=ztarg5(jl)
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    zqsat55b(jl)=zqsat5(jl)
    zcor55b(jl)=zcor5(jl)
    z2s55b(jl)=z2s5(jl)
    zq55b(jl)=pq5(jl,kk)
    ZCOND5(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND5(JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND5(JL)
  ENDDO

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    zfoeew55a(jl)=zfoeew5(jl)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    lltest1(jl)=ZQSAT5(JL) > ZQMAX
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    zqsat55c(jl)=zqsat5(jl)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    ztarg55a(jl)=ztarg5(jl)
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    zqsat55a(jl)=zqsat5(jl)
    zcor55a(jl)=zcor5(jl)
    z2s55a(jl)=z2s5(jl)
    zq55a(jl)=pq5(jl,kk)
    ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
  ENDDO

ENDIF

!----------------------------------------------------------------------

!*                 ------ ADJOINT COMPUTATIONS ------

!----------------------------------------------------------------------

!*                 INITIALISATION OF LOCAL ARRAYS

ZTARG(:) =0.0_JPRB
ZFOEEW(:)=0.0_JPRB
ZQSAT(:) =0.0_JPRB
ZCOR(:)  =0.0_JPRB
Z2S(:)   =0.0_JPRB
ZCOND1(:)=0.0_JPRB
ZCOND(:) =0.0_JPRB
ZQP(:)   =0.0_JPRB

IF(KCALL == 4) THEN

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZCOND1 (JL) = ZCOND1 (JL) - PQ (JL,KK)
    ZCOND1 (JL) = ZCOND1 (JL) + ZALDCP(JL)*PT (JL,KK)
    zqsat5(jl)=zqsat55a(jl)
    zcor5(jl)=zcor55a(jl)
    z2s5(jl)=z2s55a(jl)
    PQ (JL,KK) = PQ (JL,KK) + ZCOND1 (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)*&
     & (zq55a(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOR (JL) = ZCOR (JL) - ZCOND1 (JL)*&
     & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    Z2S (JL) = Z2S (JL) - ZCOND1 (JL)*&
     & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND1 (JL) = 0.0_JPRB
    ztarg5(jl)=ztarg55a(jl)
    ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
     & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
    Z2S (JL) = 0.0_JPRB
    zqsat5(jl)=zqsat55c(jl)
    ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
    ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
    ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR(JL) = 0.0_JPRB
    IF (lltest1(jl)) THEN
      ZQSAT (JL)=0.0_JPRB
    ENDIF
    ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
    zfoeew5(jl)=zfoeew55a(jl)
    ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
    ZQSAT (JL) = 0.0_JPRB
    ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
     & Z3ES(JL)*(RTT-Z4ES(JL))*&
     & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
     & (ZTARG5(JL)-Z4ES(JL)))/          &
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZFOEEW (JL) = 0.0_JPRB
    PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
    ZTARG (JL) = 0.0_JPRB
  ENDDO

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZCOND (JL) = ZCOND (JL) - PQ (JL,KK)
    ZCOND (JL) = ZCOND (JL) + ZALDCP(JL)*PT (JL,KK)
    zqsat5(jl)=zqsat55b(jl)
    zcor5(jl)=zcor55b(jl)
    z2s5(jl)=z2s55b(jl)
    PQ (JL,KK) = PQ (JL,KK) + ZCOND (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND (JL)*&
     & (zq55b(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOR (JL) = ZCOR (JL) - ZCOND (JL)*&
     & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    Z2S (JL) = Z2S (JL) - ZCOND (JL)*&
     & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND (JL) = 0.0_JPRB
    ztarg5(jl)=ztarg55b(jl)
    ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
     & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
    Z2S (JL) = 0.0_JPRB
    zqsat5(jl)=zqsat55d(jl)
    ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
    ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
    ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR(JL) = 0.0_JPRB
    IF (lltest2(jl)) THEN
      ZQSAT (JL)=0.0_JPRB
    ENDIF
    ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
    zfoeew5(jl)=zfoeew55b(jl)
    ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
    ZQSAT (JL) = 0.0_JPRB
    ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
     & Z3ES(JL)*(RTT-Z4ES(JL))*&
     & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
     & (ZTARG5(JL)-Z4ES(JL)))/          &
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZFOEEW (JL) = 0.0_JPRB
    PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
    ZTARG (JL) = 0.0_JPRB
    PSP(JL) = PSP(JL) - ZQP(JL)/PSP5(JL)**2
    ZQP(JL) = 0.0_JPRB
  ENDDO
ENDIF

IF(KCALL == 0) THEN

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZCOND1 (JL) = ZCOND1 (JL) - PQ (JL,KK)
    ZCOND1 (JL) = ZCOND1 (JL) + ZALDCP(JL)*PT (JL,KK)
    zqsat5(jl)=zqsat55a(jl)
    zcor5(jl)=zcor55a(jl)
    z2s5(jl)=z2s55a(jl)
    PQ (JL,KK) = PQ (JL,KK) + ZCOND1 (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)*&
     & (zq55a(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOR (JL) = ZCOR (JL) - ZCOND1 (JL)*&
     & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    Z2S (JL) = Z2S (JL) - ZCOND1 (JL)*&
     & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND1 (JL) = 0.0_JPRB
    ztarg5(jl)=ztarg55a(jl)
    ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
     & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
    Z2S (JL) = 0.0_JPRB
    zqsat5(jl)=zqsat55c(jl)
    ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
    ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
    ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR(JL) = 0.0_JPRB
    IF (lltest1(jl)) THEN
      ZQSAT (JL)=0.0_JPRB
    ENDIF
    ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
    zfoeew5(jl)=zfoeew55a(jl)
    ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
    ZQSAT (JL) = 0.0_JPRB
    ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
     & Z3ES(JL)*(RTT-Z4ES(JL))*&
     & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
     & (ZTARG5(JL)-Z4ES(JL)))/          &
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZFOEEW (JL) = 0.0_JPRB
    PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
    ZTARG (JL) = 0.0_JPRB
  ENDDO

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZCOND1 (JL) = ZCOND1 (JL) - PQ (JL,KK)
    ZCOND1 (JL) = ZCOND1 (JL) + ZALDCP(JL)*PT (JL,KK)
    zqsat5(jl)=zqsat55b(jl)
    zcor5(jl)=zcor55b(jl)
    z2s5(jl)=z2s55b(jl)
    PQ (JL,KK) = PQ (JL,KK) + ZCOND1 (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
    ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)*&
     & (zq55b(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOR (JL) = ZCOR (JL) - ZCOND1 (JL)*&
     & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    Z2S (JL) = Z2S (JL) - ZCOND1 (JL)*&
     & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND1 (JL) = 0.0_JPRB
    ztarg5(jl)=ztarg55b(jl)
    ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
     & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
    Z2S (JL) = 0.0_JPRB
    zqsat5(jl)=zqsat55d(jl)
    ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
    ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
    ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR(JL) = 0.0_JPRB
    IF (lltest2(jl)) THEN
      ZQSAT (JL)=0.0_JPRB
    ENDIF
    ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
    zfoeew5(jl)=zfoeew55b(jl)
    ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
    ZQSAT (JL) = 0.0_JPRB
    ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
     & Z3ES(JL)*(RTT-Z4ES(JL))*&
     & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
     & (ZTARG5(JL)-Z4ES(JL)))/          &
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZFOEEW (JL) = 0.0_JPRB
    PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
    ZTARG (JL) = 0.0_JPRB
    PSP(JL) = PSP(JL) - ZQP(JL)/PSP5(JL)**2
    ZQP(JL) = 0.0_JPRB
  ENDDO
ENDIF

IF(KCALL == 2) THEN

  IF(lltest5) GO TO 331

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(lltest3(jl)) THEN
      ZCOND1 (JL) = ZCOND1 (JL) - PQ (JL,KK)
      ZCOND1 (JL) = ZCOND1 (JL) + ZALDCP(JL)*PT (JL,KK)
      zqsat5(jl)=zqsat55a(jl)
      zcor5(jl)=zcor55a(jl)
      z2s5(jl)=z2s55a(jl)
      PQ (JL,KK) = PQ (JL,KK) + ZCOND1 (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)*&
       & (zq55a(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOR (JL) = ZCOR (JL) - ZCOND1 (JL)*&
       & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      Z2S (JL) = Z2S (JL) - ZCOND1 (JL)*&
       & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND1 (JL) = 0.0_JPRB
      ztarg5(jl)=ztarg55a(jl)
      ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
       & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
      Z2S (JL) = 0.0_JPRB
      zqsat5(jl)=zqsat55c(jl)
      ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
      ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
      ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR(JL) = 0.0_JPRB
      IF (lltest1(jl)) THEN
        ZQSAT (JL)=0.0_JPRB
      ENDIF
      ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
      zfoeew5(jl)=zfoeew55a(jl)
      ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
      ZQSAT (JL) = 0.0_JPRB
      ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
       & Z3ES(JL)*(RTT-Z4ES(JL))*&
       & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
       & (ZTARG5(JL)-Z4ES(JL)))/          &
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZFOEEW (JL) = 0.0_JPRB
      PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
      ZTARG (JL) = 0.0_JPRB
    ENDIF
  ENDDO
!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL)) THEN
      ZCOND (JL) = ZCOND (JL) - PQ (JL,KK)
      ZCOND (JL) = ZCOND (JL) + ZALDCP(JL)*PT (JL,KK)
      zqsat5(jl)=zqsat55b(jl)
      zcor5(jl)=zcor55b(jl)
      z2s5(jl)=z2s55b(jl)
      IF (lltest4(jl)) THEN
        ZCOND (JL)=0.0_JPRB
      ENDIF
      PQ (JL,KK) = PQ (JL,KK) + ZCOND (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND (JL)*&
       & (zq55b(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOR (JL) = ZCOR (JL) - ZCOND (JL)*&
       & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      Z2S (JL) = Z2S (JL) - ZCOND (JL)*&
       & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND (JL) = 0.0_JPRB
      ztarg5(jl)=ztarg55b(jl)
      ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
       & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
      Z2S (JL) = 0.0_JPRB
      zqsat5(jl)=zqsat55d(jl)
      ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
      ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
      ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR(JL) = 0.0_JPRB
      IF (lltest2(jl)) THEN
        ZQSAT (JL)=0.0_JPRB
      ENDIF
      ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
      zfoeew5(jl)=zfoeew55b(jl)
      ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
      ZQSAT (JL) = 0.0_JPRB
      ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
       & Z3ES(JL)*(RTT-Z4ES(JL))*&
       & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
       & (ZTARG5(JL)-Z4ES(JL)))/          &
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZFOEEW (JL) = 0.0_JPRB
      PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
      ZTARG (JL) = 0.0_JPRB
      PSP(JL) = PSP(JL) - ZQP(JL)/PSP5(JL)**2
      ZQP(JL) = 0.0_JPRB
    ELSE
      ZCOND (JL)=0.0_JPRB
    ENDIF
  ENDDO
  331 CONTINUE

ENDIF
IF (KCALL == 1 ) THEN

  IF(lltest6) GO TO 231

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(lltest3(jl)) THEN
      ZCOND1 (JL) = ZCOND1 (JL) - PQ (JL,KK)
      ZCOND1 (JL) = ZCOND1 (JL) + ZALDCP(JL)*PT (JL,KK)
      zqsat5(jl)=zqsat55a(jl)
      zcor5(jl)=zcor55a(jl)
      z2s5(jl)=z2s55a(jl)
      PQ (JL,KK) = PQ (JL,KK) + ZCOND1 (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND1 (JL)*&
       & (zq55a(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOR (JL) = ZCOR (JL) - ZCOND1 (JL)*&
       & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      Z2S (JL) = Z2S (JL) - ZCOND1 (JL)*&
       & (zq55a(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND1 (JL) = 0.0_JPRB
      ztarg5(jl)=ztarg55a(jl)
      ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
       & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
      Z2S (JL) = 0.0_JPRB
      zqsat5(jl)=zqsat55c(jl)
      ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
      ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
      ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR(JL) = 0.0_JPRB
      IF (lltest1(jl)) THEN
        ZQSAT (JL)=0.0_JPRB
      ENDIF
      ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
      zfoeew5(jl)=zfoeew55a(jl)
      ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
      ZQSAT (JL) = 0.0_JPRB
      ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
       & Z3ES(JL)*(RTT-Z4ES(JL))*&
       & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
       & (ZTARG5(JL)-Z4ES(JL)))/          &
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZFOEEW (JL) = 0.0_JPRB
      PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
      ZTARG (JL) = 0.0_JPRB
    ENDIF
  ENDDO

  231 CONTINUE

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL)) THEN
      ZCOND (JL) = ZCOND (JL) - PQ (JL,KK)
      ZCOND (JL) = ZCOND (JL) + ZALDCP(JL)*PT (JL,KK)
      zqsat5(jl)=zqsat55b(jl)
      zcor5(jl)=zcor55b(jl)
      z2s5(jl)=z2s55b(jl)
      IF (lltest4(jl)) THEN
        ZCOND (JL)=0.0_JPRB
      ENDIF
      PQ (JL,KK) = PQ (JL,KK) + ZCOND (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND (JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      ZQSAT (JL) = ZQSAT (JL) - ZCOND (JL)*&
       & (zq55b(jl)-ZQSAT5(JL))*ZCOR5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOR (JL) = ZCOR (JL) - ZCOND (JL)*&
       & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*Z2S5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      Z2S (JL) = Z2S (JL) - ZCOND (JL)*&
       & (zq55b(jl)-ZQSAT5(JL))*ZQSAT5(JL)*ZCOR5(JL)/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND (JL) = 0.0_JPRB
      ztarg5(jl)=ztarg55b(jl)
      ZTARG(JL) = ZTARG(JL) - 2.0_JPRB*Z2S (JL)*&
       & Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3  
      Z2S (JL) = 0.0_JPRB
      zqsat5(jl)=zqsat55d(jl)
      ZCOR (JL) = ZCOR (JL) + ZQSAT (JL)*ZQSAT5(JL)
      ZQSAT (JL) = ZQSAT (JL)*ZCOR5(JL)
      ZQSAT(JL) = ZQSAT(JL) + ZCOR(JL)*RETV/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR(JL) = 0.0_JPRB
      IF (lltest2(jl)) THEN
        ZQSAT (JL)=0.0_JPRB
      ENDIF
      ZFOEEW (JL) = ZFOEEW (JL) + ZQSAT (JL)*ZQP5(JL)
      zfoeew5(jl)=zfoeew55b(jl)
      ZQP (JL) = ZQP (JL) + ZQSAT (JL)*ZFOEEW5(JL)
      ZQSAT (JL) = 0.0_JPRB
      ZTARG(JL) = ZTARG(JL) + ZFOEEW (JL)*R2ES*&
       & Z3ES(JL)*(RTT-Z4ES(JL))*&
       & EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/&
       & (ZTARG5(JL)-Z4ES(JL)))/          &
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZFOEEW (JL) = 0.0_JPRB
      PT (JL,KK) = PT (JL,KK) + ZTARG (JL)
      ZTARG (JL) = 0.0_JPRB
      PSP(JL) = PSP(JL) - ZQP(JL)/PSP5(JL)**2
      ZQP(JL) = 0.0_JPRB
    ELSE
      ZCOND (JL)=0.0_JPRB
    ENDIF
  ENDDO

ENDIF

IF (LHOOK) CALL DR_HOOK('CUADJTQSAD',1,ZHOOK_HANDLE)
END SUBROUTINE CUADJTQSAD
