| 2 | 
 C $Name$ | 
 C $Name$ | 
| 3 | 
  | 
  | 
| 4 | 
 #include "SEAICE_OPTIONS.h" | 
 #include "SEAICE_OPTIONS.h" | 
| 5 | 
  | 
 #ifdef ALLOW_AUTODIFF | 
| 6 | 
  | 
 # include "AUTODIFF_OPTIONS.h" | 
| 7 | 
  | 
 #endif | 
| 8 | 
  | 
  | 
| 9 | 
 C--  File seaice_jfnk.F: seaice jfnk dynamical solver S/R: | 
 C--  File seaice_jfnk.F: seaice jfnk dynamical solver S/R: | 
| 10 | 
 C--   Contents | 
 C--   Contents | 
| 99 | 
 C     precomputed (= constant per Newton iteration) versions of | 
 C     precomputed (= constant per Newton iteration) versions of | 
| 100 | 
 C     zeta, eta, and DWATN, press | 
 C     zeta, eta, and DWATN, press | 
| 101 | 
       _RL zetaPre (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
       _RL zetaPre (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
| 102 | 
  | 
       _RL zetaZPre(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
| 103 | 
       _RL etaPre  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
       _RL etaPre  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
| 104 | 
       _RL etaZPre (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
       _RL etaZPre (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
| 105 | 
       _RL dwatPre (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
       _RL dwatPre (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) | 
| 154 | 
           vIceNm1(I,J,bi,bj) = vIce(I,J,bi,bj) | 
           vIceNm1(I,J,bi,bj) = vIce(I,J,bi,bj) | 
| 155 | 
          ENDDO | 
          ENDDO | 
| 156 | 
         ENDDO | 
         ENDDO | 
| 157 | 
         IF ( .NOT.SEAICEuseIMEX ) THEN | 
 C     As long as IMEX is not properly implemented leave this commented out | 
| 158 | 
  | 
 CML        IF ( .NOT.SEAICEuseIMEX ) THEN | 
| 159 | 
 C     Compute things that do no change during the Newton iteration: | 
 C     Compute things that do no change during the Newton iteration: | 
| 160 | 
 C     sea-surface tilt and wind stress: | 
 C     sea-surface tilt and wind stress: | 
| 161 | 
 C     FORCEX/Y0 - mass*(1.5*u/vIceNm1+0.5*(u/vIceNm1-u/vIceNm2))/deltaT | 
 C     FORCEX/Y0 - mass*(1.5*u/vIceNm1+0.5*(u/vIceNm1-u/vIceNm2))/deltaT | 
| 167 | 
      &         + seaiceMassV(I,J,bi,bj)*dvIcNm1(I,J,bi,bj)*recip_deltaT | 
      &         + seaiceMassV(I,J,bi,bj)*dvIcNm1(I,J,bi,bj)*recip_deltaT | 
| 168 | 
          ENDDO | 
          ENDDO | 
| 169 | 
         ENDDO | 
         ENDDO | 
| 170 | 
         ENDIF | 
 CML        ENDIF | 
| 171 | 
        ENDDO | 
        ENDDO | 
| 172 | 
       ENDDO | 
       ENDDO | 
| 173 | 
 C     Start nonlinear Newton iteration: outer loop iteration | 
 C     Start nonlinear Newton iteration: outer loop iteration | 
| 188 | 
          DO j=1-OLy,sNy+OLy | 
          DO j=1-OLy,sNy+OLy | 
| 189 | 
           DO i=1-OLx,sNx+OLx | 
           DO i=1-OLx,sNx+OLx | 
| 190 | 
            zetaPre(I,J,bi,bj) =  zeta(I,J,bi,bj) | 
            zetaPre(I,J,bi,bj) =  zeta(I,J,bi,bj) | 
| 191 | 
  | 
            zetaZPre(I,J,bi,bj)= zetaZ(I,J,bi,bj) | 
| 192 | 
             etaPre(I,J,bi,bj) =   eta(I,J,bi,bj) | 
             etaPre(I,J,bi,bj) =   eta(I,J,bi,bj) | 
| 193 | 
            etaZPre(I,J,bi,bj) =  etaZ(I,J,bi,bj) | 
            etaZPre(I,J,bi,bj) =  etaZ(I,J,bi,bj) | 
| 194 | 
            dwatPre(I,J,bi,bj) = DWATN(I,J,bi,bj) | 
            dwatPre(I,J,bi,bj) = DWATN(I,J,bi,bj) | 
| 245 | 
           IF ( SOLV_MAX_ITERS .GT. 0 ) | 
           IF ( SOLV_MAX_ITERS .GT. 0 ) | 
| 246 | 
      &         CALL SEAICE_PRECONDITIONER( | 
      &         CALL SEAICE_PRECONDITIONER( | 
| 247 | 
      U         duIce, dvIce, | 
      U         duIce, dvIce, | 
| 248 | 
      I         zetaPre, etaPre, etaZpre, dwatPre, | 
      I         zetaPre, etaPre, etaZpre, zetaZpre, dwatPre, | 
| 249 | 
      I         newtonIter, krylovIter, myTime, myIter, myThid ) | 
      I         newtonIter, krylovIter, myTime, myIter, myThid ) | 
| 250 | 
          ELSEIF (iCode.GE.2) THEN | 
          ELSEIF (iCode.GE.2) THEN | 
| 251 | 
 C     Compute Jacobian times vector | 
 C     Compute Jacobian times vector |