/[MITgcm]/MITgcm/pkg/streamice/streamice_vel_solve.F
ViewVC logotype

Diff of /MITgcm/pkg/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 dgoldberg, Wed Jun 12 22:19:07 2013 UTC revision 1.3 by jmc, Thu Jun 13 19:08:43 2013 UTC
# Line 8  C---+----1----+----2----+----3----+----4 Line 8  C---+----1----+----2----+----3----+----4
8  CBOP  CBOP
9        SUBROUTINE STREAMICE_VEL_SOLVE( myThid )        SUBROUTINE STREAMICE_VEL_SOLVE( myThid )
10  C     /============================================================\  C     /============================================================\
11  C     | SUBROUTINE                                                 |    C     | SUBROUTINE                                                 |
12  C     | o                                                          |  C     | o                                                          |
13  C     |============================================================|  C     |============================================================|
14  C     |                                                            |  C     |                                                            |
# Line 35  C     !INPUT/OUTPUT ARGUMENTS Line 35  C     !INPUT/OUTPUT ARGUMENTS
35  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
36    
37  C     LOCAL VARIABLES  C     LOCAL VARIABLES
38          
39  !   real, dimension(:,:), pointer :: TAUDX, TAUDY, u_prev_iterate, v_prev_iterate, &  !   real, dimension(:,:), pointer :: TAUDX, TAUDY, u_prev_iterate, v_prev_iterate, &
40  !                         u_bdry_cont, v_bdry_cont, Au, Av, err_u, err_v, &  !                         u_bdry_cont, v_bdry_cont, Au, Av, err_u, err_v, &
41  !                         geolonq, geolatq, u_last, v_last, float_cond, H_node  !                         geolonq, geolatq, u_last, v_last, float_cond, H_node
# Line 44  C     LOCAL VARIABLES Line 44  C     LOCAL VARIABLES
44  !                         isdq, iedq, jsdq, jedq, isd, ied, jsd, jed, isumstart, jsumstart, nodefloat, nsub  !                         isdq, iedq, jsdq, jedq, isd, ied, jsd, jed, isumstart, jsumstart, nodefloat, nsub
45  !   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
46    
47        INTEGER conv_flag, i, j, k, l, iter, cg_iters, bi, bj        INTEGER conv_flag, i, j, k, l, iter, cg_iters, bi, bj
48        INTEGER iter_numconv        INTEGER iter_numconv
49        INTEGER ikey_nl        INTEGER ikey_nl
50        _RL err_max, err_tempu, err_tempv, err_init, area, err_max_fp        _RL err_max, err_tempu, err_tempv, err_init, area, err_max_fp
# Line 53  C     LOCAL VARIABLES Line 53  C     LOCAL VARIABLES
53  #ifdef ALLOW_PETSC  #ifdef ALLOW_PETSC
54        PetscErrorCode ierr        PetscErrorCode ierr
55  #endif  #endif
56  !       _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+Oly,nSx,nSy)  !       _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
57  !       _RL taudy (1-OLx:sNx+OLx,1-OLy:sNy+Oly,nSx,nSy)  !       _RL taudy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
58    
59        IF (STREAMICE_ppm_driving_stress) THEN        IF (STREAMICE_ppm_driving_stress) THEN
60         CALL STREAMICE_DRIVING_STRESS_PPM (myThid)         CALL STREAMICE_DRIVING_STRESS_PPM (myThid)
# Line 119  C     LOCAL VARIABLES Line 119  C     LOCAL VARIABLES
119        ENDDO        ENDDO
120    
121    
122        CALL STREAMICE_CG_BOUND_VALS( myThid,            CALL STREAMICE_CG_BOUND_VALS( myThid,
123       O    ubd_SI,       O    ubd_SI,
124       O    vbd_SI)       O    vbd_SI)
125          
126    
127  !      CALL WRITE_FLD_XY_RL("u_bound_cont","",ubd_SI,0,myThid)  !      CALL WRITE_FLD_XY_RL("u_bound_cont","",ubd_SI,0,myThid)
128  !      CALL WRITE_FLD_XY_RL("v_bound_cont","",vbd_SI,0,myThid)  !      CALL WRITE_FLD_XY_RL("v_bound_cont","",vbd_SI,0,myThid)
# Line 134  C     LOCAL VARIABLES Line 134  C     LOCAL VARIABLES
134  !$TAF STORE V_streamice = comlev1, key=ikey_dynamics  !$TAF STORE V_streamice = comlev1, key=ikey_dynamics
135  #endif  #endif
136    
137        CALL STREAMICE_CG_ACTION( myThid,        CALL STREAMICE_CG_ACTION( myThid,
138       O    Au_SI,       O    Au_SI,
139       O    Av_SI,       O    Av_SI,
140       I    U_streamice,       I    U_streamice,
141       I    V_streamice,       I    V_streamice,
142       I    0, sNx+1, 0, sNy+1 )       I    0, sNx+1, 0, sNy+1 )
143    
144    
# Line 155  C     LOCAL VARIABLES Line 155  C     LOCAL VARIABLES
155            err_tempu = 0. _d 0            err_tempu = 0. _d 0
156            err_tempv = 0. _d 0            err_tempv = 0. _d 0
157            IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN            IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
158             err_tempu =             err_tempu =
159       &      ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj) -       &      ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj) -
160       &           taudx_SI(i,j,bi,bj))       &           taudx_SI(i,j,bi,bj))
161  !            print *, "err_temp_u", err_tempu  !            print *, "err_temp_u", err_tempu
162            ENDIF            ENDIF
163            IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN            IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
164             err_tempv = MAX( err_tempu,             err_tempv = MAX( err_tempu,
165       &      ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj) -       &      ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj) -
166       &           taudy_SI(i,j,bi,bj)))       &           taudy_SI(i,j,bi,bj)))
167            ENDIF            ENDIF
168            IF (err_tempv .ge. err_init) THEN            IF (err_tempv .ge. err_init) THEN
# Line 197  C--------------------------------------- Line 197  C---------------------------------------
197    
198        DO iter=1,streamice_max_nl_iter        DO iter=1,streamice_max_nl_iter
199    
200  C     To avoid using "exit", loop goes through all iterations  C     To avoid using "exit", loop goes through all iterations
201  C       but after convergence loop does nothing  C       but after convergence loop does nothing
202    
203  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 264  C       but after convergence loop does Line 264  C       but after convergence loop does
264  !       ENDDO  !       ENDDO
265  #endif  #endif
266    
267         CALL STREAMICE_CG_WRAPPER(         CALL STREAMICE_CG_WRAPPER(
268       &       U_streamice,       &       U_streamice,
269       &       V_streamice,       &       V_streamice,
270       &       taudx_SI,       &       taudx_SI,
271       &       taudy_SI,       &       taudy_SI,
272       &       cgtol,       &       cgtol,
273       &       cg_iters,       &       cg_iters,
274       &       myThid )       &       myThid )
275    
# Line 307  C       but after convergence loop does Line 307  C       but after convergence loop does
307         CALL STREAMICE_VISC_BETA ( myThid )         CALL STREAMICE_VISC_BETA ( myThid )
308  #endif  #endif
309    
310    
311  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
312  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE U_streamice = comlev1_stream_nl, key=ikey_nl
313  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
# Line 329  C       but after convergence loop does Line 329  C       but after convergence loop does
329          ENDDO          ENDDO
330         ENDDO         ENDDO
331    
332         CALL STREAMICE_CG_BOUND_VALS( myThid,             CALL STREAMICE_CG_BOUND_VALS( myThid,
333       O    ubd_SI,       O    ubd_SI,
334       O    vbd_SI)       O    vbd_SI)
335    
336  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 338  C       but after convergence loop does Line 338  C       but after convergence loop does
338  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl  !$TAF STORE V_streamice = comlev1_stream_nl, key=ikey_nl
339  #endif  #endif
340    
341         CALL STREAMICE_CG_ACTION( myThid,         CALL STREAMICE_CG_ACTION( myThid,
342       O    Au_SI,       O    Au_SI,
343       O    Av_SI,       O    Av_SI,
344       I    U_streamice,       I    U_streamice,
345       I    V_streamice,       I    V_streamice,
346       I    0, sNx+1, 0, sNy+1 )       I    0, sNx+1, 0, sNy+1 )
347    
348        if (iter .eq. streamice_max_nl_iter) then        if (iter .eq. streamice_max_nl_iter) then
# Line 373  C       but after convergence loop does Line 373  C       but after convergence loop does
373             err_tempu = 0. _d 0             err_tempu = 0. _d 0
374             err_tempv = 0. _d 0             err_tempv = 0. _d 0
375             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
376              err_tempu =              err_tempu =
377       &       ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj) -       &       ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj) -
378       &            taudx_SI(i,j,bi,bj))       &            taudx_SI(i,j,bi,bj))
379             ENDIF             ENDIF
380             IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN             IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
381              err_tempv = MAX( err_tempu,              err_tempv = MAX( err_tempu,
382       &       ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj) -       &       ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj) -
383       &            taudy_SI(i,j,bi,bj)))       &            taudy_SI(i,j,bi,bj)))
384             ENDIF             ENDIF
385  !           if (err_tempu.ge.1.e2.or.err_tempv.ge.1.e2) THEN  !           if (err_tempu.ge.1.e2.or.err_tempv.ge.1.e2) THEN
# Line 403  C       but after convergence loop does Line 403  C       but after convergence loop does
403             err_tempu = 0. _d 0             err_tempu = 0. _d 0
404             err_tempv = 0. _d 0             err_tempv = 0. _d 0
405             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
406              err_tempu =              err_tempu =
407       &       ABS (U_streamice(i,j,bi,bj)-u_old_SI(i,j,bi,bj))       &       ABS (U_streamice(i,j,bi,bj)-u_old_SI(i,j,bi,bj))
408             ENDIF             ENDIF
409             IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN             IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
410              err_tempv = MAX( err_tempu,              err_tempv = MAX( err_tempu,
411       &       ABS (V_streamice(i,j,bi,bj)-v_old_SI(i,j,bi,bj)))       &       ABS (V_streamice(i,j,bi,bj)-v_old_SI(i,j,bi,bj)))
412             ENDIF             ENDIF
413             IF (err_tempv .ge. err_max_fp) err_max_fp = err_tempv             IF (err_tempv .ge. err_max_fp) err_max_fp = err_tempv
# Line 417  C       but after convergence loop does Line 417  C       but after convergence loop does
417         ENDDO         ENDDO
418    
419         CALL GLOBAL_MAX_R8 (err_max_fp, myThid)         CALL GLOBAL_MAX_R8 (err_max_fp, myThid)
420         WRITE(msgBuf,'(A,1PE23.14)') 'STREAMICE_FP_ERROR',         WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ERROR =',
421       &                       err_max_fp       &                       err_max_fp
422         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
423       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)

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

  ViewVC Help
Powered by ViewVC 1.1.22