SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/cls_wind.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE CLS_WIND( PZONA, PMERA, PHW,                 &
00003                               PCD, PCDN, PRI, PHV,               &
00004                               PZON10M, PMER10M                   )  
00005 !     ###############################################################
00006 !
00007 !!****  *PARAMCLS*  
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !
00012 !         
00013 !     
00014 !!**  METHOD
00015 !!    ------
00016 !
00017 !!    EXTERNAL
00018 !!    --------
00019 !!
00020 !!    none
00021 !!
00022 !!    IMPLICIT ARGUMENTS
00023 !!    ------------------ 
00024 !!
00025 !!    USE MODD_CST
00026 !!    USE MODD_GROUND_PAR
00027 !!
00028 !!      
00029 !!    REFERENCE
00030 !!    ---------
00031 !!
00032 !!      
00033 !!    AUTHOR
00034 !!    ------
00035 !!
00036 !!
00037 !!    MODIFICATIONS
00038 !!    -------------
00039 !!
00040 !!      Original    26/10/98
00041 !!      S. Riette   06/2009  height of diagnostic becomes an argument
00042 !!      S. Riette   01/2010 XUNDEF is sent where forcing level is below heigt of
00043 !!                          diagnostic (no extrapolation, only interpolation)
00044 !-------------------------------------------------------------------------------
00045 !
00046 !*       0.     DECLARATIONS
00047 !               ------------
00048 !
00049 USE MODD_CSTS,     ONLY : XKARMAN
00050 USE MODD_SURF_PAR, ONLY : XUNDEF
00051 !
00052 !
00053 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00054 USE PARKIND1  ,ONLY : JPRB
00055 !
00056 IMPLICIT NONE
00057 !
00058 !*      0.1    declarations of arguments
00059 !
00060 !
00061 !
00062 REAL, DIMENSION(:), INTENT(IN)       :: PZONA  ! zonal wind component
00063 REAL, DIMENSION(:), INTENT(IN)       :: PMERA  ! meridian wind component
00064 REAL, DIMENSION(:), INTENT(IN)       :: PHW    ! atmospheric level height (wind)
00065 REAL, DIMENSION(:), INTENT(IN)       :: PCD    ! drag coefficient for momentum
00066 REAL, DIMENSION(:), INTENT(IN)       :: PCDN   ! neutral drag coefficient
00067 REAL, DIMENSION(:), INTENT(IN)       :: PRI    ! Richardson number
00068 REAL, DIMENSION(:), INTENT(IN)       :: PHV    ! height of diagnostic (m)
00069 !
00070 REAL, DIMENSION(:), INTENT(OUT)      :: PZON10M! zonal wind at 10 meters
00071 REAL, DIMENSION(:), INTENT(OUT)      :: PMER10M! meridian wind at 10 meters
00072 !
00073 !*      0.2    declarations of local variables
00074 !
00075 REAL, DIMENSION(SIZE(PHW)) :: ZBN,ZBD,ZRU
00076 REAL, DIMENSION(SIZE(PHW)) :: ZLOGU,ZCORU,ZIV
00077 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00078 !
00079 !-------------------------------------------------------------------------------
00080 !
00081 IF (LHOOK) CALL DR_HOOK('CLS_WIND',0,ZHOOK_HANDLE)
00082 PZON10M(:) = XUNDEF
00083 PMER10M(:) = XUNDEF
00084 !
00085 ZBN    (:) = 0.
00086 ZBD    (:) = 0.
00087 ZRU    (:) = 0.
00088 ZLOGU  (:) = 0.
00089 ZCORU  (:) = 0.
00090 ZIV    (:) = 0.
00091 !
00092 !*      1.     preparatory calculations
00093 !              ------------------------
00094 !
00095 ZBN(:)=XKARMAN/SQRT(PCDN(:))
00096 !
00097 ZBD(:)=XKARMAN/SQRT(PCD(:))
00098 !
00099 ZRU(:)=MIN(PHV(:)/PHW(:),1.)
00100 !
00101 ZLOGU(:)=LOG(1.+ZRU(:)*(EXP(ZBN(:)) -1.))
00102 !
00103 !*      2.     Stability effects
00104 !              -----------------
00105 !
00106 WHERE (PRI(:)>=0.)
00107   ZCORU(:)=ZRU(:)*(ZBN (:)-ZBD(:))
00108 END WHERE
00109 !
00110 WHERE (PRI(:)< 0.)
00111   ZCORU(:)=LOG(1.+ZRU(:)*(EXP(MAX(0.,ZBN (:)-ZBD(:)))-1.))
00112 END WHERE
00113 !
00114 !*      3.     Interpolation of dynamical variables
00115 !              ------------------------------------
00116 !
00117 !
00118 ZIV(:)=MAX(0.,MIN(1.,(ZLOGU(:)-ZCORU(:))/ZBD(:)))
00119 WHERE(PHV(:)<=PHW(:))
00120   PZON10M(:)=PZONA(:)*ZIV(:)
00121   PMER10M(:)=PMERA(:)*ZIV(:)
00122 END WHERE
00123 IF (LHOOK) CALL DR_HOOK('CLS_WIND',1,ZHOOK_HANDLE)
00124 !
00125 !-------------------------------------------------------------------------------
00126 !
00127 END SUBROUTINE CLS_WIND