SURFEX v7.3
General documentation of Surfex
|
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