| 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 | 
| 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) | 
| 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: | 
| 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 | 
| 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 |