/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_advect_thickness.F
ViewVC logotype

Diff of /MITgcm_contrib/dgoldberg/streamice/streamice_advect_thickness.F

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

revision 1.10 by dgoldberg, Wed Jun 12 20:48:08 2013 UTC revision 1.11 by dgoldberg, Wed Aug 27 19:29:13 2014 UTC
# Line 5  C $Name$ Line 5  C $Name$
5    
6  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    
   
8  CBOP  CBOP
9        SUBROUTINE STREAMICE_ADVECT_THICKNESS ( myThid,myIter,time_step )        SUBROUTINE STREAMICE_ADVECT_THICKNESS ( myThid,myIter,time_step )
10    
11  C     /============================================================\  C     *============================================================*
12  C     | SUBROUTINE                                                 |    C     | SUBROUTINE                                                 |
13  C     | o                                                          |  C     | o                                                          |
14  C     |============================================================|  C     *============================================================*
15  C     |                                                            |  C     |                                                            |
16  C     \============================================================/  C     *============================================================*
17        IMPLICIT NONE        IMPLICIT NONE
18    
19  C     === Global variables ===  C     === Global variables ===
# Line 27  C     === Global variables === Line 26  C     === Global variables ===
26  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
27  # include "tamc.h"  # include "tamc.h"
28  #endif  #endif
29    #ifdef ALLOW_SHELFICE
30    # include "SHELFICE.h"
31    #endif
32    
33        INTEGER myThid, myIter        INTEGER myThid, myIter
34        _RL time_step        _RL time_step
# Line 36  C     === Global variables === Line 38  C     === Global variables ===
38        INTEGER i, j, bi, bj, Gi, Gj        INTEGER i, j, bi, bj, Gi, Gj
39        _RL thick_bd, uflux, vflux, max_icfl, loc_icfl        _RL thick_bd, uflux, vflux, max_icfl, loc_icfl
40        _RL time_step_full, time_step_rem        _RL time_step_full, time_step_rem
41        _RL sec_per_year, time_step_loc, MR, SMB, TMB        _RL sec_per_year, time_step_loc, MR, SMB, TMB, irho
42        _RL BCVALX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL BCVALX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43        _RL BCVALY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL BCVALY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
44        _RS BCMASKX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RS BCMASKX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
# Line 47  C     === Global variables === Line 49  C     === Global variables ===
49        _RL h_after_vflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL h_after_vflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
50        _RL hflux_x_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL hflux_x_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
51        _RL hflux_y_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL hflux_y_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
52          
53        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
54    
55        sec_per_year = 365.*86400.        sec_per_year = 365.*86400.
# Line 66  CADJ STORE streamice_hmask  = comlev1, k Line 68  CADJ STORE streamice_hmask  = comlev1, k
68          DO j=1,sNy+1          DO j=1,sNy+1
69           DO i=1,sNx+1           DO i=1,sNx+1
70    
71            H_streamice_prev(i,j,bi,bj) =            H_streamice_prev(i,j,bi,bj) =
72       &     H_streamice(i,j,bi,bj)       &     H_streamice(i,j,bi,bj)
73    
74            hflux_x_SI (i,j,bi,bj) = 0. _d 0            hflux_x_SI (i,j,bi,bj) = 0. _d 0
75            hflux_y_SI (i,j,bi,bj) = 0. _d 0            hflux_y_SI (i,j,bi,bj) = 0. _d 0
76              h_after_uflux_SI(i,j,bi,bj) = H_streamice(i,j,bi,bj)
77              h_after_vflux_SI(i,j,bi,bj) = H_streamice(i,j,bi,bj)
78    
79    
80            IF (STREAMICE_ufacemask(i,j,bi,bj).eq.3.0) THEN            IF (STREAMICE_ufacemask(i,j,bi,bj).eq.3.0) THEN
# Line 79  CADJ STORE streamice_hmask  = comlev1, k Line 83  CADJ STORE streamice_hmask  = comlev1, k
83             utrans(i,j,bi,bj) = .5 * (             utrans(i,j,bi,bj) = .5 * (
84       &      u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))       &      u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
85            ELSEIF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN            ELSEIF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN
86             uflux = u_flux_bdry_SI(i,j,bi,bj)             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
87             BCMASKX(i,j,bi,bj) = 0.0              uflux = u_flux_bdry_SI(i,j,bi,bj)
88             BCVALX(i,j,bi,bj) = uflux              BCMASKX(i,j,bi,bj) = 3.0
89             utrans(i,j,bi,bj) = 1.0              BCVALX(i,j,bi,bj) = uflux
90                utrans(i,j,bi,bj) = 1.0
91               ELSEIF (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0) THEN
92                uflux = u_flux_bdry_SI(i,j,bi,bj)
93                BCMASKX(i,j,bi,bj) = 3.0
94                BCVALX(i,j,bi,bj) = uflux
95                utrans(i,j,bi,bj) = -1.0
96               ENDIF
97            ELSEIF (.not.(            ELSEIF (.not.(
98       &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.       &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
99       &     STREAMICE_hmask(i-1,j,bi,bj).eq.1.0)) THEN       &     STREAMICE_hmask(i-1,j,bi,bj).eq.1.0)) THEN
# Line 102  CADJ STORE streamice_hmask  = comlev1, k Line 113  CADJ STORE streamice_hmask  = comlev1, k
113             vtrans(i,j,bi,bj) = .5 * (             vtrans(i,j,bi,bj) = .5 * (
114       &      v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))       &      v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
115            ELSEIF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN            ELSEIF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN
116             vflux = v_flux_bdry_SI(i,j,bi,bj)             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
117             BCMASKy(i,j,bi,bj) = 0.0              vflux = v_flux_bdry_SI(i,j,bi,bj)
118             BCVALy(i,j,bi,bj) = vflux              BCMASKY(i,j,bi,bj) = 3.0
119                BCVALY(i,j,bi,bj) = vflux
120                vtrans(i,j,bi,bj) = 1.0
121               ELSEIF (STREAMICE_hmask(i,j+1,bi,bj).eq.1.0) THEN
122                vflux = v_flux_bdry_SI(i,j,bi,bj)
123                BCMASKY(i,j,bi,bj) = 3.0
124                BCVALY(i,j,bi,bj) = vflux
125                vtrans(i,j,bi,bj) = -1.0
126               ENDIF
127    
128    
129    
130             vtrans(i,j,bi,bj) = 1.0             vtrans(i,j,bi,bj) = 1.0
131            ELSEIF (.not.(            ELSEIF (.not.(
132       &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.       &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
# Line 131  CADJ STORE streamice_hmask  = comlev1, k Line 153  CADJ STORE streamice_hmask  = comlev1, k
153        _EXCH_XY_RS(BCMASKy,myThid)        _EXCH_XY_RS(BCMASKy,myThid)
154        _EXCH_XY_RL(BCVALX,myThid)        _EXCH_XY_RL(BCVALX,myThid)
155        _EXCH_XY_RL(BCVALY,myThid)        _EXCH_XY_RL(BCVALY,myThid)
156          _EXCH_XY_RL(h_after_uflux_SI,myThid)
157          _EXCH_XY_RL(h_after_vflux_SI,myThid)
158    
159  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
160    
# Line 165  CADJ STORE H_streamice  = comlev1, key=i Line 189  CADJ STORE H_streamice  = comlev1, key=i
189  #endif  #endif
190    
191  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
192        do while (time_step_rem .gt. 1.e-15)        do while (time_step_rem .gt. 1.e-15)
193         time_step_loc = min (         time_step_loc = min (
194       &  streamice_cfl_factor / max_icfl,       &  streamice_cfl_factor / max_icfl,
195       &  time_step_rem )       &  time_step_rem )
# Line 196  CADJ STORE H_streamice  = comlev1, key=i Line 220  CADJ STORE H_streamice  = comlev1, key=i
220            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
221             h_after_uflux_SI (i,j,bi,bj) = H_streamice(i,j,bi,bj) -             h_after_uflux_SI (i,j,bi,bj) = H_streamice(i,j,bi,bj) -
222       &      (hflux_x_SI(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -       &      (hflux_x_SI(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -
223       &        hflux_x_SI(i,j,bi,bj)*dyG(i,j,bi,bj))       &        hflux_x_SI(i,j,bi,bj)*dyG(i,j,bi,bj))
224       &        * recip_rA (i,j,bi,bj) * time_step_loc       &        * recip_rA (i,j,bi,bj) * time_step_loc
225             IF ( h_after_uflux_SI (i,j,bi,bj).le.0.0) THEN             IF ( h_after_uflux_SI (i,j,bi,bj).le.0.0) THEN
226              PRINT *, "h neg after x", i,j,hflux_x_SI(i+1,j,bi,bj),              PRINT *, "h neg after x", i,j,hflux_x_SI(i+1,j,bi,bj),
# Line 261  CADJ STORE streamice_hmask  = comlev1, k Line 285  CADJ STORE streamice_hmask  = comlev1, k
285          DO j=1,sNy          DO j=1,sNy
286           DO i=1,sNx           DO i=1,sNx
287            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
288             H_streamice (i,j,bi,bj) =             H_streamice (i,j,bi,bj) =
289       &      h_after_vflux_SI (i,j,bi,bj)       &      h_after_vflux_SI (i,j,bi,bj)
290            ENDIF            ENDIF
291           ENDDO           ENDDO
# Line 271  CADJ STORE streamice_hmask  = comlev1, k Line 295  CADJ STORE streamice_hmask  = comlev1, k
295    
296  ! NOTE: AT THIS POINT H IS NOT VALID ON OVERLAP!!!  ! NOTE: AT THIS POINT H IS NOT VALID ON OVERLAP!!!
297    
298  !      CALL STREAMICE_ADV_FRONT (        if (streamice_move_front) then
299  !     &  myThid, time_step_loc,        CALL STREAMICE_ADV_FRONT (
300  !     &  hflux_x_SI, hflux_y_SI )       &  myThid, time_step_loc,
301         &  hflux_x_SI, hflux_y_SI )
302          endif
303    
304    
305  #ifdef ALLOW_STREAMICE_2DTRACER  #ifdef ALLOW_STREAMICE_2DTRACER
306        CALL STREAMICE_ADVECT_2DTRACER(        CALL STREAMICE_ADVECT_2DTRACER(
# Line 283  CADJ STORE streamice_hmask  = comlev1, k Line 309  CADJ STORE streamice_hmask  = comlev1, k
309       &  time_step,       &  time_step,
310       &  uTrans,       &  uTrans,
311       &  vTrans,       &  vTrans,
312       &  bcMaskx,       &  BCMASKx,
313       &  bcMasky )       &  BCMASKy )
314  #endif  #endif
315    
316  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
317        time_step_rem = time_step_rem - time_step_loc              time_step_rem = time_step_rem - time_step_loc
318        enddo        enddo
319  #endif  #endif
320    
# Line 296  CADJ STORE streamice_hmask  = comlev1, k Line 322  CADJ STORE streamice_hmask  = comlev1, k
322    
323  ! NOW WE APPLY MELT RATES !!  ! NOW WE APPLY MELT RATES !!
324  ! THIS MAY BE MOVED TO A SEPARATE SUBROUTINE  ! THIS MAY BE MOVED TO A SEPARATE SUBROUTINE
325          irho = 1./streamice_density
326    
327        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
328         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
329          DO j=1,sNy          DO j=1,sNy
330           DO i=1,sNx           DO i=1,sNx
331             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
332              Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
333              IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.
334       &       STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN       &       STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN
335               MR = (1.-float_frac_streamice(i,j,bi,bj)) *  
336       &             BDOT_STREAMICE(i,j,bi,bj)             IF (STREAMICE_allow_cpl) THEN
337               SMB = ADOT_STREAMICE(i,j,bi,bj)  #ifdef ALLOW_SHELFICE
338               TMB = SMB - MR              MR = -1. * (1.-float_frac_streamice(i,j,bi,bj)) *
339               IF ((TMB.lt.0.0) .and.       &        shelfIceFreshWaterFlux(I,J,bi,bj) * irho *
340         &        sec_per_year
341    
342    #else
343                STOP 'SHELFICE IS NOT ENABLED'
344    #endif      
345               ELSE
346                  MR = (1.-float_frac_streamice(i,j,bi,bj)) *
347         &             (BDOT_STREAMICE(i,j,bi,bj) +
348         &              BDOT_pert(i,j,bi,bj))
349               ENDIF
350    
351               SMB = ADOT_STREAMICE(i,j,bi,bj)
352               TMB = SMB - MR
353               IF ((TMB.lt.0.0) .and.
354       &         (MR * time_step_loc .gt.       &         (MR * time_step_loc .gt.
355       &          H_streamice (i,j,bi,bj))) THEN       &          H_streamice (i,j,bi,bj))) THEN
356                  H_streamice (i,j,bi,bj) = 0. _d 0                  H_streamice (i,j,bi,bj) = 0. _d 0
357                  STREAMICE_hmask(i,j,bi,bj) = 0.                  STREAMICE_hmask(i,j,bi,bj) = 0.0
358               ELSE                 PRINT *, "GOT HERE melted away! ", i,j
359                 H_streamice (i,j,bi,bj) =             ELSE
360                   H_streamice (i,j,bi,bj) =
361       &          H_streamice (i,j,bi,bj) + TMB * time_step_loc       &          H_streamice (i,j,bi,bj) + TMB * time_step_loc
              ENDIF  
362             ENDIF             ENDIF
363    
364    
365              ENDIF
366           ENDDO           ENDDO
367          ENDDO          ENDDO
368         ENDDO         ENDDO
369        ENDDO            ENDDO
370    
371          _EXCH_XY_RL(H_streamice,myThid)
372    
       _EXCH_XY_RL (H_streamice,myThid)  
373    
         
374        WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'        WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'
375         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
376       &                     SQUEEZE_RIGHT , 1)       &                     SQUEEZE_RIGHT , 1)
377          
378  #endif  #endif
379        END        END
   

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11

  ViewVC Help
Powered by ViewVC 1.1.22