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

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

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

revision 1.15 by jmc, Sun Mar 26 00:45:40 2006 UTC revision 1.16 by heimbach, Sun Apr 9 17:35:30 2006 UTC
# Line 78  C     isIceFree :: true for ice-free gri Line 78  C     isIceFree :: true for ice-free gri
78        _RL snowPr        _RL snowPr
79        _RL agingTime, ageFac        _RL agingTime, ageFac
80        _RL albedo        _RL albedo
       _RL flxAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
81        _RL frwAtm        _RL frwAtm
82        _RL flx2oc        _RL flx2oc
83        _RL frw2oc        _RL frw2oc
# Line 87  C     isIceFree :: true for ice-free gri Line 86  C     isIceFree :: true for ice-free gri
86        _RL Fbot, esurp        _RL Fbot, esurp
87        _RL opFrac, icFrac        _RL opFrac, icFrac
88        _RL oceV2s, oceTs        _RL oceV2s, oceTs
89        _RL compact, hIce, hSnow, Tsf, Tice(nlyr), qicen(nlyr)        _RL Tsf, Tice(nlyr), qicen(nlyr)
90        _RL tmpflx(0:2), tmpdTs        _RL tmpflx(0:2), tmpdTs
91          _RL hSnow
92    c
93          _RL flxAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
94          _RL compact(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
95          _RL hIce(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
96    c
97        LOGICAL isIceFree(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        LOGICAL isIceFree(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
98  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
99        _RL tmpFac        _RL tmpFac
# Line 103  C-    Initialise flxAtm Line 108  C-    Initialise flxAtm
108          DO i = 1-Olx, sNx+Olx          DO i = 1-Olx, sNx+Olx
109            flxAtm(i,j) = 0.            flxAtm(i,j) = 0.
110            isIceFree(i,j) = .FALSE.            isIceFree(i,j) = .FALSE.
111    #ifdef ALLOW_AUTODIFF_TAMC
112              compact(i,j) = 0.
113              hIce(i,j) = 0.
114    #endif
115          ENDDO          ENDDO
116         ENDDO         ENDDO
117    
# Line 118  C------- Line 127  C-------
127           IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN           IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN
128            icFrac  = iceMask(i,j,bi,bj)            icFrac  = iceMask(i,j,bi,bj)
129            TFrzOce = -mu_Tf*sOceMxL(i,j,bi,bj)            TFrzOce = -mu_Tf*sOceMxL(i,j,bi,bj)
130            hIce    = iceHeight(i,j,bi,bj)            hIce(i,j)    = iceHeight(i,j,bi,bj)
131            hSnow   = snowHeight(i,j,bi,bj)            hSnow   = snowHeight(i,j,bi,bj)
132            Tsf     = Tsrf(i,j,bi,bj)            Tsf     = Tsrf(i,j,bi,bj)
133            qicen(1)= Qice1(i,j,bi,bj)            qicen(1)= Qice1(i,j,bi,bj)
# Line 130  C------- Line 139  C-------
139            ENDIF            ENDIF
140    
141            CALL THSICE_ALBEDO(            CALL THSICE_ALBEDO(
142       I               hIce, hSnow, Tsf, snowAge(i,j,bi,bj),       I               hIce(i,j), hSnow, Tsf, snowAge(i,j,bi,bj),
143       O               albedo,       O               albedo,
144       I               myThid )       I               myThid )
145            flxSW(i,j) = flxSW(i,j)*(1. _d 0 - albedo)            flxSW(i,j) = flxSW(i,j)*(1. _d 0 - albedo)
146            siceAlb(i,j,bi,bj) = albedo            siceAlb(i,j,bi,bj) = albedo
147    
148            CALL THSICE_SOLVE4TEMP(            CALL THSICE_SOLVE4TEMP(
149       I          useBulkForce, tmpflx, TFrzOce, hIce, hSnow,       I          useBulkForce, tmpflx, TFrzOce, hIce(i,j), hSnow,
150       U          flxSW(i,j), Tsf, qicen,       U          flxSW(i,j), Tsf, qicen,
151       O          Tice, sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj),       O          Tice, sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj),
152       O          tmpdTs, flxAtm(i,j), evpAtm(i,j),       O          tmpdTs, flxAtm(i,j), evpAtm(i,j),
# Line 202  c       dBug = ( bi.EQ.3 .AND. i.EQ.15 . Line 211  c       dBug = ( bi.EQ.3 .AND. i.EQ.15 .
211    
212          Fbot   = 0. _d 0          Fbot   = 0. _d 0
213          saltFlux(i,j,bi,bj) = 0. _d 0          saltFlux(i,j,bi,bj) = 0. _d 0
214          compact= iceMask(i,j,bi,bj)          compact(i,j)= iceMask(i,j,bi,bj)
215  C-------  C-------
216          IF (dBug .AND. (frzmltMxL.GT.0. .OR. compact.GT.0.) ) THEN          IF (dBug .AND. (frzmltMxL.GT.0. .OR. compact(i,j).GT.0.) ) THEN
217            WRITE(6,'(A,2I4,2I2)') 'ThSI_FWD: i,j=',i,j,bi,bj            WRITE(6,'(A,2I4,2I2)') 'ThSI_FWD: i,j=',i,j,bi,bj
218            WRITE(6,1010) 'ThSI_FWD:-1- iceMask, hIc, hSn, Tsf  =',            WRITE(6,1010) 'ThSI_FWD:-1- iceMask, hIc, hSn, Tsf  =',
219       &                  compact, iceHeight(i,j,bi,bj),       &                  compact(i,j), iceHeight(i,j,bi,bj),
220       &                  snowHeight(i,j,bi,bj), Tsrf(i,j,bi,bj)       &                  snowHeight(i,j,bi,bj), Tsrf(i,j,bi,bj)
221            WRITE(6,1010) 'ThSI_FWD: ocTs,TFrzOce,frzmltMxL,Qnet=',            WRITE(6,1010) 'ThSI_FWD: ocTs,TFrzOce,frzmltMxL,Qnet=',
222       &                     oceTs, TFrzOce, frzmltMxL,Qnet(i,j,bi,bj)       &                     oceTs, TFrzOce, frzmltMxL,Qnet(i,j,bi,bj)
# Line 217  C------- Line 226  C-------
226    
227            oceV2s  = v2ocMxL(i,j,bi,bj)            oceV2s  = v2ocMxL(i,j,bi,bj)
228            snowPr  = snowPrc(i,j,bi,bj)            snowPr  = snowPrc(i,j,bi,bj)
229            hIce    = iceHeight(i,j,bi,bj)            hIce(i,j)    = iceHeight(i,j,bi,bj)
230            hSnow   = snowHeight(i,j,bi,bj)            hSnow   = snowHeight(i,j,bi,bj)
231            Tsf     = Tsrf(i,j,bi,bj)            Tsf     = Tsrf(i,j,bi,bj)
232            qicen(1)= Qice1(i,j,bi,bj)            qicen(1)= Qice1(i,j,bi,bj)
# Line 227  C------- Line 236  C-------
236            CALL THSICE_CALC_THICKN(            CALL THSICE_CALC_THICKN(
237       I          frzmltMxL, TFrzOce, oceTs, oceV2s, snowPr,       I          frzmltMxL, TFrzOce, oceTs, oceV2s, snowPr,
238       I          sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj), evpAtm(i,j),       I          sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj), evpAtm(i,j),
239       U          compact, hIce, hSnow, Tsf, qicen, flx2oc,       U          compact(i,j), hIce(i,j), hSnow, Tsf, qicen, flx2oc,
240       O          frw2oc, fsalt, Fbot,       O          frw2oc, fsalt, Fbot,
241       I          dBug, myThid)       I          dBug, myThid)
242    
# Line 253  C---+----1----+----2----+----3----+----4 Line 262  C---+----1----+----2----+----3----+----4
262        IF (dBug) WRITE(6,1010) 'ThSI_FWD: icFrac,flxAtm,evpAtm,flxSnw=',        IF (dBug) WRITE(6,1010) 'ThSI_FWD: icFrac,flxAtm,evpAtm,flxSnw=',
263       &  iceMask(i,j,bi,bj),flxAtm(i,j),evpAtm(i,j),-Lfresh*snowPr       &  iceMask(i,j,bi,bj),flxAtm(i,j),evpAtm(i,j),-Lfresh*snowPr
264        IF (dBug) WRITE(6,1010) 'ThSI_FWD: compact,flx2oc,fsalt,frw2oc=',        IF (dBug) WRITE(6,1010) 'ThSI_FWD: compact,flx2oc,fsalt,frw2oc=',
265       &   compact,flx2oc,fsalt,frw2oc       &   compact(i,j),flx2oc,fsalt,frw2oc
266  #ifdef CHECK_ENERGY_CONSERV  #ifdef CHECK_ENERGY_CONSERV
267            icFrac = iceMask(i,j,bi,bj)            icFrac = iceMask(i,j,bi,bj)
268            CALL THSICE_CHECK_CONSERV( dBug, i, j, bi, bj, 0,            CALL THSICE_CHECK_CONSERV( dBug, i, j, bi, bj, 0,
269       I            icFrac, compact, hIce, hSnow, qicen,       I            icFrac, compact(i,j), hIce(i,j), hSnow, qicen,
270       I            flx2oc, frw2oc, fsalt, flxAtm(i,j), frwAtm,       I            flx2oc, frw2oc, fsalt, flxAtm(i,j), frwAtm,
271       I            myTime, myIter, myThid )       I            myTime, myIter, myThid )
272  #endif /* CHECK_ENERGY_CONSERV */  #endif /* CHECK_ENERGY_CONSERV */
# Line 265  C---+----1----+----2----+----3----+----4 Line 274  C---+----1----+----2----+----3----+----4
274    
275  C--    Update Sea-Ice state :  C--    Update Sea-Ice state :
276  c         iceMask(i,j,bi,bj)=compact  c         iceMask(i,j,bi,bj)=compact
277            iceHeight(i,j,bi,bj) = hIce            iceHeight(i,j,bi,bj) = hIce(i,j)
278            snowHeight(i,j,bi,bj)= hSnow            snowHeight(i,j,bi,bj)= hSnow
279            Tsrf(i,j,bi,bj) =Tsf            Tsrf(i,j,bi,bj) =Tsf
280            Qice1(i,j,bi,bj)=qicen(1)            Qice1(i,j,bi,bj)=qicen(1)
# Line 284  C-     weighted average net fluxes: Line 293  C-     weighted average net fluxes:
293    
294            IF (dBug) WRITE(6,1010)            IF (dBug) WRITE(6,1010)
295       &          'ThSI_FWD:-3- compact, hIc, hSn, Qnet =',       &          'ThSI_FWD:-3- compact, hIc, hSn, Qnet =',
296       &                        compact,hIce,hSnow,Qnet(i,j,bi,bj)       &                        compact(i,j),hIce(i,j),hSnow,
297         &                        Qnet(i,j,bi,bj)
298    
299          ELSEIF (hOceMxL(i,j,bi,bj).gt.0. _d 0) THEN          ELSEIF (hOceMxL(i,j,bi,bj).gt.0. _d 0) THEN
300            flxAtm(i,j) =  -Qnet(i,j,bi,bj)            flxAtm(i,j) =  -Qnet(i,j,bi,bj)
# Line 298  C---+----1----+----2----+----3----+----4 Line 308  C---+----1----+----2----+----3----+----4
308  C    part.3 : freezing of sea-water  C    part.3 : freezing of sea-water
309  C     over ice-free fraction and what is left from ice-covered fraction  C     over ice-free fraction and what is left from ice-covered fraction
310  C-------  C-------
311  c       compact= iceMask(i,j,bi,bj)  c       compact(i,j) = iceMask(i,j,bi,bj)
312          hIce   = iceHeight(i,j,bi,bj)          hIce(i,j)   = iceHeight(i,j,bi,bj)
313          hSnow  = snowHeight(i,j,bi,bj)          hSnow  = snowHeight(i,j,bi,bj)
314    
315          esurp  = frzmltMxL - Fbot*iceMask(i,j,bi,bj)          esurp  = frzmltMxL - Fbot*iceMask(i,j,bi,bj)
316          IF (esurp.GT.0. _d 0) THEN          IF (esurp.GT.0. _d 0) THEN
317            icFrac = compact            icFrac = compact(i,j)
318            qicen(1)= Qice1(i,j,bi,bj)            qicen(1)= Qice1(i,j,bi,bj)
319            qicen(2)= Qice2(i,j,bi,bj)            qicen(2)= Qice2(i,j,bi,bj)
320            CALL THSICE_EXTEND(            CALL THSICE_EXTEND(
321       I               esurp, TFrzOce,       I               esurp, TFrzOce,
322       U               oceTs, compact, hIce, hSnow, qicen,       U               oceTs, compact(i,j), hIce(i,j), hSnow, qicen,
323       O               flx2oc, frw2oc, fsalt,       O               flx2oc, frw2oc, fsalt,
324       I               dBug, myThid )       I               dBug, myThid )
325  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
326        IF (dBug) WRITE(6,1010) 'ThSI_FWD: compact,flx2oc,fsalt,frw2oc='        IF (dBug) WRITE(6,1010) 'ThSI_FWD: compact,flx2oc,fsalt,frw2oc='
327       &                 ,compact,flx2oc,fsalt,frw2oc       &                 ,compact(i,j),flx2oc,fsalt,frw2oc
328  #ifdef CHECK_ENERGY_CONSERV  #ifdef CHECK_ENERGY_CONSERV
329            tmpflx(1) = 0.            tmpflx(1) = 0.
330            tmpflx(2) = 0.            tmpflx(2) = 0.
331            CALL THSICE_CHECK_CONSERV( dBug, i, j, bi, bj, 1,            CALL THSICE_CHECK_CONSERV( dBug, i, j, bi, bj, 1,
332       I            icFrac, compact, hIce, hSnow, qicen,       I            icFrac, compact(i,j), hIce(i,j), hSnow, qicen,
333       I            flx2oc, frw2oc, fsalt, tmpflx(1), tmpflx(2),       I            flx2oc, frw2oc, fsalt, tmpflx(1), tmpflx(2),
334       I            myTime, myIter, myThid )       I            myTime, myIter, myThid )
335  #endif /* CHECK_ENERGY_CONSERV */  #endif /* CHECK_ENERGY_CONSERV */
336  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
337  C--    Update Sea-Ice state :  C--    Update Sea-Ice state :
338            IF ( compact.GT.0. _d 0 .AND. icFrac.EQ.0. _d 0) THEN            IF ( compact(i,j).GT.0. _d 0 .AND. icFrac.EQ.0. _d 0) THEN
339               Tsrf(i,j,bi,bj)  = TFrzOce               Tsrf(i,j,bi,bj)  = TFrzOce
340               Tice1(i,j,bi,bj) = TFrzOce               Tice1(i,j,bi,bj) = TFrzOce
341               Tice2(i,j,bi,bj) = TFrzOce               Tice2(i,j,bi,bj) = TFrzOce
342               Qice1(i,j,bi,bj) = qicen(1)               Qice1(i,j,bi,bj) = qicen(1)
343               Qice2(i,j,bi,bj) = qicen(2)               Qice2(i,j,bi,bj) = qicen(2)
344            ENDIF            ENDIF
345            iceHeight(i,j,bi,bj) = hIce            iceHeight(i,j,bi,bj) = hIce(i,j)
346            snowHeight(i,j,bi,bj)= hSnow            snowHeight(i,j,bi,bj)= hSnow
347  C--    Net fluxes :  C--    Net fluxes :
348            Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc            Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc
# Line 340  C--    Net fluxes : Line 350  C--    Net fluxes :
350            saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt            saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt
351    
352            IF (dBug) WRITE(6,1010)            IF (dBug) WRITE(6,1010)
353       &          'ThSI_FWD:-4- compact, hIc, hSn, Qnet =',       &         'ThSI_FWD:-4- compact, hIc, hSn, Qnet =',
354       &                        compact,hIce,hSnow,Qnet(i,j,bi,bj)       &         compact(i,j),hIce(i,j),hSnow,
355         &         Qnet(i,j,bi,bj)
356  C--   - if esurp > 0 : end  C--   - if esurp > 0 : end
357          ENDIF          ENDIF
358    
359          IF ( hOceMxL(i,j,bi,bj).GT.0. _d 0 )          IF ( hOceMxL(i,j,bi,bj).GT.0. _d 0 )
360       &    isIceFree(i,j) = iceMask(i,j,bi,bj).LE.0. _d 0       &    isIceFree(i,j) = iceMask(i,j,bi,bj).LE.0. _d 0
361       &                       .AND.   compact .LE.0. _d 0       &                       .AND.   compact(i,j) .LE.0. _d 0
362          IF ( compact .GT. 0. _d 0 ) THEN          IF ( compact(i,j) .GT. 0. _d 0 ) THEN
363            iceMask(i,j,bi,bj)=compact            iceMask(i,j,bi,bj)=compact(i,j)
364            IF ( hSnow .EQ. 0. _d 0 ) snowAge(i,j,bi,bj) = 0. _d 0            IF ( hSnow .EQ. 0. _d 0 ) snowAge(i,j,bi,bj) = 0. _d 0
365          ELSE          ELSE
366            iceMask(i,j,bi,bj)  = 0. _d 0            iceMask(i,j,bi,bj)  = 0. _d 0

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.22