!OPTIONS XOPT(NOEVAL)
SUBROUTINE ACHMTLS ( KIDIA,KFDIA,KLON,KLEV,&
 !-----------------------------------------------------------------------
 ! - INPUT  2D .
 & PAPHI,PAPHIF,PAPRS,PAPRSF,PR,PT,&
 ! - INPUT  1D .
 & PTS,PQS,PDPHIT,&
 ! - INPUT  LOGIQUE .
 & LDCLS,&
 ! - OUTPUT 2D .
 & PNBVNO,&
 ! - OUTPUT 1D .
 & PCPS,PGWDCS,PLHS,PZPCLS,&
 ! - LOCK ARGUMENTS .
 & CDLOCK)  

!**** *ACHMTLS   * - DETERMINATION DES CARACTERISTIQUES DE SURFACE.

!     Sujet.
!     ------

!     - ROUTINE DE CALCUL ACTIF .
!       DETERMINATION DES COEFFICIENTS D'ECHANGE EN
!       SURFACE PLUS LEUR AMPLIFICATION SI "ANTI-FIBRILLATION" ACTIVEE .
!     - SI L'OPTION 'CLS' EST SELECTIONNEE :
!          DETERMINATION DE PARAMETRES SUPPLEMENTAIRES NECESSAIRES POUR
!          LES CALCULS DE DIFFUSION VERTICALE ET DE TRAINEE DES ONDES DE
!          GRAVITE OROGRAPHIQUES .
!     - SI L'OPTION 'HMT' EST SELECTIONNEE :
!          INTERPOLATION DES TEMPERATURES, HUMIDITES (SPECIFIQUES ET
!          RELATIVES) ET VENTS AUX HAUTEURS "METEO" .

!     - COMPUTATION OF SURFACE EXCHANGE COEFFICIENTS PLUS THEIR AMPLIFICATION
!       FACTOR IF "ANTI-FIBRILLATION" IS ACTIVATED .
!     - IF THE SWITCH 'CLS' IS ON :
!          COMPUTATION OF ADDITIONNAL PARAMETERS NECESSARY FOR THE
!          VERTICAL DIFFUSION AND GRAVITY WAVE DRAG PARAMETERIZATIONS .
!     - IF THE SWITCH 'HMT' IS ON :
!          TEMPERATURE, MOISTURE (SPECIFIC AND RELATIVE) AND WIND
!          INTERPOLATION AT STANDARD "METEOROLOGICAL" LEVELS .

!**   Interface.
!     ----------
!        *CALL* *ACHMTLS*

!-----------------------------------------------------------------------
! 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.
! KLEV       : DIMENSION VERTICALE DES TABLEAUX "FULL LEVEL".

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

! - 2D (0:KLEV) .

! PAPHI      : GEOPOTENTIEL AUX DEMI-NIVEAUX.
! PAPRS      : PRESSION AUX DEMI-NIVEAUX.

! - 2D (1:KLEV) .

! PAPHIF     : GEOPOTENTIEL AUX NIVEAUX DES COUCHES.
! PAPRSF     : PRESSION AUX NIVEAUX DES COUCHES.
! PR         : CONSTANTE DES GAZ POUR L'AIR.
! PT         : TEMPERATURE.

! - 1D  .

! PTS        : TEMPERATURE DE SURFACE.
! PQS        : HUMIDITE SPECIFIQUE DE SURFACE.
! PDPHIT     : HAUTEUR D INTERPOLATION POUR T ET Q (EN GEOPOTENTIEL).
! PZPCLS     : SORTIE DIAGNOSTIQUE DE PRESSION A HTQ METEO.

! - LOGIQUES .

! LDCLS      : DETERMINATION COMPLETE DES CARACTERISTIQUES DE SURFACE.

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

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

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

! - 2D (0:KLEV) .

! PNBVNO     : CARRE DE FR. BRUNT-VAISALA DIVISEE PAR G FOIS LA DENSITE.

! - 1D (DIAGNOSTIQUE) .

! PCPS       : CHALEUR MASSIQUE A PRESSION CONSTANTE DE L'AIR AU SOL.
! PGWDCS     : DENSITE EN SURFACE POUR LE DRAG OROGRAPHIQUE.
! PLHS       : CHALEUR LATENTE EN SURFACE.

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

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

! COMMON/YOMPHY /
! COMMON/YOMCST /
! COMMON/YOMPHY0/
! COMMON/YOMPHY1/
! COMMON/YOMPHY2/
! COMMON/FCTTRM /

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

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

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

!     Auteur.
!     -------
!        2006-08, L. Kraljevic, d'apres ACHMT

!     Modifications.
!     --------------
!        2007-05, F. Bouyssel : add PZPCLS + Cleaning

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

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

USE YOMCST   , ONLY :  RD       ,RV       ,&
 & RCPD     ,RCPV     ,RKAPPA   ,RETV     ,RCW      ,&
 & RCS      ,RLVTT    ,RLSTT    ,RTT      ,RALPW    ,&
 & RBETW    ,RGAMW    ,RALPS    ,RBETS    ,RGAMS    ,&
 & RALPD    ,RBETD    ,RGAMD     

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
REAL(KIND=JPRB)   ,INTENT(IN)    :: PAPHI (KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PAPHIF(KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PAPRS (KLON,0:KLEV)
REAL(KIND=JPRB)   ,INTENT(IN)    :: PAPRSF(KLON,KLEV)
REAL(KIND=JPRB)   ,INTENT(IN)    :: PR    (KLON,KLEV) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PT    (KLON,KLEV)
REAL(KIND=JPRB)   ,INTENT(IN)    :: PTS   (KLON)
REAL(KIND=JPRB)   ,INTENT(IN)    :: PQS   (KLON)
REAL(KIND=JPRB)   ,INTENT(IN)    :: PDPHIT(KLON)
LOGICAL           ,INTENT(IN)    :: LDCLS 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PNBVNO(KLON,0:KLEV) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCPS  (KLON)
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PGWDCS(KLON) 
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PLHS  (KLON)
REAL(KIND=JPRB)   ,INTENT(OUT)   :: PZPCLS(KLON)
CHARACTER(LEN=7)  ,INTENT(IN)    :: CDLOCK 

INTEGER(KIND=JPIM) :: JLON
REAL(KIND=JPRB) :: ZDPHI(KLON), ZRTI(KLON), ZSTABV(KLON), ZRS(KLON) 
REAL(KIND=JPRB) :: ZCPVMD, ZRVMD
REAL(KIND=JPRB) :: ZHOOK_HANDLE

#include "abor1.intfb.h"

#include "fcttrm.h"

!     CHECK RELIABILITY OF INPUT ARGUMENTS.

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

!     ------------------------------------------------------------------
!     I - CONSTANTES AUXILIAIRES.

!         AUXILIARY CONSTANTS.

ZCPVMD=RCPV-RCPD
ZRVMD=RV-RD

!*
!     ------------------------------------------------------------------
!     IV - CALCUL DE L EPAISSEUR DE LA CLS (EN GEOPOTENTIEL).

!          COMPUTATION OF THE THICKNESS OF THE SBL (IN GEOPOTENTIAL).

! - TEMPORAIRE(S) 1D .

! ZDPHI     : EPAISSEUR EN GEOPOTENTIEL DU NIVEAU DE SURFACE.
!            : GEOPOTENTIAL THICKNESS OF THE SURFACE LEVEL.

DO JLON=KIDIA,KFDIA
  ZDPHI(JLON)=PAPHIF(JLON,KLEV)-PAPHI(JLON,KLEV)
ENDDO

!*
!     ------------------------------------------------------------------
!     VI - CALCULS PROPREMENT DITS DES CARACTERISTIQUES DE SURFACE.

!          EFFECTIVE CALCULATIONS OF THE SURFACE CHARACTERISTICS.


DO JLON=KIDIA,KFDIA

  PZPCLS(JLON)=PAPRS(JLON,KLEV)+(PAPRSF(JLON,KLEV)-PAPRS(JLON,KLEV)) &
   & *PDPHIT(JLON)/ZDPHI(JLON)
  PLHS(JLON)=FOLH(PTS(JLON),0.0_JPRB)
  PCPS(JLON)=RCPD+ZCPVMD*PQS(JLON)
  ZRS(JLON)=RD+ZRVMD*PQS(JLON)

!     CALCUL DE STABILITE.
!     STABILITY COMPUTATION.

! - TEMPORAIRE(S) 1D .

! ZRTI      : INVERSE DE R*T.
!            : INVERSE OF R*T.
! ZSTA      : APPROXIMATION DE DELTA(PHI)*DELTA(LN(THETA)).
!            : APPROXIMATION OF DELTA(PHI)*DELTA(LN(THETA)).

  ZRTI(JLON)=2.0_JPRB/(PR(JLON,KLEV)*PT(JLON,KLEV)+RKAPPA*ZDPHI(JLON)&
   & +ZRS(JLON)*PTS(JLON))  
  ZSTABV(JLON)=ZDPHI(JLON)*(PR(JLON,KLEV)*PT(JLON,KLEV)+RKAPPA &
   & *ZDPHI(JLON)-ZRS(JLON)*PTS(JLON))*ZRTI(JLON)  
ENDDO
  
!     CALCUL ANTI-FIBRILLATION "GIRARD-DELAGE".
!     ANTI-FIBRILLATION "GIRARD-DELAGE" COMPUTATION.

IF (LDCLS) THEN
  DO JLON=KIDIA,KFDIA

!     CALCULS DE UN SUR G FOIS LA FREQUENCE DE BRUNT-VAISALA DIVISEE PAR
!     LA DENSITE LE TOUT AU CARRE DE MEME QUE LA DENSITE (POUR G.W.D.).
!     COMPUTATION OF ONE OVER G TIME THE BRUNT-VAISALA FREQUENCY DIVIDED
!     BY DENSITY THE WHOLE BEING SQUARED AS WELL AS DENSITY (FOR G.W.D.)

    PNBVNO(JLON,KLEV)=ZSTABV(JLON)/(PAPRS(JLON,KLEV)*ZRTI(JLON)*ZDPHI(JLON))**2
    PGWDCS(JLON)=PAPRS(JLON,KLEV)*ZRTI(JLON)
  ENDDO
ENDIF

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