6 SUBROUTINE sso_z0_friction_n (USS, PSEA,PUREF,PRHOA,PU,PV,PPEW_A_COEF,PPEW_B_COEF,PSFU,PSFV)
55 TYPE(
sso_t),
INTENT(INOUT) :: USS
57 REAL,
DIMENSION(:),
INTENT(IN) :: PSEA
58 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF
59 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
60 REAL,
DIMENSION(:),
INTENT(IN) :: PU
61 REAL,
DIMENSION(:),
INTENT(IN) :: PV
62 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_A_COEF
63 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_B_COEF
64 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSFU
65 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSFV
69 REAL,
DIMENSION(SIZE(PU)) :: ZWIND
70 REAL,
DIMENSION(SIZE(PU)) :: ZWORK
71 REAL,
DIMENSION(SIZE(PU)) :: ZDIR
72 REAL,
DIMENSION(SIZE(PU)) :: ZALFA
73 REAL,
DIMENSION(SIZE(PU)) :: ZCOS2, ZSIN2
74 REAL,
DIMENSION(SIZE(PU)) :: ZZ0EFF
75 REAL,
DIMENSION(SIZE(PU)) :: ZCD
76 REAL,
DIMENSION(SIZE(PU)) :: ZUSTAR2
77 REAL,
DIMENSION(SIZE(PU)) :: ZSSO_SFU
78 REAL,
DIMENSION(SIZE(PU)) :: ZSSO_SFV
79 LOGICAL,
DIMENSION(SIZE(PU)) :: GMASK
81 REAL(KIND=JPRB) :: ZHOOK_HANDLE
85 IF (
lhook)
CALL dr_hook(
'SSO_Z0_FRICTION_N',0,zhook_handle)
94 zwind(:) = sqrt(pu(:)**2+pv(:)**2)
99 WHERE (zwind(:)>0.) zdir(:)=atan2(pu(:),pv(:))
103 gmask(:)=(psea(:)/=1..AND. uss%XZ0REL(:)/=0.)
109 IF (uss%CROUGH==
"Z01D") zz0eff(:) = uss%XZ0REL(:)
114 IF (uss%CROUGH==
"Z04D")
THEN 118 zalfa(ii) = zdir(ii) - uss%XZ0EFFJPDIR(ii) *
xpi/180.
120 IF (zalfa(ii)<=-
xpi)
THEN 121 zalfa(ii) = zalfa(ii) + 2.*
xpi 122 ELSEIF(zalfa(ii)>
xpi)
THEN 123 zalfa(ii) = zalfa(ii) - 2.*
xpi 126 IF (zalfa(ii)>=-
xpi.AND.zalfa(ii)<=
xpi)
THEN 128 zsin2(ii) = sin(zalfa(ii))**2
129 zcos2(ii) = cos(zalfa(ii))**2
131 IF (zalfa(ii)<0.)
THEN 132 zz0eff(ii)=uss%XZ0EFFIM(ii)*zsin2(ii)
134 zz0eff(ii)=uss%XZ0EFFIP(ii)*zsin2(ii)
137 IF (zalfa(ii)>=-
xpi/2. .AND. zalfa(ii)<
xpi/2.)
THEN 138 zz0eff(ii) = zz0eff(ii) + uss%XZ0EFFJP(ii)*zcos2(ii)
140 zz0eff(ii) = zz0eff(ii) + uss%XZ0EFFJM(ii)*zcos2(ii)
162 zz0eff(ii) = min(zz0eff(ii),puref(ii)/uss%XFRACZ0)
165 zcd(ii) = (
xkarman/log(puref(ii)/zz0eff(ii)))**2
177 zustar2(:) = zcd(:)*zwind(:)*ppew_b_coef(:) &
178 / (1.0-prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
181 zustar2(:) = (zcd(:)*zwind(:)*(2.*ppew_b_coef(:)-zwind(:)) ) &
182 / (1.0-2.0*prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
187 zwork(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
188 zwork(:) = max(zwork(:),0.)
190 WHERE(ppew_a_coef(:)/= 0.)
191 zustar2(:) = max( ( zwork(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
202 zsso_sfu(:) = - pu(:)/zwind(:) * zustar2(:) * prhoa(:)
203 zsso_sfv(:) = - pv(:)/zwind(:) * zustar2(:) * prhoa(:)
209 psfu(:) = psfu(:) + zsso_sfu(:) * (1.0-psea(:))
210 psfv(:) = psfv(:) + zsso_sfv(:) * (1.0-psea(:))
212 IF (
lhook)
CALL dr_hook(
'SSO_Z0_FRICTION_N',1,zhook_handle)
character(len=3) cimplicit_wind
real, parameter xsurf_epsilon
subroutine sso_z0_friction_n(USS, PSEA, PUREF, PRHOA, PU, PV, PPEW_A_COEF, PPEW_B_COEF, PSFU, PSFV)