/[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.7 by dgoldberg, Thu Mar 7 15:12:19 2013 UTC revision 1.8 by dgoldberg, Sat Jun 8 22:15:33 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 28  C     === Global variables === Line 28  C     === Global variables ===
28  # include "tamc.h"  # include "tamc.h"
29  #endif  #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
       _RL SLOPE_LIMITER  
38        _RL sec_per_year, time_step_loc, MR, SMB, TMB        _RL sec_per_year, time_step_loc, MR, SMB, TMB
39          _RL BCVALX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
40          _RL BCVALY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
41          _RS BCMASKX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42          _RS BCMASKY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43          _RL utrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
44          _RL vtrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
45          _RL h_after_uflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
46          _RL h_after_vflux_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
47          _RL hflux_x_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
48          _RL hflux_y_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
49          
50        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
       external SLOPE_LIMITER  
51    
52        sec_per_year = 365.*86400.        sec_per_year = 365.*86400.
53    
# Line 52  CADJ STORE streamice_hmask  = comlev1, k Line 61  CADJ STORE streamice_hmask  = comlev1, k
61    
62        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
63         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
64          DO j=1-OLy,sNy+OLy          DO j=1-3,sNy+3
65           DO i=1-OLx,sNx+OLx           DO i=1-3,sNx+3
66    
67            H_streamice_prev(i,j,bi,bj) =            H_streamice_prev(i,j,bi,bj) =
68       &     H_streamice(i,j,bi,bj)       &     H_streamice(i,j,bi,bj)
69    
70            hflux_x_SI (i,j,bi,bj) = 0. _d 0            hflux_x_SI (i,j,bi,bj) = 0. _d 0
71            hflux_y_SI (i,j,bi,bj) = 0. _d 0            hflux_y_SI (i,j,bi,bj) = 0. _d 0
72            hflux_x_SI2 (i,j,bi,bj) = 0. _d 0  
73            hflux_y_SI2 (i,j,bi,bj) = 0. _d 0  
74            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN            IF (STREAMICE_ufacemask(i,j,bi,bj).eq.3.0) THEN
75             h_after_uflux_SI (i,j,bi,bj) =             BCMASKX(i,j,bi,bj) = 3.0
76       &      H_streamice (i,j,bi,bj)             BCVALX(i,j,bi,bj) = h_ubdry_values_SI(i,j,bi,bj)
77               utrans(i,j,bi,bj) = .5 * (
78         &      u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
79              ELSEIF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN
80               uflux = u_flux_bdry_SI(i,j,bi,bj)
81               BCMASKX(i,j,bi,bj) = 0.0
82               BCVALX(i,j,bi,bj) = uflux
83               utrans(i,j,bi,bj) = 1.0
84              ELSEIF (.not.(
85         &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
86         &     STREAMICE_hmask(i-1,j,bi,bj).eq.1.0)) THEN
87               BCMASKX(i,j,bi,bj) = 0.0
88               BCVALX(i,j,bi,bj) = 0. _d 0
89               utrans(i,j,bi,bj) = 0. _d 0
90              ELSE
91               BCMASKX(i,j,bi,bj) = 0.0
92               BCVALX(i,j,bi,bj) = 0. _d 0
93               utrans(i,j,bi,bj) = .5 * (
94         &      u_streamice(i,j,bi,bj)+u_streamice(i,j+1,bi,bj))
95            ENDIF            ENDIF
96    
97            thick_bd = h_bdry_values_SI (i,j,bi,bj)            IF (STREAMICE_vfacemask(i,j,bi,bj).eq.3.0) THEN
98            IF (thick_bd .ne. 0. _d 0) THEN             BCMASKy(i,j,bi,bj) = 3.0
99              h_after_uflux_SI (i,j,bi,bj) = thick_bd             BCVALy(i,j,bi,bj) = h_vbdry_values_SI(i,j,bi,bj)
100               vtrans(i,j,bi,bj) = .5 * (
101         &      v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
102              ELSEIF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN
103               vflux = v_flux_bdry_SI(i,j,bi,bj)
104               BCMASKy(i,j,bi,bj) = 0.0
105               BCVALy(i,j,bi,bj) = vflux
106               vtrans(i,j,bi,bj) = 1.0
107              ELSEIF (.not.(
108         &     STREAMICE_hmask(i,j,bi,bj).eq.1.0.OR.
109         &     STREAMICE_hmask(i,j-1,bi,bj).eq.1.0)) THEN
110               BCMASKY(i,j,bi,bj) = 0.0
111               BCVALY(i,j,bi,bj) = 0. _d 0
112               vtrans(i,j,bi,bj) = 0. _d 0
113              ELSE
114               BCMASKy(i,j,bi,bj) = 0.0
115               BCVALy(i,j,bi,bj) = 0. _d 0
116               vtrans(i,j,bi,bj) =  .5 * (
117         &      v_streamice(i,j,bi,bj)+v_streamice(i+1,j,bi,bj))
118            ENDIF            ENDIF
119    
120    
121           ENDDO           ENDDO
122          ENDDO          ENDDO
123         ENDDO         ENDDO
124        ENDDO        ENDDO
125    
126          _EXCH_XY_RL(utrans,myThid)
127          _EXCH_XY_RL(vtrans,myThid)
128          _EXCH_XY_RS(BCMASKx,myThid)
129          _EXCH_XY_RS(BCMASKy,myThid)
130          _EXCH_XY_RL(BCVALX,myThid)
131          _EXCH_XY_RL(BCVALY,myThid)
132    
133  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
 CADJ STORE h_after_uflux_si = comlev1, key=ikey_dynamics  
134  CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics  CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
135    CADJ STORE H_streamice  = comlev1, key=ikey_dynamics
136  #endif  #endif
137    
138        CALL STREAMICE_ADVECT_THICKNESS_X ( myThid,  
139          CALL STREAMICE_ADV_FLUX_FL_X ( myThid ,
140         I   utrans ,
141         I   H_streamice ,
142         I   BCMASKX,
143         I   BCVALX,
144       O   hflux_x_SI,       O   hflux_x_SI,
      O   h_after_uflux_SI,  
145       I   time_step_loc )       I   time_step_loc )
146    
147    
148    
149        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
150         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
151          DO j=1-OLy,sNy+OLy          DO j=1-3,sNy+3
152           DO i=1-OLx,sNx+OLx           DO i=1-1,sNx+1
153            h_after_vflux_SI (i,j,bi,bj) =            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
154       &     h_after_uflux_SI (i,j,bi,bj)             h_after_uflux_SI (i,j,bi,bj) = H_streamice(i,j,bi,bj) -
155         &      (hflux_x_SI(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -
156         &        hflux_x_SI(i,j,bi,bj)*dyG(i,j,bi,bj))
157         &        * recip_rA (i,j,bi,bj) * time_step_loc
158               IF ( h_after_uflux_SI (i,j,bi,bj).le.0.0) THEN
159                PRINT *, "h neg after x", i,j,hflux_x_SI(i+1,j,bi,bj),
160         &        hflux_x_SI(i,j,bi,bj)
161               ENDIF
162              ENDIF
163           ENDDO           ENDDO
164          ENDDO          ENDDO
165         ENDDO         ENDDO
166        ENDDO        ENDDO
167    
168    
169    
170  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
 CADJ STORE h_after_vflux_si = comlev1, key=ikey_dynamics  
171  CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics  CADJ STORE streamice_hmask  = comlev1, key=ikey_dynamics
172  #endif  #endif
173    
174        CALL STREAMICE_ADVECT_THICKNESS_Y ( myThid,  !      CALL STREAMICE_ADVECT_THICKNESS_Y ( myThid,
175    !     O   hflux_y_SI,
176    !     O   h_after_vflux_SI,
177    !     I   time_step_loc )
178    
179          CALL STREAMICE_ADV_FLUX_FL_Y ( myThid ,
180         I   vtrans ,
181         I   h_after_uflux_si ,
182         I   BCMASKY,
183         I   BCVALY,
184       O   hflux_y_SI,       O   hflux_y_SI,
      O   h_after_vflux_SI,  
185       I   time_step_loc )       I   time_step_loc )
186    
187    
188          DO bj=myByLo(myThid),myByHi(myThid)
189           DO bi=myBxLo(myThid),myBxHi(myThid)
190            DO j=1-1,sNy+1
191             DO i=1-1,sNx+1
192              IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
193               h_after_vflux_SI (i,j,bi,bj) = h_after_uflux_SI(i,j,bi,bj) -
194         &      (hflux_y_SI(i,j+1,bi,bj)*dxG(i,j+1,bi,bj) -
195         &        hflux_y_SI(i,j,bi,bj)*dxG(i,j,bi,bj)) *
196         &        recip_rA (i,j,bi,bj) * time_step_loc
197               IF ( h_after_vflux_SI (i,j,bi,bj).le.0.0) THEN
198                PRINT *, "h neg after y", i,j,hflux_y_SI(i,j+1,bi,bj),
199         &        hflux_y_SI(i,j,bi,bj)
200               ENDIF
201    
202              ENDIF
203             ENDDO
204            ENDDO
205           ENDDO
206          ENDDO
207    
208        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
209         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
210          DO j=1-OLy,sNy+OLy          DO j=1,sNy
211           DO i=1-OLx,sNx+OLx           DO i=1,sNx
212            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN            IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
213             H_streamice (i,j,bi,bj) =             H_streamice (i,j,bi,bj) =
214       &      h_after_vflux_SI (i,j,bi,bj)       &      h_after_vflux_SI (i,j,bi,bj)
# Line 123  CADJ STORE streamice_hmask  = comlev1, k Line 218  CADJ STORE streamice_hmask  = comlev1, k
218         ENDDO         ENDDO
219        ENDDO        ENDDO
220    
221    !      CALL STREAMICE_ADV_FRONT (
222    !     &  myThid, time_step_loc,
223    !     &  hflux_x_SI, hflux_y_SI )
224    
225    
226    #ifdef ALLOW_STREAMICE_2DTRACER
227        CALL STREAMICE_ADV_FRONT ( myThid, time_step_loc )        CALL STREAMICE_ADVECT_2DTRACER(
228         &  myThid,
229         &  myIter,
230         &  time_step,
231         &  uTrans,
232         &  vTrans,
233         &  bcMaskx,
234         &  bcMasky )
235    #endif
236    
237    
238  ! NOW WE APPLY MELT RATES !!  ! NOW WE APPLY MELT RATES !!
# Line 133  CADJ STORE streamice_hmask  = comlev1, k Line 240  CADJ STORE streamice_hmask  = comlev1, k
240    
241        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
242         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
243          DO j=1-OLy,sNy+OLy          DO j=1,sNy
244           DO i=1-OLx,sNx+OLx           DO i=1,sNx
245             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.             IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.
246       &       STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN       &       STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN
247               MR = (1.-float_frac_streamice(i,j,bi,bj)) *               MR = (1.-float_frac_streamice(i,j,bi,bj)) *
# Line 155  CADJ STORE streamice_hmask  = comlev1, k Line 262  CADJ STORE streamice_hmask  = comlev1, k
262          ENDDO          ENDDO
263         ENDDO         ENDDO
264        ENDDO            ENDDO    
265    
266          _EXCH_XY_RL (H_streamice,myThid)
267                
268        WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'        WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'
269         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,

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

  ViewVC Help
Powered by ViewVC 1.1.22