/[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.23 by jscott, Fri Apr 20 19:24:47 2007 UTC revision 1.29 by jmc, Thu Oct 21 19:03:31 2010 UTC
# Line 36  C     === Global variables === Line 36  C     === Global variables ===
36  #include "THSICE_PARAMS.h"  #include "THSICE_PARAMS.h"
37  #include "THSICE_VARS.h"  #include "THSICE_VARS.h"
38  #include "THSICE_TAVE.h"  #include "THSICE_TAVE.h"
 #include "THSICE_2DYN.h"  
39  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
40  # include "tamc.h"  # include "tamc.h"
41  # include "tamc_keys.h"  # include "tamc_keys.h"
# Line 142  C-    Initialise Line 141  C-    Initialise
141        snowFac = thSIce_deltaT/(rhos*hNewSnowAge)        snowFac = thSIce_deltaT/(rhos*hNewSnowAge)
142    
143  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
144  CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte  CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
145    CADJ STORE iceheight(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
146    CADJ STORE icfrwatm(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
147    CADJ STORE qice1(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
148    CADJ STORE qice2(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
149    CADJ STORE snowheight(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
150  #endif  #endif
151        DO j = jMin, jMax        DO j = jMin, jMax
152         DO i = iMin, iMax         DO i = iMin, iMax
# Line 219  C------- Line 223  C-------
223        ENDDO        ENDDO
224    
225  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
226  CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte  CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
227  #endif  #endif
228    
229        CALL THSICE_CALC_THICKN(        CALL THSICE_CALC_THICKN(
230       I          bi, bj, siLo, siHi, sjLo, sjHi,       I          bi, bj,
231       I          iMin,iMax, jMin,jMax, dBugFlag,       I          iMin,iMax, jMin,jMax, dBugFlag,
232       I          iceMask(siLo,sjLo,bi,bj), tFrzOce,       I          iceMask(siLo,sjLo,bi,bj), tFrzOce,
233       I          tOceMxL(siLo,sjLo,bi,bj), v2ocMxL(siLo,sjLo,bi,bj),       I          tOceMxL(siLo,sjLo,bi,bj), v2ocMxL(siLo,sjLo,bi,bj),
# Line 236  CADJ STORE iceMask(:,:,bi,bj) = comlev1_ Line 240  CADJ STORE iceMask(:,:,bi,bj) = comlev1_
240       O          frw2oc, fsalt,       O          frw2oc, fsalt,
241       I          myTime, myIter, myThid )       I          myTime, myIter, myThid )
242    
243    #ifdef ALLOW_AUTODIFF_TAMC
244    CADJ STORE iceMask(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
245    CADJ STORE fsalt(:,:)  = comlev1_bibj,key=iicekey,byte=isbyte
246    CADJ STORE flx2oc(:,:) = comlev1_bibj,key=iicekey,byte=isbyte
247    CADJ STORE frw2oc(:,:) = comlev1_bibj,key=iicekey,byte=isbyte
248    #endif
249  C--    Net fluxes :  C--    Net fluxes :
250        DO j = jMin, jMax        DO j = jMin, jMax
251         DO i = iMin, iMax         DO i = iMin, iMax
252  #ifdef ALLOW_AUTODIFF_TAMC  c#ifdef ALLOW_AUTODIFF_TAMC
253            ikey_1 = i  c         ikey_1 = i
254       &         + sNx*(j-1)  c    &         + sNx*(j-1)
255       &         + sNx*sNy*act1  c    &         + sNx*sNy*act1
256       &         + sNx*sNy*max1*act2  c    &         + sNx*sNy*max1*act2
257       &         + sNx*sNy*max1*max2*act3  c    &         + sNx*sNy*max1*max2*act3
258       &         + sNx*sNy*max1*max2*max3*act4  c    &         + sNx*sNy*max1*max2*max3*act4
259  #endif /* ALLOW_AUTODIFF_TAMC */  c#endif /* ALLOW_AUTODIFF_TAMC */
260  C--  c#ifdef ALLOW_AUTODIFF_TAMC
261  #ifdef ALLOW_AUTODIFF_TAMC  cCADJ STORE  icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1
262  CADJ STORE  icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1  c#endif
 #endif  
263          IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN          IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN
264  C-     weighted average net fluxes:  C-     weighted average net fluxes:
265  #ifdef ALLOW_AUTODIFF_TAMC  c#ifdef ALLOW_AUTODIFF_TAMC
266  CADJ STORE  fsalt(i,j) = comlev1_thsice_1, key=ikey_1  cCADJ STORE  fsalt(i,j) = comlev1_thsice_1, key=ikey_1
267  CADJ STORE  flx2oc(i,j) = comlev1_thsice_1, key=ikey_1  cCADJ STORE  flx2oc(i,j) = comlev1_thsice_1, key=ikey_1
268  CADJ STORE  frw2oc(i,j) = comlev1_thsice_1, key=ikey_1  cCADJ STORE  frw2oc(i,j) = comlev1_thsice_1, key=ikey_1
269  CADJ STORE  icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1  cCADJ STORE  icemask(i,j,bi,bj) = comlev1_thsice_1, key=ikey_1
270  #endif  c#endif
271            icFrac = iceMask(i,j,bi,bj)            icFrac = iceMask(i,j,bi,bj)
272            opFrac= 1. _d 0-icFrac            opFrac= 1. _d 0-icFrac
273  #ifdef ALLOW_ATM2D  #ifdef ALLOW_ATM2D
# Line 269  CADJ STORE  icemask(i,j,bi,bj) = comlev1 Line 278  CADJ STORE  icemask(i,j,bi,bj) = comlev1
278            icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj)            icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj)
279       &                        - opFrac*Qnet(i,j,bi,bj)       &                        - opFrac*Qnet(i,j,bi,bj)
280            icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj)            icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj)
281       &                        + opFrac*rhofw*EmPmR(i,j,bi,bj)       &                        + opFrac*EmPmR(i,j,bi,bj)
282            Qnet(i,j,bi,bj) = -icFrac*flx2oc(i,j) + opFrac*Qnet(i,j,bi,bj)            Qnet(i,j,bi,bj) = -icFrac*flx2oc(i,j) + opFrac*Qnet(i,j,bi,bj)
283            EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)/rhofw            EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)
284       &                    +  opFrac*EmPmR(i,j,bi,bj)       &                    +  opFrac*EmPmR(i,j,bi,bj)
285            saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j)            saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j)
286  #endif  #endif
# Line 283  CADJ STORE  icemask(i,j,bi,bj) = comlev1 Line 292  CADJ STORE  icemask(i,j,bi,bj) = comlev1
292       &           snowHeight(i,j,bi,bj), Qnet(i,j,bi,bj)       &           snowHeight(i,j,bi,bj), Qnet(i,j,bi,bj)
293  #endif  #endif
294    
295          ELSEIF (hOceMxL(i,j,bi,bj).gt.0. _d 0) THEN          ELSEIF (hOceMxL(i,j,bi,bj).GT.0. _d 0) THEN
296            icFlxAtm(i,j,bi,bj) = -Qnet(i,j,bi,bj)            icFlxAtm(i,j,bi,bj) = -Qnet(i,j,bi,bj)
297            icFrwAtm(i,j,bi,bj) = rhofw*EmPmR(i,j,bi,bj)            icFrwAtm(i,j,bi,bj) = EmPmR(i,j,bi,bj)
298          ELSE          ELSE
299            icFlxAtm(i,j,bi,bj) = 0. _d 0            icFlxAtm(i,j,bi,bj) = 0. _d 0
300            icFrwAtm(i,j,bi,bj) = 0. _d 0            icFrwAtm(i,j,bi,bj) = 0. _d 0
# Line 298  C    part.3 : freezing of sea-water Line 307  C    part.3 : freezing of sea-water
307  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
308  C-------  C-------
309        CALL THSICE_EXTEND(        CALL THSICE_EXTEND(
310       I          bi, bj, siLo, siHi, sjLo, sjHi,       I          bi, bj,
311       I          iMin,iMax, jMin,jMax, dBugFlag,       I          iMin,iMax, jMin,jMax, dBugFlag,
312       I          frzmltMxL, tFrzOce,       I          frzmltMxL, tFrzOce,
313       I          tOceMxL(siLo,sjLo,bi,bj),       I          tOceMxL(siLo,sjLo,bi,bj),
# Line 310  C------- Line 319  C-------
319       I          myTime, myIter, myThid )       I          myTime, myIter, myThid )
320    
321  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
322  CADJ STORE snowHeight(:,:,bi,bj) =  CADJ STORE snowHeight(:,:,bi,bj) =
323  CADJ &     comlev1_bibj, key=iicekey, byte=isbyte  CADJ &     comlev1_bibj,key=iicekey,byte=isbyte
324  #endif  #endif
325        DO j = jMin, jMax        DO j = jMin, jMax
326         DO i = iMin, iMax         DO i = iMin, iMax
# Line 323  C--    Net fluxes : Line 332  C--    Net fluxes :
332            sFluxFromIce(i,j)= sFluxFromIce(i,j) - fsalt(i,j)            sFluxFromIce(i,j)= sFluxFromIce(i,j) - fsalt(i,j)
333  #else  #else
334            Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc(i,j)            Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc(i,j)
335            EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc(i,j)/rhofw            EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc(i,j)
336            saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt(i,j)            saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt(i,j)
337  #endif  #endif
338    
# Line 356  C--    Net fluxes : Line 365  C--    Net fluxes :
365         ENDDO         ENDDO
366        ENDDO        ENDDO
367    
 #ifdef ATMOSPHERIC_LOADING  
368  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
369  CADJ STORE snowHeight(:,:,bi,bj) =  CADJ STORE snowHeight(:,:,bi,bj) =
370  CADJ &     comlev1_bibj, key=iicekey, byte=isbyte  CADJ &     comlev1_bibj,key=iicekey,byte=isbyte
371  # endif  # endif
372        DO j = jMin, jMax        DO j = jMin, jMax
373         DO i = iMin, iMax         DO i = iMin, iMax
# Line 369  C--     Compute Sea-Ice Loading (= mass Line 377  C--     Compute Sea-Ice Loading (= mass
377       &                        )*iceMask(i,j,bi,bj)       &                        )*iceMask(i,j,bi,bj)
378         ENDDO         ENDDO
379        ENDDO        ENDDO
 #endif  
380    
381        IF ( thSIceAdvScheme.GT.0 ) THEN        IF ( thSIceAdvScheme.GT.0 ) THEN
382  C--   note: those fluxes should to be added directly to Qnet, EmPmR & saltFlux  C--   note: those fluxes should to be added directly to Qnet, EmPmR & saltFlux
# Line 377  C--   note: those fluxes should to be ad Line 384  C--   note: those fluxes should to be ad
384          DO i = iMin, iMax          DO i = iMin, iMax
385           IF ( hOceMxL(i,j,bi,bj).GT.0. _d 0 ) THEN           IF ( hOceMxL(i,j,bi,bj).GT.0. _d 0 ) THEN
386            Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - oceQnet(i,j,bi,bj)            Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - oceQnet(i,j,bi,bj)
387            EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- oceFWfx(i,j,bi,bj)/rhofw            EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- oceFWfx(i,j,bi,bj)
388            saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - oceSflx(i,j,bi,bj)            saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - oceSflx(i,j,bi,bj)
389           ENDIF           ENDIF
390          ENDDO          ENDDO

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.29

  ViewVC Help
Powered by ViewVC 1.1.22