/[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.2 by heimbach, Wed May 2 02:36:01 2012 UTC revision 1.7 by dgoldberg, Tue Sep 4 21:11:44 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 94  C     LOCAL VARIABLES Line 94  C     LOCAL VARIABLES
94         ENDDO         ENDDO
95        ENDDO        ENDDO
96    
97    
98        CALL STREAMICE_CG_BOUND_VALS( myThid,            CALL STREAMICE_CG_BOUND_VALS( myThid,    
99       O    ubd_SI,       O    ubd_SI,
100       O    vbd_SI)       O    vbd_SI)
# Line 142  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 160  C       but after convergence loop does Line 168  C       but after convergence loop does
168  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
169  !$TAF STORE cgtol = comlev1_stream_nl, key=ikey_nl  !$TAF STORE cgtol = comlev1_stream_nl, key=ikey_nl
170  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
171    !$TAF STORE err_max_fp = comlev1_stream_nl, key=ikey_nl
172  !$TAF STORE err_tempu = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_tempu = comlev1_stream_nl, key=ikey_nl
173  !$TAF STORE err_tempv = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_tempv = comlev1_stream_nl, key=ikey_nl
174  !$TAF STORE err_lastchange = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_lastchange = comlev1_stream_nl, key=ikey_nl
175  !$TAF STORE ru_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE ru_old_si = comlev1_stream_nl, key=ikey_nl
176  !$TAF STORE rv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE rv_old_si = comlev1_stream_nl, key=ikey_nl
177    !$TAF STORE u_old_si = comlev1_stream_nl, key=ikey_nl
178    !$TAF STORE v_old_si = comlev1_stream_nl, key=ikey_nl
179  !$TAF STORE streamice_cg_a1 = comlev1_stream_nl, key=ikey_nl  !$TAF STORE streamice_cg_a1 = comlev1_stream_nl, key=ikey_nl
180  !$TAF STORE streamice_cg_a2 = comlev1_stream_nl, key=ikey_nl  !$TAF STORE streamice_cg_a2 = comlev1_stream_nl, key=ikey_nl
181  !$TAF STORE streamice_cg_a3 = comlev1_stream_nl, key=ikey_nl  !$TAF STORE streamice_cg_a3 = comlev1_stream_nl, key=ikey_nl
# Line 177  C       but after convergence loop does Line 188  C       but after convergence loop does
188  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
189  #endif  #endif
190    
191         IF (err_max .GT. streamice_nonlin_tol * err_init) THEN         IF ((err_max .GT. streamice_nonlin_tol * err_init) .and.
192         &     (err_max_fp .GT. streamice_nonlin_tol_fp)) THEN
193    
194         iter_numconv = iter_numconv + 1         iter_numconv = iter_numconv + 1
195    
# Line 201  C       but after convergence loop does Line 213  C       but after convergence loop does
213  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl  !$TAF STORE zv_old_si = comlev1_stream_nl, key=ikey_nl
214  #endif  #endif
215    
216         CALL STREAMICE_CG_SOLVE(  #ifdef ALLOW_AUTODIFF_TAMC
217       &  U_streamice,  !       DO bj = myByLo(myThid), myByHi(myThid)
218       &  V_streamice,  !        DO bi = myBxLo(myThid), myBxHi(myThid)
219       &  taudx_SI,  !         DO j=1-OLy,sNy+OLy
220       &  taudy_SI,  !          DO i=1-OLx,sNx+OLx
221       &  cgtol,  !           U_streamice (i,j,bi,bj) = 0. _d 0
222       &  cg_iters,  !           V_streamice (i,j,bi,bj) = 0. _d 0
223       &  myThid )  !          ENDDO
224    !         ENDDO
225    !        ENDDO
226    !       ENDDO
227    #endif
228    
229           CALL STREAMICE_CG_WRAPPER(
230         &       U_streamice,
231         &       V_streamice,
232         &       taudx_SI,
233         &       taudy_SI,
234         &       cgtol,
235         &       cg_iters,
236         &       myThid )
237    
238                
239    
# Line 225  C       but after convergence loop does Line 250  C       but after convergence loop does
250  #endif  #endif
251    
252         CALL STREAMICE_VISC_BETA ( myThid )         CALL STREAMICE_VISC_BETA ( myThid )
253    
254    
255  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
256  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
# Line 269  C       but after convergence loop does Line 295  C       but after convergence loop does
295  #endif  #endif
296    
297         err_max = 0. _d 0         err_max = 0. _d 0
298           err_max_fp = 0. _d 0
299    
300  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
301  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl  !$TAF STORE err_max = comlev1_stream_nl, key=ikey_nl
# Line 300  C       but after convergence loop does Line 327  C       but after convergence loop does
327    
328         CALL GLOBAL_MAX_R8 (err_max, myThid)         CALL GLOBAL_MAX_R8 (err_max, myThid)
329    
330           DO bj = myByLo(myThid), myByHi(myThid)
331            DO bi = myBxLo(myThid), myBxHi(myThid)
332             DO j=1,sNy
333              DO i=1,sNx
334               err_tempu = 0. _d 0
335               err_tempv = 0. _d 0
336               IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
337                err_tempu =
338         &       ABS (U_streamice(i,j,bi,bj)-u_old_SI(i,j,bi,bj))
339               ENDIF
340               IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
341                err_tempv = MAX( err_tempu,
342         &       ABS (V_streamice(i,j,bi,bj)-v_old_SI(i,j,bi,bj)))
343               ENDIF
344               IF (err_tempv .ge. err_max_fp) err_max_fp = err_tempv
345              ENDDO
346             ENDDO
347            ENDDO
348           ENDDO
349    
350           CALL GLOBAL_MAX_R8 (err_max_fp, myThid)
351           print *, "err_max_fp", err_max_fp
352    
353           DO bj = myByLo(myThid), myByHi(myThid)
354            DO bi = myBxLo(myThid), myBxHi(myThid)
355             DO j=1-OLy,sNy+OLy
356              DO i=1-OLx,sNx+OLx
357               u_old_SI (i,j,bi,bj) = U_streamice (i,j,bi,bj)
358               v_old_SI (i,j,bi,bj) = V_streamice (i,j,bi,bj)
359              ENDDO
360             ENDDO
361            ENDDO
362           ENDDO
363    
364         WRITE(msgBuf,'(A,F11.7)') 'err/err_init',         WRITE(msgBuf,'(A,F11.7)') 'err/err_init',
365       &                       err_max/err_init       &                       err_max/err_init
366         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
# Line 309  C       but after convergence loop does Line 370  C       but after convergence loop does
370       &   STREAMICE_lower_cg_tol) THEN       &   STREAMICE_lower_cg_tol) THEN
371           cgtol = cgtol * 5.e-2           cgtol = cgtol * 5.e-2
372           err_lastchange = err_max           err_lastchange = err_max
373           WRITE(msgBuf,'(A,F11.7)') 'new cg tol: ',           WRITE(msgBuf,'(A,E15.7)') 'new cg tol: ',
374       &                       cgtol       &                       cgtol
375           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
376       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
377         ENDIF         ENDIF
378    
379    
380         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)         ENDIF ! (err_max .GT. streamice_nonlin_tol * err_init)
381        ENDDO        ENDDO
382    
# Line 322  C END NL ITER. LOOP Line 384  C END NL ITER. LOOP
384  C-------------------------------------------------------------------  C-------------------------------------------------------------------
385    
386        if (iter_numconv .lt. streamice_max_nl_iter) then        if (iter_numconv .lt. streamice_max_nl_iter) then
387         PRINT *, "VELOCITY SOLVE CONVERGED, ", iter_numconv,         WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE CONVERGED, ',
388       & " iterations"       &         iter_numconv, ' iterations'
389           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
390         &                     SQUEEZE_RIGHT , 1)
391        else        else
392         PRINT *, "VELOCITY SOLVE DID NOT CONVERGE IN ",         WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE NOT CONVERGED IN ',
393       & iter, " iterations"       &         iter_numconv, ' iterations'
394           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
395         &                     SQUEEZE_RIGHT , 1)
396        endif        endif
397    
398        _EXCH_XY_RL (U_streamice, myThid)        _EXCH_XY_RL (U_streamice, myThid)

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

  ViewVC Help
Powered by ViewVC 1.1.22