6 SUBROUTINE surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, &
65 USE yomhook
,ONLY : lhook, dr_hook
66 USE parkind1
,ONLY : jprb
73 REAL,
DIMENSION(:),
INTENT(IN) :: pri
74 REAL,
DIMENSION(:),
INTENT(IN) :: pzref
76 REAL,
DIMENSION(:),
INTENT(IN) :: puref
80 REAL,
DIMENSION(:),
INTENT(IN) :: pz0eff
82 REAL,
DIMENSION(:),
INTENT(IN) :: pz0h
84 REAL,
DIMENSION(:),
INTENT(OUT) :: pcd
85 REAL,
DIMENSION(:),
INTENT(OUT) :: pcdn
90 REAL :: zz0eff, zz0h, zmu, &
91 zcmstar, zpm, zcm, zfm
93 REAL(KIND=JPRB) :: zhook_handle
97 cmstar(x) = 6.8741 + 2.6933*x - 0.3601*x*x + 0.0154*x*x*x
98 pm(x) = 0.5233 - 0.0815*x + 0.0135*x*x - 0.0010*x*x*x
107 IF (lhook) CALL dr_hook(
'SURFACE_CD',0,zhook_handle)
109 zz0eff = min(pz0eff(jj),puref(jj)*0.5)
110 zz0h = min(zz0eff,pz0h(jj))
112 zmu = log( min(zz0eff/zz0h,200.) )
114 pcdn(jj) = (xkarman/log(puref(jj)/zz0eff))**2
116 zcmstar = cmstar(zmu)
119 zcm = 10.*zcmstar*pcdn(jj)*( puref(jj)/zz0eff )**zpm
121 IF ( pri(jj) > 0.0 )
THEN
122 zfm = 1. + 10.*pri(jj) / sqrt( 1.+5.*pri(jj) )
125 zfm = 1. - 10.*pri(jj) / ( 1.+zcm*sqrt(-pri(jj)) )
128 pcd(jj) = pcdn(jj)*zfm
131 IF (lhook) CALL dr_hook(
'SURFACE_CD',1,zhook_handle)
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)