23 SUBROUTINE flxsurf3bx(CMU, CTU, RIB, FTEMP, FVAP, ILMO, &
24 & ue, fcor, ta , qa , zu, zt, va, &
25 & tg , qg , h , z0 , z0t, &
26 & lzz0, lzz0t, fm, fh, n )
28 USE yomhook
,ONLY : lhook, dr_hook
29 USE parkind1
,ONLY : jprb
35 REAL :: cmu(n),ctu(n),rib(n),fcor(n),ilmo(n)
36 REAL :: ftemp(n),fvap(n),ta(n),qa(n),zu(n),zt(n),va(n)
37 REAL :: tg(n),qg(n),h(n),z0(n),ue(n)
38 REAL :: z0t(n),lzz0(n),lzz0t(n)
106 REAL,
PARAMETER :: cpd =.100546e+4
107 REAL,
PARAMETER :: cpv =.186946e+4
108 REAL,
PARAMETER :: rgasd =.28705e+3
109 REAL,
PARAMETER :: rgasv =.46151e+3
110 REAL,
PARAMETER :: trpl =.27316e+3
111 REAL,
PARAMETER :: tcdk =.27315e+3
112 REAL,
PARAMETER :: rauw =.1e+4
113 REAL,
PARAMETER :: eps1 =.62194800221014
114 REAL,
PARAMETER :: eps2 =.3780199778986
115 REAL,
PARAMETER :: delta =.6077686814144
116 REAL,
PARAMETER :: cappa =.28549121795
117 REAL,
PARAMETER :: tgl =.27316e+3
118 REAL,
PARAMETER :: consol =.1367e+4
119 REAL,
PARAMETER :: grav =.980616e+1
120 REAL,
PARAMETER :: rayt =.637122e+7
121 REAL,
PARAMETER :: stefan =.566948e-7
122 REAL,
PARAMETER :: pi =.314159265359e+1
123 REAL,
PARAMETER :: omega =.7292e-4
124 REAL,
PARAMETER :: knams =.514791
125 REAL,
PARAMETER :: stlo =.6628486583943e-3
126 REAL,
PARAMETER :: karman =.35
127 REAL,
PARAMETER :: ric =.2
128 REAL,
PARAMETER :: chlc =.2501e+7
129 REAL,
PARAMETER :: chlf =.334e+6
130 REAL,
PARAMETER :: t1s =.27316e+3
131 REAL,
PARAMETER :: t2s =.25816e+3
132 REAL,
PARAMETER :: aw =.3135012829948e+4
133 REAL,
PARAMETER :: bw =.2367075766316e+1
134 REAL,
PARAMETER :: ai =.2864887713087e+4
135 REAL,
PARAMETER :: bi =.166093131502
136 REAL,
PARAMETER :: slp =.6666666666667e-1
141 REAL,
PARAMETER :: as = 12.
142 REAL,
PARAMETER :: asx = 5.
143 REAL,
PARAMETER :: ci = 40.
144 REAL,
PARAMETER :: bs = 1.0
145 REAL,
PARAMETER :: beta = 1.0
146 REAL,
PARAMETER :: factn = 1.2
147 REAL,
PARAMETER :: hmin = 30.
148 REAL,
PARAMETER :: angmax= 0.85
149 REAL,
PARAMETER :: rac3 = sqrt(3.)
153 INTEGER,
PARAMETER :: jdbl=8
157 INTEGER,
PARAMETER :: itmax = 3
158 REAL,
PARAMETER :: hmax = 1500.0
159 REAL,
PARAMETER :: cormin = 0.7e-4
160 REAL,
PARAMETER :: epsln = 1.0e-05
161 REAL,
PARAMETER :: vamin = 0.1
164 REAL :: hi,he,hs,unsl
165 REAL(KIND=JDBL) :: dthv,tva,tvs
167 REAL :: cs,xx,xx0,yy,yy0
169 REAL :: df,zz,betsasx
171 REAL(KIND=JPRB) :: zhook_handle
173 df(zz)=(1-zz*hi)*sqrt(1+4*as*beta*unsl*zz/(1-zz*hi))
177 IF (lhook) CALL dr_hook(
'FLXSURF3BX',0,zhook_handle)
180 lzz0(j)=1+zu(j)/z0(j)
181 lzz0t(j)=(zt(j)+z0(j))/z0t(j)
184 call
vslog(lzz0t,lzz0t,n)
185 call
vslog(lzz0 ,lzz0 ,n)
190 zp=zu(j)**2/(zt(j)+z0(j)-z0t(j))
192 tva=(1.0_jdbl+delta*qa(j))*ta(j)
193 tvs=(1.0_jdbl+delta*qg(j))*tg(j)
195 rib(j)=grav/(tvs+0.5_jdbl*dthv)*zp*dthv/(u*u)
196 if (rib(j)>=0.0_jdbl) rib(j) = max(rib(j), epsln)
197 if (rib(j)<0.0_jdbl) rib(j) = min(rib(j),-epsln)
200 IF(rib(j)>0.0_jdbl)
THEN
201 fm(j)=lzz0(j)+cs*rib(j)/max(2*z0(j),1.0_jdbl)
202 fh(j)=beta*(lzz0t(j)+cs*rib(j))/ &
203 & max(sqrt(z0(j)*z0t(j)),1.0_jdbl)
204 ilmo(j)=rib(j)*fm(j)*fm(j)/(zp*fh(j))
205 f=max(abs(fcor(j)),cormin)
206 h(j)=bs*sqrt(karman*u/(ilmo(j)*f*fm(j)))
208 fm(j)=lzz0(j)-min(0.7_jdbl+log(1-rib(j)),lzz0(j)-1)
209 fh(j)=beta*(lzz0t(j)-min(0.7_jdbl+log(1-rib(j)),lzz0t(j)-1))
210 ilmo(j)=rib(j)*fm(j)*fm(j)/(zp*fh(j))
218 zp=zu(j)**2/(zt(j)+z0(j)-z0t(j))
219 IF(rib(j)>0.0_jdbl)
THEN
222 ilmo(j)=max(epsln,ilmo(j))
223 hl=(zu(j)+10*z0(j))*factn
224 f=max(abs(fcor(j)),cormin)
225 hs=bs*sqrt(karman*u/(ilmo(j)*f*fm(j)))
226 h(j)=max(hmin,hs,hl,factn/(4*as*beta*ilmo(j)))
229 fm(j)=lzz0(j)+
psi(zu(j)+z0(j),hi,ilmo(j))-
psi(z0(j),hi,ilmo(j))
231 fh(j)=beta*(lzz0t(j)+
psi(zt(j)+z0(j),hi,ilmo(j))-
psi(z0t(j),hi, &
234 dg=-zp*fh(j)/(fm(j)*fm(j))*(1+beta*(df(zt(j)+z0(j))-df(z0t(j)))/&
235 & (2*fh(j))-(df(zu(j)+z0(j))-df(z0(j)))/fm(j))
239 ilmo(j)=min(0.,ilmo(j))
241 fm(j)=
fmi(zu(j)+z0(j),z0(j),lzz0(j),ilmo(j),xx,xx0)
243 fh(j)=
fhi(zt(j)+z0(j),z0t(j),lzz0t(j),ilmo(j),yy,yy0)
244 dg=-zp*fh(j)/(fm(j)*fm(j))*(1+beta/fh(j)*(1/yy-1/yy0)-2/fm(j)* &
249 g=rib(j)-fh(j)/(fm(j)*fm(j))*zp*ilmo(j)
262 zb=zu(j)/(zt(j)+z0(j)-z0t(j))
264 dd=(beta*lzz0t(j)*zb)**2-4*rib(j)*asx*lzz0(j)* &
265 & (beta*lzz0t(j)*zb-lzz0(j))
266 if(rib(j)>0.0_jdbl.and.rib(j)<betsasx.and.
dd>=0.)
then
268 aa=asx*asx*rib(j)-asx
269 bb=-beta*lzz0t(j)*zb+2*rib(j)*asx*lzz0(j)
273 ilmox=(-bb-sqrt(
dd))/(2*zu(j)*aa)
275 ilmox=2*cc/(zu(j)*(-bb+sqrt(
dd)))
277 if(ilmox<ilmo(j))
then
279 fm(j)=lzz0(j)+asx*zu(j)*ilmox
280 fh(j)=beta*lzz0t(j)+asx*(zt(j)+z0(j)-z0t(j))*ilmox
290 if (rib(j)>0.0_jdbl)
then
295 f=max(abs(fcor(j)),cormin)
296 he=max(hmin,0.3_jdbl*ue(j)/f)
299 ftemp(j)=-ctu(j)*(ta(j)-tg(j))
300 fvap(j)=-ctu(j)*(qa(j)-qg(j))
302 IF (lhook) CALL dr_hook(
'FLXSURF3BX',1,zhook_handle)
311 FUNCTION fmi(Z2,Z02,LZZ02,ILMO2,X,X0)
315 REAL,
INTENT(IN ) :: z2,z02,lzz02,ilmo2
316 REAL,
INTENT(OUT) :: x,x0
318 x =(1-ci*z2 *beta*ilmo2)**(0.16666666)
319 x0=(1-ci*z02*beta*ilmo2)**(0.16666666)
320 fmi=lzz02+log((x0+1)**2*sqrt(x0**2-x0+1)*(x0**2+x0+1)**1.5 &
321 & /((x+1)**2*sqrt(x**2-x+1)*(x**2+x+1)**1.5)) &
322 & +rac3*atan(rac3*((x**2-1)*x0-(x0**2-1)*x)/ &
323 & ((x0**2-1)*(x**2-1)+3*x*x0))
332 FUNCTION fhi(Z2,Z0T2,LZZ0T2,ILMO2,Y,Y0)
336 REAL,
INTENT(IN ) :: z2,z0t2,lzz0t2,ilmo2
337 REAL,
INTENT(OUT) :: y,y0
339 y =(1-ci*z2 *beta*ilmo2)**(0.33333333)
340 y0=(1-ci*z0t2*beta*ilmo2)**(0.33333333)
341 fhi=beta*(lzz0t2+1.5*log((y0**2+y0+1)/(y**2+y+1))+rac3* &
342 & atan(rac3*2*(y-y0)/((2*y0+1)*(2*y+1)+3)))
351 FUNCTION psi(Z2,HI2,ILMO2)
356 REAL,
INTENT(IN ) :: ilmo2,z2,hi2
361 a = sqrt(1 + b*z2 - c*z2**2)
362 psi = 0.5 * (a-z2*hi2-log(1+b*z2*0.5+a)- &
363 & b/(2*sqrt(c))*asin((b-2*c*z2)/d))
real function fhi(Z2, Z0T2, LZZ0T2, ILMO2, Y, Y0)
subroutine vslog(PA, PLOG, N)
real function fmi(Z2, Z02, LZZ02, ILMO2, X, X0)
real function psi(Z2, HI2, ILMO2)
subroutine flxsurf3bx(CMU, CTU, RIB, FTEMP, FVAP, ILMO, UE, FCOR, TA, QA, ZU, ZT, VA, TG, QG, H, Z0, Z0T, LZZ0, LZZ0T, FM, FH, N)