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

Diff of /MITgcm_contrib/dgoldberg/streamice/streamice_vel_solve.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.2 by heimbach, Wed May 2 02:36:01 2012 UTC
# Line 21  C     === Global variables === Line 21  C     === Global variables ===
21  #include "PARAMS.h"  #include "PARAMS.h"
22  #include "STREAMICE.h"  #include "STREAMICE.h"
23  #include "STREAMICE_CG.h"  #include "STREAMICE_CG.h"
24    #ifdef ALLOW_AUTODIFF_TAMC
25    # include "tamc.h"
26    #endif
27    
28  C     !INPUT/OUTPUT ARGUMENTS  C     !INPUT/OUTPUT ARGUMENTS
29        INTEGER myThid        INTEGER myThid
# Line 39  C     LOCAL VARIABLES Line 42  C     LOCAL VARIABLES
42    
43        INTEGER conv_flag, i, j, k, l, iter, cg_iters, bi, bj        INTEGER conv_flag, i, j, k, l, iter, cg_iters, bi, bj
44        INTEGER iter_numconv        INTEGER iter_numconv
45          INTEGER ikey_nl
46        _RL err_max, err_tempu, err_tempv, err_init, area        _RL err_max, err_tempu, err_tempv, err_init, area
47        _RL max_vel, tempu, tempv, err_lastchange, cgtol        _RL max_vel, tempu, tempv, err_lastchange, cgtol
48        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
# Line 67  C     LOCAL VARIABLES Line 71  C     LOCAL VARIABLES
71         ENDDO         ENDDO
72        ENDDO        ENDDO
73    
74    #ifdef ALLOW_AUTODIFF_TAMC
75    !$TAF STORE U_streamice = comlev1, key=ikey_dynamics
76    !$TAF STORE V_streamice = comlev1, key=ikey_dynamics
77    #endif
78    
79        CALL STREAMICE_VISC_BETA ( myThid )        CALL STREAMICE_VISC_BETA ( myThid )
80    
81        _EXCH_XY_RL ( tau_beta_eff_streamice , myThid )        _EXCH_XY_RL ( tau_beta_eff_streamice , myThid )
# Line 89  C     LOCAL VARIABLES Line 98  C     LOCAL VARIABLES
98       O    ubd_SI,       O    ubd_SI,
99       O    vbd_SI)       O    vbd_SI)
100    
101    #ifdef ALLOW_AUTODIFF_TAMC
102    !$TAF STORE U_streamice = comlev1, key=ikey_dynamics
103    !$TAF STORE V_streamice = comlev1, key=ikey_dynamics
104    #endif
105    
106        CALL STREAMICE_CG_ACTION( myThid,        CALL STREAMICE_CG_ACTION( myThid,
107       O    Au_SI,       O    Au_SI,
108       O    Av_SI,       O    Av_SI,
# Line 97  C     LOCAL VARIABLES Line 111  C     LOCAL VARIABLES
111       I    0, sNx+1, 0, sNy+1 )       I    0, sNx+1, 0, sNy+1 )
112    
113        err_init = 0. _d 0        err_init = 0. _d 0
       err_tempu = 0. _d 0  
       err_tempv = 0. _d 0  
114    
115        DO bj = myByLo(myThid), myByHi(myThid)        DO bj = myByLo(myThid), myByHi(myThid)
116         DO bi = myBxLo(myThid), myBxHi(myThid)         DO bi = myBxLo(myThid), myBxHi(myThid)
117    #ifdef ALLOW_AUTODIFF_TAMC
118    !$TAF STORE err_init = comlev1, key=ikey_dynamics
119    #endif
120          DO j=1,sNy          DO j=1,sNy
121           DO i=1,sNx           DO i=1,sNx
122              err_tempu = 0. _d 0
123              err_tempv = 0. _d 0
124            IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN            IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
125             err_tempu =             err_tempu =
126       &      ABS (Au_SI(i,j,bi,bj)+ubd_SI(i,j,bi,bj) -       &      ABS (Au_SI(i,j,bi,bj)+ubd_SI(i,j,bi,bj) -
# Line 119  C     LOCAL VARIABLES Line 136  C     LOCAL VARIABLES
136          ENDDO          ENDDO
137         ENDDO         ENDDO
138        ENDDO        ENDDO
139    #ifdef ALLOW_AUTODIFF_TAMC
140    !$TAF STORE err_init = comlev1, key=ikey_dynamics
141    #endif
142    
143        CALL GLOBAL_MAX_R8 (err_init, myThid)        CALL GLOBAL_MAX_R8 (err_init, myThid)
144    
# Line 126  C     LOCAL VARIABLES Line 146  C     LOCAL VARIABLES
146        err_max = err_init        err_max = err_init
147        err_lastchange = err_init        err_lastchange = err_init
148    
149    C START NL ITER. LOOP
150    C-------------------------------------------------------------------
151    
152        DO iter=1,streamice_max_nl_iter        DO iter=1,streamice_max_nl_iter
153    
154  C     To avoid using "exit", loop goes through all iterations  C     To avoid using "exit", loop goes through all iterations
155  C       but after convergence loop does nothing  C       but after convergence loop does nothing
156    
157    #ifdef ALLOW_AUTODIFF_TAMC
158             ikey_nl = (ikey_dynamics-1)*streamice_max_nl + iter
159    #endif
160    #ifdef ALLOW_AUTODIFF_TAMC
161    !$TAF STORE cgtol = comlev1_stream_nl, key=ikey_nl
162    !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
163    !$TAF STORE err_tempu = comlev1_stream_nl, key=ikey_nl
164    !$TAF STORE err_tempv = comlev1_stream_nl, key=ikey_nl
165    !$TAF STORE err_lastchange = comlev1_stream_nl, key=ikey_nl
166    !$TAF STORE ru_old_si = comlev1_stream_nl, key=ikey_nl
167    !$TAF STORE rv_old_si = comlev1_stream_nl, key=ikey_nl
168    !$TAF STORE streamice_cg_a1 = comlev1_stream_nl, key=ikey_nl
169    !$TAF STORE streamice_cg_a2 = comlev1_stream_nl, key=ikey_nl
170    !$TAF STORE streamice_cg_a3 = comlev1_stream_nl, key=ikey_nl
171    !$TAF STORE streamice_cg_a4 = comlev1_stream_nl, key=ikey_nl
172    !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
173    !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
174    !$TAF STORE tau_beta_eff_streamice = comlev1_stream_nl, key=ikey_nl
175    !$TAF STORE visc_streamice = comlev1_stream_nl, key=ikey_nl
176    !$TAF STORE zu_old_si = comlev1_stream_nl, key=ikey_nl
177    !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
178    #endif
179    
180         IF (err_max .GT. streamice_nonlin_tol * err_init) THEN         IF (err_max .GT. streamice_nonlin_tol * err_init) THEN
181    
182         iter_numconv = iter_numconv + 1         iter_numconv = iter_numconv + 1
183    
184    #ifdef ALLOW_AUTODIFF_TAMC
185    !$TAF STORE cgtol = comlev1_stream_nl, key=ikey_nl
186    !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
187    !$TAF STORE err_tempu = comlev1_stream_nl, key=ikey_nl
188    !$TAF STORE err_tempv = comlev1_stream_nl, key=ikey_nl
189    !$TAF STORE err_lastchange = comlev1_stream_nl, key=ikey_nl
190    !$TAF STORE ru_old_si = comlev1_stream_nl, key=ikey_nl
191    !$TAF STORE rv_old_si = comlev1_stream_nl, key=ikey_nl
192    !$TAF STORE streamice_cg_a1 = comlev1_stream_nl, key=ikey_nl
193    !$TAF STORE streamice_cg_a2 = comlev1_stream_nl, key=ikey_nl
194    !$TAF STORE streamice_cg_a3 = comlev1_stream_nl, key=ikey_nl
195    !$TAF STORE streamice_cg_a4 = comlev1_stream_nl, key=ikey_nl
196    !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
197    !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
198    !$TAF STORE tau_beta_eff_streamice = comlev1_stream_nl, key=ikey_nl
199    !$TAF STORE visc_streamice = comlev1_stream_nl, key=ikey_nl
200    !$TAF STORE zu_old_si = comlev1_stream_nl, key=ikey_nl
201    !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
202    #endif
203    
204         CALL STREAMICE_CG_SOLVE(         CALL STREAMICE_CG_SOLVE(
205       &  U_streamice,       &  U_streamice,
206       &  V_streamice,       &  V_streamice,
207       &  taudx_SI,       &  taudx_SI,
208       &  taudy_SI,       &  taudy_SI,
209       &  myThid , cgtol , cg_iters)       &  cgtol,
210         &  cg_iters,
211         &  myThid )
212    
213                
214    
# Line 151  C       but after convergence loop does Line 219  C       but after convergence loop does
219          CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,          CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
220       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
221    
222    #ifdef ALLOW_AUTODIFF_TAMC
223    !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
224    !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
225    #endif
226    
227         CALL STREAMICE_VISC_BETA ( myThid )         CALL STREAMICE_VISC_BETA ( myThid )
228    
229    #ifdef ALLOW_AUTODIFF_TAMC
230    !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
231    !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
232    #endif
233    
234         _EXCH_XY_RL ( tau_beta_eff_streamice , myThid )         _EXCH_XY_RL ( tau_beta_eff_streamice , myThid )
235         _EXCH_XY_RL ( visc_streamice , myThid )         _EXCH_XY_RL ( visc_streamice , myThid )
236    
# Line 173  C       but after convergence loop does Line 251  C       but after convergence loop does
251       O    ubd_SI,       O    ubd_SI,
252       O    vbd_SI)       O    vbd_SI)
253    
254    #ifdef ALLOW_AUTODIFF_TAMC
255    !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
256    !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
257    #endif
258    
259         CALL STREAMICE_CG_ACTION( myThid,         CALL STREAMICE_CG_ACTION( myThid,
260       O    Au_SI,       O    Au_SI,
261       O    Av_SI,       O    Av_SI,
# Line 180  C       but after convergence loop does Line 263  C       but after convergence loop does
263       I    V_streamice,       I    V_streamice,
264       I    0, sNx+1, 0, sNy+1 )       I    0, sNx+1, 0, sNy+1 )
265    
266    #ifdef ALLOW_AUTODIFF_TAMC
267    !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
268    !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
269    #endif
270    
271         err_max = 0. _d 0         err_max = 0. _d 0
        err_tempu = 0. _d 0  
        err_tempv = 0. _d 0  
272    
273    #ifdef ALLOW_AUTODIFF_TAMC
274    !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
275    #endif
276         DO bj = myByLo(myThid), myByHi(myThid)         DO bj = myByLo(myThid), myByHi(myThid)
277          DO bi = myBxLo(myThid), myBxHi(myThid)          DO bi = myBxLo(myThid), myBxHi(myThid)
278    #ifdef ALLOW_AUTODIFF_TAMC
279    !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
280    #endif
281           DO j=1,sNy           DO j=1,sNy
282            DO i=1,sNx            DO i=1,sNx
283               err_tempu = 0. _d 0
284               err_tempv = 0. _d 0
285             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
286              err_tempu =              err_tempu =
287       &       ABS (Au_SI(i,j,bi,bj)+ubd_SI(i,j,bi,bj) -       &       ABS (Au_SI(i,j,bi,bj)+ubd_SI(i,j,bi,bj) -
# Line 224  C       but after convergence loop does Line 318  C       but after convergence loop does
318         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)
319        ENDDO        ENDDO
320    
321    C END NL ITER. LOOP
322    C-------------------------------------------------------------------
323    
324        if (iter_numconv .lt. streamice_max_nl_iter) then        if (iter_numconv .lt. streamice_max_nl_iter) then
325         PRINT *, "VELOCITY SOLVE CONVERGED, ", iter_numconv,         PRINT *, "VELOCITY SOLVE CONVERGED, ", iter_numconv,
326       & " iterations"       & " iterations"

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

  ViewVC Help
Powered by ViewVC 1.1.22