76 |
_RL JFNKgamma_lin |
_RL JFNKgamma_lin |
77 |
_RL FGMRESeps |
_RL FGMRESeps |
78 |
_RL JFNKtol |
_RL JFNKtol |
79 |
|
C Adams-Bashforth extrapolation factors |
80 |
|
_RL abFac, abAlpha |
81 |
|
C |
82 |
_RL recip_deltaT |
_RL recip_deltaT |
83 |
LOGICAL JFNKconverged, krylovConverged |
LOGICAL JFNKconverged, krylovConverged |
84 |
LOGICAL writeNow |
LOGICAL writeNow |
87 |
C u/vIceRes :: residual of sea-ice momentum equations |
C u/vIceRes :: residual of sea-ice momentum equations |
88 |
_RL uIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL uIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
89 |
_RL vIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL vIceRes(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
90 |
|
C extra time level required for Adams-Bashforth-2 time stepping |
91 |
|
_RL duIcNm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
92 |
|
_RL dvIcNm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
93 |
C du/vIce :: ice velocity increment to be added to u/vIce |
C du/vIce :: ice velocity increment to be added to u/vIce |
94 |
_RL duIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL duIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
95 |
_RL dvIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL dvIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
118 |
& DIFFERENT_MULTIPLE( SEAICE_monFreq, myTime, deltaTClock ) ) |
& DIFFERENT_MULTIPLE( SEAICE_monFreq, myTime, deltaTClock ) ) |
119 |
& iOutFGMRES=1 |
& iOutFGMRES=1 |
120 |
|
|
121 |
|
C Adams-Bashforth extrapolation factors |
122 |
|
abFac = 0. _d 0 |
123 |
|
IF ( SEAICEuseAB2 ) THEN |
124 |
|
IF ( myIter.EQ.nIter0 .AND. SEAICEmomStartAB.EQ.0 ) THEN |
125 |
|
abFac = 0. _d 0 |
126 |
|
ELSE |
127 |
|
abFac = 0.5 _d 0 + SEAICE_abEps |
128 |
|
ENDIF |
129 |
|
ENDIF |
130 |
|
abAlpha = 1. _d 0 + abFac |
131 |
|
|
132 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
133 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
134 |
DO J=1-OLy,sNy+OLy |
DO J=1-OLy,sNy+OLy |
137 |
vIceRes(I,J,bi,bj) = 0. _d 0 |
vIceRes(I,J,bi,bj) = 0. _d 0 |
138 |
duIce (I,J,bi,bj) = 0. _d 0 |
duIce (I,J,bi,bj) = 0. _d 0 |
139 |
dvIce (I,J,bi,bj) = 0. _d 0 |
dvIce (I,J,bi,bj) = 0. _d 0 |
140 |
|
ENDDO |
141 |
|
ENDDO |
142 |
|
C cycle ice velocities |
143 |
|
DO J=1-OLy,sNy+OLy |
144 |
|
DO I=1-OLx,sNx+OLx |
145 |
|
duIcNm1(I,J,bi,bj) = uIce(I,J,bi,bj) * abAlpha |
146 |
|
& + ( uIce(I,J,bi,bj) - uIceNm1(I,J,bi,bj) ) * abFac |
147 |
|
dvIcNm1(I,J,bi,bj) = vIce(I,J,bi,bj) * abAlpha |
148 |
|
& + ( vIce(I,J,bi,bj) - vIceNm1(I,J,bi,bj) ) * abFac |
149 |
uIceNm1(I,J,bi,bj) = uIce(I,J,bi,bj) |
uIceNm1(I,J,bi,bj) = uIce(I,J,bi,bj) |
150 |
vIceNm1(I,J,bi,bj) = vIce(I,J,bi,bj) |
vIceNm1(I,J,bi,bj) = vIce(I,J,bi,bj) |
151 |
ENDDO |
ENDDO |
152 |
ENDDO |
ENDDO |
153 |
|
IF ( .NOT.SEAICEuseIMEX ) THEN |
154 |
C Compute things that do no change during the Newton iteration: |
C Compute things that do no change during the Newton iteration: |
155 |
C sea-surface tilt and wind stress: |
C sea-surface tilt and wind stress: |
156 |
C FORCEX/Y0 - mass*(u/vIceNm1)/deltaT |
C FORCEX/Y0 - mass*(abA*u/vIceNm1+abB*(u/vIceNm1-u/vIceNm2))/deltaT |
157 |
DO J=1-OLy,sNy+OLy |
DO J=1-OLy,sNy+OLy |
158 |
DO I=1-OLx,sNx+OLx |
DO I=1-OLx,sNx+OLx |
159 |
FORCEX(I,J,bi,bj) = FORCEX0(I,J,bi,bj) |
FORCEX(I,J,bi,bj) = FORCEX0(I,J,bi,bj) |
160 |
& + seaiceMassU(I,J,bi,bj)*uIceNm1(I,J,bi,bj)*recip_deltaT |
& + seaiceMassU(I,J,bi,bj)*duIcNm1(I,J,bi,bj)*recip_deltaT |
161 |
FORCEY(I,J,bi,bj) = FORCEY0(I,J,bi,bj) |
FORCEY(I,J,bi,bj) = FORCEY0(I,J,bi,bj) |
162 |
& + seaiceMassV(I,J,bi,bj)*vIceNm1(I,J,bi,bj)*recip_deltaT |
& + seaiceMassV(I,J,bi,bj)*dvIcNm1(I,J,bi,bj)*recip_deltaT |
163 |
ENDDO |
ENDDO |
164 |
ENDDO |
ENDDO |
165 |
|
ENDIF |
166 |
ENDDO |
ENDDO |
167 |
ENDDO |
ENDDO |
168 |
C Start nonlinear Newton iteration: outer loop iteration |
C Start nonlinear Newton iteration: outer loop iteration |