!OPTIONS XOPT(NOEVAL)
SUBROUTINE ACDRO ( KIDIA,KFDIA,KLON,KTDIA,KLEV,&
 !-----------------------------------------------------------------------
 ! - INPUT  2D .
 & PFPLCL,PFPLCN,PFPLSL,PFPLSN,PFRSO,PFRTH,&
 ! - INPUT  1D .
 & PFCHSP,PFCLL,PFCLN,PFCS,PFEVL,PFEVN,PLSM,PSNS,&
 & PTS,PWP,PWS,PCT,&
 ! - OUTPUT 1D .
 & PFLWSP,PFONTE,PRUISP,PRUISS,&
 ! - LOCK ARGUMENTS .
 & CDLOCK)  

!**** *ACDRO  * - CALCUL DES FLUX D'EAU DANS LE SOL.

!     Sujet.
!     ------
!     - ROUTINE DE CALCUL ACTIF .
!       CALCUL DES FLUX D'EAU DANS LE SOL : FONTE DE LA NEIGE, TRANSFERT
!       VERS LE SOL PROFOND, RUISSELLEMENTS EN SURFACE ET EN
!       PROFONDEUR .
!     - COMPUTATION OF WATER FLUXES IN SOIL : SNOW MELTING, EXCHANGE
!       TOWARDS DEEP SOIL, SURFACE AND DEEP SOIL RUN-OFFS .

!**   Interface.
!     ----------
!        *CALL* *ACDRO*

!-----------------------------------------------------------------------
! WARNING: THE ENGLISH VERSION OF VARIABLES' NAMES IS TO BE READ IN THE
!          "APLPAR" CODE.
!-----------------------------------------------------------------------

! -   ARGUMENTS D'ENTREE.
!     -------------------

! - NOM DES PARAMETRES DE DIMENSIONNEMENT DE LA PHYSIQUE.

! KIDIA      : INDICE DE DEPART DES BOUCLES VECTORISEES SUR L'HORIZONT..
! KFDIA      : INDICE DE FIN DES BOUCLES VECTORISEES SUR L'HORIZONTALE.
! KLON       : DIMENSION HORIZONTALE DES TABLEAUX.
! KTDIA      : INDICE DE DEPART DES BOUCLES VERTICALES (1 EN GENERAL).
! KLEV       : DIMENSION VERTICALE DES TABLEAUX "FULL LEVEL".

! - NOM DES VARIABLES DE LA PHYSIQUE (PAR ORDRE ALPHABETIQUE DANS CHAQUE
!   CATEGORIE).

! - 2D (0:KLEV) .

! PFPLCL     : PRECIPITATIONS CONVECTIVES SOUS FORME LIQUIDE.
! PFPLCN     : PRECIPITATIONS CONVECTIVES SOUS FORME NEIGE.
! PFPLSL     : PRECIPITATIONS STRATIFORMES SOUS FORME LIQUIDE.
! PFPLSN     : PRECIPITATIONS STRATIFORMES SOUS FORME NEIGE.
! PFRSO      : FLUX DE RAYONNEMENT SOLAIRE.
! PFRTH      : FLUX DE RAYONNEMENT THERMIQUE.

! - 1D (PROGNOSTIQUE) .

! PSNS       : MASSE PAR UNITE DE SURFACE DE LA COUCHE NEIGEUSE.
! PTS        : TEMPERATURE DE SURFACE.
! PWP        : CONTENU EN EAU DU RESERVOIR EN PROFONDEUR.
! PWS        : CONTENU EN EAU DU RESERVOIR DE SURFACE.

! - 1D (GEOGRAPHIQUE) .

! PLSM       : INDICE TERRE/MER.

! - 1D (DIAGNOSTIQUE) .

! PCT        : COEFFICIENT THERMIQUE DU MILIEU SOL-VEGETATION.
! PFCHSP     : FLUX DE CHALEUR DE LA SURFACE VERS LE SOL PROFOND.
! PFCLL      : FLUX DE CHALEUR LATENTE SUR EAU LIQUIDE (OU SOL HUMIDE).
! PFCLN      : FLUX DE CHALEUR LATENTE SUR NEIGE (OU GLACE).
! PFCS       : FLUX DE CHALEUR SENSIBLE EN SURFACE.
! PFEVL      : FLUX DE VAPEUR D'EAU SUR EAU LIQUIDE (OU SOL HUMIDE).
! PFEVN      : FLUX DE VAPEUR D'EAU SUR NEIGE (OU GLACE).

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

! -   ARGUMENTS DE SORTIE.
!     --------------------

! - 1D (DIAGNOSTIQUE) .

! PFLWSP     : FLUX D'EAU LIQUIDE DE LA SURFACE VERS LE SOL PROFOND.
! PFONTE     : FLUX D'EAU CORRESPONDANT A LA FONTE DE NEIGE EN SURFACE.
! PRUISP     : FLUX DE RUISSELLEMENT EN PROFONDEUR.
! PRUISS     : FLUX DE RUISSELLEMENT EN SURFACE.

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

! -   ARGUMENTS IMPLICITES.
!     ---------------------

! COMMON/YOMPHY /
! COMMON/YOMCST /
! COMMON/YOMPHY1/
! COMMON/YOMPHY2/

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

!     Externes.
!     ---------

!     Methode.
!     --------

!     Auteur.
!     -------
!        89-12, J.F. Geleyn.

!     Modifications.
!     --------------
!        97-02, J.M. Piriou: soil inertia.
!        97-08, PZx variables > Zx, introduce CDLOCK - J.M. Piriou.
!        M.Hamrud      01-Oct-2003 CY28 Cleaning

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

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

USE YOMPHY   , ONLY : LNEIGE
USE YOMCST   , ONLY : RDAY     ,RLMLT    ,RTT
USE YOMPHY1  , ONLY : TMERGL   ,WPMX     ,WSMX
USE YOMPHY2  , ONLY : TSPHY

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)               :: KTDIA ! Argument NOT used
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLCL(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLCN(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLSL(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFPLSN(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFRSO(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFRTH(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCHSP(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCLL(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCLN(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFCS(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFEVL(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PFEVN(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PLSM(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSNS(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PTS(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PWP(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PWS(KLON) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCT(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFLWSP(KLON) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PFONTE(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PRUISP(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PRUISS(KLON) 
CHARACTER(LEN=7)  ,INTENT(IN)    :: CDLOCK 
REAL(KIND=JPRB) :: ZCSDT(KLON),ZITP(KLON),ZITS(KLON),ZWPMX(KLON),ZWSMX(KLON)

INTEGER(KIND=JPIM) :: JLON

REAL(KIND=JPRB) :: ZEPS1, ZFLDT, ZIDAY, ZITSP
REAL(KIND=JPRB) :: ZHOOK_HANDLE

#include "abor1.intfb.h"

!     CHECK RELIABILITY OF INPUT ARGUMENTS.

IF (LHOOK) CALL DR_HOOK('ACDRO',0,ZHOOK_HANDLE)
IF(CDLOCK /= 'ACDRO  ') CALL ABOR1('BAD NUMBER OF ARGUMENTS!')

!*
!     ------------------------------------------------------------------
!     I - CALCUL DES PARAMETRES DERIVES ET CONSTANTE DE SECURITE (POUR
!     CSDT).

!         COMPUTATION OF DERIVED PARAMETERS AND SECURITY CONSTANT (FOR
!     CSDT).

ZITSP=1.0_JPRB/TSPHY
ZIDAY=1.0_JPRB/RDAY

ZEPS1=1.E-08_JPRB

!*
!     ------------------------------------------------------------------
!     II - MISE A DES VALEURS CONSTANTES DES VALEURS DERIVEES DE
!     L'INERTIE THERMIQUE ET DES TEMPS CARACTERISTIQUES (DIURNE PAR
!     DEFINITION POUR LA COUCHE SUPERFICIELLE) DU SOL AINSI QUE DES
!     CONTENUS EN EAU MAXIMA DONT LE RAPPORT FIXE CELUI DES TEMPS
!     CARACTERISTIQUES (PHYSIQUE DU SOL HYPER-SIMPLIFIEE).

!          SETTING TO CONSTANT VALUES THE SOIL THERMAL INERTIA AND
!     CHARACTERISTIC TIME CONSTANTS (DIURNAL BY DEFINITION FOR THE
!     SURFACE LAYER) AS WELL AS THE MAXIMUM WATER CONTENTS WHOSE RATIO
!     IMPOSES THE OTHER RATIO OF THE CHARACTERISTIC TIME CONSTANTS
!     (HYPER-SIMPLIFIED SOIL PHYSICS).

! - TEMPORAIRE(S) 1D .

! ZCSDT     : PRODUIT DU PAS DE TEMPS PAR LA CONSTANTE DU SOL.
!            : PRODUCT OF TIME-STEP BY THE SOIL INERTIAL CONSTANT.
! ZWSMX     : CONTENU MAXIMAL EN EAU DU RESERVOIR SUPERFICIEL.
!            : MAXIMUM CONTENT OF THE SURFACE RESERVOIR.
! ZWPMX     : CONTENU MAXIMAL EN EAU DU RESERVOIR PROFOND.
!            : MAXIMUM CONTENT OF THE DEEP RESERVOIR.
! ZITS      : INVERSE DU TEMPS CARACTERISTIQUE EN SURFACE.
!            : INVERSE OF THE CHARACTERISTIC SURFACE TIME CONSTANT.
! ZITP      : INVERSE DU TEMPS CARACTERISTIQUE EN PROFONDEUR.
!            : INVERSE OF THE CHARACTERISTIC DEEP TIME CONSTANT.

DO JLON=KIDIA,KFDIA
  ZCSDT(JLON)=PLSM(JLON)*TSPHY*PCT(JLON)
  ZWSMX(JLON)=WSMX
  ZWPMX(JLON)=WPMX
  ZITS(JLON)=PLSM(JLON)*ZIDAY
  ZITP(JLON)=ZITS(JLON)*ZWSMX(JLON)/ZWPMX(JLON)
ENDDO

!*
!     ------------------------------------------------------------------
!     III - CALCULS PROPREMENTS DITS.

!           EFFECTIVE COMPUTATIONS.

DO JLON=KIDIA,KFDIA

!     CALCULS DE FONTE EN CAS D'OPTION NEIGE.
!     MELTING CALCULATIONS IN CASE OF ACTIVATED SNOW OPTION.

  IF (LNEIGE) THEN
    PFONTE(JLON)=PLSM(JLON)*MAX(0.0_JPRB,MIN(PSNS(JLON)*ZITSP &
     & +(PFPLSN(JLON,KLEV)+PFPLCN(JLON,KLEV)&
     & +PFEVN(JLON)),MAX(0.0_JPRB,(PTS(JLON)+ZCSDT(JLON)&
     & *(PFRSO(JLON,KLEV)+PFRTH(JLON,KLEV)+PFCS(JLON)&
     & +PFCLL(JLON)+PFCLN(JLON)-PFCHSP(JLON))-(PLSM(JLON)&
     & *RTT+(1.0_JPRB-PLSM(JLON))*TMERGL))&
     & /(MAX(ZEPS1,ZCSDT(JLON))*RLMLT))))  
  ELSE
    PFONTE(JLON)=0.0_JPRB
  ENDIF

!     CALCULS DE TRANSFERT VERTICAL ET RUISSELLEMENTS.
!     COMPUTATIONS OF VERTICAL TRANSFER AND OF RUN-OFFS.

  PFLWSP(JLON)=ZITS(JLON)*PWS(JLON)-ZITP(JLON)*PWP(JLON)
  ZFLDT=TSPHY*(PFPLSL(JLON,KLEV)+PFPLCL(JLON,KLEV)+PFEVL(JLON)&
   & +PFONTE(JLON)-PFLWSP(JLON))  
  PRUISS(JLON)=ZITSP*PLSM(JLON)*(ZFLDT-MIN(ZWSMX(JLON)&
   & -PWS(JLON),MAX(-PWS(JLON),ZFLDT)))  
  ZFLDT=TSPHY*PFLWSP(JLON)
  PRUISP(JLON)=ZITSP*PLSM(JLON)*(ZFLDT-MIN(ZWPMX(JLON)&
   & -PWP(JLON),MAX(-PWP(JLON),ZFLDT)))  
ENDDO

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