!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
*** S/P LIN_KDIF_SIMP1_TL

      SUBROUTINE LIN_KDIF_SIMP1_TL(D, DSIZ, F, FSIZ, V, VSIZ, NI, NK) 1
#include "impnone.cdk"
*
      INTEGER DSIZ, FSIZ, VSIZ, NI, NK
      REAL D(DSIZ), F(FSIZ), V(VSIZ)
*
*Author
*     Stephane Laroche - Janvier 2001
*
*Revisions
* 001   S. Laroche          - TLM of LIN_KDIF_SIMP1 from Yves Delage linear physics
* 002   S. Laroche (May 02) - cleanup diagnostic fields
* 003   S. Laroche (Nov 02) - Implementation of robust near surface diagnostics
* 004   Y. Delage (Oct 03)  - Remove surfcon.cdk
*                      
*
*Object
*          To calculate the (unnormalized) diffusion coefficients KM and KT
*          and the (unnormalized) boundary conditions for the diffusion of
*          wind, temperature, and moisture
*          using simplified physical parameterizations.

*Arguments
*
*          - Input/Output -
* F        field of permanent physics variables
* V        volatile bus
* FSIZ     dimension of F
* VSIZ     dimension of V
*
*          - Input -
* NI       horizontal dimension
* NK       vertical dimension
*
*
*Notes
*    DRAG = false : only a background value of diffusion coefficients
*    DRAG = true  : boundary layer dependent on z0 and on latitude
*    CHAUF= true  : surface heat flux over oceans dependent also on z0t
*    EVAP = true  : evaporation over oceans dependent also on z0t 
*
**
      INTEGER K,I
      REAL lnz0,lnz0t,lnza,lnzu,lnzt,ruv,rtq,ctu
*
*
#include "indx_sfc.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
#include "options.cdk"
#include "consphy.cdk"
#include "dintern.cdk"
#include "fintern.cdk"
#include "zuzt.cdk"
*
      integer IK
*     fonction-formule pour l'adressage
      IK(i,k) = (K-1)*NI + I - 1
*
*     **************************** TLM ******************************
*
      IF (DRAG) THEN
*
*       CALCUL DES COEFFICIENTS DE DIFFUSION
*
        DO K=1,NK
          DO I=1,NI
            V(KM + IK(I,K)) = 0.0
            V(KT + IK(I,K)) = 0.0
           ENDDO
        ENDDO
*
        DO I=1,NI
*
          V(BM + I-1)  = 0.0
*
*         PROFILS LOGARITHMIQUES POUR NIVEAU DIAGNOSTIQUE
*
          lnza  = ALOG (V(ZA+I-1)+F(Z0+I-1))
          lnz0  = ALOG(F(Z0+I-1))
          lnz0t = ALOG(F(Z0T+I-1))
          lnzu  = ALOG (ZU + F(Z0+I-1))
          lnzt  = ALOG (ZT + F(Z0+I-1))

          ruv = (lnzu-lnz0)/(lnza-lnz0)
          rtq = ((lnzt-lnz0t)/(lnza-lnz0t))*(1.-NINT(F(MG+I-1)))  

          F(udiag + i-1) =  D(UMOINS+IK(I,NK)) * ruv
          F(vdiag + i-1) =  D(VMOINS+IK(I,NK)) * ruv
*
*
*         FLUX DE CHALEUR ET TEMPERATURE DIAGNOSTIQUE A Z=ZT
*         FLUX DE VAPEUR ET HUMIDITE DIAGNOSTIQUE A Z=ZT

          V(BT    + I-1) =  0.0
          V(ALFAT + I-1) =  0.0
          V(ALFAQ + I-1) =  0.0
*         
*
*         CHOIX ROBUSTE POUR T ET HU DIAGNOSTIQUE (= AU NIVEAU SUPERIEUR)
*
          F(tdiag + i-1) = D(TMOINS  +IK(I,NK))
          F(qdiag + i-1) = D(HUMOINS +IK(I,NK))
*
        ENDDO
*
      ENDIF
****************************************************************************
*
      RETURN
      END