/[MITgcm]/MITgcm/pkg/seaice/seaice_jfnk.F
ViewVC logotype

Diff of /MITgcm/pkg/seaice/seaice_jfnk.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.15 by mlosch, Wed Jan 16 21:20:28 2013 UTC revision 1.16 by mlosch, Thu Jan 17 08:51:15 2013 UTC
# Line 60  C     !FUNCTIONS: Line 60  C     !FUNCTIONS:
60        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
61        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
62    
63    C     !LOCAL VARIABLES:
64    C     === Local variables ===
65  C     i,j,bi,bj :: loop indices  C     i,j,bi,bj :: loop indices
66        INTEGER i,j,bi,bj        INTEGER i,j,bi,bj
67  C     loop indices  C     loop indices
# Line 147  C     Start nonlinear Newton iteration: Line 149  C     Start nonlinear Newton iteration:
149         newtonIter = newtonIter + 1         newtonIter = newtonIter + 1
150  C     Compute initial residual F(u), (includes computation of global  C     Compute initial residual F(u), (includes computation of global
151  C     variables DWATN, zeta, and eta)  C     variables DWATN, zeta, and eta)
152  C     Update linear solution vector and return to Newton iteration         IF ( newtonIter .EQ. 1 ) CALL SEAICE_JFNK_UPDATE(
 C     Do the linesearch  
        CALL SEAICE_JFNK_UPDATE(  
153       I      duIce, dvIce,       I      duIce, dvIce,
154       U      uIce, vIce, JFNKresidual,       U      uIce, vIce, JFNKresidual,
155       O      uIceRes, vIceRes,       O      uIceRes, vIceRes,
156       I      newtonIter, myTime, myIter, myThid )       I      newtonIter, myTime, myIter, myThid )
 C     reset du/vIce here instead of setting sol = 0 in seaice_fgmres_driver  
        DO bj=myByLo(myThid),myByHi(myThid)  
         DO bi=myBxLo(myThid),myBxHi(myThid)  
          DO J=1-Oly,sNy+Oly  
           DO I=1-Olx,sNx+Olx  
            duIce(I,J,bi,bj)= 0. _d 0  
            dvIce(I,J,bi,bj)= 0. _d 0  
           ENDDO  
          ENDDO  
         ENDDO  
        ENDDO  
 CMLC     Do it again, Sam  
 CML       CALL SEAICE_CALC_RESIDUAL(  
 CML     I      uIce, vIce,  
 CML     O      uIceRes, vIceRes,  
 CML     I      newtonIter, 0, myTime, myIter, myThid )  
 CMLC     probably not necessary, will be removed later:  
 CML       CALL EXCH_UV_XY_RL( uIceRes, vIceRes,.TRUE.,myThid)  
 CMLC     Important: Compute the norm of the residual using the same scalar  
 CMLC     product that SEAICE_FGMRES does  
 CML       CALL SEAICE_MAP2VEC(nVec,uIceRes,vIceRes,resTmp,.TRUE.,myThid)  
 CML       CALL SEAICE_SCALPROD(  
 CML     &      nVec,1,1,1,resTmp,resTmp,JFNKresidual,myThid)  
 CML       JFNKresidual = SQRT(JFNKresidual)  
157  C     local copies of precomputed coefficients that are to stay  C     local copies of precomputed coefficients that are to stay
158  C     constant for the preconditioner  C     constant for the preconditioner
159         DO bj=myByLo(myThid),myByHi(myThid)         DO bj=myByLo(myThid),myByHi(myThid)
# Line 419  C     Print more debugging information Line 395  C     Print more debugging information
395        RETURN        RETURN
396        END        END
397    
398    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
399  CBOP  CBOP
400  C     !ROUTINE: SEAICE_JFNK_UPDATE  C     !ROUTINE: SEAICE_JFNK_UPDATE
401  C     !INTERFACE:  C     !INTERFACE:
# Line 475  C     u/vIceRes :: residual of sea-ice m Line 452  C     u/vIceRes :: residual of sea-ice m
452        _RL uIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL uIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
453        _RL vIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL vIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
454    
455  C     Local variables:  C     !LOCAL VARIABLES:
456    C     === Local variables ===
457  C     i,j,bi,bj :: loop indices  C     i,j,bi,bj :: loop indices
458        INTEGER i,j,bi,bj        INTEGER i,j,bi,bj
459        INTEGER l        INTEGER l
# Line 498  C     Initialise some local variables Line 476  C     Initialise some local variables
476        DO WHILE ( doLineSearch )        DO WHILE ( doLineSearch )
477  C     Determine, if we need more iterations  C     Determine, if we need more iterations
478         doLineSearch = resLoc .GE. JFNKresidual         doLineSearch = resLoc .GE. JFNKresidual
479    C     Limit the maximum number of iterations arbitrarily to four
480         doLineSearch = doLineSearch .AND. l .LE. 4         doLineSearch = doLineSearch .AND. l .LE. 4
481  C     For the first iteration du/vIce = 0 and there will be no  C     For the first iteration du/vIce = 0 and there will be no
482  C     improvement of the residual possible, so we do only the first  C     improvement of the residual possible, so we do only the first

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.22