237 |
C !----------------------------------------------------------------- |
C !----------------------------------------------------------------- |
238 |
C ! freezing conditions |
C ! freezing conditions |
239 |
C !----------------------------------------------------------------- |
C !----------------------------------------------------------------- |
240 |
C if higher than hihig, use all frzmlt energy to grow extra ice |
C if higher than hThickIce, use all frzmlt energy to grow extra ice |
241 |
IF (hi.GT.hihig .AND. iceFrac.LE.iceMaskmax) THEN |
IF (hi.GT.hThickIce .AND. iceFrac.LE.iceMaskMax) THEN |
242 |
Fbot=0. _d 0 |
Fbot=0. _d 0 |
243 |
ELSE |
ELSE |
244 |
Fbot=frzmlt |
Fbot=frzmlt |
251 |
C frictional velocity between ice and water |
C frictional velocity between ice and water |
252 |
ustar = SQRT(0.00536 _d 0*oceV2s) |
ustar = SQRT(0.00536 _d 0*oceV2s) |
253 |
ustar=max(5. _d -3,ustar) |
ustar=max(5. _d -3,ustar) |
254 |
cpchr =cpwater*rhosw*transcoef |
cpchr =cpWater*rhosw*bMeltCoef |
255 |
Fbot = cpchr*(Tf-oceTs)*ustar ! < 0 |
Fbot = cpchr*(Tf-oceTs)*ustar ! < 0 |
256 |
Fbot = max(Fbot,frzmlt) ! frzmlt < Fbot < 0 |
Fbot = max(Fbot,frzmlt) ! frzmlt < Fbot < 0 |
257 |
Fbot = min(Fbot,0. _d 0) |
Fbot = min(Fbot,0. _d 0) |
259 |
|
|
260 |
C mass of fresh water and salt initially present in ice |
C mass of fresh water and salt initially present in ice |
261 |
mwater0 = rhos*hs + rhoi*hi |
mwater0 = rhos*hs + rhoi*hi |
262 |
msalt0 = rhoi*hi*saltice |
msalt0 = rhoi*hi*saltIce |
263 |
|
|
264 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
265 |
IF (dBug(i,j,bi,bj) ) WRITE(6,1020) |
IF (dBug(i,j,bi,bj) ) WRITE(6,1020) |
270 |
|
|
271 |
C Compute energy available for melting/growth. |
C Compute energy available for melting/growth. |
272 |
|
|
273 |
IF (hi.LT.himin0) THEN |
IF (hi.LT.hThinIce) THEN |
274 |
C below a certain height, all energy goes to changing ice extent |
C below a certain height, all energy goes to changing ice extent |
275 |
frace=1. _d 0 |
frace=1. _d 0 |
276 |
ELSE |
ELSE |
277 |
frace=frac_energy |
frace=fracEnMelt |
278 |
ENDIF |
ENDIF |
279 |
IF (hi.GT.hihig) THEN |
IF (hi.GT.hThickIce) THEN |
280 |
C above certain height only melt from top |
C above certain height only melt from top |
281 |
frace=0. _d 0 |
frace=0. _d 0 |
282 |
ELSE |
ELSE |
283 |
frace=frac_energy |
frace=fracEnMelt |
284 |
ENDIF |
ENDIF |
285 |
C force this when no ice fractionation |
C force this when no ice fractionation |
286 |
IF (frac_energy.EQ.0. _d 0) frace=0. _d 0 |
IF (fracEnMelt.EQ.0. _d 0) frace=0. _d 0 |
287 |
|
|
288 |
c IF (Tsf .EQ. 0. _d 0 .AND. sHeating.GT.0. _d 0) THEN |
c IF (Tsf .EQ. 0. _d 0 .AND. sHeating.GT.0. _d 0) THEN |
289 |
IF ( sHeating.GT.0. _d 0 ) THEN |
IF ( sHeating.GT.0. _d 0 ) THEN |
388 |
|
|
389 |
IF (ebot .LT. 0. _d 0) THEN |
IF (ebot .LT. 0. _d 0) THEN |
390 |
C Compute enthalpy of new ice growing at bottom surface. |
C Compute enthalpy of new ice growing at bottom surface. |
391 |
qbot = -cpice *Tf + Lfresh |
qbot = -cpIce *Tf + Lfresh |
392 |
dhi = -ebot / (qbot * rhoi) |
dhi = -ebot / (qbot * rhoi) |
393 |
ebot = 0. _d 0 |
ebot = 0. _d 0 |
394 |
cph k = nlyr |
cph k = nlyr |
460 |
& 'ThSI_CALC_TH: etop, ebot, hi, hs =', etop, ebot, hi, hs |
& 'ThSI_CALC_TH: etop, ebot, hi, hs =', etop, ebot, hi, hs |
461 |
#endif |
#endif |
462 |
|
|
463 |
C If hi < himin, melt the ice. |
C If hi < hIceMin, melt the ice. |
464 |
IF ( hi.LT.himin .AND. (hi+hs).GT.0. _d 0 ) THEN |
IF ( hi.LT.hIceMin .AND. (hi+hs).GT.0. _d 0 ) THEN |
465 |
esurp = esurp - rhos*qsnow*hs |
esurp = esurp - rhos*qsnow*hs |
466 |
DO k = 1, nlyr |
DO k = 1, nlyr |
467 |
esurp = esurp - rhoi*qicen(k)*hnew(k) |
esurp = esurp - rhoi*qicen(k)*hnew(k) |
575 |
hi = hi + hnew(k) |
hi = hi + hnew(k) |
576 |
ENDDO |
ENDDO |
577 |
|
|
578 |
C If hi < himin, melt the ice. |
C If hi < hIceMin, melt the ice. |
579 |
IF ( hi.GT.0. _d 0 .AND. hi.LT.himin ) THEN |
IF ( hi.GT.0. _d 0 .AND. hi.LT.hIceMin ) THEN |
580 |
fresh = fresh + (rhos*hs + rhoi*hi)/dt |
fresh = fresh + (rhos*hs + rhoi*hi)/dt |
581 |
esurp = esurp - rhos*qsnow*hs |
esurp = esurp - rhos*qsnow*hs |
582 |
DO k = 1, nlyr |
DO k = 1, nlyr |
690 |
|
|
691 |
C fresh and salt fluxes |
C fresh and salt fluxes |
692 |
c fresh = (mwater0 - (rhos*(hs) + rhoi*(hi)))/dt-evap |
c fresh = (mwater0 - (rhos*(hs) + rhoi*(hi)))/dt-evap |
693 |
c fsalt = (msalt0 - rhoi*hi*saltice)/35. _d 0/dt ! for same units as fresh |
c fsalt = (msalt0 - rhoi*hi*saltIce)/35. _d 0/dt ! for same units as fresh |
694 |
C note (jmc): fresh is computed from a sea-ice mass budget that already |
C note (jmc): fresh is computed from a sea-ice mass budget that already |
695 |
C contains, at this point, snow & evaporation (of snow & ice) |
C contains, at this point, snow & evaporation (of snow & ice) |
696 |
C but are not meant to be part of ice/ocean fresh-water flux. |
C but are not meant to be part of ice/ocean fresh-water flux. |
697 |
C fix: a) like below or b) by making the budget before snow/evap is added |
C fix: a) like below or b) by making the budget before snow/evap is added |
698 |
c fresh = (mwater0 - (rhos*(hs) + rhoi*(hi)))/dt |
c fresh = (mwater0 - (rhos*(hs) + rhoi*(hi)))/dt |
699 |
c & + snow(i,j,bi,bj)*rhos - frwAtm |
c & + snow(i,j,bi,bj)*rhos - frwAtm |
700 |
fsalt(i,j) = (msalt0 - rhoi*hi*saltice)/dt |
fsalt(i,j) = (msalt0 - rhoi*hi*saltIce)/dt |
701 |
|
|
702 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
703 |
IF (dBug(i,j,bi,bj) ) THEN |
IF (dBug(i,j,bi,bj) ) THEN |
721 |
rs = rhos * qsnow |
rs = rhos * qsnow |
722 |
rqh = rq * hi + rs * hs |
rqh = rq * hi + rs * hs |
723 |
freshe=(rhos*hs+rhoi*hi)/dt |
freshe=(rhos*hs+rhoi*hi)/dt |
724 |
salte=(rhoi*hi*saltice)/dt |
salte=(rhoi*hi*saltIce)/dt |
725 |
IF (extend .LT. rqh) THEN |
IF (extend .LT. rqh) THEN |
726 |
iceFrac=(1. _d 0-extend/rqh)*iceFrac |
iceFrac=(1. _d 0-extend/rqh)*iceFrac |
727 |
fresh=fresh+extend/rqh*freshe |
fresh=fresh+extend/rqh*freshe |