/[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.3 by dgoldberg, Thu Jul 19 18:46:56 2012 UTC revision 1.6 by dgoldberg, Mon Jul 30 19:04:55 2012 UTC
# Line 43  C     LOCAL VARIABLES Line 43  C     LOCAL VARIABLES
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        INTEGER ikey_nl
46        _RL err_max, err_tempu, err_tempv, err_init, area        _RL err_max, err_tempu, err_tempv, err_init, area, err_max_fp
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
49  !       _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+Oly,nSx,nSy)  !       _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+Oly,nSx,nSy)
# Line 143  C     LOCAL VARIABLES Line 143  C     LOCAL VARIABLES
143    
144        CALL GLOBAL_MAX_R8 (err_init, myThid)        CALL GLOBAL_MAX_R8 (err_init, myThid)
145    
146          WRITE(msgBuf,'(A,E15.7)') 'initial nonlinear resid (error): ',
147         &                       err_init
148          CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
149         &                    SQUEEZE_RIGHT , 1)
150    
151    
152        iter_numconv = 0        iter_numconv = 0
153        err_max = err_init        err_max = err_init
154          err_max_fp = streamice_nonlin_tol_fp * 10.
155        err_lastchange = err_init        err_lastchange = err_init
156    
157  C START NL ITER. LOOP  C START NL ITER. LOOP
# Line 178  C       but after convergence loop does Line 185  C       but after convergence loop does
185  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
186  #endif  #endif
187    
188         IF (err_max .GT. streamice_nonlin_tol * err_init) THEN         IF ((err_max .GT. streamice_nonlin_tol * err_init) .and.
189         &     (err_max_fp .GT. streamice_nonlin_tol_fp)) THEN
190    
191         iter_numconv = iter_numconv + 1         iter_numconv = iter_numconv + 1
192    
# Line 202  C       but after convergence loop does Line 210  C       but after convergence loop does
210  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
211  #endif  #endif
212    
213         DO bj = myByLo(myThid), myByHi(myThid)  #ifdef ALLOW_AUTODIFF_TAMC
214          DO bi = myBxLo(myThid), myBxHi(myThid)  !       DO bj = myByLo(myThid), myByHi(myThid)
215           DO j=1,sNy  !        DO bi = myBxLo(myThid), myBxHi(myThid)
216            DO i=1,sNx  !         DO j=1-OLy,sNy+OLy
217             U_streamice (i,j,bi,bj) = 0. _d 0  !          DO i=1-OLx,sNx+OLx
218             V_streamice (i,j,bi,bj) = 0. _d 0  !           U_streamice (i,j,bi,bj) = 0. _d 0
219            ENDDO  !           V_streamice (i,j,bi,bj) = 0. _d 0
220           ENDDO  !          ENDDO
221          ENDDO  !         ENDDO
222         ENDDO  !        ENDDO
223    !       ENDDO
224    #endif
225    
226         CALL STREAMICE_CG_WRAPPER(         CALL STREAMICE_CG_WRAPPER(
227       &       U_streamice,       &       U_streamice,
# Line 237  C       but after convergence loop does Line 247  C       but after convergence loop does
247  #endif  #endif
248    
249         CALL STREAMICE_VISC_BETA ( myThid )         CALL STREAMICE_VISC_BETA ( myThid )
250    
251    
252  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
253  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
# Line 280  C       but after convergence loop does Line 291  C       but after convergence loop does
291  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
292  #endif  #endif
293    
294           DO bj = myByLo(myThid), myByHi(myThid)
295            DO bi = myBxLo(myThid), myBxHi(myThid)
296             DO j=1-OLy,sNy+OLy
297              DO i=1-OLx,sNx+OLx
298               u_old_SI (i,j,bi,bj) = U_streamice (i,j,bi,bj)
299               v_old_SI (i,j,bi,bj) = V_streamice (i,j,bi,bj)
300              ENDDO
301             ENDDO
302            ENDDO
303           ENDDO
304    
305         err_max = 0. _d 0         err_max = 0. _d 0
306    
307  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 312  C       but after convergence loop does Line 334  C       but after convergence loop does
334    
335         CALL GLOBAL_MAX_R8 (err_max, myThid)         CALL GLOBAL_MAX_R8 (err_max, myThid)
336    
337           DO bj = myByLo(myThid), myByHi(myThid)
338            DO bi = myBxLo(myThid), myBxHi(myThid)
339             DO j=1,sNy
340              DO i=1,sNx
341               err_tempu = 0. _d 0
342               err_tempv = 0. _d 0
343               IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
344                err_tempu =
345         &       ABS (U_streamice(i,j,bi,bj)-u_old_SI(i,j,bi,bj))
346               ENDIF
347               IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
348                err_tempv = MAX( err_tempu,
349         &       ABS (V_streamice(i,j,bi,bj)-v_old_SI(i,j,bi,bj)))
350               ENDIF
351               IF (err_tempv .ge. err_max_fp) err_max_fp = err_tempv
352              ENDDO
353             ENDDO
354            ENDDO
355           ENDDO
356    
357           CALL GLOBAL_MAX_R8 (err_max_fp, myThid)
358    
359         WRITE(msgBuf,'(A,F11.7)') 'err/err_init',         WRITE(msgBuf,'(A,F11.7)') 'err/err_init',
360       &                       err_max/err_init       &                       err_max/err_init
361         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
# Line 321  C       but after convergence loop does Line 365  C       but after convergence loop does
365       &   STREAMICE_lower_cg_tol) THEN       &   STREAMICE_lower_cg_tol) THEN
366           cgtol = cgtol * 5.e-2           cgtol = cgtol * 5.e-2
367           err_lastchange = err_max           err_lastchange = err_max
368           WRITE(msgBuf,'(A,F11.7)') 'new cg tol: ',           WRITE(msgBuf,'(A,E15.7)') 'new cg tol: ',
369       &                       cgtol       &                       cgtol
370           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
371       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
372         ENDIF         ENDIF
373    
374    
375         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)
376        ENDDO        ENDDO
377    
# Line 334  C END NL ITER. LOOP Line 379  C END NL ITER. LOOP
379  C-------------------------------------------------------------------  C-------------------------------------------------------------------
380    
381        if (iter_numconv .lt. streamice_max_nl_iter) then        if (iter_numconv .lt. streamice_max_nl_iter) then
382         PRINT *, "VELOCITY SOLVE CONVERGED, ", iter_numconv,         WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE CONVERGED, ',
383       & " iterations"       &         iter_numconv, ' iterations'
384           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
385         &                     SQUEEZE_RIGHT , 1)
386        else        else
387         PRINT *, "VELOCITY SOLVE DID NOT CONVERGE IN ",         WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE NOT CONVERGED IN ',
388       & iter, " iterations"       &         iter_numconv, ' iterations'
389           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
390         &                     SQUEEZE_RIGHT , 1)
391        endif        endif
392    
393  !        DO bj = myByLo(myThid), myByHi(myThid)  !        DO bj = myByLo(myThid), myByHi(myThid)

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22