Parent Directory
|
Revision Log
|
Revision Graph
|
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 |