*=*=*=*= vdif_k.html =*=*=*=*
SUBROUTINE vdif_k

SUBROUTINE vdif_k


      SUBROUTINE vdif_k(ngrid,nlay,
     s   ptimestep,pz0,pg,pzlev,pzlay,pu,pv,ph,pcdv,pkv,pkh)

      IMPLICIT NONE

#include "planete.h"

      INTEGER ngrid,nlay

      REAL ptimestep
      REAL pzlay(ngrid,nlay),pzlev(ngrid,nlay+1)
      REAL pz0
      REAL pu(ngrid,nlay),pv(ngrid,nlay),ph(ngrid,nlay)
      REAL pg,pcdv(ngrid)
      REAL pkv(ngrid,nlay+1),pkh(ngrid,nlay+1)

      INTEGER ig,il
      REAL zdu,zdv,zri,zdvodz2,zdz,z1,lmix

      REAL karman
      SAVE karman
      DATA lmixmin,emin_turb,karman/100.,1.e-4,.4/

      DO ig=1,ngrid
         pkv(ig,1)=0.
         pkh(ig,1)=0.
         pkv(ig,nlay+1)=0.
         pkh(ig,nlay+1)=0.
      ENDDO
      DO il=2,nlay
         DO ig=1,ngrid
            z1=pzlev(ig,il)+pz0
            lmix=karman*z1/(1.+karman*z1/lmixmin)
            zdu=pu(ig,il)-pu(ig,il-1)
            zdv=pv(ig,il)-pv(ig,il-1)
            zdz=pzlay(ig,il)-pzlay(ig,il-1)
            zdvodz2=(zdu*zdu+zdv*zdv)/(zdz*zdz)
            IF(zdvodz2.LT.1.e-5) THEN
                pkv(ig,il)=lmix*sqrt(emin_turb)
            ELSE
               zri=2.*pg*(ph(ig,il)-ph(ig,il-1))
     s         / (zdz* (ph(ig,il)+ph(ig,il-1)) *zdvodz2  )
               pkv(ig,il)=
     s         lmix*sqrt(MAX(lmix*lmix*zdvodz2*(1-zri/.4),emin_turb))
            ENDIF
            pkh(ig,il)=pkv(ig,il)
         ENDDO
      ENDDO

      RETURN
      END