SUBROUTINE CPTEND ( KPROMA, KSTART, KPROF, KFLEV,&
 !  Variables 2D Input
 & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS ,&
 & PDIFTQ , PDIFTQI, PDIFTQL, PDIFTS ,&
 & PFCCQL , PFCCQN , PFCSQL , PFCSQN ,&
 & PFPLCL , PFPLCN , PFPLSL , PFPLSN ,&
 & PFPFPSL, PFPFPSN, PFPFPCL, PFPFPCN,&
 & PFPEVPSL,PFPEVPSN,PFPEVPCL,PFPEVPCN,&
 & PFRMH  , PFRSO  , PFRTH  , PFTKE  ,&
 & PFHP   , PFP    ,&
 & PSTRCU , PSTRCV , PSTRDU , PSTRDV ,&
 & PSTRTU , PSTRTV , PSTRMU , PSTRMV ,&
 & PRDELP ,                           &
 & PQ     , PQI    , PQL    ,         &
 !  Variables 1D Input
 &  PQS   ,                           &
 !  Variables 2D Output
 & PTENDU , PTENDV , PTENDH , PTENDQ, &
 & PTENDQI, PTENDQL, PTENDQR, PTENDQS,&
 & PTENDTKE, PTENDT )

!     ------------------------------------------------------------------
!     ACTION DES PROCESSUS PHYSIQUES SUR LA QUANTITE DE MOUVEMENT ,
!     LES VARIABLES THERMODYNAMIQUES ET SUR L'EQUATION DE CONTINUITE
!     INTERFACE AVEC LES PARAMETRISATIONS PHYSIQUES  (IALPP)
!     ------------------------------------------------------------------

!     BUT
!     ---
!**** *CPTEND* CACUL DES TENDANCES PHYSIQUES SUR U, V, H, Q, QI, QL, TKE,
!      SPECIFIQUE ET SUR LA TEMPERATURE.
   
!      VOIR DOCUMENTATION, INTERFACE PHYSICO-DYNAMIQUE.
!                            -----------------

!      POUR COMPRENDRE LA LOGIQUE DE CETTE ROUTINE, BIEN REALISER
!      QUE LA VARIABLE THERMODYNAMIQUE DE LA PHYSIQUE EST L ENTHALPIE
!                                                         -----------
!      (PLUS EXACTEMENT L ENERGIE STATIQUE HUMIDE)

!      LE TRANSPORT EVENTUEL PAR LES PLUIES EST PRIS EN COMPTE DE
!      MANIERE MIXTE :
!      - UNE PARTIE DE CE TRANSPORT EST CONTENUE DE MANIERE IMPLICITE
!        DANS LA FORMULATION EN FLUX D ENTHALPIE
!      - IL RESTE POURTANT UN TERME DE TRANSPORT D ENERGIE POTENTIELLE
!        QUI EST TRAITE ICI COMME UNE ADVECTION VERTICALE

!     ARGUMENTS D ENTREE
!     ------------------
!       KPROMA : DIMENSION HORIZONTALE
!       KSTART : DEBUT DE LA BOUCLE HORIZONTALE
!       KPROF : BORNE HORIZONTALE DES CALCULS
!       KFLEV : DIMENSION ET BORNE VERTICALE

! --- INPUT 2D (0:KLEV).
!     -----------------.
! PDIFCQ     : FLUX CONVECTIF D'HUMIDITE SPECIFIQUE (HORS COND. ET RR).
! PDIFCQI    : FLUX CONVECTIF D'EAU SOLIDE (HORS COND. ET RR).
! PDIFCQL    : FLUX CONVECTIF D'EAU LIQUIDE (HORS COND. ET RR).
! PDIFCS     : FLUX CONVECTIF D'ENTHALPIE .
! PDIFTQ     : FLUX TURBULENT (ET Q NEGATIF) D'HUMIDITE SPECIFIQUE.
! PDIFTQI    : FLUX TURBULENT (ET Q NEGATIF) D'EAU GLACE.
! PDIFTQL    : FLUX TURBULENT (ET Q NEGATIF) D'EAU LIQUIDE.
! PDIFTS     : FLUX TURBULENT D'ENTHALPIE (OU D'ENERGIE STATIQUE SECHE).
! PFCCQL     : FLUX DE CONDENSATION LIE AUX RR CONVECTIVES LIQUIDES.
! PFCCQN     : FLUX DE CONDENSATION LIE AUX RR CONVECTIVES NEIGEUSES.
! PFCSQL     : FLUX DE CONDENSATION LIE AUX RR STRATIFORMES LIQUIDES.
! PFCSQN     : FLUX DE CONDENSATION LIE AUX RR STRATIFORMES NEIGEUSES.
! PFPEVPSL   : FLUX DE PRECIPITATIONS DU A L'EVAPORATION.
! PFPEVPSN   : FLUX DE PRECIPITATIONS DU A LA SUBLIMATION.
! PFPEVPCL   : FLUX DE PRECIPITATIONS DU A L'EVAPORATION.
! PFPEVPCN   : FLUX DE PRECIPITATIONS DU A LA SUBLIMATION.
! PFPLCL     : PRECIPITATIONS CONVECTIVES SOUS FORME LIQUIDE.
! PFPLCN     : PRECIPITATIONS CONVECTIVES SOUS FORME NEIGE.
! PFPLSL     : PRECIPITATIONS STRATIFORMES SOUS FORME LIQUIDE.
! PFPLSN     : PRECIPITATIONS STRATIFORMES SOUS FORME NEIGE.
! PFPFPSL    : FLUX DE PRECIPITATION : TERME DE GENERATION/FORMATION.
! PFPFPSN    : FLUX DE PRECIPITATION : TERME DE GENERATION/FORMATION.
! PFPFPCL    : FLUX DE PRECIPITATION : TERME DE GENERATION/FORMATION.
! PFPFPCN    : FLUX DE PRECIPITATION : TERME DE GENERATION/FORMATION.
! PFRMH      : FLUX MESOSPHERIQUE D'ENTHALPIE.
! PFRSO      : FLUX DE RAYONNEMENT SOLAIRE.
! PFRTH      : FLUX DE RAYONNEMENT THERMIQUE.
! PFTKE      : FLUX DE TKE.
! PFHP       : FLUX D'ENTHALPIE TOTAL LIE AUX RR ET LA CONDENSATION.
! PFP        : PRECIPITATIONS TOTALES.
! PSTRCU     : FLUX CONVECTIF DE QUANTITE DE MOUVEMENT "U".
! PSTRCV     : FLUX CONVECTIF DE QUANTITE DE MOUVEMENT "V".
! PSTRDU     : FLUX "GRAVITY WAVE DRAG" "U".
! PSTRDV     : FLUX "GRAVITY WAVE DRAG" "V".
! PSTRTU     : FLUX TURBULENT DE QUANTITE DE MOUVEMENT "U".
! PSTRTV     : FLUX TURBULENT DE QUANTITE DE MOUVEMENT "V".
! PSTRMU     : FLUX MESOSPHERIQUE DE QUANTITE DE MOUVEMENT "U".
! PSTRMV     : FLUX MESOSPHERIQUE DE QUANTITE DE MOUVEMENT "V".

! --- INPUT 2D (1:KLEV).
!     -----------------.
! PRDELP     : INVERSE DE L'EPAISSEUR EN PRESSION DE LA COUCHE.
! PAPHIF     : GEOPOTENTIEL AUX NIVEAUX DES COUCHES.
! PCP        : CHALEUR MASSIQUE A PRESSION CONSTANTE DE L'AIR.
! PU         : COMPOSANTE EN X DU VENT.
! PV         : COMPOSANTE EN Y DU VENT.
! PT         : TEMPERATURE.
! PQ         : HUMIDITE SPECIFIQUE DE LA VAPEUR D'EAU.
! PQI        : GLACE.
! PQL        : EAU LIQUIDE.

! --- INPUT 1D.
!     --------.
! PTS        : TEMPERATURE DE SURFACE.
! PQS        : HUMIDITE SPECIFIQUE DE SURFACE.
! POROG      : GEOPOTENTIEL DE SURFACE.

! --- ARGUMENTS IMPLICITES.
!     --------------------.
! CONSTANTES UNIVERSELLES = COMMON /YOMCST/: RG
! INDICATEURS LOGIQUES    = COMMON /YOMPHY/: LCONDWT

! --- SORTIES 2D (1,KFLEV).
!     --------------------.
! PTENDU     : TENDANCE DU VENT SUR U.
! PTENDV     : TENDANCE DU VENT SUR V.
! PTENDH     : TENDANCE DE L'ENTHALPIE.
! PTENDQ     : TENDANCE DE L'HUMIDITE.
! PTENDQI    : TENDANCE DE L'EAU GLACE.
! PTENDQL    : TENDANCE DE L'EAU LIQUIDE.
! PTENDQR    : TENDANCE DU CONTENU EN EAU PRECIPITANT LIQUIDE
! PTENDQS    : TENDANCE DU CONTENU EN EAU PRECIPITANT SOLIDE
! PTENDTKE   : TENDANCE DE TKE.
! PTENDT     : TENDANCE DU TEMPERATURE, SI TENDANCE AU LIEU DE 
!              FLUXES (HIRLAM OPTION)

! --- AUTEUR.
!     ------.
!     02/01/92 E.BAZILE.
!        Reunification de Cpaty,Cpdthp,Cpdup par E.Bazile.

!        Modified 92-06-18 by C.Dreveton (ajout PFHP en argument)
!        Modified 93-06-22 by E.BAZILE (ajout de l'eau liq. et sol.)
!        Modified 04-01-16 by P. Marquet (Lopez and Gueremy schemes,
!                          they both add PFPEVPP to PTENDQ, with
!                          PFPFP and PFADVP only for Lopez) 
!                          The signs of the fluxes PFPEVPP, PFPFP and 
!                          PFADVP have changed in ADVPRC.
!        2005-04-21 K. Yessad and Y.Seity: reformulation of "delta m=1".
!        Modified 06-01-25 by F. Bouyssel Introduction of PFPEVPL/N, PTENDQS
!        Modified 2006-05-02 by E. Bazile Introduction of TKE.
!        Modified 2006-06-01 by B. Sass : treat additional HIRLAM options
!        Modified 2007-02-25 by R. Brozkova : option "delta_m" and sensible
!                                         heat due to precipitation.
!----------------------------------------------------------------------------

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

USE YOMCST   , ONLY : RG, RCPD
USE YOMPHY   , ONLY : LCONDWT  ,LPROCLD, LECT
USE YHLOPTION, ONLY : LHL, LHLTEND
!     ------------------------------------------------------------------

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFLEV 
INTEGER(KIND=JPIM),INTENT(IN)    :: KSTART 
INTEGER(KIND=JPIM),INTENT(IN)    :: KPROF 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFCQ(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFCQI(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFCQL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFCS(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFTQ(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFTQI(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFTQL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDIFTS(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCCQL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCCQN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCSQL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCSQN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLCL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLCN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLSL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLSN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPFPSL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPFPSN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPFPCL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPFPCN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPEVPSL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPEVPSN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPEVPCL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPEVPCN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFRMH(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFRSO(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFRTH(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFTKE(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFHP(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFP(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRCU(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRCV(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRDU(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRDV(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRTU(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRTV(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRMU(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSTRMV(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRDELP(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PQ(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PQI(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PQL(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PQS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDU(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDV(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDH(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDQ(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDQI(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDQL(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDQR(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDQS(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDTKE(KPROMA,KFLEV) 
REAL(KIND=JPRB)   ,INTENT(INOUT)   :: PTENDT(KPROMA,KFLEV)

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

REAL(KIND=JPRB) :: ZGSDP(KPROMA,KFLEV)

INTEGER(KIND=JPIM) :: JLEV, JROF

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

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

IF (LHOOK) CALL DR_HOOK('CPTEND',0,ZHOOK_HANDLE)

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

!   1. CALCUL DE L'EVOLUTION DE Q ET CALCUL PARTIEL DE dU/dT ET
!  ET DE dH/dt ( avec H = CpT + Phi + Ec )
!  ------------------------------------------------------------

IF( .NOT.LHLTEND )  THEN

!   INITIALIZE TENDENCIES TO ZERO IN THE NORMAL CASE OR MF CONFIGURATION

  ZINDEX=1.0_JPRB

  DO JLEV = 1, KFLEV
    DO JROF = KSTART, KPROF
      PTENDU   (JROF,JLEV)=0.0_JPRB
      PTENDV   (JROF,JLEV)=0.0_JPRB
      PTENDQ   (JROF,JLEV)=0.0_JPRB 
      PTENDH   (JROF,JLEV)=0.0_JPRB
      PTENDTKE (JROF,JLEV)=0.0_JPRB
      PTENDT   (JROF,JLEV)=0.0_JPRB
      PTENDQI  (JROF,JLEV)=0.0_JPRB
      PTENDQL  (JROF,JLEV)=0.0_JPRB
      PTENDQR  (JROF,JLEV)=0.0_JPRB
      PTENDQS  (JROF,JLEV)=0.0_JPRB
    ENDDO
  ENDDO

ELSE  

!  SPECIAL HIRLAM CONFIGURATION 

  ZINDEX=0.0_JPRB

ENDIF

  DO JLEV = 1, KFLEV
    DO JROF = KSTART, KPROF

    ZGSDP(JROF,JLEV)=RG*PRDELP(JROF,JLEV)

    PTENDU(JROF,JLEV) =  PTENDU(JROF,JLEV) +ZGSDP(JROF,JLEV)*(&
     & (PSTRCU(JROF,JLEV-1) - PSTRCU(JROF,JLEV)) +&
     & (PSTRDU(JROF,JLEV-1) - PSTRDU(JROF,JLEV)) +&
     & (PSTRMU(JROF,JLEV-1) - PSTRMU(JROF,JLEV)) +&
     & ZINDEX*(PSTRTU(JROF,JLEV-1) - PSTRTU(JROF,JLEV)) )

    PTENDV(JROF,JLEV) =  PTENDV(JROF,JLEV) +ZGSDP(JROF,JLEV)*(&
     & (PSTRCV(JROF,JLEV-1) - PSTRCV(JROF,JLEV)) +&
     & (PSTRDV(JROF,JLEV-1) - PSTRDV(JROF,JLEV)) +&
     & (PSTRMV(JROF,JLEV-1) - PSTRMV(JROF,JLEV)) +&
     & ZINDEX*(PSTRTV(JROF,JLEV-1) - PSTRTV(JROF,JLEV)) )  

    PTENDQ(JROF,JLEV) = PTENDQ(JROF,JLEV) + &
     &  ZINDEX * ZGSDP(JROF,JLEV)*(&
     & (PDIFTQ (JROF,JLEV-1) - PDIFTQ (JROF,JLEV)) +&
     & (PDIFCQ (JROF,JLEV-1) - PDIFCQ (JROF,JLEV)) -&
     & (PFPEVPSL(JROF,JLEV-1) -PFPEVPSL(JROF,JLEV)) -&
     & (PFPEVPSN(JROF,JLEV-1) -PFPEVPSN(JROF,JLEV)) +&
     & (PFCCQL (JROF,JLEV-1) - PFCCQL (JROF,JLEV)) +&
     & (PFCCQN (JROF,JLEV-1) - PFCCQN (JROF,JLEV)) +&
     & (PFCSQL (JROF,JLEV-1) - PFCSQL (JROF,JLEV)) +&
     & (PFCSQN (JROF,JLEV-1) - PFCSQN (JROF,JLEV)) )  

    PTENDH(JROF,JLEV) = PTENDH(JROF,JLEV) + &
     & ZINDEX * ZGSDP(JROF,JLEV)*(&
     & (PFRSO (JROF,JLEV-1) - PFRSO (JROF,JLEV)) +&
     & (PFRTH (JROF,JLEV-1) - PFRTH (JROF,JLEV)) +&
     & (PFRMH (JROF,JLEV-1) - PFRMH (JROF,JLEV)) +&
     & (PDIFTS(JROF,JLEV-1) - PDIFTS(JROF,JLEV)) +&
     & (PDIFCS(JROF,JLEV-1) - PDIFCS(JROF,JLEV)) +&
     & (PFHP  (JROF,JLEV-1) - PFHP  (JROF,JLEV)) )  

    PTENDT(JROF,JLEV) = &
     & PTENDT(JROF,JLEV) +(1._JPRB -ZINDEX)*ZGSDP(JROF,JLEV)*(&
     & ( PFRMH (JROF,JLEV-1) - PFRMH (JROF,JLEV))/RCPD )

    ENDDO  
  ENDDO 

!  ------------------------------------------------------------
!   1.5 CALCUL DE L'EVOLUTION DE QL ET QI SI LCONDWT=TRUE
!  ------------------------------------------------------------

IF (LCONDWT) THEN

  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  ! Pronostic equations for liquid/solid water/precipitation 
  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  IF (LPROCLD) THEN
    ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ! Lopez equation for QI=solid water
    ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DO JLEV = 1, KFLEV
      DO JROF = KSTART, KPROF
        PTENDQI(JROF,JLEV) = ZGSDP(JROF,JLEV)*(&
         & (PDIFTQI(JROF,JLEV-1) - PDIFTQI(JROF,JLEV)) +&
         & (PDIFCQI(JROF,JLEV-1) - PDIFCQI(JROF,JLEV)) +&
         & (PFPFPSN(JROF,JLEV-1) - PFPFPSN(JROF,JLEV)) -&
         & (PFCSQN (JROF,JLEV-1) - PFCSQN (JROF,JLEV)) )
      ENDDO
    ENDDO
  ELSE
    ! - - - - - - - - - - - - - - - - - -
    ! Usual equation for QI=solid water
    ! - - - - - - - - - - - - - - - - - -
    DO JLEV = 1, KFLEV
      DO JROF = KSTART, KPROF
        PTENDQI(JROF,JLEV) = &
         & PTENDQI(JROF,JLEV) + ZINDEX*ZGSDP(JROF,JLEV)*(&
         & (PDIFTQI(JROF,JLEV-1) - PDIFTQI(JROF,JLEV)) +&
         & (PDIFCQI(JROF,JLEV-1) - PDIFCQI(JROF,JLEV)) +&
         & (PFPLCN (JROF,JLEV-1) - PFPLCN (JROF,JLEV)) +&
         & (PFPLSN (JROF,JLEV-1) - PFPLSN (JROF,JLEV)) -&
         & (PFCCQN (JROF,JLEV-1) - PFCCQN (JROF,JLEV)) -&
         & (PFCSQN (JROF,JLEV-1) - PFCSQN (JROF,JLEV)) )  
      ENDDO
    ENDDO
  ENDIF

  IF (LPROCLD) THEN
    ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ! Lopez equation for QL=liquid water
    ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DO JLEV = 1, KFLEV
      DO JROF = KSTART, KPROF
        PTENDQL(JROF,JLEV) = ZGSDP(JROF,JLEV)*(&
         & (PDIFTQL(JROF,JLEV-1) - PDIFTQL(JROF,JLEV)) +&
         & (PDIFCQL(JROF,JLEV-1) - PDIFCQL(JROF,JLEV)) +&
         & (PFPFPSL(JROF,JLEV-1) - PFPFPSL(JROF,JLEV)) -&
         & (PFCSQL (JROF,JLEV-1) - PFCSQL (JROF,JLEV)) )
      ENDDO
    ENDDO
  ELSE
    ! - - - - - - - - - - - - - - - - - -
    ! Usual equation for QL=liquid water
    ! - - - - - - - - - - - - - - - - - -
    DO JLEV = 1, KFLEV
      DO JROF = KSTART, KPROF
        PTENDQL(JROF,JLEV) = &
         & PTENDQL(JROF,JLEV) + ZINDEX*ZGSDP(JROF,JLEV)*(&
         & (PDIFTQL(JROF,JLEV-1) - PDIFTQL(JROF,JLEV)) +&
         & (PDIFCQL(JROF,JLEV-1) - PDIFCQL(JROF,JLEV)) +&
         & (PFPLCL (JROF,JLEV-1) - PFPLCL (JROF,JLEV)) +&
         & (PFPLSL (JROF,JLEV-1) - PFPLSL (JROF,JLEV)) -&
         & (PFCCQL (JROF,JLEV-1) - PFCCQL (JROF,JLEV)) -&
         & (PFCSQL (JROF,JLEV-1) - PFCSQL (JROF,JLEV)) )  
      ENDDO
    ENDDO
  ENDIF

  IF (LPROCLD) THEN
    ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ! Lopez equation for QR,QS=Total falling condensed Water (liquid,solid)
    ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DO JLEV = 1, KFLEV
      DO JROF = KSTART, KPROF
        PTENDQR(JROF,JLEV) = ZGSDP(JROF,JLEV)*(&
         & (PFPEVPSL(JROF,JLEV-1)- PFPEVPSL(JROF,JLEV)) +&
         & (PFPLSL (JROF,JLEV-1) - PFPLSL (JROF,JLEV)) -&
         & (PFPFPSL(JROF,JLEV-1) - PFPFPSL(JROF,JLEV)) )
        PTENDQS(JROF,JLEV) = ZGSDP(JROF,JLEV)*(&
         & (PFPEVPSN(JROF,JLEV-1)- PFPEVPSN(JROF,JLEV)) +&
         & (PFPLSN (JROF,JLEV-1) - PFPLSN (JROF,JLEV)) -&
         & (PFPFPSN(JROF,JLEV-1) - PFPFPSN(JROF,JLEV)) )
      ENDDO
    ENDDO
  ENDIF

ELSE
  DO JLEV = 1, KFLEV
    DO JROF = KSTART, KPROF
      PTENDQI(JROF,JLEV) = 0.0_JPRB
      PTENDQL(JROF,JLEV) = 0.0_JPRB
    ENDDO
  ENDDO
ENDIF

IF ( (LECT).OR.(LHL) ) THEN
  DO JLEV = 1, KFLEV
    DO JROF = KSTART, KPROF
      PTENDTKE(JROF,JLEV) = PTENDTKE(JROF,JLEV) + &
     & ZINDEX*ZGSDP(JROF,JLEV)*(PFTKE(JROF,JLEV-1) - PFTKE(JROF,JLEV))
    ENDDO
  ENDDO
ENDIF

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

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