209 & LBi, UBi, LBj, UBj, &
210 & IminS, ImaxS, JminS, JmaxS, &
212# if defined ICE_MODEL && defined ICE_BULK_FLUXES
216 & rmask, umask, vmask, &
219 & rmask_wet, umask_wet, vmask_wet, &
221 & alpha, beta, rho, t, &
222# ifdef WIND_MINUS_CURRENT
225 & Hair, Pair, Tair, Uwind, Vwind, &
229# if defined COARE_TAYLOR_YELLAND || defined DRENNAN
232# if defined COARE_TAYLOR_YELLAND || defined COARE_OOST || \
236# if !defined DEEPWATER_WAVES && \
237 (defined COARE_TAYLOR_YELLAND || defined COARE_OOST || \
241# if defined ICE_MODEL && defined ICE_BULK_FLUXES && \
242 defined ice_albedo && defined shortwave
245 & rain, lhflx, lrflx, shflx, srflx, &
246# if defined ICE_MODEL && defined ICE_BULK_FLUXES
248 & sustr_ai, svstr_ai, &
249 & sustr_ao, svstr_ao, &
259 & stflux, sustr, svstr)
264 integer,
intent(in) :: ng, tile
265 integer,
intent(in) :: LBi, UBi, LBj, UBj
266 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
267 integer,
intent(in) :: nrhs
268# if defined ICE_MODEL && defined ICE_BULK_FLUXES
269 integer,
intent(in) :: liold, linew
274 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
275 real(r8),
intent(in ) :: umask(LBi:,LBj:)
276 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
279 real(r8),
intent(in ) :: rmask_wet(LBi:,LBj:)
280 real(r8),
intent(in ) :: umask_wet(LBi:,LBj:)
281 real(r8),
intent(in ) :: vmask_wet(LBi:,LBj:)
283 real(r8),
intent(in ) :: alpha(LBi:,LBj:)
284 real(r8),
intent(in ) :: beta(LBi:,LBj:)
285 real(r8),
intent(in ) :: rho(LBi:,LBj:,:)
286 real(r8),
intent(in ) :: t(LBi:,LBj:,:,:,:)
287# ifdef WIND_MINUS_CURRENT
288 real(r8),
intent(in ) :: u(LBi:,LBj:,:,:)
289 real(r8),
intent(in ) :: v(LBi:,LBj:,:,:)
291 real(r8),
intent(in ) :: Hair(LBi:,LBj:)
292 real(r8),
intent(in ) :: Pair(LBi:,LBj:)
293 real(r8),
intent(in ) :: Tair(LBi:,LBj:)
294 real(r8),
intent(in ) :: Uwind(LBi:,LBj:)
295 real(r8),
intent(in ) :: Vwind(LBi:,LBj:)
297 real(r8),
intent(in ) :: cloud(LBi:,LBj:)
299# if defined COARE_TAYLOR_YELLAND || defined DRENNAN
300 real(r8),
intent(in ) :: Hwave(LBi:,LBj:)
302# if defined COARE_TAYLOR_YELLAND || defined COARE_OOST || \
304 real(r8),
intent(in ) :: Pwave_top(LBi:,LBj:)
306# if !defined DEEPWATER_WAVES && \
307 (defined coare_taylor_yelland || defined coare_oost || \
309 real(r8),
intent(in ) :: Lwavep(LBi:,LBj:)
311# if defined ICE_MODEL && defined ICE_BULK_FLUXES && \
312 defined ice_albedo && defined shortwave
313 real(r8),
intent(in ) :: albedo_ice(LBi:,LBj:)
315 real(r8),
intent(in ) :: rain(LBi:,LBj:)
316 real(r8),
intent(inout) :: lhflx(LBi:,LBj:)
317 real(r8),
intent(inout) :: lrflx(LBi:,LBj:)
318 real(r8),
intent(inout) :: shflx(LBi:,LBj:)
319 real(r8),
intent(inout) :: srflx(LBi:,LBj:)
320 real(r8),
intent(inout) :: stflux(LBi:,LBj:,:)
321# if defined ICE_MODEL && defined ICE_BULK_FLUXES
322 real(r8),
intent(inout) :: Fi(LBi:,LBj:,:)
323 real(r8),
intent(inout) :: Si(LBi:,LBj:,:,:)
324 real(r8),
intent(out ) :: sustr_ai(LBi:,LBj:)
325 real(r8),
intent(out ) :: svstr_ai(LBi:,LBj:)
326 real(r8),
intent(out ) :: sustr_ao(LBi:,LBj:)
327 real(r8),
intent(out ) :: svstr_ao(LBi:,LBj:)
328 real(r8),
intent(out ) :: Qnet_ao(LBi:,LBj:)
330 real(r8),
intent(out ) :: Qnet_ai(LBi:,LBj:)
331 real(r8),
intent(out ) :: srflx_ice(LBi:,LBj:)
332 real(r8),
intent(out ) :: snow(LBi:,LBj:)
336 real(r8),
intent(out ) :: evap(LBi:,LBj:)
338 real(r8),
intent(out ) :: sustr(LBi:,LBj:)
339 real(r8),
intent(out ) :: svstr(LBi:,LBj:)
342 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
343 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
344 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
347 real(r8),
intent(in ) :: rmask_wet(LBi:UBi,LBj:UBj)
348 real(r8),
intent(in ) :: umask_wet(LBi:UBi,LBj:UBj)
349 real(r8),
intent(in ) :: vmask_wet(LBi:UBi,LBj:UBj)
351 real(r8),
intent(in ) :: alpha(LBi:UBi,LBj:UBj)
352 real(r8),
intent(in ) :: beta(LBi:UBi,LBj:UBj)
353 real(r8),
intent(in ) :: rho(LBi:UBi,LBj:UBj,N(ng))
354 real(r8),
intent(in ) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
355# ifdef WIND_MINUS_CURRENT
356 real(r8),
intent(in ) :: u(LBi:UBi,LBj:UBj,N(ng),3)
357 real(r8),
intent(in ) :: v(LBi:UBi,LBj:UBj,N(ng),3)
359 real(r8),
intent(in ) :: Hair(LBi:UBi,LBj:UBj)
360 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
361 real(r8),
intent(in ) :: Tair(LBi:UBi,LBj:UBj)
362 real(r8),
intent(in ) :: Uwind(LBi:UBi,LBj:UBj)
363 real(r8),
intent(in ) :: Vwind(LBi:UBi,LBj:UBj)
365 real(r8),
intent(in ) :: cloud(LBi:UBi,LBj:UBj)
367# if defined COARE_TAYLOR_YELLAND || \
369 real(r8),
intent(in ) :: Hwave(LBi:UBi,LBj:UBj)
371# if defined COARE_TAYLOR_YELLAND || defined COARE_OOST || \
373 real(r8),
intent(in ) :: Pwave_top(LBi:UBi,LBj:UBj)
375# if !defined DEEPWATER_WAVES && \
376 (defined coare_taylor_yelland || defined coare_oost || \
378 real(r8),
intent(in ) :: Lwavep(LBi:UBi,LBj:UBj)
380# if defined ICE_MODEL && defined ICE_BULK_FLUXES && \
381 defined ice_albedo && defined shortwave
382 real(r8),
intent(in ) :: albedo_ice(LBi:UBi,LBj:UBj)
384 real(r8),
intent(in ) :: rain(LBi:UBi,LBj:UBj)
385 real(r8),
intent(inout) :: lhflx(LBi:UBi,LBj:UBj)
386 real(r8),
intent(inout) :: lrflx(LBi:UBi,LBj:UBj)
387 real(r8),
intent(inout) :: shflx(LBi:UBi,LBj:UBj)
388 real(r8),
intent(inout) :: srflx(LBi:UBi,LBj:UBj)
389 real(r8),
intent(inout) :: stflux(LBi:UBi,LBj:UBj,NT(ng))
390# if defined ICE_MODEL && defined ICE_BULK_FLUXES
391 real(r8),
intent(inout) :: Fi(LBi:UBi,LBj:UBj,nIceF)
392 real(r8),
intent(inout) :: Si(LBi:UBi,LBj:UBj,2,nIceS)
393 real(r8),
intent(out ) :: sustr_ai(LBi:UBi,LBj:UBj)
394 real(r8),
intent(out ) :: svstr_ai(LBi:UBi,LBj:UBj)
395 real(r8),
intent(out ) :: sustr_ao(LBi:UBi,LBj:UBj)
396 real(r8),
intent(out ) :: svstr_ao(LBi:UBi,LBj:UBj)
397 real(r8),
intent(out ) :: Qnet_ao(LBi:UBi,LBj:UBj)
399 real(r8),
intent(out ) :: Qnet_ai(LBi:UBi,LBj:UBj)
400 real(r8),
intent(out ) :: srflx_ice(LBi:UBi,LBj:UBj)
401 real(r8),
intent(out ) :: snow(LBi:UBi,LBj:UBj)
405 real(r8),
intent(out ) :: evap(LBi:UBi,LBj:UBj)
407 real(r8),
intent(out ) :: sustr(LBi:UBi,LBj:UBj)
408 real(r8),
intent(out ) :: svstr(LBi:UBi,LBj:UBj)
413 integer :: Iter, i, j, k
414# if defined ICE_MODEL && defined ICE_BULK_FLUXES
417 integer,
parameter :: IterMax = 3
419 real(r8),
parameter :: eps = 1.0e-20_r8
420 real(r8),
parameter :: r3 = 1.0_r8/3.0_r8
422 real(r8) :: Bf, Cd, Hl, Hlw, Hscale, Hs, Hsr, IER
423 real(r8) :: PairM, RH, Taur
424 real(r8) :: Wspeed, ZQoL, ZToL
425# if defined ICE_MODEL && defined ICE_BULK_FLUXES
426 real(r8) :: Qsw_i, Qlw_i, Qlh_i, Qsh_i
427 real(r8) :: Qsati, TiceK
428 real(r8) :: Ce, Ch, dq_i, le_i, slp, vap_p_i
430 real(r8) :: cff, cff1, cff2, cff3, cff4
431 real(r8) :: diffh, diffw, oL, upvel
432 real(r8) :: twopi_inv, wet_bulb
434 real(r8) :: e_sat, vap_p
437 real(r8) :: Clam, Fc, Hcool, Hsb, Hlb, Qbouy, Qcool, lambd
440 real(r8),
dimension(IminS:ImaxS) :: CC
441 real(r8),
dimension(IminS:ImaxS) :: Cd10
442 real(r8),
dimension(IminS:ImaxS) :: Ch10
443 real(r8),
dimension(IminS:ImaxS) :: Ct10
444 real(r8),
dimension(IminS:ImaxS) :: charn
445 real(r8),
dimension(IminS:ImaxS) :: Ct
446 real(r8),
dimension(IminS:ImaxS) :: Cwave
447 real(r8),
dimension(IminS:ImaxS) :: Cwet
448 real(r8),
dimension(IminS:ImaxS) :: delQ
449 real(r8),
dimension(IminS:ImaxS) :: delQc
450 real(r8),
dimension(IminS:ImaxS) :: delT
451 real(r8),
dimension(IminS:ImaxS) :: delTc
452 real(r8),
dimension(IminS:ImaxS) :: delW
453 real(r8),
dimension(IminS:ImaxS) :: L
454 real(r8),
dimension(IminS:ImaxS) :: L10
455 real(r8),
dimension(IminS:ImaxS) :: Q
456 real(r8),
dimension(IminS:ImaxS) :: Qair
457 real(r8),
dimension(IminS:ImaxS) :: Qpsi
458 real(r8),
dimension(IminS:ImaxS) :: Qsea
459 real(r8),
dimension(IminS:ImaxS) :: Qstar
460 real(r8),
dimension(IminS:ImaxS) :: rhoAir
461 real(r8),
dimension(IminS:ImaxS) :: rhoSea
462 real(r8),
dimension(IminS:ImaxS) :: Ri
463 real(r8),
dimension(IminS:ImaxS) :: Ribcu
464 real(r8),
dimension(IminS:ImaxS) :: Rr
465 real(r8),
dimension(IminS:ImaxS) :: Scff
466 real(r8),
dimension(IminS:ImaxS) :: TairC
467 real(r8),
dimension(IminS:ImaxS) :: TairK
468 real(r8),
dimension(IminS:ImaxS) :: Tcff
469 real(r8),
dimension(IminS:ImaxS) :: Tpsi
470 real(r8),
dimension(IminS:ImaxS) :: TseaC
471 real(r8),
dimension(IminS:ImaxS) :: TseaK
472 real(r8),
dimension(IminS:ImaxS) :: Tstar
473 real(r8),
dimension(IminS:ImaxS) :: u10
474 real(r8),
dimension(IminS:ImaxS) :: VisAir
475 real(r8),
dimension(IminS:ImaxS) :: WaveLength
476 real(r8),
dimension(IminS:ImaxS) :: Wgus
477 real(r8),
dimension(IminS:ImaxS) :: Wmag
478 real(r8),
dimension(IminS:ImaxS) :: Wpsi
479 real(r8),
dimension(IminS:ImaxS) :: Wstar
480 real(r8),
dimension(IminS:ImaxS) :: Zetu
481 real(r8),
dimension(IminS:ImaxS) :: Zo10
482 real(r8),
dimension(IminS:ImaxS) :: ZoT10
483 real(r8),
dimension(IminS:ImaxS) :: ZoL
484 real(r8),
dimension(IminS:ImaxS) :: ZoQ
485 real(r8),
dimension(IminS:ImaxS) :: ZoT
486 real(r8),
dimension(IminS:ImaxS) :: ZoW
487 real(r8),
dimension(IminS:ImaxS) :: ZWoL
489 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hlv
490 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LHeat
491 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LRad
492 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: SHeat
493 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: SRad
494 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Taux
495 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Tauy
496 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Uair
497 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vair
499 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Coef_Ice
500 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: RHS_Ice
501 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Qai
503# if defined ICE_MODEL && defined ICE_BULK_FLUXES
504 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Taux_Ice
505 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Tauy_Ice
506 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ice_thick
507 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: snow_thick
510# include "set_bounds.h"
515# ifdef WIND_MINUS_CURRENT
524 DO i=istr-1,min(iend+1,
lm(ng))
525 uair(i,j)=uwind(i,j)- &
526 & 0.5_r8*(u(i,j,n(ng),nrhs)+u(i+1,j,n(ng),nrhs))
528 IF (
domain(ng)%Eastern_Edge(tile))
THEN
529 uair(iend+1,j)=uwind(iend+1,j)-u(iend,j,n(ng),nrhs)
533 DO j=jstr-1,min(jend+1,
mm(ng))
534 vair(i,j)=vwind(i,j)- &
535 & 0.5_r8*(v(i,j,n(ng),nrhs)+v(i,j+1,n(ng),nrhs))
537 IF (
domain(ng)%Northern_Edge(tile))
THEN
538 vair(i,jend+1)=vwind(i,jend+1)-v(i,jend,n(ng),nrhs)
559# if defined ICE_MODEL && defined ICE_BULK_FLUXES
567 j_loop :
DO j=jstr-1,jendr
575 wmag(i)=sqrt(uair(i,j)*uair(i,j)+vair(i,j)*vair(i,j))
578 tairk(i)=tairc(i)+273.16_r8
579 tseac(i)=t(i,j,n(ng),nrhs,
itemp)
580 tseak(i)=tseac(i)+273.16_r8
581 rhosea(i)=rho(i,j,n(ng))+1000.0_r8
583 srad(i,j)=srflx(i,j)*hscale
584# if defined ICE_MODEL && defined ICE_BULK_FLUXES && defined ICE_THERMO
585 srflx_ice(i,j)=srad(i,j)
594 lheat(i,j)=lhflx(i,j)*hscale
595 sheat(i,j)=shflx(i,j)*hscale
612 cff=(0.7859_r8+0.03477_r8*tairc(i))/ &
613 & (1.0_r8+0.00412_r8*tairc(i))
616 cff2=tairk(i)*tairk(i)*tairk(i)
619 & (cff1*(0.39_r8-0.05_r8*sqrt(vap_p))* &
620 & (1.0_r8-0.6823_r8*cloud(i,j)*cloud(i,j))+ &
621 & cff2*4.0_r8*(tseak(i)-tairk(i)))
623# elif defined LONGWAVE_OUT
628 lrad(i,j)=lrflx(i,j)*hscale- &
632 lrad(i,j)=lrflx(i,j)*hscale
635 lrad(i,j)=lrad(i,j)*rmask(i,j)
638 lrad(i,j)=lrad(i,j)*rmask_wet(i,j)
673 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
674 & exp(17.502_r8*tairc(i)/(240.97_r8+tairc(i)))
678 qair(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff+eps))
682 IF (rh.lt.2.0_r8)
THEN
685 & (cff/(pairm-0.378_r8*cff+eps))
692 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
693 & exp(17.502_r8*tseac(i)/(240.97_r8+tseac(i)))
701 qsea(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
710 rhoair(i)=pairm*100.0_r8/(
blk_rgas*tairk(i)* &
711 & (1.0_r8+0.61_r8*q(i)))
715 visair(i)=1.326e-5_r8* &
716 & (1.0_r8+tairc(i)*(6.542e-3_r8+tairc(i)* &
717 & (8.301e-6_r8-4.84e-9_r8*tairc(i))))
721# ifdef REGCM_COUPLING
722 hlv(i,j)=2.5104e+6_r8
724 hlv(i,j)=(2.501_r8-0.00237_r8*tseac(i))*1.0e+6_r8
731 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
733 delt(i)=tseac(i)-tairc(i)
738 u10(i)=delw(i)*log(10.0_r8/zow(i))/log(
blk_zw(ng)/zow(i))
739 wstar(i)=0.035_r8*u10(i)
740 zo10(i)=0.011_r8*wstar(i)*wstar(i)/
g+ &
741 & 0.11_r8*visair(i)/wstar(i)
742 cd10(i)=(
vonkar/log(10.0_r8/zo10(i)))**2
744 ct10(i)=ch10(i)/sqrt(cd10(i))
745 zot10(i)=10.0_r8/exp(
vonkar/ct10(i))
757 ri(i)=-
g*
blk_zw(ng)*((delt(i)-deltc(i))+ &
758 & 0.61_r8*tairk(i)*delq(i))/ &
759 & (tairk(i)*delw(i)*delw(i)+eps)
760 IF (ri(i).lt.0.0_r8)
THEN
761 zetu(i)=cc(i)*ri(i)/(1.0_r8+ri(i)/ribcu(i))
763 zetu(i)=cc(i)*ri(i)/(1.0_r8+3.0_r8*ri(i)/cc(i))
771 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
772 & (log(
blk_zt(ng)/zot10(i))- &
774 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
775 & (log(
blk_zq(ng)/zot10(i))- &
782 IF (delw(i).gt.18.0_r8)
THEN
784 ELSE IF ((10.0_r8.lt.delw(i)).and.(delw(i).le.18.0_r8))
THEN
786 & 0.125_r8*(0.018_r8-0.011_r8)*(delw(i)-10.0_r8)
795 charn(i)=min(0.028_r8,-0.005_r8+0.0017_r8*delw(i))
799# if defined COARE_OOST || defined COARE_TAYLOR_YELLAND || \
801# if defined DEEPWATER_WAVES
802 cwave(i)=
g*max(pwave_top(i,j),eps)*twopi_inv
803 wavelength(i)=cwave(i)*max(pwave_top(i,j),eps)
805 cwave(i)=lwavep(i,j)/max(pwave_top(i,j),eps)
806 wavelength(i)=lwavep(i,j)
812# if defined COARE_OOST || defined COARE_TAYLOR_YELLAND
819 zow(i)=(25.0_r8/
pi)*wavelength(i)* &
820 & (wstar(i)/cwave(i))**4.5_r8+ &
821 & 0.11_r8*visair(i)/(wstar(i)+eps)
822# elif defined COARE_TAYLOR_YELLAND
823 zow(i)=1200.0_r8*hwave(i,j)* &
824 & (hwave(i,j)/wavelength(i))**4.5_r8+ &
825 & 0.11_r8*visair(i)/(wstar(i)+eps)
826# elif defined DRENNAN
827 zow(i)=(3.35_r8)*hwave(i,j)* &
828 & min((wstar(i)/cwave(i)),0.1_r8)**3.4_r8+ &
829 & 0.11_r8*visair(i)/(wstar(i)+eps)
831 zow(i)=charn(i)*wstar(i)*wstar(i)/
g+ &
832 & 0.11_r8*visair(i)/(wstar(i)+eps)
834# if defined DRAGLIM_DAVIS
835 zow(i)=max(zow(i),1.27e-7_r8)
836 zow(i)=min(zow(i),2.85e-3_r8)
838 rr(i)=zow(i)*wstar(i)/visair(i)
844 zoq(i)=min(1.15e-4_r8,5.5e-5_r8/rr(i)**0.6_r8)
850 zoq(i)=min(1.6e-4_r8,5.8e-5_r8/(rr(i)**0.72_r8))
857 & (tstar(i)*(1.0_r8+0.61_r8*q(i))+ &
858 & 0.61_r8*tairk(i)*qstar(i))/ &
859 & (tairk(i)*wstar(i)*wstar(i)* &
860 & (1.0_r8+0.61_r8*q(i))+eps)
861 l(i)=
blk_zw(ng)/(zol(i)+eps)
869 cwet(i)=0.622_r8*hlv(i,j)*qsea(i)/ &
871 delqc(i)=cwet(i)*deltc(i)
876 wstar(i)=max(eps,delw(i)*
vonkar/ &
877 & (log(
blk_zw(ng)/zow(i))-wpsi(i)))
878 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
879 & (log(
blk_zt(ng)/zot(i))-tpsi(i))
880 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
881 & (log(
blk_zq(ng)/zoq(i))-qpsi(i))
886 & wstar(i)*(tstar(i)+0.61_r8*tairk(i)*qstar(i))
887 IF (bf.gt.0.0_r8)
THEN
892 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
912 hsb=-rhoair(i)*
blk_cpa*wstar(i)*tstar(i)
913 hlb=-rhoair(i)*hlv(i,j)*wstar(i)*qstar(i)
917 fc=0.065_r8+11.0_r8*hcool- &
918 & (1.0_r8-exp(-hcool*1250.0_r8))*6.6e-5_r8/hcool
922 qcool=lrad(i,j)+hsb+hlb-srad(i,j)*fc
923 qbouy=tcff(i)*qcool+scff(i)*hlb*
blk_cpw/hlv(i,j)
927 IF ((qcool.gt.0.0_r8).and.(qbouy.gt.0.0_r8))
THEN
930 & (clam*qbouy/(wstar(i)+eps)**4.0_r8)**0.75_r8)**r3
931 hcool=lambd*
blk_visw/(sqrt(rhoair(i)/rhosea(i))* &
937 delqc(i)=cwet(i)*deltc(i)
951 wspeed=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
953# if defined ICE_MODEL && defined ICE_BULK_FLUXES && defined ICE_THERMO
954 ch=wstar(i)*tstar(i)/(-wspeed*delt(i)+0.0098_r8*
blk_zt(ng))
955 ce=wstar(i)*qstar(i)/(-wspeed*delq(i)+eps)
960 hs=-
blk_cpa*rhoair(i)*wstar(i)*tstar(i)
964 diffw=2.11e-5_r8*(tairk(i)/273.16_r8)**1.94_r8
965 diffh=0.02411_r8*(1.0_r8+tairc(i)* &
966 & (3.309e-3_r8-1.44e-6_r8*tairc(i)))/ &
968 cff=qair(i)*hlv(i,j)/(
blk_rgas*tairk(i)*tairk(i))
969 wet_bulb=1.0_r8/(1.0_r8+0.622_r8*(cff*hlv(i,j)*diffw)/ &
971 hsr=abs(rain(i,j))*wet_bulb*
blk_cpw* &
972 & ((tseac(i)-tairc(i))+(qsea(i)-q(i))*hlv(i,j)/
blk_cpa)
973# ifndef REGCM_COUPLING
977 sheat(i,j)=sheat(i,j)*rmask(i,j)
980 sheat(i,j)=sheat(i,j)*rmask_wet(i,j)
985 hl=-hlv(i,j)*rhoair(i)*wstar(i)*qstar(i)
987# if defined ICE_MODEL && defined ICE_BULK_FLUXES && defined ICE_THERMO
992 IF (rain(i,j).lt.0.0_r8)
THEN
993 hl=hl+3.347e+5_r8*rain(i,j)
999 upvel=-1.61_r8*wstar(i)*qstar(i)- &
1000 & (1.0_r8+1.61_r8*q(i))*wstar(i)*tstar(i)/tairk(i)
1001 hlw=rhoair(i)*hlv(i,j)*upvel*q(i)
1002# ifndef REGCM_COUPLING
1006 lheat(i,j)=lheat(i,j)*rmask(i,j)
1009 lheat(i,j)=lheat(i,j)*rmask_wet(i,j)
1015 taur=0.85_r8*abs(rain(i,j))*wmag(i)
1022 cff=rhoair(i)*(wstar(i)*wstar(i)+taur/rhoair(i))/(wmag(i)+eps)
1028 taux(i,j)=cff*uair(i,j)
1030 taux(i,j)=taux(i,j)*rmask(i,j)
1033 taux(i,j)=taux(i,j)*rmask_wet(i,j)
1035 tauy(i,j)=cff*vair(i,j)
1037 tauy(i,j)=tauy(i,j)*rmask(i,j)
1040 tauy(i,j)=tauy(i,j)*rmask_wet(i,j)
1042# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1043 taux_ice(i,j)=rhoair(i)*
cd_ai(ng)*uwind(i,j)*wspeed
1044 tauy_ice(i,j)=rhoair(i)*
cd_ai(ng)*vwind(i,j)*wspeed
1051 coef_ice(i,j)=0.0_r8
1057 ticek=fi(i,j,
icisst)+273.16_r8
1059 ticek=t(i,j,n(ng),nrhs,
itemp)+273.16_r8
1061 cff=rhoair(i)*
blk_cpa*ch*delw(i)
1062 qsh_i=cff*(tairk(i)+0.0098_r8*
blk_zt(ng)-ticek)
1063 coef_ice(i,j)=coef_ice(i,j)+cff
1064 rhs_ice(i,j)=rhs_ice(i,j)+ &
1065 & cff*(tairk(i)+0.0098_r8*
blk_zt(ng))
1073 cff=wet_bulb*2093.0_r8
1075 & abs(rain(i,j))*cff* &
1076 & (ticek-tairc(i)+(qsea(i)-q(i))*hlv(i,j)/
blk_cpa)
1077 coef_ice(i,j)=coef_ice(i,j) - &
1078 & abs(rain(i,j))*cff
1083 rhs_ice(i,j)=rhs_ice(i,j)+ &
1084 & abs(rain(i,j))*cff* &
1085 & (-tairk(i)+(qsea(i)-q(i))*hlv(i,j)/
blk_cpa)
1094 slp=pair(i,j)*100.0_r8
1096 & 10.0_r8**(9.5_r8*(ticek-273.16_r8)/(ticek-7.66_r8))
1098 qsati=0.62197_r8*cff/(slp-(1.0_r8-0.62197_r8)*cff)
1100 qlh_i=rhoair(i)*ce*delw(i)* &
1107 IF ((rain(i,j).gt.0.0_r8).and. &
1108 & (si(i,j,li_stp,
ishmel).eq.0.0_r8))
THEN
1109 qlh_i=qlh_i+3.347e+5_r8*rain(i,j)
1111 rhs_ice(i,j)=rhs_ice(i,j)+qlh_i
1115 qsw_i=(1.0_r8-albedo_ice(i,j))*srflx_ice(i,j)
1123 rhs_ice(i,j)=rhs_ice(i,j)+qsw_i
1127 cff=q(i)/(1.0_r8+q(i))
1128 vap_p_i=slp*cff/(0.62197_r8+cff)
1131 cff1=0.39_r8-0.005_r8*sqrt(vap_p_i)
1132 cff2=1.0_r8-0.65_r8*cloud(i,j)
1135 qlw_i=cff4*cff1*cff2+ &
1136 & 4.0_r8*cff3*(ticek-tairk(i))
1137 coef_ice(i,j)=coef_ice(i,j)+ &
1139 rhs_ice(i,j)=rhs_ice(i,j)- &
1140 & cff4*(cff1*cff2-4.0_r8)
1142# elif defined LONGWAVE_OUT
1151 qlw_i=-(lrflx(i,j)*hscale-cff4)
1152 coef_ice(i,j)=coef_ice(i,j)+ &
1154 rhs_ice(i,j)=rhs_ice(i,j)+ &
1155 & lrflx(i,j)*hscale+3.0_r8*cff4
1159 qlw_i=lrflx(i,j)*hscale
1160 coef_ice(i,j)=coef_ice(i,j)+ &
1162 rhs_ice(i,j)=rhs_ice(i,j)- &
1163 & lrflx(i,j)*hscale- &
1164 & 4.0_r8*cff3*(ticek-2.0_r8*tairk(i))
1172 qai(i,j)=-qsh_i-qlh_i-qsw_i+qlw_i
1210# if defined ALBEDO && defined SHORTWAVE
1213# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1218 cff1=1.0_r8/(si(i,j,li_stp,
isaice)+eps)
1219 ice_thick(i,j) =si(i,j,li_stp,
ishice)*cff1
1220 snow_thick(i,j)=si(i,j,li_stp,
ishsno)*cff1
1222 IF (ice_thick(i,j).le.0.1_r8)
THEN
1223 cff2=ice_thick(i,j)*5.0_r8
1225 cff2=0.1_r8*(5.0_r8+(ice_thick(i,j)-0.1_r8))
1228 cff2=cff2+snow_thick(i,j)*20.0_r8
1229 srflx(i,j)=(1.0_r8-si(i,j,li_stp,
isaice))*srflx(i,j)+ &
1230 & si(i,j,li_stp,
isaice)*srflx(i,j)*exp(-cff2)
1235 IF (rain(i,j).ge.0.0_r8)
THEN
1244# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1245 fi(i,j,
icqcon)=coef_ice(i,j)
1246 fi(i,j,
icqrhs)=rhs_ice(i,j)
1248 lrflx(i,j)=lrad(i,j)*hscale
1249 lhflx(i,j)=-lheat(i,j)*hscale
1250 shflx(i,j)=-sheat(i,j)*hscale
1251 stflux(i,j,
itemp)=(srflx(i,j)+lrflx(i,j)+ &
1252 & lhflx(i,j)+shflx(i,j))
1254# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1255 qnet_ao(i,j)=-stflux(i,j,
itemp)/hscale
1256 qnet_ai(i,j)=qai(i,j)
1259 stflux(i,j,
itemp)=stflux(i,j,
itemp)*rmask(i,j)
1262 stflux(i,j,
itemp)=stflux(i,j,
itemp)*rmask_wet(i,j)
1265 evap(i,j)=lheat(i,j)/(hlv(i,j)+eps)
1266# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1267 evap(i,j)=(1.0_r8-si(i,j,li_stp,
isaice))*evap(i,j)
1270 evap(i,j)=evap(i,j)*rmask(i,j)
1273 evap(i,j)=evap(i,j)*rmask_wet(i,j)
1276 stflux(i,j,
isalt)=cff*(evap(i,j)-rain(i,j))
1278 stflux(i,j,
isalt)=stflux(i,j,
isalt)*rmask(i,j)
1281 stflux(i,j,
isalt)=stflux(i,j,
isalt)*rmask_wet(i,j)
1293 sustr(i,j)=cff*(taux(i-1,j)+taux(i,j))
1295 sustr(i,j)=sustr(i,j)*umask(i,j)
1298 sustr(i,j)=sustr(i,j)*umask_wet(i,j)
1300# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1301 sustr_ao(i,j)=sustr(i,j)
1302 sustr_ai(i,j)=taux_ice(i,j)
1308 svstr(i,j)=cff*(tauy(i,j-1)+tauy(i,j))
1310 svstr(i,j)=svstr(i,j)*vmask(i,j)
1313 svstr(i,j)=svstr(i,j)*vmask_wet(i,j)
1315# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1316 svstr_ao(i,j)=svstr(i,j)
1317 svstr_ai(i,j)=tauy_ice(i,j)
1328 & lbi, ubi, lbj, ubj, &
1332 & lbi, ubi, lbj, ubj, &
1336 & lbi, ubi, lbj, ubj, &
1340 & lbi, ubi, lbj, ubj, &
1341 & stflux(:,:,
itemp))
1343# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1345 & lbi, ubi, lbj, ubj, &
1349 & lbi, ubi, lbj, ubj, &
1354 & lbi, ubi, lbj, ubj, &
1358 & lbi, ubi, lbj, ubj, &
1362 & lbi, ubi, lbj, ubj, &
1366 & lbi, ubi, lbj, ubj, &
1371 & lbi, ubi, lbj, ubj, &
1375 & lbi, ubi, lbj, ubj, &
1381 & lbi, ubi, lbj, ubj, &
1385 & lbi, ubi, lbj, ubj, &
1386 & stflux(:,:,
isalt))
1390 & lbi, ubi, lbj, ubj, &
1394 & lbi, ubi, lbj, ubj, &
1396# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1398 & lbi, ubi, lbj, ubj, &
1401 & lbi, ubi, lbj, ubj, &
1409 & lbi, ubi, lbj, ubj, &
1412 & lrflx, lhflx, shflx, &
1413 & stflux(:,:,
itemp))
1415# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1417 & lbi, ubi, lbj, ubj, &
1420 & srflx, qnet_ao, sustr_ai, svstr_ai)
1424 & lbi, ubi, lbj, ubj, &
1435 & lbi, ubi, lbj, ubj, &
1441 & lbi, ubi, lbj, ubj, &
1444 & stflux(:,:,
isalt))
1448 & lbi, ubi, lbj, ubj, &
1453# if defined ICE_MODEL && defined ICE_BULK_FLUXES
1455 & lbi, ubi, lbj, ubj, &
1458 & sustr_ao, svstr_ao)