/[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.4 by dgoldberg, Thu Jul 26 02:14:25 2012 UTC revision 1.14 by dgoldberg, Wed Aug 27 19:29:14 2014 UTC
# Line 6  C $Name$ Line 6  C $Name$
6  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    
8  CBOP  CBOP
9        SUBROUTINE STREAMICE_VEL_SOLVE( myThid )        SUBROUTINE STREAMICE_VEL_SOLVE( myThid, maxNLIter, maxCGiter )
10  C     /============================================================\  C     /============================================================\
11  C     | SUBROUTINE                                                 |    C     | SUBROUTINE                                                 |
12  C     | o                                                          |  C     | o                                                          |
13  C     |============================================================|  C     |============================================================|
14  C     |                                                            |  C     |                                                            |
# 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_PETSC
25    !#include "finclude/petsc.h"
26    !#endif
27    
28  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
29  # include "tamc.h"  # include "tamc.h"
30  #endif  #endif
31    
32  C     !INPUT/OUTPUT ARGUMENTS  C     !INPUT/OUTPUT ARGUMENTS
33        INTEGER myThid        INTEGER myThid
34          INTEGER maxNLIter
35          INTEGER maxCGIter
36    
37  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
38    
39  C     LOCAL VARIABLES  C     LOCAL VARIABLES
40          
41  !   real, dimension(:,:), pointer :: TAUDX, TAUDY, u_prev_iterate, v_prev_iterate, &  !   real, dimension(:,:), pointer :: TAUDX, TAUDY, u_prev_iterate, v_prev_iterate, &
42  !                         u_bdry_cont, v_bdry_cont, Au, Av, err_u, err_v, &  !                         u_bdry_cont, v_bdry_cont, Au, Av, err_u, err_v, &
43  !                         geolonq, geolatq, u_last, v_last, float_cond, H_node  !                         geolonq, geolatq, u_last, v_last, float_cond, H_node
# Line 40  C     LOCAL VARIABLES Line 46  C     LOCAL VARIABLES
46  !                         isdq, iedq, jsdq, jedq, isd, ied, jsd, jed, isumstart, jsumstart, nodefloat, nsub  !                         isdq, iedq, jsdq, jedq, isd, ied, jsd, jed, isumstart, jsumstart, nodefloat, nsub
47  !   real                     :: err_max, err_tempu, err_tempv, err_init, area, max_vel, tempu, tempv, rhoi, rhow  !   real                     :: err_max, err_tempu, err_tempv, err_init, area, max_vel, tempu, tempv, rhoi, rhow
48    
49        INTEGER conv_flag, i, j, k, l, iter, cg_iters, bi, bj        INTEGER i, j, k, l, iter, cg_iters, bi, bj
50        INTEGER iter_numconv        INTEGER iter_numconv
51        INTEGER ikey_nl        INTEGER ikey_nl, myThidTemp
52        _RL err_max, err_tempu, err_tempv, err_init, area        _RL err_max, err_tempu, err_tempv, err_init, area, err_max_fp
53        _RL max_vel, tempu, tempv, err_lastchange, cgtol        _RL max_vel, tempu, tempv, err_lastchange, cgtol
54        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
55  !       _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+Oly,nSx,nSy)        LOGICAL CONVERGED
56  !       _RL taudy (1-OLx:sNx+OLx,1-OLy:sNy+Oly,nSx,nSy)  #ifdef ALLOW_PETSC
57    !      myThidTemp = myThid
58    !      call streamice_initialize_petsc (myThidTemp)
59    #endif
60    !       _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
61    !       _RL taudy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
62    
63          IF (STREAMICE_ppm_driving_stress) THEN
64           CALL STREAMICE_DRIVING_STRESS_PPM (myThid)
65          ELSE
66           CALL STREAMICE_DRIVING_STRESS (myThid)
67          ENDIF
68    
69    #ifdef ALLOW_AUTODIFF_TAMC
70    #ifdef STREAMICE_STRESS_BOUNDARY_CONTROL
71    !$TAF STORE taudx_SI = comlev1, key=ikey_dynamics
72    !$TAF STORE taudy_SI = comlev1, key=ikey_dynamics
73    #endif
74    #endif
75    
76    #ifdef STREAMICE_STRESS_BOUNDARY_CONTROL
77          _EXCH_XY_RL( taudx_SI , myThid )
78          _EXCH_XY_RL( taudy_SI , myThid )
79          CALL STREAMICE_FORCED_BUTTRESS (myThid)
80    #endif
81    
82        CALL STREAMICE_DRIVING_STRESS (myThid)        CALL TIMER_START ('STREAMICE_VEL_SOLVE',myThid)
83    
84    
85        cgtol = streamice_cg_tol        cgtol = streamice_cg_tol
86          CONVERGED = .false.
87          err_max = 0.
88          err_max_fp = 0.
89    
 !       CALL WRITE_FULLARRAY_RL ("taudy_SI",taudy_SI,1,0,0,1,0,myThid)  
90    
91        _EXCH_XY_RL ( taudx_SI , myThid )        _EXCH_XY_RL( taudx_SI , myThid )
92        _EXCH_XY_RL ( taudy_SI , myThid )        _EXCH_XY_RL( taudy_SI , myThid )
93    
 !       CALL WRITE_FULLARRAY_RL ("taudy_SI_2",taudy_SI,1,0,0,1,0,myThid)  
94    
95        DO bj = myByLo(myThid), myByHi(myThid)        DO bj = myByLo(myThid), myByHi(myThid)
96         DO bi = myBxLo(myThid), myBxHi(myThid)         DO bi = myBxLo(myThid), myBxHi(myThid)
# Line 74  C     LOCAL VARIABLES Line 106  C     LOCAL VARIABLES
106  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
107  !$TAF STORE U_streamice = comlev1, key=ikey_dynamics  !$TAF STORE U_streamice = comlev1, key=ikey_dynamics
108  !$TAF STORE V_streamice = comlev1, key=ikey_dynamics  !$TAF STORE V_streamice = comlev1, key=ikey_dynamics
109    #ifdef STREAMICE_HYBRID_STRESS
110    !$TAF STORE streamice_taubx = comlev1, key=ikey_dynamics
111    !$TAF STORE streamice_tauby = comlev1, key=ikey_dynamics
112    !$TAF STORE visc_streamice_full = comlev1, key=ikey_dynamics
113    #endif
114  #endif  #endif
115    
116        CALL STREAMICE_VISC_BETA ( myThid )  #ifdef STREAMICE_HYBRID_STRESS
117           CALL STREAMICE_VISC_BETA_HYBRID ( myThid )
118        _EXCH_XY_RL ( tau_beta_eff_streamice , myThid )  #else
119        _EXCH_XY_RL ( visc_streamice , myThid )         CALL STREAMICE_VISC_BETA ( myThid )
120    #endif
       DO bj = myByLo(myThid), myByHi(myThid)  
        DO bi = myBxLo(myThid), myBxHi(myThid)  
         DO j=1,sNy  
          DO i=1,sNx  
           Au_SI (i,j,bi,bj) = 0. _d 0  
           Av_SI (i,j,bi,bj) = 0. _d 0  
           ubd_SI (i,j,bi,bj) = 0. _d 0  
           vbd_SI (i,j,bi,bj) = 0. _d 0  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
121    
122    #ifdef STREAMICE_HYBRID_STRESS
123    !$TAF STORE visc_streamice_full = comlev1, key=ikey_dynamics
124    #endif
125    
126        CALL STREAMICE_CG_BOUND_VALS( myThid,            _EXCH_XY_RL( tau_beta_eff_streamice , myThid )
127       O    ubd_SI,        _EXCH_XY_RL( visc_streamice , myThid )
      O    vbd_SI)  
128    
 #ifdef ALLOW_AUTODIFF_TAMC  
 !$TAF STORE U_streamice = comlev1, key=ikey_dynamics  
 !$TAF STORE V_streamice = comlev1, key=ikey_dynamics  
 #endif  
129    
130        CALL STREAMICE_CG_ACTION( myThid,        if (STREAMICE_chkresidconvergence) then
      O    Au_SI,  
      O    Av_SI,  
      I    U_streamice,  
      I    V_streamice,  
      I    0, sNx+1, 0, sNy+1 )  
131    
132        err_init = 0. _d 0          CALL STREAMICE_GET_VEL_RESID_ERR ( err_init, myThid )
133    
       DO bj = myByLo(myThid), myByHi(myThid)  
        DO bi = myBxLo(myThid), myBxHi(myThid)  
134  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
135  !$TAF STORE err_init = comlev1, key=ikey_dynamics  !$TAF STORE err_init = comlev1, key=ikey_dynamics
136  #endif  #endif
         DO j=1,sNy  
          DO i=1,sNx  
           err_tempu = 0. _d 0  
           err_tempv = 0. _d 0  
           IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN  
            err_tempu =  
      &      ABS (Au_SI(i,j,bi,bj)+ubd_SI(i,j,bi,bj) -  
      &           taudx_SI(i,j,bi,bj))  
           ENDIF  
           IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN  
            err_tempv = MAX( err_tempu,  
      &      ABS (Av_SI(i,j,bi,bj)+vbd_SI(i,j,bi,bj) -  
      &           taudy_SI(i,j,bi,bj)))  
           ENDIF  
           IF (err_tempv .ge. err_init) err_init = err_tempv  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #ifdef ALLOW_AUTODIFF_TAMC  
 !$TAF STORE err_init = comlev1, key=ikey_dynamics  
 #endif  
   
       CALL GLOBAL_MAX_R8 (err_init, myThid)  
137    
138        WRITE(msgBuf,'(A,E15.7)') 'initial nonlinear resid (error): ',         WRITE(msgBuf,'(A,E15.7)') 'initial nonlinear resid (error): ',
139       &                       err_init       &                       err_init
140        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
141       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
142    
143          endif !STREAMICE_chkresidconvergence
144    
145    
146        iter_numconv = 0        iter_numconv = 0
147        err_max = err_init        err_max = err_init
148          err_max_fp = streamice_nonlin_tol_fp * 10.
149        err_lastchange = err_init        err_lastchange = err_init
150    
151  C START NL ITER. LOOP  C START NL ITER. LOOP
152  C-------------------------------------------------------------------  C-------------------------------------------------------------------
153    
154        DO iter=1,streamice_max_nl_iter        DO iter=1,maxNLIter
155    
156  C     To avoid using "exit", loop goes through all iterations  C     To avoid using "exit", loop goes through all iterations
157  C       but after convergence loop does nothing  C       but after convergence loop does nothing
158    
159  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 167  C       but after convergence loop does Line 162  C       but after convergence loop does
162  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
163  !$TAF STORE cgtol = comlev1_stream_nl, key=ikey_nl  !$TAF STORE cgtol = comlev1_stream_nl, key=ikey_nl
164  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
165    !$TAF STORE err_max_fp = comlev1_stream_nl, key=ikey_nl
166  !$TAF STORE err_tempu = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_tempu = comlev1_stream_nl, key=ikey_nl
167  !$TAF STORE err_tempv = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_tempv = comlev1_stream_nl, key=ikey_nl
168  !$TAF STORE err_lastchange = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_lastchange = comlev1_stream_nl, key=ikey_nl
169  !$TAF STORE ru_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE ru_old_si = comlev1_stream_nl, key=ikey_nl
170  !$TAF STORE rv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE rv_old_si = comlev1_stream_nl, key=ikey_nl
171    !$TAF STORE u_old_si = comlev1_stream_nl, key=ikey_nl
172    !$TAF STORE v_old_si = comlev1_stream_nl, key=ikey_nl
173  !$TAF STORE streamice_cg_a1 = comlev1_stream_nl, key=ikey_nl  !$TAF STORE streamice_cg_a1 = comlev1_stream_nl, key=ikey_nl
174  !$TAF STORE streamice_cg_a2 = comlev1_stream_nl, key=ikey_nl  !$TAF STORE streamice_cg_a2 = comlev1_stream_nl, key=ikey_nl
175  !$TAF STORE streamice_cg_a3 = comlev1_stream_nl, key=ikey_nl  !$TAF STORE streamice_cg_a3 = comlev1_stream_nl, key=ikey_nl
# Line 184  C       but after convergence loop does Line 182  C       but after convergence loop does
182  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
183  #endif  #endif
184    
185         IF (err_max .GT. streamice_nonlin_tol * err_init) THEN  !        IF ((err_max .GT. streamice_nonlin_tol * err_init) .and.
186    !      &     (err_max_fp .GT. streamice_nonlin_tol_fp)) THEN
187    
188    #ifdef ALLOW_AUTODIFF_TAMC
189    !$TAF STORE CONVERGED = comlev1_stream_nl, key=ikey_nl
190    #endif
191          
192           IF (.not.CONVERGED) THEN
193    
194    
195         iter_numconv = iter_numconv + 1         iter_numconv = iter_numconv + 1
196    
# Line 208  C       but after convergence loop does Line 214  C       but after convergence loop does
214  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
215  #endif  #endif
216    
 #ifdef ALLOW_AUTODIFF_TAMC  
 !       DO bj = myByLo(myThid), myByHi(myThid)  
 !        DO bi = myBxLo(myThid), myBxHi(myThid)  
 !         DO j=1-OLy,sNy+OLy  
 !          DO i=1-OLx,sNx+OLx  
 !           U_streamice (i,j,bi,bj) = 0. _d 0  
 !           V_streamice (i,j,bi,bj) = 0. _d 0  
 !          ENDDO  
 !         ENDDO  
 !        ENDDO  
 !       ENDDO  
 #endif  
217    
218         CALL STREAMICE_CG_WRAPPER(         CALL STREAMICE_CG_WRAPPER(
219       &       U_streamice,       &       U_streamice,
220       &       V_streamice,       &       V_streamice,
221       &       taudx_SI,       &       taudx_SI,
222       &       taudy_SI,       &       taudy_SI,
223       &       cgtol,       &       cgtol,
224       &       cg_iters,       &       cg_iters,
225         &       maxCGIter,
226       &       myThid )       &       myThid )
227    
228          #ifdef STREAMICE_HYBRID_STRESS
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    #endif
234    
235    #ifdef STREAMICE_HYBRID_STRESS
236            CALL STREAMICE_TAUB (myThid)
237    #endif
238    
239    !-----------------------------------------------------------------------------
240         WRITE(msgBuf,'(A,I5,A,I4,A)') 'streamice linear solve number',         WRITE(msgBuf,'(A,I5,A,I4,A)') 'streamice linear solve number',
241       &                       iter, " ",       &                       iter, " ",
242       &                       cg_iters,       &                       cg_iters,
243       &                       ' iterations '       &                       ' iterations '
244          CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,          CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
245       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
246    !-----------------------------------------------------------------------------
247    
248  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
249  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
250  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
251    #ifdef STREAMICE_HYBRID_STRESS
252    !$TAF STORE streamice_taubx = comlev1_stream_nl, key=ikey_nl
253    !$TAF STORE streamice_tauby = comlev1_stream_nl, key=ikey_nl
254    !$TAF STORE visc_streamice_full = comlev1_stream_nl, key=ikey_nl
255    #endif
256  #endif  #endif
257    
258    #ifdef STREAMICE_HYBRID_STRESS
259           CALL STREAMICE_VISC_BETA_HYBRID ( myThid )
260    #else
261         CALL STREAMICE_VISC_BETA ( myThid )         CALL STREAMICE_VISC_BETA ( myThid )
   
   
 #ifdef ALLOW_AUTODIFF_TAMC  
 !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl  
 !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl  
262  #endif  #endif
263    
        _EXCH_XY_RL ( tau_beta_eff_streamice , myThid )  
        _EXCH_XY_RL ( visc_streamice , myThid )  
264    
265         DO bj = myByLo(myThid), myByHi(myThid)        _EXCH_XY_RL( tau_beta_eff_streamice , myThid )
266          DO bi = myBxLo(myThid), myBxHi(myThid)        _EXCH_XY_RL( visc_streamice , myThid )
          DO j=1,sNy  
           DO i=1,sNx  
            Au_SI (i,j,bi,bj) = 0. _d 0  
            Av_SI (i,j,bi,bj) = 0. _d 0  
            ubd_SI (i,j,bi,bj) = 0. _d 0  
            vbd_SI (i,j,bi,bj) = 0. _d 0  
           ENDDO  
          ENDDO  
         ENDDO  
        ENDDO  
267    
268         CALL STREAMICE_CG_BOUND_VALS( myThid,      !----------------------CONVERGENCE TESTS-------------------------------
      O    ubd_SI,  
      O    vbd_SI)  
269    
270  #ifdef ALLOW_AUTODIFF_TAMC        if (STREAMICE_chkresidconvergence) then
 !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl  
 !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl  
 #endif  
271    
272         CALL STREAMICE_CG_ACTION( myThid,          CALL STREAMICE_GET_VEL_RESID_ERR ( err_max, myThid )
      O    Au_SI,  
      O    Av_SI,  
      I    U_streamice,  
      I    V_streamice,  
      I    0, sNx+1, 0, sNy+1 )  
273    
274  #ifdef ALLOW_AUTODIFF_TAMC         WRITE(msgBuf,'(A,E15.7)') 'err/err_init',
275  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl       &                       err_max/err_init
276  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
277  #endif       &                    SQUEEZE_RIGHT , 1)
278    
279         err_max = 0. _d 0         IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
280            CONVERGED = .true.
281           ENDIF
282    
283    
284          endif
285    
286    
287    
288          if (STREAMICE_chkfixedptconvergence) then
289    
290            CALL STREAMICE_GET_VEL_FP_ERR ( err_max_fp, myThid )
291    
 #ifdef ALLOW_AUTODIFF_TAMC  
 !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl  
 #endif  
292         DO bj = myByLo(myThid), myByHi(myThid)         DO bj = myByLo(myThid), myByHi(myThid)
293          DO bi = myBxLo(myThid), myBxHi(myThid)          DO bi = myBxLo(myThid), myBxHi(myThid)
294  #ifdef ALLOW_AUTODIFF_TAMC           DO j=1-OLy,sNy+OLy
295  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl            DO i=1-OLx,sNx+OLx
296  #endif             u_old_SI (i,j,bi,bj) = U_streamice (i,j,bi,bj)
297           DO j=1,sNy             v_old_SI (i,j,bi,bj) = V_streamice (i,j,bi,bj)
           DO i=1,sNx  
            err_tempu = 0. _d 0  
            err_tempv = 0. _d 0  
            IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN  
             err_tempu =  
      &       ABS (Au_SI(i,j,bi,bj)+ubd_SI(i,j,bi,bj) -  
      &            taudx_SI(i,j,bi,bj))  
            ENDIF  
            IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN  
             err_tempv = MAX( err_tempu,  
      &       ABS (Av_SI(i,j,bi,bj)+vbd_SI(i,j,bi,bj) -  
      &            taudy_SI(i,j,bi,bj)))  
            ENDIF  
            IF (err_tempv .ge. err_max) err_max = err_tempv  
298            ENDDO            ENDDO
299           ENDDO           ENDDO
300          ENDDO          ENDDO
301         ENDDO         ENDDO
302    
303         CALL GLOBAL_MAX_R8 (err_max, myThid)         WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ERROR =',
304         &                       err_max_fp
        WRITE(msgBuf,'(A,F11.7)') 'err/err_init',  
      &                       err_max/err_init  
305         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
306       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
307    
308           IF (err_max_fp .LE. streamice_nonlin_tol_fp) THEN
309            CONVERGED = .true.
310           ENDIF
311    
312          endif
313    
314    
315    
316    
317    !----------------------END CONVERGENCE TESTS-------------------------------
318    
319    
320    
321    
322         IF (err_max<err_lastchange*1.e-2 .and.         IF (err_max<err_lastchange*1.e-2 .and.
323       &   STREAMICE_lower_cg_tol) THEN       &   STREAMICE_lower_cg_tol) THEN
324           cgtol = cgtol * 5.e-2           cgtol = cgtol * 5.e-2
# Line 340  C       but after convergence loop does Line 333  C       but after convergence loop does
333         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)
334        ENDDO        ENDDO
335    
336    #ifdef ALLOW_PETSC
337    !      call streamice_finalize_petsc (myThidTemp)
338    !      call streamice_finalize_petsc (myThid)
339    #endif
340    
341  C END NL ITER. LOOP  C END NL ITER. LOOP
342  C-------------------------------------------------------------------  C-------------------------------------------------------------------
343    
344        if (iter_numconv .lt. streamice_max_nl_iter) then        if (iter_numconv .lt. streamice_max_nl_iter) then
345         PRINT *, "VELOCITY SOLVE CONVERGED, ", iter_numconv,         WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE CONVERGED, ',
346       & " iterations"       &         iter_numconv, ' iterations'
347           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
348         &                     SQUEEZE_RIGHT , 1)
349        else        else
350         PRINT *, "VELOCITY SOLVE DID NOT CONVERGE IN ",         WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE NOT CONVERGED IN ',
351       & iter, " iterations"       &         iter_numconv, ' iterations'
352           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
353         &                     SQUEEZE_RIGHT , 1)
354        endif        endif
355    
356  !        DO bj = myByLo(myThid), myByHi(myThid)        _EXCH_XY_RL(U_streamice, myThid)
357  !         DO bi = myBxLo(myThid), myBxHi(myThid)        _EXCH_XY_RL(V_streamice, myThid)
 !          DO j=1,sNy  
 !           DO i=1,sNx  
 !            U_streamice (i,j,bi,bj) = 0. _d 0  
 !            V_streamice (i,j,bi,bj) = 0. _d 0  
 !           ENDDO  
 !          ENDDO  
 !         ENDDO  
 !        ENDDO  
 !  
 !        CALL STREAMICE_CG_WRAPPER(  
 !      &       U_streamice,  
 !      &       V_streamice,  
 !      &       taudx_SI,  
 !      &       taudy_SI,  
 !      &       cgtol,  
 !      &       cg_iters,  
 !      &       myThid )  
358    
359    
360        _EXCH_XY_RL (U_streamice, myThid)        CALL TIMER_STOP ('STREAMICE_VEL_SOLVE',myThid)
       _EXCH_XY_RL (V_streamice, myThid)  
361    
362  #endif  #endif
363        RETURN        RETURN

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.22