170 & LBi, UBi, LBj, UBj, &
171 & IminS, ImaxS, JminS, JmaxS, &
172 & nrhs, liold, linew, &
187 & aiclm, hiclm, AInudgcof, &
191 & Qnet_ai, Qnet_ao, &
200 integer,
intent(in) :: ng, tile, model
201 integer,
intent(in) :: lbi, ubi, lbj, ubj
202 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
203 integer,
intent(in) :: nrhs, liold, linew
207 real(r8),
intent(in) :: rmask(lbi:,lbj:)
210 real(r8),
intent(in) :: rmask_wet(lbi:,lbj:)
213 real(r8),
intent(in) :: zice(lbi:,lbj:)
216 real(r8),
intent(in) :: h(lbi:,lbj:)
217 real(r8),
intent(in) :: zt_avg1(lbi:,lbj:)
220 real(r8),
intent(in) :: aiclm(lbi:,lbj:)
221 real(r8),
intent(in) :: hiclm(lbi:,lbj:)
222 real(r8),
intent(in) :: ainudgcof(lbi:,lbj:)
224 real(r8),
intent(in) :: z_r(lbi:,lbj:,:)
225 real(r8),
intent(in) :: z_w(lbi:,lbj:,0:)
226 real(r8),
intent(in) :: t(lbi:,lbj:,:,:,:)
227 real(r8),
intent(in) :: sustr(lbi:,lbj:)
228 real(r8),
intent(in) :: svstr(lbi:,lbj:)
229 real(r8),
intent(in) :: qnet_ai(lbi:,lbj:)
230 real(r8),
intent(in) :: qnet_ao(lbi:,lbj:)
231 real(r8),
intent(in) :: snow(lbi:,lbj:)
232 real(r8),
intent(in) :: rain(lbi:,lbj:)
233 real(r8),
intent(inout) :: stflx(lbi:,lbj:,:)
234 real(r8),
intent(inout) :: fi(lbi:,lbj:,:)
235 real(r8),
intent(inout) :: si(lbi:,lbj:,:,:)
238 real(r8),
intent(in) :: rmask(lbi:ubi,lbj:ubj)
241 real(r8),
intent(in) :: rmask_wet(lbi:ubi,lbj:ubj)
244 real(r8),
intent(in) :: zice(lbi:ubi,lbj:ubj)
247 real(r8),
intent(in) :: h(lbi:ubi,lbj:ubj)
248 real(r8),
intent(in) :: zt_avg1(lbi:ubi,lbj:ubj)
251 real(r8),
intent(in) :: aiclm(lbi:ubi,lbj:ubj)
252 real(r8),
intent(in) :: hiclm(lbi:ubi,lbj:ubj)
253 real(r8),
intent(in) :: ainudgcof(lbi:ubi,lbj:ubj)
255 real(r8),
intent(in) :: z_r(lbi:ubi,lbj:ubj,
n(ng))
256 real(r8),
intent(in) :: z_w(lbi:ubi,lbj:ubj,0:
n(ng))
257 real(r8),
intent(in) :: t(lbi:ubi,lbj:ubj,
n(ng),3,
nt(ng))
258 real(r8),
intent(in) :: sustr(lbi:ubi,lbj:ubj)
259 real(r8),
intent(in) :: svstr(lbi:ubi,lbj:ubj)
260 real(r8),
intent(in) :: qnet_ai(lbi:ubi,lbj:ubj)
261 real(r8),
intent(in) :: qnet_ao(lbi:ubi,lbj:ubj)
262 real(r8),
intent(in) :: snow(lbi:ubi,lbj:ubj)
263 real(r8),
intent(in) :: rain(lbi:ubi,lbj:ubj)
264 real(r8),
intent(inout) :: stflx(lbi:ubi,lbj:ubj,
nt(ng))
265 real(r8),
intent(inout) :: fi(lbi:ubi,lbj:ubj,
nicef)
266 real(r8),
intent(inout) :: si(lbi:ubi,lbj:ubj,2,
nices)
275 real(r8),
parameter :: alphic = 2.034_r8
276 real(r8),
parameter :: alphsn = 0.31_r8
277 real(r8),
parameter :: cp_i = 2093.0_r8
278 real(r8),
parameter :: cp_w = 3990.0_r8
279 real(r8),
parameter :: eps = 1.0e-4_r8
280 real(r8),
parameter :: frln = -0.0543_r8
281 real(r8),
parameter :: hfus = 3.347e+5_r8
282 real(r8),
parameter :: kappa = 0.4_r8
283 real(r8),
parameter :: nu = 1.8e-6_r8
284 real(r8),
parameter :: prs = 2432.0_r8
285 real(r8),
parameter :: prt = 13.0_r8
286 real(r8),
parameter :: rhocpr = 0.2442754e-6_r8
287 real(r8),
parameter :: rhosw = 1026.0_r8
288 real(r8),
parameter :: sice_ref = 3.2_r8
289 real(r8),
parameter :: tpr = 0.85_r8
290 real(r8),
parameter :: ykf = 3.14
291 real(r8),
parameter :: z0ii = 0.02_r8
293 real(r8) :: cff, cff1, cff2, cff3
294 real(r8) :: d1, d2i, d3, dztop, fac_shflx
295 real(r8) :: ai_tmp, corfac, cot, delta_mi
296 real(r8) :: hicehinv, hstar, mi_old, phi
297 real(r8) :: qsur, rno, termt, terms, tfrz, tfz
298 real(r8) :: xwai, xtot, z0, zdz0, xmelt
300 real(r8) :: clear, fac_sf, hh
303 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: alph
304 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: brnfr
305 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: b2d
306 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: chs
307 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: cht
308 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: coa
309 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: hfus1
310 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ice_thick
311 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: qai
312 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: qio
313 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: qi2
314 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: salt_top
315 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: sice
316 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: snow_thick
317 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: temp_top
318 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: t2
319 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: utau
320 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ws
321 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wsm
323#include "set_bounds.h"
342 temp_top(i,j)=t(i,j,
n(ng),nrhs,
itemp)
343 salt_top(i,j)=t(i,j,
n(ng),nrhs,
isalt)
344 salt_top(i,j)=min(max(0.0_r8, salt_top(i,j)), 40.0_r8)
352 utau(i,j)=sqrt(sqrt((0.5_r8*(sustr(i ,j)+ &
354 & (0.5_r8*(svstr(i,j )+ &
355 & svstr(i,j+1)))**2))
356 utau(i,j)=max(utau(i,j), 1.0e-4_r8)
365 sice(i,j)=min(sice_ref, salt_top(i,j))
366 ice_thick(i,j)=0.05_r8+ &
368 & (si(i,j,linew,
isaice)+eps)
369 snow_thick(i,j)=si(i,j,linew,
ishsno)/ &
370 (si(i,j,linew,
isaice)+eps)
371 brnfr(i,j)=frln*sice(i,j)/(si(i,j,linew,
istice)-eps)
372 brnfr(i,j)=min(brnfr(i,j),0.2_r8)
373 brnfr(i,j)=max(brnfr(i,j),0.0_r8)
374 alph(i,j)=alphic*max(1.0_r8-1.2_r8*brnfr(i,j), 0.25_r8)
375 cff=(si(i,j,linew,
ishice)/1.0_r8)**2
376 corfac=1.0_r8/(0.5_r8*(1.0_r8+exp(-cff)))
377 alph(i,j)=alph(i,j)*corfac
378 coa(i,j)=2.0_r8*alph(i,j)*snow_thick(i,j)/ &
379 & (alphsn*ice_thick(i,j))
392 b2d(i,j)=2.0_r8*alph(i,j)/(ice_thick(i,j)*(1.0_r8+coa(i,j)))
401 & b2d(i,j)*(si(i,j,linew,
istice)+273.15_r8)
410 fi(i,j,
icisst)=min(max(fi(i,j,
icisst),-45.0_r8), 0.0_r8)
412 fi(i,j,
icisst)=temp_top(i,j)
429 cot=-frln*sice(i,j)*hfus/ &
430 & (min(si(i,j,linew,
istice), frln*sice_ref))**2+cp_i
431 cff1=
icerho(ng)*cot*ice_thick(i,j)**2
432 cff2=fi(i,j,
icisst)-(2.0_r8+coa(i,j))*si(i,j,linew,
istice)
436 & (2.0_r8*alph(i,j)/cff1* &
437 & (fi(i,j,
ict0mk)+cff2/cff3))
438 si(i,j,linew,
istice)=max(si(i,j,linew,
istice), -35.0_r8)
455 si(i,j,linew,
istice)=temp_top(i,j)
465 hicehinv=1.0_r8/(0.5_r8*ice_thick(i,j))
466 t2(i,j) =(fi(i,j,
icisst)+coa(i,j)*si(i,j,linew,
istice))/ &
468 qi2(i,j)=alph(i,j)* &
469 & (si(i,j,linew,
istice)-t2(i,j))*hicehinv
470 qio(i,j)=alph(i,j)* &
473 qai(i,j)=qnet_ai(i,j)
484 si(i,j,linew,
istice)=-2.0_r8
487 t2(i,j)=t2(i,j)*rmask(i,j)
491 t2(i,j)=t2(i,j)*rmask_wet(i,j)
492 si(i,j,linew,
istice)=si(i,j,linew,
istice)*rmask_wet(i,j)
496 IF (zice(i,j).ne.0.0_r8)
THEN
499 si(i,j,linew,
istice)=0.0_r8
505 si(i,j,linew,
ishsno)=0.0_r8
506 si(i,j,linew,
ishmel)=0.0_r8
519 ws(i,j)=max(snow(i,j), 0.0_r8)
533 cff=1.0_r8-brnfr(i,j)
534 hfus1(i,j)=hfus*cff+ &
536 & (cff*cp_i+brnfr(i,j)*cp_w)*si(i,j,linew,
istice)
537 qai(i,j)=qnet_ai(i,j)
540 IF ((si(i,j,linew,
ishsno).le.eps).and. &
541 & (si(i,j,linew,
ishmel).le.eps))
THEN
542 qsur=-(qai(i,j)-qi2(i,j))/(hfus1(i,j)*rhosw)
543 ELSE IF ((si(i,j,linew,
ishsno).le.eps).and. &
544 & (si(i,j,linew,
ishmel).gt.eps))
THEN
545 qsur=-(qai(i,j)-qi2(i,j))/(hfus1(i,j)*1003.1_r8)
547 qsur=-(qai(i,j)-qi2(i,j))/(hfus*
snowwetrho(ng))
550 IF ((si(i,j,linew,
ishsno).gt.eps).and. &
551 & (fi(i,j,
icisst).ge.0.0_r8))
THEN
554 & max(qsur, 0.0_r8)*
dtice(ng)
557 & max(qsur, 0.0_r8)* &
559 ELSE IF ((si(i,j,linew,
ishmel).gt.eps).and. &
560 & (fi(i,j,
icisst).le.tfrz))
THEN
561 fi(i,j,
icw_ai)=min(qsur, 0.0_r8)
564 & min(qsur, 0.0_r8)*
dtice(ng)
565 ELSE IF ((si(i,j,linew,
ishsno).le.eps).and. &
566 & (si(i,j,linew,
ishmel).ge.eps).and. &
567 & (fi(i,j,
icisst).gt.tfrz))
THEN
568 fi(i,j,
icw_ai)=max(qsur, 0.0_r8)
571 & max(qsur, 0.0_r8)*
dtice(ng)
572 ELSE IF ((si(i,j,linew,
ishsno).lt.eps).and. &
573 & (si(i,j,linew,
ishmel).lt.eps).and. &
574 & (fi(i,j,
icisst).gt.tfrz))
THEN
575 fi(i,j,
icw_ai)=max(qsur, 0.0_r8)
578 & max(qsur, 0.0_r8)*
dtice(ng)
581 IF (rain(i,j).le.0.0_r8)
THEN
585 ELSE IF ((si(i,j,linew,
ishsno).gt.0.0_r8).and. &
586 & (si(i,j,linew,
ishmel).eq.0.0_r8))
THEN
587 si(i,j,linew,
ishsno)=max(0.0_r8, si(i,j,linew,
ishsno)- &
588 & si(i,j,linew,
isaice)*rain(i,j)/ &
591 & 2.0_r8*si(i,j,linew,
isaice)* &
593 ELSE IF ((si(i,j,linew,
ishsno).gt.0.0_r8).and. &
594 & (si(i,j,linew,
ishmel).gt.0.0_r8))
THEN
595 si(i,j,linew,
ishsno)=max(0.0_r8, si(i,j,linew,
ishsno)- &
596 & 0.5_r8*si(i,j,linew,
isaice)* &
599 & 0.5_r8*si(i,j,linew,
isaice)* &
603 & 0.5_r8*rain(i,j)/rhosw*
dtice(ng)
604 ELSE IF (si(i,j,linew,
ishmel).gt.0.0_r8)
THEN
607 & rain(i,j)/rhosw*
dtice(ng)
616 IF (si(i,j,linew,
ishmel).gt. &
637 z0=max(z0ii*ice_thick(i,j), 0.01_r8)
639 dztop=z_w(i,j,
n(ng))-z_r(i,j,
n(ng))
641 zdz0=max(zdz0, 3.0_r8)
642 rno=utau(i,j)*0.09_r8/nu
643 termt=ykf*sqrt(rno)*prt**0.666667_r8
644 terms=ykf*sqrt(rno)*prs**0.666667_r8
645 cht(i,j)=utau(i,j)/(tpr*(log(zdz0)/kappa+termt))
646 chs(i,j)=utau(i,j)/(tpr*(log(zdz0)/kappa+terms))
654 tfz=frln*salt_top(i,j)
657 xwai=max(0.0_r8, fi(i,j,
icw_ai))
658 cff=1.0_r8-brnfr(i,j)
659 hfus1(i,j)=hfus*cff+ &
661 & (cff*cp_i+brnfr(i,j)*cp_w)*si(i,j,linew,
istice)
662 IF (((temp_top(i,j).le.tfz).and.(qnet_ao(i,j).gt.0.0_r8)).or. &
663 & ((temp_top(i,j).ge.tfz).and.(qnet_ao(i,j).lt.0.0_r8).and. &
664 & (si(i,j,linew,
isaice).gt.0.0_r8)))
THEN
665 fi(i,j,
icw_ao)=qnet_ao(i,j)/(hfus1(i,j)*rhosw)
669 fi(i,j,
ics0mk)=salt_top(i,j)
670 fi(i,j,
ict0mk)=temp_top(i,j)
674 fi(i,j,
icw_io)=(qio(i,j)/rhosw+ &
675 & cp_w*cht(i,j)*(fi(i,j,
ict0mk)- &
676 & temp_top(i,j)))/hfus1(i,j)
684 fi(i,j,
ics0mk)=(chs(i,j)*salt_top(i,j)+ &
685 & (xwai-fi(i,j,
icw_io))*sice(i,j))/ &
734 icecavity=zice(i,j).ne.0.0_r8
738 IF (.not.icecavity)
THEN
740 stflx(i,j,
itemp)=qnet_ao(i,j)*fac_shflx
743 hh=h(i,j)+zt_avg1(i,j)
744 clear=hh-0.9_r8*si(i,j,liol,
ishice)
745 clear=max(clear, 0.0_r8)
746 IF (clear.lt.1.5_r8)
THEN
747 fac_sf=max(clear-0.5_r8, 0.0_r8)/1.0_r8
752 & qnet_ao(i,j)*fac_shflx+ &
753 & (si(i,j,linew,
isaice)*qio(i,j)- &
754 & xtot*hfus1(i,j))*fac_sf
758 & si(i,j,linew,
isaice)*qio(i,j)- &
759 & xtot*hfus1(i,j)*rhosw
773 cff=min(max(fi(i,j,
ics0mk), 0.0_r8), 60.0_r8)
775 & ((xtot-si(i,j,linew,
isaice)*xwai)* &
778 & fi(i,j,
icw_ro)*cff)*fac_sf
781 & ((si(i,j,linew,
isaice)* &
783 & (1.0_r8-si(i,j,linew,
isaice))* &
786 & (salt_top(i,j)-sice(i,j))- &
788 & (fi(i,j,
icw_ro)-xwai)*salt_top(i,j)
817 stflx(i,j,
isalt)=stflx(i,j,
isalt)*rmask_wet(i,j)
823 & si(i,j,linew,
isaice)*xwai- &
847 mi_old=si(i,j,linew,
ishice)
849 IF (fi(i,j,
icw_ao).lt. 0.0_r8) phi=0.5_r8
853 & (si(i,j,linew,
isaice)* &
855 & (1.0_r8-si(i,j,linew,
isaice))* &
858 ai_tmp=si(i,j,linew,
isaice)
861 & (1.0_r8-si(i,j,linew,
isaice))* &
864 IF (si(i,j,linew,
isaice).lt.ai_tmp)
THEN
866 & si(i,j,linew,
isaice)/max(ai_tmp, eps)
875 hstar=si(i,j,linew,
ishsno)- &
877 IF (hstar.gt.0.0_r8)
THEN
889 & (aiclm(i,j)-si(i,j,linew,
isaice))
892 & (hiclm(i,j)-si(i,j,linew,
ishice))
898 IF ((si(i,j,linew,
isiage).le.0.0_r8).and. &
901 ELSE IF((si(i,j,linew,
isiage).gt.0.0_r8).and. &
903 delta_mi=min(max(si(i,j,linew,
ishice)-mi_old, 0.0_r8)/ &
904 & si(i,j,linew,
ishice), 1.0_r8)
907 & si(i,j,linew,
isiage)*delta_mi
909 si(i,j,linew,
isiage)=0.0_r8
921 IF (zice(i,j).ne.0.0_r8)
THEN
922 si(i,j,linew,
isaice)=0.0_r8
923 si(i,j,linew,
ishice)=0.0_r8
938 si(i,j,linew,
istice)=max(si(i,j,linew,
istice), -70.0_r8)
939 IF (si(i,j,linew,
ishice).le.0.0_r8) &
940 & si(i,j,linew,
isaice)=0.0_r8
941 IF (si(i,j,linew,
isaice).le.0.0_r8) &
942 & si(i,j,linew,
ishice)=0.0_r8
951 & lbi, ubi, lbj, ubj, &
955 & lbi, ubi, lbj, ubj, &
959 & lbi, ubi, lbj, ubj, &
963 & lbi, ubi, lbj, ubj, &
967 & lbi, ubi, lbj, ubj, &
970 CALL ice_bc2d_tile (ng, tile, model,
isaice, &
971 & lbi, ubi, lbj, ubj, &
972 & imins, imaxs, jmins, jmaxs, &
979 CALL ice_bc2d_tile (ng, tile, model,
ishice, &
980 & lbi, ubi, lbj, ubj, &
981 & imins, imaxs, jmins, jmaxs, &
988 CALL ice_bc2d_tile (ng, tile, model,
ishsno, &
989 & lbi, ubi, lbj, ubj, &
990 & imins, imaxs, jmins, jmaxs, &
997 CALL ice_bc2d_tile (ng, tile, model,
ishmel, &
998 & lbi, ubi, lbj, ubj, &
999 & imins, imaxs, jmins, jmaxs, &
1006 CALL ice_bc2d_tile (ng, tile, model,
isiage, &
1007 & lbi, ubi, lbj, ubj, &
1008 & imins, imaxs, jmins, jmaxs, &
1015 CALL ice_tibc_tile (ng, tile, model, &
1016 & lbi, ubi, lbj, ubj, &
1026 & lbi, ubi, lbj, ubj, &
1030 & lbi, ubi, lbj, ubj, &
1034 & lbi, ubi, lbj, ubj, &
1038 & lbi, ubi, lbj, ubj, &
1042 & lbi, ubi, lbj, ubj, &
1046 & lbi, ubi, lbj, ubj, &
1050 & lbi, ubi, lbj, ubj, &
1054 & lbi, ubi, lbj, ubj, &
1061 & lbi, ubi, lbj, ubj, &
1063 & si(:,:,linew,
ishage), &
1064 & si(:,:,linew,
ishice), &
1065 & si(:,:,linew,
ishmel), &
1069 & lbi, ubi, lbj, ubj, &
1071 & si(:,:,linew,
isaice), &
1072 & si(:,:,linew,
isiage), &
1073 & si(:,:,linew,
isenth), &