/[MITgcm]/MITgcm/pkg/thsice/thsice_calc_thickn.F
ViewVC logotype

Diff of /MITgcm/pkg/thsice/thsice_calc_thickn.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.7 by heimbach, Mon Apr 16 22:38:24 2007 UTC revision 1.8 by jmc, Sun Apr 29 23:48:44 2007 UTC
# Line 237  C....................................... Line 237  C.......................................
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
# Line 251  C     !--------------------------------- Line 251  C     !---------------------------------
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)
# Line 259  C frictional velocity between ice and wa Line 259  C frictional velocity between ice and wa
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)
# Line 270  C---+----1----+----2----+----3----+----4 Line 270  C---+----1----+----2----+----3----+----4
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
# Line 388  C Bottom melt/growth. Line 388  C Bottom melt/growth.
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
# Line 460  C Compute new total ice thickness. Line 460  C Compute new total ice thickness.
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)
# Line 575  C Compute new total ice thickness. Line 575  C Compute new total ice thickness.
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
# Line 690  C   but should be Lvap only for the frac Line 690  C   but should be Lvap only for the frac
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
# Line 721  C calculate extent changes Line 721  C calculate extent changes
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

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.22