84 real (kind=
dbl_kind),
dimension (:,:,:),
allocatable,
save ::&
88 real (kind=
dbl_kind),
dimension (:,:) ,
allocatable,
save ::&
91 logical (kind=log_kind) :: &
94 character (char_len),
private :: stoplabel
127 nsal = 0.407_dbl_kind&
128 , msal = 0.573_dbl_kind&
129 , saltmax = 3.2_dbl_kind &
130 , min_salin = 0.1_dbl_kind
132 integer (kind=int_kind) :: k
141 if (saltmax > min_salin)
then 151 salin(k)=(saltmax/
c2i)*(
c1i-cos(pi*zn**(nsal/(msal+zn))))
202 integer (kind=int_kind) :: &
209 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
218 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
235 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
246 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr) :: &
253 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
318 fsensn, flatn, fswabsn, flwoutn, &
319 evapn, freshn, fsaltn, fhnetn, &
320 fswthrun, fsurf, fcondtop, fcondbot, &
321 fswint, einit, efinal, mvap)
350 (ni, icells, indxi, indxj, &
351 hin, hlyr, hsn, hin_init, hsn_init, &
352 qin, tin, qsn, tsn, tsf, einit)
360 (ni, icells, indxi, indxj, &
361 hlyr, hsn, qin, tin, qsn, tsn, &
362 tsf, tbot, fbot, fsensn, flatn, fswabsn, &
363 flwoutn, fswthrun, fhnetn, fsurf, fcondtop, fcondbot, &
372 (ni, icells, indxi, indxj, &
373 hin, hlyr, hsn, qin, qsn, &
374 mvap, tbot, fbot, flatn, fhnetn, &
375 fsurf, fcondtop, fcondbot, efinal)
383 (ni, icells, indxi, indxj, &
384 fsurf, flatn, fhnetn, fswint, einit, efinal)
391 (ni, icells, indxi, indxj, &
392 hsn, hsn_new, qsn, tsf)
402 dhi = hin(i,j) - hin_init(i,j)
403 dhs = hsn(i,j) - hsn_init(i,j)
406 evapn(i,j) = mvap(i,j)/
dtice 408 freshn(i,j) = evapn(i,j) - &
422 strxn, stryn, fsensn, flatn, fswabsn, &
423 flwoutn, evapn, trefn, qrefn, &
424 freshn, fsaltn, fhnetn, fswthrun)
433 (ni, icells, indxi, indxj, &
434 hin, hsn, qin, qsn, tsf)
482 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(out) :: &
489 integer (kind=int_kind) :: &
496 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
499 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi) :: &
513 real (kind=
dbl_kind),
parameter :: &
515 , ustar_min = 5.e-3_dbl_kind
519 real (kind=
dbl_kind),
parameter :: &
520 floediam = 300.0_dbl_kind &
521 , alpha = 0.66_dbl_kind &
522 , m1 = 1.6e-6_dbl_kind &
566 deltat = max((
sst(i,j)-tbot(i,j)),
c0i)
572 fbot(i,j) = cpchr * deltat * ustar
574 fbot(i,j) = max(fbot(i,j),
frzmlt(i,j))
585 wlat = m1 * deltat**m2
604 etot(i,j) =
esnon(i,j,ni)
614 etot(i,j) = etot(i,j) +
eicen(i,j,
ilyr1(ni)+k-1)
626 fside(i,j) = fside(i,j) +
rside(i,j)*etot(i,j)/
dtice 644 xtmp =
frzmlt(i,j)/(fbot(i,j) + fside(i,j) +
puny)
645 xtmp = min(xtmp,
c1i)
646 fbot(i,j) = fbot(i,j) * xtmp
671 & fsensn, flatn, fswabsn, flwoutn, &
672 & evapn, freshn, fsaltn, fhnetn, &
673 & fswthrun, fsurf, fcondtop, fcondbot, &
674 & fswint, einit, efinal, mvap)
680 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(out) :: &
708 integer (kind=int_kind) :: &
760 (ni, icells, indxi, indxj, &
761 hin, hlyr, hsn, hin_init, hsn_init, &
762 qin, tin, qsn, tsn, tsf, einit)
770 integer (kind=int_kind),
intent(in) :: &
774 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
778 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(out) :: &
788 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr), &
793 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(inout) :: &
798 real (kind=
dbl_kind),
parameter :: &
799 tmin = -100._dbl_kind
801 integer (kind=int_kind) :: &
806 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi) :: &
812 logical (kind=log_kind) :: &
873 tsf(i,j) =
tsfcn(i,j,ni)
877 hin_init(i,j) = hin(i,j)
878 hsn_init(i,j) = hsn(i,j)
897 if (tsn(i,j) > tmax(i,j))
then 899 elseif (tsn(i,j) < tmin)
then 913 if (tsn(i,j) > tmax(i,j))
then 962 if (tsn(i,j) >
c0i)
then 967 einit(i,j) = hsn(i,j)*qsn(i,j)
994 tin(i,j,k) = (-bb1 - sqrt(bb1*bb1 -
c4i*aa1*cc1)) / &
1004 IF (tin(i,j,k) < tmin)
THEN 1014 tin(i,j,k) = (-bb1 - sqrt(bb1*bb1 -
c4i*aa1*cc1)) / &
1024 if (tin(i,j,k) > tmax(i,j))
then 1026 elseif (tin(i,j,k) < tmin)
then 1041 if (tin(i,j,k) > tmax(i,j))
then 1088 if (tin(i,j,k) >
c0i)
then 1093 einit(i,j) = einit(i,j) + hlyr(i,j)*qin(i,j,k)
1123 (ni, icells, indxi, indxj, &
1124 hlyr, hsn, qin, tin, qsn, tsn, &
1125 tsf, tbot, fbot, fsensn, flatn, fswabsn, &
1126 flwoutn, fswthrun, fhnetn, fsurf, fcondtop, fcondbot, &
1135 integer (kind=int_kind),
intent(in) :: &
1139 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
1143 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(inout):: &
1162 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr), &
1167 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(in):: &
1172 integer (kind=int_kind),
parameter :: &
1175 real (kind=
dbl_kind),
parameter :: &
1178 , tsf_errmax = 5.e-4
1181 integer (kind=int_kind) :: &
1189 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)) :: &
1192 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
1204 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
1211 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr) :: &
1217 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr+1) :: &
1220 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr+2) :: &
1233 , w1,w2,w3,w4,w5,w6,w7
1235 logical (kind=log_kind),
dimension (ilo:ihi,jlo:jhi) :: &
1238 logical (kind=log_kind) :: &
1245 all_converged = .false.
1255 converged(i,j) = .false.
1258 dtsf_prev(i,j) =
c0i 1259 tsf_start(i,j) =
c0i 1262 dfsurf_dt(i,j) =
c0i 1263 dfsens_dt(i,j) =
c0i 1265 dflwout_dt(i,j) =
c0i 1267 fhnetn(i,j) = fbot(i,j)
1271 dt_rhoi_hlyr(i,j) =
dtice / (
rhoi*hlyr(i,j))
1280 tsn_init(i,j) = tsn(i,j)
1281 tsn_start(i,j) = tsn(i,j)
1294 tin_init(i,j,k) = tin(i,j,k)
1295 tin_start(i,j,k) = tin(i,j,k)
1304 (icells, indxi, indxj, &
1305 hlyr, hsn, tin, tbot, khi, khs)
1311 (ni, icells, indxi, indxj, &
1312 hlyr, hsn, fswsfc, fswint, fswthrun, iabs)
1319 do niter = 1, nitermax
1321 if (all_converged)
then 1328 if (.not.converged(i,j))
then 1342 (isolve, indxii, indxjj, &
1344 flwoutn, fsensn, flatn, fsurf, &
1345 dflwout_dt, dfsens_dt, dflat_dt, dfsurf_dt)
1361 fcondtop(i,j) =
c2i * khs(i,j) * (tsf(i,j) - tsn(i,j))
1363 fcondtop(i,j) = khi(i,j,1) &
1364 * (alph*(tsf(i,j) - tin(i,j,1)) &
1365 + bet*(tsf(i,j) - tin(i,j,2)))
1367 if (fsurf(i,j) < fcondtop(i,j)) &
1368 tsf(i,j) = min(tsf(i,j), -
puny)
1373 tsf_start(i,j) = tsf(i,j)
1388 (tin_init(i,j,k)*tin(i,j,k))
1392 etai(i,j,k) = dt_rhoi_hlyr(i,j) / ci
1423 if (tsf(i,j) <= -
puny)
then 1424 spdiag(i,j,1) =
c2i*khs(i,j)
1425 diag(i,j,1) = dfsurf_dt(i,j) -
c2i*khs(i,j)
1426 rhs(i,j,1) = dfsurf_dt(i,j)*tsf(i,j) - fsurf(i,j)
1433 if (tsf(i,j) <= -
puny)
then 1450 if (tsf(i,j) <= -
puny)
then 1451 sbdiag(i,j,2) = -etas(i,j) *
c2i * khs(i,j)
1452 spdiag(i,j,2) = -etas(i,j) * khi(i,j,1)
1455 + etas(i,j) * (
c2i*khs(i,j) + khi(i,j,1))
1456 rhs(i,j,2) = tsn_init(i,j)
1459 spdiag(i,j,2) = -etas(i,j) * khi(i,j,1)
1462 + etas(i,j) * (
c2i*khs(i,j) + khi(i,j,1))
1463 rhs(i,j,2) = tsn_init(i,j) &
1464 + etas(i,j)*
c2i*khs(i,j)*tsf(i,j)
1467 if (tsf(i,j) <= -
puny)
then 1469 spdiag(i,j,2) = alph * khi(i,j,1)
1470 spdiag2 = bet * khi(i,j,1)
1471 diag(i,j,2) = dfsurf_dt(i,j) - alph*khi(i,j,1) &
1473 rhs(i,j,2) = dfsurf_dt(i,j)*tsf(i,j) - fsurf(i,j)
1492 if (tsf(i,j) <= -
puny)
then 1493 sbdiag(i,j,3) = -etai(i,j,1) * khi(i,j,1)
1494 spdiag(i,j,3) = -etai(i,j,1) * khi(i,j,2)
1496 + etai(i,j,1)*(khi(i,j,1) + khi(i,j,2))
1497 rhs(i,j,3) = tin_init(i,j,1) &
1498 + etai(i,j,1)*iabs(i,j,1)
1500 sbdiag(i,j,3) = -etai(i,j,1) * khi(i,j,1)
1501 spdiag(i,j,3) = -etai(i,j,1) * khi(i,j,2)
1503 + etai(i,j,1)*(khi(i,j,1) + khi(i,j,2))
1504 rhs(i,j,3) = tin_init(i,j,1) &
1505 + etai(i,j,1)*iabs(i,j,1)
1508 if (tsf(i,j) <= -
puny)
then 1509 sbdiag(i,j,3) = -(alph+bet) * etai(i,j,1) * khi(i,j,1)
1510 spdiag(i,j,3) = -etai(i,j,1) &
1511 * (khi(i,j,2) - bet*khi(i,j,1))
1512 diag(i,j,3) =
c1i + etai(i,j,1) &
1513 * (khi(i,j,2) + alph*khi(i,j,1))
1514 rhs(i,j,3) = tin_init(i,j,1) &
1515 + etai(i,j,1)*iabs(i,j,1)
1518 spdiag(i,j,3) = -etai(i,j,1) &
1519 * (khi(i,j,2) - bet*khi(i,j,1))
1520 diag(i,j,3) =
c1i + etai(i,j,1) &
1521 * (khi(i,j,2) + alph*khi(i,j,1))
1522 rhs(i,j,3) = tin_init(i,j,1) &
1523 + etai(i,j,1)*iabs(i,j,1)
1529 if (hsn(i,j) <=
hsnomin .and. tsf(i,j) <= -
puny)
then 1531 diag(i,j,2) = spdiag(i,j,3) * diag(i,j,2) &
1532 - spdiag2 * sbdiag(i,j,3)
1533 spdiag(i,j,2) = spdiag(i,j,3) * spdiag(i,j,2) &
1534 - spdiag2 * diag(i,j,3)
1535 rhs(i,j,2) = spdiag(i,j,3) * rhs(i,j,2) &
1536 - spdiag2 * rhs(i,j,3)
1544 sbdiag(i,j,k+2) = -etai(i,j,k) &
1545 * (khi(i,j,k) - bet*khi(i,j,k+1))
1546 spdiag(i,j,k+2) =
c0i 1547 diag(i,j,k+2) =
c1i + etai(i,j,k) &
1548 * (khi(i,j,k) + alph*khi(i,j,k+1))
1549 rhs(i,j,k+2) = tin_init(i,j,k) + etai(i,j,k)*iabs(i,j,k) &
1550 + (alph+bet)*etai(i,j,k) &
1551 *khi(i,j,k+1)*tbot(i,j)
1563 sbdiag(i,j,k+2) = -etai(i,j,k) * khi(i,j,k)
1564 spdiag(i,j,k+2) = -etai(i,j,k) * khi(i,j,k+1)
1565 diag(i,j,k+2) =
c1i - sbdiag(i,j,k+2) - spdiag(i,j,k+2)
1566 rhs(i,j,k+2) = tin_init(i,j,k) &
1567 + etai(i,j,k) * iabs(i,j,k)
1579 (isolve, indxii, indxjj, &
1580 nmat, sbdiag, diag, spdiag, rhs, tmat)
1591 if (tsf(i,j) <= -
puny)
then 1592 tsf(i,j) = tmat(i,j,1)
1593 tsn(i,j) = tmat(i,j,2)
1596 tsn(i,j) = tmat(i,j,2)
1599 if (tsf(i,j) <= -
puny)
then 1600 tsf(i,j) = tmat(i,j,2)
1613 tin(i,j,k) = tmat(i,j,k+2)
1645 all_converged = .true.
1662 converged(i,j) = .true.
1663 dtsf(i,j) = tsf(i,j) - tsf_start(i,j)
1674 if (tsf(i,j) >
puny)
then 1676 dtsf(i,j) = -tsf_start(i,j)
1681 converged(i,j) = .false.
1682 all_converged = .false.
1690 .and. tsf_start(i,j) <= -
puny &
1691 .and. abs(dtsf(i,j)) >
puny &
1692 .and. abs(dtsf_prev(i,j)) >
puny &
1693 .and. -dtsf(i,j)/(dtsf_prev(i,j)+
puny*
puny) >
p5)
then 1700 dtsf(i,j) =
p5 * dtsf(i,j)
1701 converged(i,j) = .false.
1702 all_converged = .false.
1710 tsf(i,j) = tsf(i,j) &
1711 + avg_tsf *
p5 * (tsf_start(i,j) - tsf(i,j))
1712 tsn(i,j) = tsn(i,j) &
1713 + avg_tsn *
p5 * (tsn_start(i,j) - tsn(i,j))
1719 enew(i,j) = hsn(i,j) * qsn(i,j)
1721 tsn_start(i,j) = tsn(i,j)
1733 if (
l_brine) tin(i,j,k) = min(tin(i,j,k),
tmlt(k))
1739 tin(i,j,k) = tin(i,j,k) &
1740 + avg_tin(i,j)*
p5*(tin_start(i,j,k)-tin(i,j,k))
1748 enew(i,j) = enew(i,j) + hlyr(i,j)*qin(i,j,k)
1750 tin_start(i,j,k) = tin(i,j,k)
1766 if (abs(dtsf(i,j)) > tsf_errmax)
then 1767 converged(i,j) = .false.
1768 all_converged = .false.
1775 fsurf(i,j) = fsurf(i,j) + dtsf(i,j)*dfsurf_dt(i,j)
1777 fcondtop(i,j) =
c2i * khs(i,j) * (tsf(i,j)-tsn(i,j))
1779 fcondtop(i,j) = khi(i,j,1) &
1780 * (alph*(tsf(i,j)-tin(i,j,1)) &
1781 + bet*(tsf(i,j)-tin(i,j,2)))
1784 if (tsf(i,j) > -
puny .and. fsurf(i,j) < fcondtop(i,j))
then 1785 converged(i,j) = .false.
1786 all_converged = .false.
1794 fcondbot(i,j) = khi(i,j,
nilyr+1) * &
1795 (alph*(tin(i,j,
nilyr) - tbot(i,j)) &
1796 + bet*(tin(i,j,
nilyr-1) - tbot(i,j)))
1799 ferr = abs( (enew(i,j)-einit(i,j))/
dtice &
1800 - (fcondtop(i,j) - fcondbot(i,j) + fswint(i,j)) )
1803 if (ferr > 0.9_dbl_kind*
ferrmax)
then 1804 converged(i,j) = .false.
1805 all_converged = .false.
1808 dtsf_prev(i,j) = dtsf(i,j)
1822 if (.not.converged(i,j))
then 1854 flwoutn(i,j) = flwoutn(i,j) + dtsf(i,j) * dflwout_dt(i,j)
1855 fsensn(i,j) = fsensn(i,j) + dtsf(i,j) * dfsens_dt(i,j)
1856 flatn(i,j) = flatn(i,j) + dtsf(i,j) * dflat_dt(i,j)
1859 fswabsn(i,j) = fswsfc(i,j) + fswint(i,j) + fswthrun(i,j)
1885 (icells, indxi, indxj, &
1886 hlyr, hsn, tin, tbot, khi, khs)
1892 integer (kind=int_kind),
intent(in) :: &
1895 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
1899 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(in) :: &
1904 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr), &
1908 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr+1), &
1912 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(out) :: &
1917 real (kind=
dbl_kind),
parameter :: &
1918 betak = 0.13_dbl_kind &
1919 , kimin = 0.10_dbl_kind
1921 integer (kind=int_kind) :: &
1942 khi(i,j,1) = ki / hlyr(i,j)
1947 khi(i,j,
nilyr+1) = ki / hlyr(i,j)
1951 khs(i,j) =
ksno / hsn(i,j)
1952 khi(i,j,1) =
c2i*khi(i,j,1)*khs(i,j) / &
1953 (khi(i,j,1) + khs(i,j))
1968 min(-
puny,
p5*(tin(i,j,k-1)+tin(i,j,k)))
1970 khi(i,j,k) = ki / hlyr(i,j)
1994 (ni, icells, indxi, indxj, &
1995 hlyr, hsn, fswsfc, fswint, fswthrun, iabs)
2003 integer (kind=int_kind),
intent(in) :: &
2007 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
2011 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(in) :: &
2015 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(inout) :: &
2020 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr), &
2026 real (kind=
dbl_kind),
parameter :: &
2027 i0vis = 0.70_dbl_kind
2029 integer (kind=int_kind) :: &
2034 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
2058 if (hsn(i,j) >
puny)
then 2059 frsnow = hsn(i,j) / (hsn(i,j) +
snowpatch)
2076 swabs = swabsv + swabsi
2078 fswpen(i,j) = swabsv * (
c1i-frsnow) * i0vis
2080 fswsfc(i,j) = swabs - fswpen(i,j)
2099 iabs(i,j,k) = fswpen(i,j) * (trantop(i,j)-tranbot(i,j))
2102 trantop(i,j) = tranbot(i,j)
2115 fswthrun(i,j) = fswpen(i,j) * tranbot(i,j)
2118 fswint(i,j) = fswpen(i,j) - fswthrun(i,j)
2142 (isolve, indxii, indxjj, &
2144 flwoutn, fsensn, flatn, fsurf, &
2145 dflwout_dt, dfsens_dt, dflat_dt, dfsurf_dt)
2151 integer (kind=int_kind),
intent(in) :: &
2154 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
2158 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(in) :: &
2162 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(inout):: &
2174 integer (kind=int_kind) :: &
2201 qsfc = qsat /
rhoa(i,j)
2202 dqsfcdt =
tttice * tmpvar*tmpvar * qsfc
2209 fsensn(i,j) =
shcoef(i,j) * (
pott(i,j) - tsfk)
2210 flatn(i,j) =
lhcoef(i,j) * (
qa(i,j) - qsfc)
2214 dfsens_dt(i,j) = -
shcoef(i,j)
2215 dflat_dt(i,j) = -
lhcoef(i,j) * dqsfcdt
2217 fsurf(i,j) = fswsfc(i,j) + flwdabs + flwoutn(i,j) &
2218 + fsensn(i,j) + flatn(i,j)
2219 dfsurf_dt(i,j) = dflwout_dt(i,j) &
2220 + dfsens_dt(i,j) + dflat_dt(i,j)
2243 (isolve, indxii, indxjj, &
2244 nmat, sbdiag, diag, spdiag, rhs, xout)
2250 integer (kind=int_kind),
intent(in) :: &
2253 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)),&
2257 integer (kind=int_kind),
intent(in) :: &
2260 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nmat), &
2267 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nmat), &
2273 integer (kind=int_kind) :: &
2278 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
2281 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nmat) :: &
2292 wbeta(i,j) = diag(i,j,1)
2293 xout(i,j,1) = rhs(i,j,1) / wbeta(i,j)
2305 wgamma(i,j,k) = spdiag(i,j,k-1) / wbeta(i,j)
2306 wbeta(i,j) = diag(i,j,k) - sbdiag(i,j,k)*wgamma(i,j,k)
2307 xout(i,j,k) = (rhs(i,j,k) - sbdiag(i,j,k)*xout(i,j,k-1)) &
2313 do k = nmat-1, 1, -1
2321 xout(i,j,k) = xout(i,j,k) - wgamma(i,j,k+1)*xout(i,j,k+1)
2345 (ni, icells, indxi, indxj, &
2346 hin, hlyr, hsn, qin, qsn, &
2347 mvap, tbot, fbot, flatn, fhnetn, &
2348 fsurf, fcondtop, fcondbot, efinal)
2354 integer (kind=int_kind),
intent(in) :: &
2358 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
2362 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(in) :: &
2370 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr), &
2374 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(inout):: &
2382 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(out) :: &
2387 real (kind=
dbl_kind),
parameter :: &
2390 integer (kind=int_kind) :: &
2395 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi) :: &
2414 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr) :: &
2418 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,0:nilyr) :: &
2430 hnew(i,j,k) = hlyr(i,j)
2451 hsn(i,j) = hsn(i,j) - dhs
2467 hnew(i,j,k) = hnew(i,j,k) - dhi
2487 w1 = -flatn(i,j) *
dtice 2488 esub(i,j) = max(w1,
c0i)
2495 if (hsn(i,j) >
puny)
then 2496 dhs = econ / (qsn(i,j) -
rhos*
lvap)
2497 hsn(i,j) = hsn(i,j) + dhs
2498 mvap(i,j) = mvap(i,j) + dhs*
rhos 2500 dhi = econ / (qin(i,j,1) -
rhoi*
lvap)
2501 hnew(i,j,1) = hnew(i,j,1) + dhi
2502 mvap(i,j) = mvap(i,j) + dhi*
rhoi 2509 dhs = max(-hsn(i,j), esub(i,j)/qsub)
2510 hsn(i,j) = hsn(i,j) + dhs
2511 esub(i,j) = esub(i,j) - dhs*qsub
2512 esub(i,j) = max(esub(i,j),
c0i)
2513 mvap(i,j) = mvap(i,j) + dhs*
rhos 2528 dhi = max(-hnew(i,j,k), esub(i,j)/qsub)
2529 hnew(i,j,k) = hnew(i,j,k) + dhi
2530 esub(i,j) = esub(i,j) - dhi*qsub
2531 esub(i,j) = max(esub(i,j),
c0i)
2532 mvap(i,j) = mvap(i,j) + dhi*
rhoi 2553 w1 = (fsurf(i,j) - fcondtop(i,j)) *
dtice 2554 etop_mlt(i,j) = max(w1,
c0i)
2555 dhs = max(-hsn(i,j), etop_mlt(i,j)/qsn(i,j))
2556 hsn(i,j) = hsn(i,j) + dhs
2557 etop_mlt(i,j) = etop_mlt(i,j) - dhs*qsn(i,j)
2558 etop_mlt(i,j) = max(etop_mlt(i,j),
c0i)
2578 dhi = max(-hnew(i,j,k), etop_mlt(i,j)/qin(i,j,k))
2579 hnew(i,j,k) = hnew(i,j,k) + dhi
2580 etop_mlt(i,j) = etop_mlt(i,j) - dhi*qin(i,j,k)
2581 etop_mlt(i,j) = max(etop_mlt(i,j),
c0i)
2603 w1 = (fcondbot(i,j) - fbot(i,j)) *
dtice 2604 ebot_mlt(i,j) = max(w1,
c0i)
2605 ebot_gro = min(w1,
c0i)
2615 qbot = min(qbot, qbotmax)
2616 dhi = ebot_gro / qbot
2618 hqtot = hnew(i,j,
nilyr)*qin(i,j,
nilyr) + dhi*qbot
2644 dhi = max(-hnew(i,j,k), ebot_mlt(i,j)/qin(i,j,k))
2645 hnew(i,j,k) = hnew(i,j,k) + dhi
2646 ebot_mlt(i,j) = ebot_mlt(i,j) - dhi*qin(i,j,k)
2647 ebot_mlt(i,j) = max(ebot_mlt(i,j),
c0i)
2666 dhs = max(-hsn(i,j), ebot_mlt(i,j)/qsn(i,j))
2667 hsn(i,j) = hsn(i,j) + dhs
2668 ebot_mlt(i,j) = ebot_mlt(i,j) - dhs*qsn(i,j)
2669 ebot_mlt(i,j) = max(ebot_mlt(i,j),
c0i)
2691 fhnetn(i,j) = fhnetn(i,j) &
2692 + (esub(i,j) + etop_mlt(i,j) + ebot_mlt(i,j))/
dtice 2711 efinal(i,j) = hsn(i,j)*qsn(i,j) - mvap(i,j)*
lvap 2726 hin(i,j) = hin(i,j) + hnew(i,j,k)
2744 if (hin(i,j) >
puny)
then 2746 rhlyr(i,j) =
c1i / hlyr(i,j)
2756 zold(i,j,
nilyr) = hin(i,j)
2757 znew(i,j,
nilyr) = hin(i,j)
2766 zold(i,j,k) = zold(i,j,k-1) + hnew(i,j,k)
2767 znew(i,j,k) = znew(i,j,k-1) + hlyr(i,j)
2785 hovlp = min(zold(i,j,kold), znew(i,j,k)) &
2786 - max(zold(i,j,kold-1), znew(i,j,k-1))
2787 hovlp = max(hovlp,
c0i)
2789 hq(i,j,k) = hq(i,j,k) + hovlp*qin(i,j,kold)
2809 qin(i,j,k) = hq(i,j,k) * rhlyr(i,j)
2810 efinal(i,j) = efinal(i,j) + hlyr(i,j)*qin(i,j,k)
2835 (ni, icells, indxi, indxj, &
2836 fsurf, flatn, fhnetn, fswint, einit, efinal)
2844 integer (kind=int_kind),
intent(in) :: &
2848 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
2852 real (kind=
dbl_kind),
dimension (ilo:ihi, jlo:jhi),
intent(in) :: &
2862 integer (kind=int_kind) :: &
2870 logical (kind=log_kind) :: &
2882 einp = (fsurf(i,j) - flatn(i,j) + fswint(i,j) - fhnetn(i,j)) &
2886 ferr = abs(efinal(i,j)-einit(i,j)-einp) /
dtice 2906 einp = (fsurf(i,j) - flatn(i,j) + fswint(i,j) - &
2907 fhnetn(i,j)) *
dtice 2910 ferr = abs(efinal(i,j)-einit(i,j)-einp) /
dtice 2950 (ni, icells, indxi, indxj, &
2951 hsn, hsn_new, qsn, tsf)
2957 integer (kind=int_kind),
intent(in) :: &
2961 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
2965 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(in):: &
2968 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(inout):: &
2972 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi),
intent(out) :: &
2981 integer (kind=int_kind) :: &
3006 hstot = hsn(i,j) + hsn_new(i,j)
3007 if (hstot >
puny)
then 3008 qsn(i,j) = (hsn(i,j) *qsn(i,j) &
3009 + hsn_new(i,j)*qsnew ) / hstot
3040 (ni, icells, indxi, indxj, &
3041 hin, hsn, qin, qsn, tsf)
3047 integer (kind=int_kind),
intent(in) :: &
3051 integer (kind=int_kind),
dimension(1:(ihi-ilo+1)*(jhi-jlo+1)), &
3056 real (kind=
dbl_kind),
dimension(ilo:ihi,jlo:jhi),
intent(in) :: &
3062 real (kind=
dbl_kind),
dimension (ilo:ihi,jlo:jhi,nilyr), &
3068 integer (kind=int_kind) :: &
3080 if (hin(i,j) >
c0i)
then 3085 tsfcn(i,j,ni) = tsf(i,j)
3104 if (hin(i,j) >
c0i)
then real(kind=dbl_kind), dimension(:,:), allocatable, save tf
integer(kind=int_kind), parameter nilyr
real(kind=dbl_kind), dimension(:,:), allocatable, save lhcoef
real(kind=dbl_kind), parameter depresst
real(kind=dbl_kind), dimension(:,:,:), allocatable, save alidrn
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save esnon
real(kind=dbl_kind), parameter tttice
integer, parameter dbl_kind
logical function dbg_set(vrb)
real(kind=dbl_kind), dimension(:,:,:), allocatable, save hicen_old
subroutine frzmlt_bottom_lateral(Tbot, fbot, rside)
real(kind=dbl_kind), dimension(:,:), allocatable, save strocnxt
integer(kind=int_kind) ihi
real(kind=dbl_kind), parameter c0i
real(kind=dbl_kind), parameter lvap
real(kind=dbl_kind), parameter c3i
real(kind=dbl_kind), parameter rhos
real(kind=dbl_kind), parameter qqqice
real(kind=dbl_kind), dimension(:,:), allocatable, save swvdf
real(kind=dbl_kind), parameter lfresh
real(kind=dbl_kind), parameter ice_ref_salinity
subroutine init_thermo_vertical
real(kind=dbl_kind), dimension(:,:), allocatable, save rhoa
real(kind=dbl_kind), dimension(:,:), allocatable, save pott
subroutine init_vertical_profile(ni, icells, indxi, indxj, hin, hlyr, hsn, hin_init, hsn_init, qin, Tin, qsn, Tsn, Tsf, einit)
real(kind=dbl_kind), parameter stefan_boltzmann
real(kind=dbl_kind), parameter c4i
real(kind=dbl_kind), parameter snowpatch
real(kind=dbl_kind), dimension(:,:), allocatable, save flw
integer(kind=int_kind) jlo
real(kind=dbl_kind), dimension(:,:), allocatable, save sst
real(kind=dbl_kind), dimension(:,:), allocatable, save congel
real(kind=dbl_kind), parameter cp_ice
real(kind=dbl_kind), parameter emissivity
subroutine conservation_check_vthermo(ni, icells, indxi, indxj, fsurf, flatn, fhnetn, fswint, einit, efinal)
real(kind=dbl_kind), dimension(:,:,:), allocatable, save alidfn
real(kind=dbl_kind), dimension(:,:,:), allocatable, save alvdrn
real(kind=dbl_kind), dimension(nilyr+1) tmlt
integer(kind=int_kind) ilo
real(kind=dbl_kind), parameter p5
real(kind=dbl_kind), parameter puny
real(kind=dbl_kind), parameter tffresh
subroutine tridiag_solver(isolve, indxii, indxjj, nmat, sbdiag, diag, spdiag, rhs, xout)
real(kind=dbl_kind) dtice
integer(kind=int_kind) jhi
real(kind=dbl_kind), dimension(:,:), allocatable, save meltt
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save tsfcn
integer, parameter dbg_sbrio
real(kind=dbl_kind), dimension(:,:), allocatable worka
real(kind=dbl_kind), parameter p001
subroutine merge_fluxes(ni, strxn, stryn, fsensn, flatn, fswabsn, flwoutn, evapn, Trefn, Qrefn, freshn, fsaltn, fhnetn, fswthrun)
subroutine add_new_snow(ni, icells, indxi, indxj, hsn, hsn_new, qsn, Tsf)
real(kind=dbl_kind), parameter rhow
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save vicen
subroutine update_state_vthermo(ni, icells, indxi, indxj, hin, hsn, qin, qsn, Tsf)
real(kind=dbl_kind), parameter hsnomin
real(kind=dbl_kind), dimension(:,:), allocatable, target, save aice
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save eicen
subroutine atmo_boundary_layer(ni, sfctype, Tsf, strx, stry, Trf, Qrf, delt, delq)
integer(kind=int_kind), parameter ncat
real(kind=dbl_kind), parameter c2i
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save aicen
subroutine thickness_changes(ni, icells, indxi, indxj, hin, hlyr, hsn, qin, qsn, mvap, Tbot, fbot, flatn, fhnetn, fsurf, fcondtop, fcondbot, efinal)
real(kind=dbl_kind), dimension(:,:), allocatable, save swvdr
subroutine init_diagnostics
real(kind=dbl_kind), dimension(:,:), allocatable, save frzmlt
real(kind=dbl_kind), parameter ferrmax
real(kind=dbl_kind), dimension(:,:), allocatable, save meltb
real(kind=dbl_kind), dimension(:,:), allocatable, save shcoef
real(kind=dbl_kind), dimension(:,:), allocatable, save strocnyt
real(kind=dbl_kind), dimension(:,:), allocatable, save fsnow
real(kind=dbl_kind), parameter c1i
real(kind=dbl_kind), dimension(:,:), allocatable workb
real(kind=dbl_kind), dimension(:,:), allocatable, save qa
real(kind=dbl_kind), dimension(:,:), allocatable, save swidf
real(kind=dbl_kind), dimension(:,:), allocatable, save frz_onset
real(kind=dbl_kind), parameter ksno
real(kind=dbl_kind) ustar_scale
subroutine init_thermo_vars(strxn, stryn, Trefn, Qrefn, fsensn, flatn, fswabsn, flwoutn, evapn, freshn, fsaltn, fhnetn, fswthrun, fsurf, fcondtop, fcondbot, fswint, einit, efinal, mvap)
logical(kind=log_kind) l_brine
real(kind=dbl_kind), dimension(:,:), allocatable, save rside
subroutine temperature_changes(ni, icells, indxi, indxj, hlyr, hsn, qin, Tin, qsn, Tsn, Tsf, Tbot, fbot, fsensn, flatn, fswabsn, flwoutn, fswthrun, fhnetn, fsurf, fcondtop, fcondbot, fswint, einit)
subroutine thermo_vertical
real(kind=dbl_kind), parameter rhoi
real(kind=dbl_kind), parameter kice
real(kind=dbl_kind), parameter p333
real(kind=dbl_kind), parameter eps11
subroutine surface_fluxes(isolve, indxii, indxjj, Tsf, fswsfc, flwoutn, fsensn, flatn, fsurf, dflwout_dT, dfsens_dT, dflat_dT, dfsurf_dT)
real(kind=dbl_kind), dimension(:,:), allocatable, save swidr
real(kind=dbl_kind), dimension(:,:), allocatable, save mlt_onset
integer(kind=int_kind), dimension(ncat) ilyr1
real(kind=dbl_kind), parameter kappav
subroutine absorbed_solar(ni, icells, indxi, indxj, hlyr, hsn, fswsfc, fswint, fswthrun, Iabs)
real(kind=dbl_kind), dimension(nilyr+1) salin
real(kind=dbl_kind), dimension(:,:,:), allocatable, save alvdfn
subroutine conductivity(icells, indxi, indxj, hlyr, hsn, Tin, Tbot, khi, khs)
real(kind=dbl_kind), dimension(:,:,:), allocatable, target, save vsnon
real(kind=dbl_kind), parameter cp_ocn