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

!**   *CUADJTQSTL* - SIMPLIFIED VERSION OF MOIST ADJUSTMENT
!                    (Tangent-linear)

!     J.F. MAHFOUF      ECMWF         

!          MODIFICATIONS
!          -------------
!     P. Lopez, ECMWF, 1-Sep-2008   Bug correction in test (found by A. Geer)
 
!     PURPOSE.
!     --------
!     TO PRODUCE T,Q AND L VALUES FOR CLOUD ASCENT

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

!       *CONDTL*     
!       *CUBMADJTL*  
!       *CUBMDTL*    

!     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(IN)    :: 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)  

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('CUADJTQSTL',0,ZHOOK_HANDLE)
ZQMAX=0.5_JPRB

!     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
      ZQP (JL)=-PSP(JL)/PSP5(JL)**2
      ZQP5(JL)=1.0_JPRB/PSP5(JL)
      ZTARG (JL)=PT (JL,KK)
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT (JL)=0.0_JPRB
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV*ZQSAT5(JL))
      ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
      Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      ZCOND (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
       & (PQ5(JL,KK)-ZQSAT5(JL))*&
       & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND5(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      IF (ZCOND5(JL) < 0.0_JPRB) THEN
        ZCOND (JL)=0.0_JPRB
        ZCOND5(JL)=0.0_JPRB
      ENDIF
      PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND (JL)
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND5(JL)
      PQ (JL,KK)=PQ (JL,KK)-ZCOND (JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND5(JL)
      IF(ZCOND5(JL) /= 0.0_JPRB) ISUM=ISUM+1
    ELSE
      ZCOND (JL)=0.0_JPRB
      ZCOND5(JL)=0.0_JPRB
    ENDIF
  ENDDO

  IF(ISUM == 0) GO TO 231

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL).AND.ZCOND5(JL) /= 0.0_JPRB) THEN
      ZTARG (JL)=PT (JL,KK)
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT (JL)=0.0_JPRB
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV*ZQSAT5(JL))
      ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
      Z2S5(JL)=Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      ZCOND1 (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
       & (PQ5(JL,KK)-ZQSAT5(JL))*&
       & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND1 (JL)
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
      PQ (JL,KK)=PQ (JL,KK)-ZCOND1 (JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
    ENDIF
  ENDDO

  231 CONTINUE

ENDIF

IF(KCALL == 2) THEN

  ISUM=0
!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL)) THEN
      ZQP (JL)=-PSP(JL)/PSP5(JL)**2
      ZQP5(JL)=1.0_JPRB/PSP5(JL)
      ZTARG (JL)=PT (JL,KK)
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT (JL)=0.0_JPRB
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
      ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
      Z2S5(JL)=Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      ZCOND (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
       & (PQ5(JL,KK)-ZQSAT5(JL))*&
       & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND5(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      IF (ZCOND5(JL) > 0.0_JPRB) THEN
        ZCOND (JL)=0.0_JPRB
        ZCOND5(JL)=0.0_JPRB
      ENDIF
      PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND (JL)
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND5(JL)
      PQ (JL,KK)=PQ (JL,KK)-ZCOND (JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND5(JL)
      IF(ZCOND5(JL) /= 0.0_JPRB) ISUM=ISUM+1
    ELSE
      ZCOND (JL)=0.0_JPRB
      ZCOND5(JL)=0.0_JPRB
    ENDIF
  ENDDO

  IF(ISUM == 0) GO TO 331

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    IF(LDFLAG(JL).AND.ZCOND5(JL) /= 0.0_JPRB) THEN
      ZTARG (JL)=PT (JL,KK)
      ZTARG5(JL)=PT5(JL,KK)
      ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
      ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
       & (ZTARG5(JL)-Z4ES(JL))**2  
      ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
      ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
      IF (ZQSAT5(JL) > ZQMAX) THEN
        ZQSAT (JL)=0.0_JPRB
        ZQSAT5(JL)=ZQMAX
      ENDIF
      ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
      ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
      ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
      ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
      Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
      Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
      ZCOND1 (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
       & (PQ5(JL,KK)-ZQSAT5(JL))*&
       & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
       & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
      ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/&
       & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))  
      PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND1 (JL)
      PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
      PQ (JL,KK)=PQ (JL,KK)-ZCOND1 (JL)
      PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
    ENDIF
  ENDDO

  331 CONTINUE

ENDIF

IF(KCALL == 0) THEN

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZQP (JL)=-PSP(JL)/PSP5(JL)**2
    ZQP5(JL)=1.0_JPRB/PSP5(JL)
    ZTARG (JL)=PT (JL,KK)
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT (JL)=0.0_JPRB
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    ZCOND1 (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
     & (PQ5(JL,KK)-ZQSAT5(JL))*&
     & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND1 (JL)
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
    PQ (JL,KK)=PQ (JL,KK)-ZCOND1 (JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
  ENDDO

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZTARG (JL)=PT (JL,KK)
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT (JL)=0.0_JPRB
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    ZCOND1 (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
     & (PQ5(JL,KK)-ZQSAT5(JL))*&
     & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND1 (JL)
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
    PQ (JL,KK)=PQ (JL,KK)-ZCOND1 (JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
  ENDDO

ENDIF

IF(KCALL == 4) THEN

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZQP (JL)=-PSP(JL)/PSP5(JL)**2
    ZQP5(JL)=1.0_JPRB/PSP5(JL)
    ZTARG (JL)=PT (JL,KK)
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT (JL)=0.0_JPRB
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    ZCOND (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
     & (PQ5(JL,KK)-ZQSAT5(JL))*&
     & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/ &
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND5(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND (JL)
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND5(JL)
    PQ (JL,KK)=PQ (JL,KK)-ZCOND (JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND5(JL)
  ENDDO

!DIR$    IVDEP
!OCL NOVREC
  DO JL=KIDIA,KFDIA
    ZTARG (JL)=PT (JL,KK)
    ZTARG5(JL)=PT5(JL,KK)
    ZFOEEW5(JL)=R2ES*EXP(Z3ES(JL)*(ZTARG5(JL)-RTT)/(ZTARG5(JL)-Z4ES(JL)))
    ZFOEEW (JL)=Z3ES(JL)*(RTT-Z4ES(JL))*ZTARG(JL)*ZFOEEW5(JL)/&
     & (ZTARG5(JL)-Z4ES(JL))**2  
    ZQSAT (JL)=ZQP5(JL)*ZFOEEW (JL) + ZQP (JL)*ZFOEEW5(JL)
    ZQSAT5(JL)=ZQP5(JL)*ZFOEEW5(JL)
    IF (ZQSAT5(JL) > ZQMAX) THEN
      ZQSAT (JL)=0.0_JPRB
      ZQSAT5(JL)=ZQMAX
    ENDIF
    ZCOR (JL)=(RETV*ZQSAT(JL))/(1.0_JPRB-RETV*ZQSAT5(JL))**2
    ZCOR5(JL)=1.0_JPRB/(1.0_JPRB-RETV  *ZQSAT5(JL))
    ZQSAT (JL)=ZQSAT5(JL)*ZCOR (JL) + ZQSAT (JL)*ZCOR5(JL)
    ZQSAT5(JL)=ZQSAT5(JL)*ZCOR5(JL)
    Z2S (JL)=-2.0_JPRB*ZTARG(JL)*Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**3
    Z2S5(JL)=    Z5ALCP(JL)/(ZTARG5(JL)-Z4ES(JL))**2
    ZCOND1 (JL)=(PQ (JL,KK)-ZQSAT (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL)) -&
     & (PQ5(JL,KK)-ZQSAT5(JL))*&
     & (ZQSAT (JL)*ZCOR5(JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR (JL)*Z2S5(JL)   +&
     & ZQSAT5(JL)*ZCOR5(JL)*Z2S (JL))/&
     & (1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))**2  
    ZCOND15(JL)=(PQ5(JL,KK)-ZQSAT5(JL))/(1.0_JPRB+ZQSAT5(JL)*ZCOR5(JL)*Z2S5(JL))
    PT (JL,KK)=PT (JL,KK)+ZALDCP(JL)*ZCOND1 (JL)
    PT5(JL,KK)=PT5(JL,KK)+ZALDCP(JL)*ZCOND15(JL)
    PQ (JL,KK)=PQ (JL,KK)-ZCOND1 (JL)
    PQ5(JL,KK)=PQ5(JL,KK)-ZCOND15(JL)
  ENDDO

ENDIF

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