/[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.1 by heimbach, Thu Mar 29 15:59:21 2012 UTC revision 1.9 by dgoldberg, Tue Jun 11 17:42:17 2013 UTC
# Line 7  C---+----1----+----2----+----3----+----4 Line 7  C---+----1----+----2----+----3----+----4
7    
8    
9  CBOP  CBOP
10        SUBROUTINE STREAMICE_ADVECT_THICKNESS ( myThid, time_step )        SUBROUTINE STREAMICE_ADVECT_THICKNESS ( myThid,myIter,time_step )
11    
12  C     /============================================================\  C     /============================================================\
13  C     | SUBROUTINE                                                 |    C     | SUBROUTINE                                                 |  
# Line 24  C     === Global variables === Line 24  C     === Global variables ===
24  #include "PARAMS.h"  #include "PARAMS.h"
25  #include "STREAMICE.h"  #include "STREAMICE.h"
26  #include "STREAMICE_ADV.h"  #include "STREAMICE_ADV.h"
27    #ifdef ALLOW_AUTODIFF_TAMC
28    # include "tamc.h"
29    #endif
30    
31        INTEGER myThid        INTEGER myThid, myIter
32        _RL time_step        _RL time_step
33    
34  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
35    
36        INTEGER i, j, bi, bj        INTEGER i, j, bi, bj
37        _RL thick_bd        _RL thick_bd, uflux, vflux, max_icfl, loc_icfl
38        _RL SLOPE_LIMITER        _RL time_step_full, time_step_rem
39        _RL sec_per_year, time_step_loc        _RL sec_per_year, time_step_loc, MR, SMB, TMB
40        external SLOPE_LIMITER        _RL BCVALX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
41          _RL BCVALY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42          _RS BCMASKX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43          _RS BCMASKY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
44          _RL utrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
45          _RL vtrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
46          _RL h_after_uflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
47          _RL h_after_vflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
48          _RL hflux_x_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
49          _RL hflux_y_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
50          
51          CHARACTER*(MAX_LEN_MBUF) msgBuf
52    
53        sec_per_year = 365.*86400.        sec_per_year = 365.*86400.
54    
55        time_step_loc = time_step / sec_per_year        time_step_loc = time_step / sec_per_year
56          time_step_full = time_step_loc
57          time_step_rem = time_step_loc
58          PRINT *, "time_step_loc ", time_step_loc
59    
60    #ifdef ALLOW_AUTODIFF_TAMC
61    CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
62    #endif
63    
64        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
65         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
66          DO j=1-OLy,sNy+OLy          DO j=1-3,sNy+3
67           DO i=1-OLx,sNx+OLx           DO i=1-3,sNx+3
68    
69              H_streamice_prev(i,j,bi,bj) =
70         &     H_streamice(i,j,bi,bj)
71    
72            hflux_x_SI (i,j,bi,bj) = 0. _d 0            hflux_x_SI (i,j,bi,bj) = 0. _d 0
73            hflux_y_SI (i,j,bi,bj) = 0. _d 0            hflux_y_SI (i,j,bi,bj) = 0. _d 0
74            hflux_x_SI2 (i,j,bi,bj) = 0. _d 0  
75            hflux_y_SI2 (i,j,bi,bj) = 0. _d 0  
76            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN            IF (STREAMICE_ufacemask(i,j,bi,bj).eq.3.0) THEN
77             h_after_uflux_SI (i,j,bi,bj) =             BCMASKX(i,j,bi,bj) = 3.0
78       &      H_streamice (i,j,bi,bj)             BCVALX(i,j,bi,bj) = h_ubdry_values_SI(i,j,bi,bj)
79               utrans(i,j,bi,bj) = .5 * (
80         &      u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
81              ELSEIF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN
82               uflux = u_flux_bdry_SI(i,j,bi,bj)
83               BCMASKX(i,j,bi,bj) = 0.0
84               BCVALX(i,j,bi,bj) = uflux
85               utrans(i,j,bi,bj) = 1.0
86              ELSEIF (.not.(
87         &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
88         &     STREAMICE_hmask(i-1,j,bi,bj).eq.1.0)) THEN
89               BCMASKX(i,j,bi,bj) = 0.0
90               BCVALX(i,j,bi,bj) = 0. _d 0
91               utrans(i,j,bi,bj) = 0. _d 0
92              ELSE
93               BCMASKX(i,j,bi,bj) = 0.0
94               BCVALX(i,j,bi,bj) = 0. _d 0
95               utrans(i,j,bi,bj) = .5 * (
96         &      u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
97            ENDIF            ENDIF
98    
99            thick_bd = h_bdry_values_SI (i,j,bi,bj)            IF (STREAMICE_vfacemask(i,j,bi,bj).eq.3.0) THEN
100            IF (thick_bd .ne. 0. _d 0) THEN             BCMASKy(i,j,bi,bj) = 3.0
101              h_after_uflux_SI (i,j,bi,bj) = thick_bd             BCVALy(i,j,bi,bj) = h_vbdry_values_SI(i,j,bi,bj)
102               vtrans(i,j,bi,bj) = .5 * (
103         &      v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
104              ELSEIF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN
105               vflux = v_flux_bdry_SI(i,j,bi,bj)
106               BCMASKy(i,j,bi,bj) = 0.0
107               BCVALy(i,j,bi,bj) = vflux
108               vtrans(i,j,bi,bj) = 1.0
109              ELSEIF (.not.(
110         &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
111         &     STREAMICE_hmask(i,j-1,bi,bj).eq.1.0)) THEN
112               BCMASKY(i,j,bi,bj) = 0.0
113               BCVALY(i,j,bi,bj) = 0. _d 0
114               vtrans(i,j,bi,bj) = 0. _d 0
115              ELSE
116               BCMASKy(i,j,bi,bj) = 0.0
117               BCVALy(i,j,bi,bj) = 0. _d 0
118               vtrans(i,j,bi,bj) =  .5 * (
119         &      v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
120            ENDIF            ENDIF
121    
122    
123           ENDDO           ENDDO
124          ENDDO          ENDDO
125         ENDDO         ENDDO
126        ENDDO        ENDDO
127    
128  !       PRINT *, "H in last row ", H_streamice(81,20,1,1)        _EXCH_XY_RL(utrans,myThid)
129          _EXCH_XY_RL(vtrans,myThid)
130          _EXCH_XY_RS(BCMASKx,myThid)
131          _EXCH_XY_RS(BCMASKy,myThid)
132          _EXCH_XY_RL(BCVALX,myThid)
133          _EXCH_XY_RL(BCVALY,myThid)
134    
135        CALL STREAMICE_ADVECT_THICKNESS_X ( myThid,  #ifndef ALLOW_AUTODIFF_TAMC
      O   hflux_x_SI,  
      O   h_after_uflux_SI,  
      I   time_step_loc )  
136    
137  !       PRINT *, "H in last row ", H_streamice(81,20,1,1)        max_icfl = 1.e-20
138    
139        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
140         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
141          DO j=1-OLy,sNy+OLy          DO j=1,sNy
142           DO i=1-OLx,sNx+OLx           DO i=1,sNx
143            h_after_vflux_SI (i,j,bi,bj) =            IF (streamice_hmask(i,j,bi,bj).eq.1.0) THEN
144       &     h_after_uflux_SI (i,j,bi,bj)             loc_icfl=max(abs(utrans(i,j,bi,bj)),
145         &                  abs(utrans(i+1,j,bi,bj))) / dxF(i,j,bi,bj)
146               loc_icfl=max(loc_icfl,max(abs(vtrans(i,j,bi,bj)),
147         &                  abs(vtrans(i,j+1,bi,bj))) / dyF(i,j,bi,bj))
148               if (loc_icfl.gt.max_icfl) then
149                max_icfl = loc_icfl
150               ENDIF
151              ENDIF
152           ENDDO           ENDDO
153          ENDDO          ENDDO
154         ENDDO         ENDDO
155        ENDDO        ENDDO
156    
157        CALL STREAMICE_ADVECT_THICKNESS_Y ( myThid,        CALL GLOBAL_MAX_R8 (max_icfl, myThid)
158       O   hflux_y_SI,  
159       O   h_after_vflux_SI,  #endif
160          
161    
162    #ifdef ALLOW_AUTODIFF_TAMC
163    CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
164    CADJ STORE H_streamice  = comlev1, key=ikey_dynamics
165    #endif
166    
167    #ifndef ALLOW_AUTODIFF_TAMC
168          do while (time_step_rem .gt. 1.e-15)
169           time_step_loc = min (
170         &  streamice_cfl_factor / max_icfl,
171         &  time_step_rem )
172           if (time_step_loc .lt. time_step_full) then
173            PRINT *, "TAKING PARTIAL TIME STEP", time_step_loc
174           endif
175    #endif
176    
177          CALL STREAMICE_ADV_FLUX_FL_X ( myThid ,
178         I   utrans ,
179         I   H_streamice ,
180         I   BCMASKX,
181         I   BCVALX,
182         O   hflux_x_SI,
183       I   time_step_loc )       I   time_step_loc )
184    
185  !       PRINT *, "H in last row ", H_streamice(81,20,1,1)  
186    
187        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
188         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
189          DO j=1-OLy,sNy+OLy          DO j=1-3,sNy+3
190           DO i=1-OLx,sNx+OLx           DO i=1-1,sNx+1
191            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
192             H_streamice (i,j,bi,bj) =             h_after_uflux_SI (i,j,bi,bj) = H_streamice(i,j,bi,bj) -
193       &      h_after_vflux_SI (i,j,bi,bj)       &      (hflux_x_SI(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -
194         &        hflux_x_SI(i,j,bi,bj)*dyG(i,j,bi,bj))
195         &        * recip_rA (i,j,bi,bj) * time_step_loc
196               IF ( h_after_uflux_SI (i,j,bi,bj).le.0.0) THEN
197                PRINT *, "h neg after x", i,j,hflux_x_SI(i+1,j,bi,bj),
198         &        hflux_x_SI(i,j,bi,bj)
199               ENDIF
200            ENDIF            ENDIF
201           ENDDO           ENDDO
202          ENDDO          ENDDO
203         ENDDO         ENDDO
204        ENDDO        ENDDO
205    
 !       PRINT *, "H in last row ", H_streamice(81,20,1,1)  
206    
       CALL STREAMICE_ADV_FRONT ( myThid, time_step_loc )  
   
 !       PRINT *, "H in last row ", H_streamice(81,20,1,1)  
   
       _EXCH_XY_RL( H_streamice, myThid )  
       _EXCH_XY_RL( area_shelf_streamice, myThid )  
       _EXCH_XY_RL( STREAMICE_hmask, myThid )  
         
       PRINT *, "END STREAMICE_ADVECT_THICKNESS"  
207    
208    #ifdef ALLOW_AUTODIFF_TAMC
209    CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
210  #endif  #endif
       RETURN  
       END SUBROUTINE STREAMICE_ADVECT_THICKNESS  
   
 !     NEED TO ADD SOME SORT OF CHECK THAT THE HALOS ARE LARGE ENOUGH  
   
       SUBROUTINE STREAMICE_ADVECT_THICKNESS_X ( myThid ,      
      O   hflux_x ,  
      O   h ,  
      I   time_step )  
   
       IMPLICIT NONE  
   
 C     O   hflux_x ! flux per unit width across face  
 C     O   h  
 C     I   time_step  
   
 C     === Global variables ===  
 #include "SIZE.h"  
 #include "GRID.h"  
 #include "EEPARAMS.h"  
 #include "PARAMS.h"  
 #include "STREAMICE.h"  
   
       INTEGER myThid  
       _RL hflux_x          (1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)  
       _RL h                (1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)    
       _RL time_step  
         
 #ifdef ALLOW_STREAMICE  
   
 C     LOCAL VARIABLES  
211    
212        INTEGER i, j, bi, bj, Gi, Gj, k  !      CALL STREAMICE_ADVECT_THICKNESS_Y ( myThid,
213        _RL uface, phi  !     O   hflux_y_SI,
214        _RL stencil (-1:1)  !     O   h_after_vflux_SI,
215        LOGICAL H0_valid  ! there are valid cells to calculate a  !     I   time_step_loc )
216                          ! slope-limited 2nd order flux  
217        _RL SLOPE_LIMITER        CALL STREAMICE_ADV_FLUX_FL_Y ( myThid ,
218        _RL total_vol_out       I   vtrans ,
219        external SLOPE_LIMITER       I   h_after_uflux_si ,
220         I   BCMASKY,
221         I   BCVALY,
222         O   hflux_y_SI,
223         I   time_step_loc )
224    
        total_vol_out = 0.0  
225    
226        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
227         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
228          DO j=1-3,sNy+3          DO j=1-1,sNy+1
229           Gj = (myYGlobalLo-1)+(bj-1)*sNy+j           DO i=1-1,sNx+1
230           IF ((Gj .ge. 1) .and. (Gj .le. Ny)) THEN            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
231            DO i=1-2,sNx+3             h_after_vflux_SI (i,j,bi,bj) = h_after_uflux_SI(i,j,bi,bj) -
232  C        THESE ARRAY BOUNDS INSURE THAT AFTER THIS STEP,       &      (hflux_y_SI(i,j+1,bi,bj)*dxG(i,j+1,bi,bj) -
233  C        VALUES WILL BE RELIABLE 2 GRID CELLS OUT IN THE       &        hflux_y_SI(i,j,bi,bj)*dxG(i,j,bi,bj)) *
234  C        X DIRECTION AND 3 CELLS OUT IN THE Y DIR       &        recip_rA (i,j,bi,bj) * time_step_loc
235             IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .or.             IF ( h_after_vflux_SI (i,j,bi,bj).le.0.0) THEN
236       &         ((STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) .and.              PRINT *, "h neg after y", i,j,hflux_y_SI(i,j+1,bi,bj),
237       &          (STREAMICE_hmask(i,j,bi,bj).ne.1.0))) THEN       &        hflux_y_SI(i,j,bi,bj)
   
             Gi = (myXGlobalLo-1)+(bi-1)*sNx+i  
               
             IF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN  
              hflux_x (i,j,bi,bj) = u_flux_bdry_SI (i,j,bi,bj)  
             ELSE  
             
              uface = .5 *  
      &        (U_streamice(i,j,bi,bj)+U_streamice(i,j+1,bi,bj))  
   
   
              IF (uface .gt. 0. _d 0) THEN  
               DO k=-1,1  
                stencil (k) = h(i+k-1,j,bi,bj)  
               ENDDO  
               IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .and.  
      &            (STREAMICE_hmask(i-2,j,bi,bj).eq.1.0)) H0_valid=.true.  
               
               IF ((Gi.eq.1).and.(STREAMICE_hmask(i-1,j,bi,bj).eq.3.0))  
      &         THEN  ! we are at western bdry and there is a thick. bdry cond  
                hflux_x (i,j,bi,bj) = h(i-1,j,bi,bj) * uface  
               ELSEIF (H0_valid) THEN  
                phi = SLOPE_LIMITER (  
      &          stencil(0)-stencil(-1),  
      &          stencil(1)-stencil(0))  
                hflux_x (i,j,bi,bj) = uface *  
      &          (stencil(0) - phi * .5 * (stencil(0)-stencil(1)))  
               ELSE ! one of the two cells needed for a HO scheme is missing, use FO scheme  
                hflux_x (i,j,bi,bj) = uface * stencil(0)  
               ENDIF  
               
              ELSE ! uface <= 0  
   
               DO k=-1,1  
                stencil (k) = h(i-k,j,bi,bj)  
               ENDDO  
               IF ((STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) .and.  
      &            (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0)) H0_valid=.true.  
   
               IF ((Gi.eq.Nx).and.(STREAMICE_hmask(i+1,j,bi,bj).eq.3.0))  
      &         THEN  ! we are at western bdry and there is a thick. bdry cond  
                hflux_x (i,j,bi,bj) = h(i+1,j,bi,bj) * uface  
               ELSEIF (H0_valid) THEN  
                phi = SLOPE_LIMITER (  
      &          stencil(0)-stencil(-1),  
      &          stencil(1)-stencil(0))  
                hflux_x (i,j,bi,bj) = uface *  
      &          (stencil(0) - phi * .5 * (stencil(0)-stencil(1)))  
               ELSE ! one of the two cells needed for a HO scheme is missing, use FO scheme  
                hflux_x (i,j,bi,bj) = uface * stencil(0)  
               ENDIF  
   
              ENDIF  
   
             ENDIF  
   
             if (streamice_ufacemask(i,j,bi,bj).eq.2.0) THEN  
              total_vol_out = total_vol_out +  
      &         hflux_x (i,j,bi,bj) * time_step  
             ENDIF  
   
238             ENDIF             ENDIF
239            ENDDO  
240           ENDIF            ENDIF
241             ENDDO
242          ENDDO          ENDDO
243         ENDDO         ENDDO
244        ENDDO        ENDDO
245    
 C     X-FLUXES AT CELL BOUNDARIES CALCULATED; NOW TAKE FLUX DIVERGENCE TO INCREMENT THICKNESS  
         
246        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
247         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
248          DO j=1-3,sNy+3          DO j=1,sNy
249           Gj = (myYGlobalLo-1)+(bj-1)*sNy+j           DO i=1,sNx
250           IF ((Gj .ge. 1) .and. (Gj .le. Ny)) THEN            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
251            DO i=1-2,sNx+2             H_streamice (i,j,bi,bj) =
252             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN       &      h_after_vflux_SI (i,j,bi,bj)
253              h(i,j,bi,bj) = h(i,j,bi,bj) - time_step *            ENDIF
254       &       (hflux_x(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -           ENDDO
      &        hflux_x(i,j,bi,bj)*dyG(i,j,bi,bj)) *  
      &       recip_rA (i,j,bi,bj)  
            ENDIF  
           ENDDO  
          ENDIF  
255          ENDDO          ENDDO
256         ENDDO         ENDDO
257        ENDDO        ENDDO
258    
259  !       PRINT *, "TOTAL VOLUME OUT: ", total_vol_out  !      CALL STREAMICE_ADV_FRONT (
260          !     &  myThid, time_step_loc,
261    !     &  hflux_x_SI, hflux_y_SI )
262    
263    
264    #ifdef ALLOW_STREAMICE_2DTRACER
265          CALL STREAMICE_ADVECT_2DTRACER(
266         &  myThid,
267         &  myIter,
268         &  time_step,
269         &  uTrans,
270         &  vTrans,
271         &  bcMaskx,
272         &  bcMasky )
273  #endif  #endif
       RETURN  
       END SUBROUTINE STREAMICE_ADVECT_THICKNESS_X  
274    
275        SUBROUTINE STREAMICE_ADVECT_THICKNESS_Y ( myThid ,      #ifndef ALLOW_AUTODIFF_TAMC
276       O   hflux_y ,        time_step_rem = time_step_rem - time_step_loc      
277       O   h ,        enddo
278       I   time_step )  #endif
   
       IMPLICIT NONE  
   
 C     O   hflux_y ! flux per unit width across face  
 C     O   h  
 C     I   time_step  
   
 C     === Global variables ===  
 #include "SIZE.h"  
 #include "GRID.h"  
 #include "EEPARAMS.h"  
 #include "PARAMS.h"  
 #include "STREAMICE.h"  
279    
       INTEGER myThid  
       _RL hflux_y          (1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)  
       _RL h                (1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)    
       _RL time_step  
         
 #ifdef ALLOW_STREAMICE  
280    
 C     LOCAL VARIABLES  
281    
282        INTEGER i, j, bi, bj, Gi, Gj, k  ! NOW WE APPLY MELT RATES !!
283        _RL vface, phi  ! THIS MAY BE MOVED TO A SEPARATE SUBROUTINE
       _RL stencil (-1:1)  
       LOGICAL H0_valid  ! there are valid cells to calculate a  
                         ! slope-limited 2nd order flux  
       _RL SLOPE_LIMITER  
       external SLOPE_LIMITER  
284    
285        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
286         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
287          DO j=1-1,sNy+2          DO j=1,sNy
288           Gj = (myYGlobalLo-1)+(bj-1)*sNy+j           DO i=1,sNx
289           DO i=1-2,sNx+2             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.
290            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i       &       STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN
291            IF ((Gi.ge.1) .and. (Gi.le.Nx)) THEN               MR = (1.-float_frac_streamice(i,j,bi,bj)) *
292  C         THESE ARRAY BOUNDS INSURE THAT AFTER THIS STEP,       &             BDOT_STREAMICE(i,j,bi,bj)
293  C         VALUES WILL BE RELIABLE 1 GRID CELLS OUT IN THE               SMB = ADOT_STREAMICE(i,j,bi,bj)
294  C         Y DIRECTION               TMB = SMB - MR
295             IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .or.               IF ((TMB.lt.0.0) .and.
296       &         ((STREAMICE_hmask(i,j-1,bi,bj).eq.1.0) .and.       &         (MR * time_step_loc .gt.
297       &          (STREAMICE_hmask(i,j,bi,bj).ne.1.0))) THEN       &          H_streamice (i,j,bi,bj))) THEN
298                    H_streamice (i,j,bi,bj) = 0. _d 0
299              IF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN                  STREAMICE_hmask(i,j,bi,bj) = 0.
300               hflux_y (i,j,bi,bj) = v_flux_bdry_SI (i,j,bi,bj)               ELSE
301              ELSE                 H_streamice (i,j,bi,bj) =
302                   &          H_streamice (i,j,bi,bj) + TMB * time_step_loc
303               vface = .5 *               ENDIF
      &        (V_streamice(i,j,bi,bj)+V_streamice(i+1,j,bi,bj))  
   
              IF (vface .gt. 0. _d 0) THEN  
               DO k=-1,1  
                stencil (k) = h(i,j+k-1,bi,bj)  
               ENDDO  
               IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .and.  
      &            (STREAMICE_hmask(i,j-2,bi,bj).eq.1.0)) H0_valid=.true.  
               
               IF ((Gj.eq.1).and.(STREAMICE_hmask(i,j-1,bi,bj).eq.3.0))  
      &         THEN  ! we are at western bdry and there is a thick. bdry cond  
                hflux_y (i,j,bi,bj) = h(i,j-1,bi,bj) * vface  
               ELSEIF (H0_valid) THEN  
                phi = SLOPE_LIMITER (  
      &          stencil(0)-stencil(-1),  
      &          stencil(1)-stencil(0))  
                hflux_y (i,j,bi,bj) = vface *  
      &          (stencil(0) - phi * .5 * (stencil(0)-stencil(1)))  
               ELSE ! one of the two cells needed for a HO scheme is missing, use FO scheme  
                hflux_y (i,j,bi,bj) = vface * stencil(0)  
               ENDIF  
              ELSE ! uface <= 0  
               DO k=-1,1  
                stencil (k) = h(i,j-k,bi,bj)  
               ENDDO  
               IF ((STREAMICE_hmask(i,j-1,bi,bj).eq.1.0) .and.  
      &            (STREAMICE_hmask(i,j+1,bi,bj).eq.1.0)) H0_valid=.true.  
   
               IF ((Gj.eq.Ny).and.(STREAMICE_hmask(i,j+1,bi,bj).eq.3.0))  
      &         THEN  ! we are at western bdry and there is a thick. bdry cond  
                hflux_y (i,j,bi,bj) = h(i,j+1,bi,bj) * vface  
               ELSEIF (H0_valid) THEN  
                phi = SLOPE_LIMITER (  
      &          stencil(0)-stencil(-1),  
      &          stencil(1)-stencil(0))  
                hflux_y (i,j,bi,bj) = vface *  
      &          (stencil(0) - phi * .5 * (stencil(0)-stencil(1)))  
               ELSE ! one of the two cells needed for a HO scheme is missing, use FO scheme  
                hflux_y (i,j,bi,bj) = vface * stencil(0)  
               ENDIF  
   
              ENDIF ! uface  0  
   
             ENDIF  
304             ENDIF             ENDIF
           ENDIF  
305           ENDDO           ENDDO
306          ENDDO          ENDDO
307         ENDDO         ENDDO
308        ENDDO        ENDDO    
   
 C     X-FLUXES AT CELL BOUNDARIES CALCULATED; NOW TAKE FLUX DIVERGENCE TO INCREMENT THICKNESS  
309    
310          _EXCH_XY_RL (H_streamice,myThid)
311                
312          WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'
313           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
314         &                     SQUEEZE_RIGHT , 1)
315                
       DO bj=myByLo(myThid),myByHi(myThid)  
        DO bi=myBxLo(myThid),myBxHi(myThid)  
         DO j=1-1,sNy+1  
          DO i=1-2,sNx+2  
           Gi = (myXGlobalLo-1)+(bi-1)*sNx+i  
           IF ((Gi .ge. 1) .and. (Gi .le. Nx)) THEN  
            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN  
             h(i,j,bi,bj) = h(i,j,bi,bj) - time_step *  
      &       (hflux_y(i,j+1,bi,bj)*dxG(i,j+1,bi,bj) -  
      &        hflux_y(i,j,bi,bj)*dxG(i,j,bi,bj)) *  
      &       recip_rA (i,j,bi,bj)  
            ENDIF  
           ENDIF  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
   
 !       CALL WRITE_FLD_XY_RL ("h_after_yflux","",  
 !      & h, 0, myThid)  
   
316  #endif  #endif
317        RETURN        END
       END SUBROUTINE STREAMICE_ADVECT_THICKNESS_Y  
318    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22