!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
*** S/P SLTOP_UV
*
#include "phy_macros_f.h"

      subroutine sltop_uv(nss,dudz,dvdz,angtop,angmax,,3
     1  utop,vtop,ztop,z0,ilmo,h,lat,n)
*
      IMPLICIT NONE
      REAL NSS(N),DUDZ(N),DVDZ(N),ANGTOP(N),
     1     UTOP(N),VTOP(N),ZTOP(N),Z0(N),ILMO(N),H(N),LAT(N)
*
*Author
*          Yves Delage  (Oct 2003)
*
*Revision
*
*Object
*     Calculates the surface stress and the slopes of the wind
*      component profiles at the top of the surface layer (SL)
*
*Arguments
*
*          - Output -
* NSS     normalised surface stress
* DUDZ    slope of the U component of wind profile at top of SL
* DVDZ    slope of the V component of wind profile at top of SL
* ANGTOP  wind direction at top of SL
* ANGMAX  maximum wind direction change between surface and H
*
*          - Input -
* UTOP    U component of wind at the top of surface layer
* VTOP    V component of wind at the top of surface layer
* ZTOP    height of the top of the surface layer
* Z0      roughness length for wind
* ILMO    inverse of MONIN-OBUKHOV lenth
* H       height of boundary layer (for stable case only)
* LAT     latitude in radians
* N       number of horizontal points to process
*
      INTEGER N,J
*
*****************************************************************
*     AUTOMATIC ARRAYS
      AUTOMATIC ( FM , REAL , (N) )
*****************************************************************
      REAL AS,ASX,CI,BS,BETA,FACTN,HMIN,ANGMAX,SPEED,ZI,RAC3
*
#include "surfcon_ini.cdk"
*
      call slfun_uv(fm,ztop,z0,ilmo,h,n)
      DO J=1,N
        speed=sqrt(utop(j)**2+vtop(j)**2)
        angtop(j)=atan2(vtop(j),sign(abs(utop(j))+1.e-05,utop(j)))
        zi=1./(ztop(j)+z0(j))
        nss(j)=speed/fm(j)
        dudz(j)=nss(j)*phim(ztop(j),ilmo(j),h(j))*cos(angtop(j))*zi
     1          + speed*sin(angtop(j))*angmax*sin(lat(j))/h(j)
        dvdz(j)=nss(j)*phim(ztop(j),ilmo(j),h(j))*sin(angtop(j))*zi
     1          - speed*cos(angtop(j))*angmax*sin(lat(j))/h(j)
      END DO
*
      return
      CONTAINS
#include "deriv_stabfunc.cdk"
      end