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) :: &
1227 real (kind=dbl_kind) :: &
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))
1273 if (hsn(i,j) > hsnomin)
then 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)
1310 call absorbed_solar &
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 1341 call surface_fluxes &
1342 (isolve, indxii, indxjj, &
1344 flwoutn, fsensn, flatn, fsurf, &
1345 dflwout_dt, dfsens_dt, dflat_dt, dfsurf_dt)
1360 if (hsn(i,j) > hsnomin)
then 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
1422 if (hsn(i,j) > hsnomin)
then 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 1449 if (hsn(i,j) > hsnomin)
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)
1491 if (hsn(i,j) > hsnomin)
then 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)
1578 call tridiag_solver &
1579 (isolve, indxii, indxjj, &
1580 nmat, sbdiag, diag, spdiag, rhs, tmat)
1590 if (hsn(i,j) > hsnomin)
then 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.
1654 if (l_brine) tsn(i,j) = min(tsn(i,j),
c0i)
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 &
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))
1745 qin(i,j,k) = -
rhoi * (
cp_ice*(tmlt(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)
1776 if (hsn(i,j) > hsnomin)
then 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)
1814 if (.not.all_converged .and.dbg_set(dbg_sbrio) )
then 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)
integer(kind=int_kind), parameter nilyr
real(kind=dbl_kind), parameter c0i
real(kind=dbl_kind), parameter c3i
real(kind=dbl_kind), parameter rhos
real(kind=dbl_kind), parameter lfresh
real(kind=dbl_kind), parameter cp_ice
real(kind=dbl_kind), parameter p5
real(kind=dbl_kind), parameter puny
real(kind=dbl_kind) dtice
real(kind=dbl_kind), parameter c2i
real(kind=dbl_kind), parameter c1i
real(kind=dbl_kind), parameter rhoi
real(kind=dbl_kind), parameter p333
real(kind=dbl_kind), parameter cp_ocn