/[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

--- MITgcm/pkg/seaice/seaice_jfnk.F	2013/04/23 08:40:06	1.22
+++ MITgcm/pkg/seaice/seaice_jfnk.F	2013/05/30 14:07:19	1.23
@@ -1,4 +1,4 @@
-C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/seaice/seaice_jfnk.F,v 1.22 2013/04/23 08:40:06 mlosch Exp $
+C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/seaice/seaice_jfnk.F,v 1.23 2013/05/30 14:07:19 mlosch Exp $
 C $Name:  $
 
 #include "SEAICE_OPTIONS.h"
@@ -76,7 +76,9 @@
       _RL     JFNKgamma_lin
       _RL     FGMRESeps
       _RL     JFNKtol
-
+C     Adams-Bashforth extrapolation factors
+      _RL abFac, abAlpha
+C
       _RL     recip_deltaT
       LOGICAL JFNKconverged, krylovConverged
       LOGICAL writeNow
@@ -85,6 +87,9 @@
 C     u/vIceRes :: residual of sea-ice momentum equations
       _RL uIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
       _RL vIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
+C     extra time level required for Adams-Bashforth-2 time stepping
+      _RL duIcNm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
+      _RL dvIcNm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
 C     du/vIce   :: ice velocity increment to be added to u/vIce
       _RL duIce  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
       _RL dvIce  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
@@ -113,6 +118,17 @@
      &     DIFFERENT_MULTIPLE( SEAICE_monFreq, myTime, deltaTClock ) )
      &     iOutFGMRES=1
 
+C     Adams-Bashforth extrapolation factors
+      abFac = 0. _d 0
+      IF ( SEAICEuseAB2 ) THEN
+       IF ( myIter.EQ.nIter0 .AND. SEAICEmomStartAB.EQ.0 ) THEN
+        abFac = 0. _d 0
+       ELSE
+        abFac = 0.5 _d 0 + SEAICE_abEps
+       ENDIF
+      ENDIF
+      abAlpha = 1. _d 0 + abFac 
+
       DO bj=myByLo(myThid),myByHi(myThid)
        DO bi=myBxLo(myThid),myBxHi(myThid)
         DO J=1-OLy,sNy+OLy
@@ -121,21 +137,32 @@
           vIceRes(I,J,bi,bj) = 0. _d 0
           duIce  (I,J,bi,bj) = 0. _d 0
           dvIce  (I,J,bi,bj) = 0. _d 0
+         ENDDO
+        ENDDO
+C     cycle ice velocities
+        DO J=1-OLy,sNy+OLy
+         DO I=1-OLx,sNx+OLx
+          duIcNm1(I,J,bi,bj) = uIce(I,J,bi,bj) * abAlpha 
+     &         + ( uIce(I,J,bi,bj) - uIceNm1(I,J,bi,bj) ) * abFac
+          dvIcNm1(I,J,bi,bj) = vIce(I,J,bi,bj) * abAlpha 
+     &         + ( vIce(I,J,bi,bj) - vIceNm1(I,J,bi,bj) ) * abFac
           uIceNm1(I,J,bi,bj) = uIce(I,J,bi,bj)
           vIceNm1(I,J,bi,bj) = vIce(I,J,bi,bj)
          ENDDO
         ENDDO
+        IF ( .NOT.SEAICEuseIMEX ) THEN
 C     Compute things that do no change during the Newton iteration:
 C     sea-surface tilt and wind stress:
-C     FORCEX/Y0 - mass*(u/vIceNm1)/deltaT
+C     FORCEX/Y0 - mass*(abA*u/vIceNm1+abB*(u/vIceNm1-u/vIceNm2))/deltaT
         DO J=1-OLy,sNy+OLy
          DO I=1-OLx,sNx+OLx
           FORCEX(I,J,bi,bj) = FORCEX0(I,J,bi,bj)
-     &         + seaiceMassU(I,J,bi,bj)*uIceNm1(I,J,bi,bj)*recip_deltaT
+     &         + seaiceMassU(I,J,bi,bj)*duIcNm1(I,J,bi,bj)*recip_deltaT
           FORCEY(I,J,bi,bj) = FORCEY0(I,J,bi,bj)
-     &         + seaiceMassV(I,J,bi,bj)*vIceNm1(I,J,bi,bj)*recip_deltaT
+     &         + seaiceMassV(I,J,bi,bj)*dvIcNm1(I,J,bi,bj)*recip_deltaT
          ENDDO
         ENDDO
+        ENDIF
        ENDDO
       ENDDO
 C     Start nonlinear Newton iteration: outer loop iteration

 

  ViewVC Help
Powered by ViewVC 1.1.22