SUBROUTINE CPTENDS ( KPROMA, KSTART, KPROF, KFLEV, KCSS, PDT,&
 !-------------------------------------------------------------------------------
 ! - INPUT 2D .
 & PFPLCL, PFPLSL, PFPLCN, PFPLSN,&
 & PFRSO, PFRTH,&
 ! - INPUT 1D .
 & PALBNS1 ,PCT, PC1, PC2,&
 & PFCHSP, PFCLL, PFCLN, PFCS, PFEVI, PFEVL, PFEVN,&
 & PFEVV , PFGEL, PFGELS, PFLWSP, PFONTE, PFTR,&
 & PLSM, PRHONS1, PRUISL, PRUISP, PRUISS, PSNS1, PVEG,&
 ! - OUTPUT 1D .
 & PTDTS, PTDTP, PTDWS, PTDWSI, PTDWP, PTDWPI, PTDWL, PTDSNS,&
 & PTDALBNS, PTDRHONS )  
!****
!     ------------------------------------------------------------------

!     ACTION DES PROCESSUS PHYSIQUES SUR LES CHAMPS AU SOL
!     INTERFACE AVEC LES PARAMETRISATIONS PHYSIQUES  (IALPP)
!     ------------------------------------------------------------------

!     BUT
!     ---
!      CALCUL DES TENDANCES PHYSIQUES
!      SUR - LA TEMPERATURE DU SOL
!          - LA TEMPERATURE PROFONDE
!          - LE RESERVOIR SUPERFICIEL
!          - LE RESERVOIR SUPERFICIEL DE GLACE ( DANS LE CAS LSOLV )
!          - LE RESERVOIR PROFOND
!          - LE RESERVOIR PROFOND DE GLACE ( DANS LE CAS LSOLV )
!          - LE RESERVOIR D'INTERCEPTION ( DANS LE CAS LSOLV )
!          - LE RESERVOIR DE NEIGE
!          - L'ALBEDO DE LA NEIGE
!          - LA DENSITE DE LA NEIGE

!     ARGUMENTS D ENTREE
!     ------------------
!       KPROMA : DIMENSION HORIZONTALE
!       KSTART : BORNE INITIALE HORIZONTALE DES CALCULS
!       KPROF : BORNE FINALE HORIZONTALE DES CALCULS
!       KFLEV : DIMENSION ET BORNE VERTICALE
!       KCSS  : NBRE DE COUCHES DANS LE SOL
!       PDT   : PAS DE TEMPS EFFECTIF

! --- INPUT 2D
!     --------
!       PFPLCL, PFPLSL, PFPLCN, PFPLSN (KPROMA,0:KFLEV): FLUX DE PRECIPITATIONS
!       PFRSO, PFRTH (IDEM): FLUX DE RAYONNEMENT

! --- INPUT 1D
!     --------
!       PALBNS1(KPROMA): ALBEDO DE LA NEIGE
!       PC1: COEFF. HYDRIQUE REPRESENTANT L'INTENSITE AVEC LAQUELLE
!               LES FLUX DE SURFACE PARTICIPENT A L'EVOLUTION DE WS (LSOLV).
!       PC2   : COEFF. HYDRIQUE TRADUISANT LA RAPIDITE DES TRANSFERTS D'EAU
!               ENTRE LES DEUX RESERVOIRS (LSOLV).
!       PCT   : COEFFICIENT THERMIQUE DU MILIEU SOL-VEGETATION.
!       PFCHSP (IDEM): FLUX DE CHALEUR DANS LE SOL
!       PFCLL, PFCLN (IDEM): FLUX DE CHALEUR LATENTE
!       PFCS  : FLUX DE CHALEUR SENSIBLE
!                     (DANS L HYPOTHSE OU PS NE VARIE PAS)
!       PFEVI,PFEVL,PFEVN : EVAPORATION DES RESERVOIRS DE GLACE, EAU ET
!                           NEIGE (Y COMPRIS PFEVI).
!       PFEVV  : FLUX D'EVAPOTRANSPIRATION (LSOLV).
!       PFGEL  : FLUX DE GEL DE L EAU DU SOL (LSOLV et LFGEL).
!       PFGELS : FLUX DE GEL DE L EAU DE SURFACE (LSOLV et LFGELS).
!       PFLWSP (IDEM): FLUX D EAU DANS LE SOL
!       PFONTE (KPROMA): FLUX DE FONTE DE NEIGE
!       PFTR   : FLUX DE TRANSPIRATION (LSOLV).
!       PLSM (IDEM): INDICATEUR TERRE(1.)/MER(0.)
!       PRHONS1 (IDEM) : DENSITE DE LA NEIGE
!       PRUISL (IDEM):RUISSELLEMENT DU RESERVOIR D EAU SUPERFICIEL (LSOLV).
!       PRUISS, PRUISP (IDEM) : RUISSELLEMENT DES RESERVOIRS D EAU.
!       PSNS1  : RESERVOIR DE NEIGE.
!       PVEG   : PROPORTION DE SOL COUVERT PAR LA VEGETATION.

!     ARGUMENTS IMPLICITES
!     --------------------
!       CONSTANTES UNIVERSELLES =  COMMON /YOMCST/ : RDAY,RLMLT
!       PROPRIETES DU SOL       =  COMMON /YOMPHY1/: RTINER
!       LOGIQUES DE LA PHYSIQUE =  COMMON /YOMPHY/ : LSOLV,LNEIGE,LFGEL,
!                                                    LFGELS

!     SORTIES
!     -------
!          PTDTS(KPROMA) : TENDANCE PHYSIQUE SUR LA TEMPERATURE DE SURFACE
!          PTDTP(IDEM,KCSS) :    "     "   SUR LA TEMPERATURE PROFONDE
!          PTDWS(IDEM) :    "     "   SUR LE RESERVOIR D'EAU SUPERFICIEL
!          PTDWP(IDEM) :    "     "   SUR LE RESERVOIR D'EAU PROFOND
!          PTDWPI(IDEM):    "     "   SUR LE RESERVOIR D'EAU PROFOND GELE
!          PTDWSI(IDEM):    "     "   SUR LE RESERVOIR D'EAU GELEE DE SURFACE
!          PTDWL(IDEM) :    "     "   SUR LE RESERVOIR D'EAU D'INTERCEPTION
!                                         SI LSOLV
!          PTDSNS(IDEM):    "     "   SUR LE RESERVOIR DE NEIGE (LNEIGE)
!          PTDALBNS(IDEM):  "     "   SUR L'ALBEDO DE LA NEIGE
!          PTDRHONS(IDEM):  "     "   SUR LA DENSITE DE LA NEIGE

!     AUTEUR:
!     ------- ERIC BAZILE  92/10 INSPIRE PAR J.NOILHAN ET A.JOLY
!             MODIFIE 94/10 PAR M. DEQUE (MODELE 4 TEMPERATURES SOL)

!     MODIFICATIONS:
!     --------------
!          95-01 Deux var. pronostiques supplementaires :
!                albedo et densite de la neige - H. Douville.
!          95-09 modif de l'interception foliaire - M. Deque
!          95-12 modif de l'evolution albedo/densite neige - M. Deque
!          97-02 soil inertia: PCT used also in .NOT.LSOLV case. - J.M. Piriou.
!          97-12 Gel de l'eau du sol. - E. Bazile
!          98-01 Gel de l'eau de surface: LFGELS. - E. Bazile.
!              R. El Khatib : 01-08-07 Pruning options
!          02-09 Schema de neige LVGSN. - E. Bazile.
!        M.Hamrud      01-Oct-2003 CY28 Cleaning
!     ------------------------------------------------------------------

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

USE YOMCST   , ONLY : RDAY     ,RLMLT
USE YOMPHY   , ONLY : LNEIGE   ,LSNV     ,LSOLV    ,LFGEL    ,LVGSN
USE YOMPHY1  , ONLY : SODELX   ,ALBMIN   ,RHOMAX   ,RHOMIN   ,&
 & RTINER   ,TOEXP    ,TOLIN    ,WNEW  
USE YOMPHY0  , ONLY : USUPRC

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

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KFLEV 
INTEGER(KIND=JPIM),INTENT(IN)    :: KCSS 
INTEGER(KIND=JPIM),INTENT(IN)    :: KSTART 
INTEGER(KIND=JPIM),INTENT(IN)    :: KPROF 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDT 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLCL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLSL(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLCN(KPROMA,0:KFLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLSN(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)    :: PALBNS1(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCT(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PC1(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PC2(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCHSP(KPROMA,KCSS) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCLL(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCLN(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFEVI(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFEVL(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFEVN(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFEVV(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFGEL(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFGELS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFLWSP(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFONTE(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFTR(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PLSM(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRHONS1(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRUISL(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRUISP(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PRUISS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSNS1(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PVEG(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDTS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDTP(KPROMA,KCSS) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDWS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDWSI(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDWP(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDWPI(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDWL(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDSNS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDALBNS(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTDRHONS(KPROMA) 

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

INTEGER(KIND=JPIM) :: JCSS, JROF

REAL(KIND=JPRB) :: ZBFLO, ZCI, ZEPSN, ZFGEL, ZITS, ZPRECN, ZTO3, ZVEG
REAL(KIND=JPRB) :: ZHOOK_HANDLE

!     ------------------------------------------------------------------
IF (LHOOK) CALL DR_HOOK('CPTENDS',0,ZHOOK_HANDLE)
!     ------------------------------------------------------------------

!     ------------------------------------------------------------------
!     1.- CALCUL DES TENDANCES PHYSIQUES

ZEPSN=1.E-3_JPRB
IF (LSOLV) THEN

!        CAS LSOLV ROUTINE ACDROV ACTIVE

!     ... DE LA TEMPERATURE PROFONDE :
!     -------------------------------

  DO JCSS=1,KCSS-1
    DO JROF = KSTART, KPROF
      PTDTP(JROF,JCSS) = PLSM(JROF) * (SODELX(0)/SODELX(JCSS))&
       & *PCT(JROF)*(PFCHSP(JROF,JCSS)-PFCHSP(JROF,JCSS+1))  
    ENDDO
  ENDDO
  DO JROF = KSTART, KPROF
    PTDTP(JROF,KCSS) = PLSM(JROF) * (SODELX(0)/SODELX(KCSS))&
     & *PCT(JROF)*PFCHSP(JROF,KCSS)  
    IF (LFGEL) THEN
      PTDTP(JROF,1) = PTDTP(JROF,1) + PLSM(JROF) *&
       & PCT(JROF)*RLMLT*PFGEL(JROF)  
    ENDIF
  ENDDO
  DO JROF = KSTART, KPROF

    ZITS = PLSM(JROF)/RDAY

!     ... DE LA TEMPERATURE DE SURFACE :
!     ---------------------------------
    IF (LFGEL) THEN
      ZFGEL=PFGELS(JROF)
    ELSE
      ZFGEL=PFGEL (JROF)
    ENDIF
    PTDTS(JROF) = PLSM(JROF) * PCT(JROF) * ( PFRSO(JROF,KFLEV) +&
     & PFRTH(JROF,KFLEV) + PFCS(JROF) + PFCLL(JROF) + PFCLN(JROF) -&
     & PFCHSP(JROF,1) - RLMLT * ( PFONTE(JROF)-ZFGEL ) )  

!     ... DU RESERVOIR D'INTERCEPTION:
!     --------------------------------

    ZVEG=PVEG(JROF)/(1.0_JPRB+USUPRC*PFPLCL(JROF,KFLEV))
    PTDWL(JROF) = PLSM(JROF) * (&
     & ZVEG * (PFPLSL(JROF,KFLEV)+PFPLCL(JROF,KFLEV)) +&
     & PFEVV(JROF) - PFTR(JROF) - PRUISL(JROF) )  

!     ... DU RESERVOIR SUPERFICIEL LIQUIDE ET GLACE :
!     -----------------------------------------------

    ZBFLO=(1.0_JPRB-ZVEG)*(PFPLSL(JROF,KFLEV)+PFPLCL(JROF,KFLEV))&
     & +PRUISL(JROF)+PFONTE(JROF)+PFEVL(JROF)-PFEVV(JROF)  
    ZCI=PC2(JROF)*PDT*ZITS
    PTDWS(JROF) = PLSM(JROF) * (&
     & (PC1(JROF)*ZBFLO-PFLWSP(JROF))/(1.0_JPRB+ZCI) - PRUISS(JROF)&
     & - PFGELS(JROF) )  

    IF (LFGEL) THEN
      PTDWSI(JROF) = PLSM(JROF) * (PFGELS(JROF)+PFEVI(JROF))
    ENDIF

!     ... DU RESERVOIR PROFOND LIQUIDE ET GLACE:
!     -----------------------------------------

    PTDWP(JROF) = PLSM(JROF) *&
     & ( ZBFLO+PFTR(JROF)-PRUISP(JROF)-PFGEL(JROF)-PFGELS(JROF))  

    IF (LFGEL) THEN
      PTDWPI(JROF) = PLSM(JROF) * (PFGEL(JROF)+PFGELS(JROF)+PFEVI(JROF))
    ENDIF

  ENDDO
ELSE

!        ROUTINE ACDRO ACTIVE

  DO JCSS=2,KCSS
    DO JROF = KSTART, KPROF
      PTDTP(JROF,JCSS) = 0
    ENDDO
  ENDDO

  DO JROF = KSTART, KPROF

!     ... DE LA TEMPERATURE DE SURFACE :
!     ---------------------------------

    PTDTS(JROF) = PLSM(JROF) * PCT(JROF) * ( PFRSO(JROF,KFLEV) +&
     & PFRTH(JROF,KFLEV) + PFCS(JROF) + PFCLL(JROF) + PFCLN(JROF) -&
     & PFCHSP(JROF,1) - RLMLT * PFONTE(JROF) )  

!     ... DE LA TEMPERATURE PROFONDE :
!     -------------------------------

    PTDTP(JROF,1) = PLSM(JROF) * (PCT(JROF)/RTINER) *PFCHSP(JROF,1)

!     ... DU RESERVOIR SUPERFICIEL :
!     -----------------------------

    PTDWS(JROF) = PLSM(JROF) * (&
     & PFPLSL(JROF,KFLEV) + PFPLCL(JROF,KFLEV) + PFONTE(JROF) -&
     & PRUISS(JROF) + PFEVL(JROF) - PFLWSP(JROF) )  

!     ... DU RESERVOIR PROFOND :
!     -------------------------

    PTDWP(JROF) = PLSM(JROF) * ( PFLWSP(JROF) - PRUISP(JROF) )

  ENDDO

ENDIF

!     ... ET DES VARIABLES NEIGE EVENTUELLES:
!     --------------------------------------

IF ( LNEIGE ) THEN
  DO JROF = KSTART, KPROF
    PTDSNS(JROF) = PLSM(JROF) * ( PFPLCN(JROF,KFLEV) +&
     & PFPLSN(JROF,KFLEV) - PFONTE(JROF)+PFEVN(JROF)-PFEVI(JROF))  
    IF (LSNV.OR.LVGSN) THEN
      ZPRECN=PLSM(JROF)*(PFPLCN(JROF,KFLEV)+PFPLSN(JROF,KFLEV))
      IF (PFONTE(JROF) > 0.0_JPRB) THEN
        PTDALBNS(JROF) = -TOEXP*(PALBNS1(JROF)-ALBMIN)+ZPRECN/WNEW
      ELSE
        PTDALBNS(JROF) = -TOLIN+ZPRECN/WNEW
      ENDIF
      ZTO3 = MIN(0.5_JPRB/PDT,ZPRECN/MAX(PSNS1(JROF),ZEPSN))
      PTDRHONS(JROF)= -TOEXP*(PRHONS1(JROF)-RHOMAX)&
       & -ZTO3*(PRHONS1(JROF)-RHOMIN)  
    ENDIF
  ENDDO
ENDIF

!     ------------------------------------------------------------------
!     REMARQUE IMPORTANTE
!     -------------------
!      RESTE A TRAITER LA QUESTION DES CONDITIONS AUX LIMITES INFERIEURES
!      DE L ADVECTION VERTICALE
!      CE CALCUL DEPEND DES VARIABLES PHYSIQUES AU SOL
!     ------------------------------------------------------------------

!     ------------------------------------------------------------------
IF (LHOOK) CALL DR_HOOK('CPTENDS',1,ZHOOK_HANDLE)
END SUBROUTINE CPTENDS
