/[MITgcm]/MITgcm/pkg/seaice/adi.F
ViewVC logotype

Contents of /MITgcm/pkg/seaice/adi.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.10 - (show annotations) (download)
Fri Dec 19 19:56:01 2003 UTC (20 years, 5 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint52l_pre, checkpoint52e_pre, hrcube4, hrcube5, checkpoint52j_post, checkpoint52e_post, checkpoint52j_pre, checkpoint52m_post, checkpoint52l_post, checkpoint52k_post, checkpoint52f_post, checkpoint52i_post, checkpoint52i_pre, checkpoint52h_pre, checkpoint52f_pre, hrcube_1, hrcube_2, hrcube_3
Changes since 1.9: +3 -3 lines
oops!

1 C $Header: /usr/local/gcmpack/MITgcm/pkg/seaice/adi.F,v 1.9 2003/12/14 04:56:18 dimitri Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE adi( myThid )
8 C /==========================================================\
9 C | SUBROUTINE adi |
10 C | o Solve ice momentum equation with an ADI dynamics solver|
11 C | (see Zhang and Rothrock, JGR, 105, 3325-3338, 2000) |
12 C | written by Jinlun Zhang, PSC/UW, Feb-2001 |
13 C | zhang@apl.washington.edu |
14 C |==========================================================|
15 C \==========================================================/
16 IMPLICIT NONE
17
18 C === Global variables ===
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 #include "SEAICE.h"
23 #include "SEAICE_PARAMS.h"
24 #include "SEAICE_GRID.h"
25
26 C === Routine arguments ===
27 C myThid - Thread no. that called this routine.
28 INTEGER myThid
29 CEndOfInterface
30
31 #ifdef ALLOW_SEAICE
32 #ifdef SEAICE_ALLOW_DYNAMICS
33
34 C === Local variables ===
35 C i,j,bi,bj - Loop counters
36
37 INTEGER i, j, bi, bj, j1, j2, im, jm
38 _RL AA1, AA2, AA3, AA4, AA5, AA6, AA9, RADIUS, RADIUS2
39
40 _RL AU (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41 _RL BU (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
42 _RL CU (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43 _RL AV (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
44 _RL BV (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
45 _RL CV (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
46 _RL DELXY (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
47 _RL DELXR (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
48 _RL DELYR (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
49 _RL DELX2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
50 _RL DELY2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
51 _RL ETAMEAN (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52 _RL ZETAMEAN(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
53 _RL FXY (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
54 _RL FXY1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55
56 _RL URT(1-OLx:sNx+OLx), VRT(1-OLy:sNy+OLy)
57 _RL CUU(1-OLx:sNx+OLx), CVV(1-OLy:sNy+OLy)
58
59 C SET SOME VALUES
60 RADIUS=6370. _d 3
61 RADIUS2=ONE/(RADIUS*RADIUS)
62
63 C SOLVE FOR UICE
64 C FIRST HALF FIRST
65
66 c DO bj=myByLo(myThid),myByHi(myThid)
67 c DO bi=myBxLo(myThid),myBxHi(myThid)
68 c DO j=1,sNy
69 c DO i=1,sNx
70 c FORCEX(I,J,bi,bj)=FORCEX(I,J,bi,bj)*UVM(I,J,bi,bj)
71 c FORCEY(I,J,bi,bj)=FORCEY(I,J,bi,bj)*UVM(I,J,bi,bj)
72 c ENDDO
73 c ENDDO
74 c ENDDO
75 c ENDDO
76
77 C-- Update overlap regions
78 CALL EXCH_UV_XY_RL(FORCEX,FORCEY,.TRUE.,myThid)
79 _EXCH_XY_R8(DRAGS, myThid)
80 _EXCH_XY_R8(DRAGA, myThid)
81 _EXCH_XY_R8(AMASS, myThid)
82
83 c$taf loop = parallel
84 DO bj=myByLo(myThid),myByHi(myThid)
85 c$taf loop = parallel
86 DO bi=myBxLo(myThid),myBxHi(myThid)
87
88 DO J=1-OLy+1,sNy+OLy-1
89 DO I=1-OLx+1,sNx+OLx-1
90 DELXY(I,J)=HALF/(DXUICE(I,J,bi,bj)*DYUICE(I,J,bi,bj))
91 DELXR(I,J)=HALF/(DXUICE(I,J,bi,bj)*RADIUS)
92 DELX2(I,J)=HALF/(DXUICE(I,J,bi,bj)*DXUICE(I,J,bi,bj))
93 ETAMEAN(I,J)=QUART*(ETA(I,J-1,bi,bj)+ETA(I-1,J-1,bi,bj)
94 & +ETA(I,J,bi,bj)+ETA(I-1,J,bi,bj))
95 ZETAMEAN(I,J)=QUART*(ZETA(I,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj)
96 & +ZETA(I,J,bi,bj)+ZETA(I-1,J,bi,bj))
97
98 FXY(I,J)=DRAGA(I,J,bi,bj)*VICEC(I,J,bi,bj)+FORCEX(I,J,bi,bj)
99 3 +HALF*(ZETA(I,J,bi,bj)*(VICEC(I+1,J+1,bi,bj)
100 3 +VICEC(I,J+1,bi,bj)
101 3 -VICEC(I+1,J,bi,bj)-VICEC(I,J,bi,bj))
102 3 +ZETA(I,J-1,bi,bj)*(VICEC(I+1,J,bi,bj)
103 3 +VICEC(I,J,bi,bj)-VICEC(I+1,J-1,bi,bj)
104 3 -VICEC(I,J-1,bi,bj))+ZETA(I-1,J,bi,bj)
105 3 *(VICEC(I,J,bi,bj)+VICEC(I-1,J,bi,bj)
106 3 -VICEC(I,J+1,bi,bj)-VICEC(I-1,J+1,bi,bj))
107 3 +ZETA(I-1,J-1,bi,bj)*(VICEC(I,J-1,bi,bj)
108 3 +VICEC(I-1,J-1,bi,bj)-VICEC(I,J,bi,bj)
109 3 -VICEC(I-1,J,bi,bj)))*DELXY(I,J)/CSUICE(I,J,bi,bj)
110 3
111 4 -HALF*(ETA(I,J,bi,bj)*(VICEC(I+1,J+1,bi,bj)
112 4 +VICEC(I,J+1,bi,bj)
113 4 -VICEC(I+1,J,bi,bj)-VICEC(I,J,bi,bj))
114 4 +ETA(I,J-1,bi,bj)*(VICEC(I+1,J,bi,bj)
115 4 +VICEC(I,J,bi,bj)-VICEC(I+1,J-1,bi,bj)
116 4 -VICEC(I,J-1,bi,bj))+ETA(I-1,J,bi,bj)
117 4 *(VICEC(I,J,bi,bj)+VICEC(I-1,J,bi,bj)
118 4 -VICEC(I,J+1,bi,bj)-VICEC(I-1,J+1,bi,bj))
119 4 +ETA(I-1,J-1,bi,bj)*(VICEC(I,J-1,bi,bj)
120 4 +VICEC(I-1,J-1,bi,bj)-VICEC(I,J,bi,bj)
121 4 -VICEC(I-1,J,bi,bj)))*DELXY(I,J)/CSUICE(I,J,bi,bj)
122 4
123 5 +HALF*(VICEC(I+1,J,bi,bj)-VICEC(I-1,J,bi,bj))
124 5 *(ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
125 5 -ETA(I-1,J-1,bi,bj)-ETA(I,J-1,bi,bj))*DELXY(I,J)
126 5 /CSUICE(I,J,bi,bj)+HALF*ETAMEAN(I,J)
127 5 *((VICEC(I+1,J+1,bi,bj)
128 5 -VICEC(I-1,J+1,bi,bj))/CSUICE(I,J+1,bi,bj)
129 5 -(VICEC(I+1,J-1,bi,bj)-VICEC(I-1,J-1,bi,bj))
130 5 /CSUICE(I,J-1,bi,bj))*DELXY(I,J)
131 5
132 6 -((ZETA(I,J,bi,bj)+ZETA(I,J-1,bi,bj)
133 6 -ZETA(I-1,J-1,bi,bj)-ZETA(I-1,J,bi,bj))
134 6 +(ETA(I,J,bi,bj)+ETA(I,J-1,bi,bj)
135 6 -ETA(I-1,J-1,bi,bj)-ETA(I-1,J,bi,bj)))
136 6 *TNGICE(I,J,bi,bj)*VICEC(I,J,bi,bj)
137 & *DELXR(I,J)/CSUICE(I,J,bi,bj)
138 6 -(ETAMEAN(I,J)+ZETAMEAN(I,J))*TNGICE(I,J,bi,bj)
139 6 *(VICEC(I+1,J,bi,bj)-VICEC(I-1,J,bi,bj))
140 6 *DELXR(I,J)/CSUICE(I,J,bi,bj)
141 6
142 7 -ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)
143 7 *(VICEC(I+1,J,bi,bj)
144 7 -VICEC(I-1,J,bi,bj))*DELXR(I,J)/CSUICE(I,J,bi,bj)
145 END DO
146 END DO
147
148 DO J=1-OLy+1,sNy+OLy-1
149 DO I=1-OLx+1,sNx+OLx-1
150 DELY2(I,J)=HALF/(DYUICE(I,J,bi,bj)*DYUICE(I,J,bi,bj))
151 DELYR(I,J)=HALF/(DYUICE(I,J,bi,bj)*RADIUS)
152 AA1=((ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj))/CSUICE(I,J,bi,bj)
153 & +(ETA(I,J,bi,bj)+ZETA(I,J,bi,bj))
154 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
155 AA2=((ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj))
156 & /CSUICE(I,J,bi,bj)
157 & +(ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj))
158 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
159 AA3=ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
160 AA4=ETA(I-1,J-1,bi,bj)+ETA(I,J-1,bi,bj)
161 AA5=-(ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)-ETA(I-1,J-1,bi,bj)
162 & -ETA(I,J-1,bi,bj))*TNGICE(I,J,bi,bj)
163 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
164 AU(I,J)=-AA2*DELX2(I,J)*UVM(I,J,bi,bj)
165 BU(I,J)=((AA1+AA2)*DELX2(I,J)+AA6*RADIUS2
166 & +AMASS(I,J,bi,bj)/SEAICE_DT*TWO
167 & +DRAGS(I,J,bi,bj))*UVM(I,J,bi,bj)
168 & +(ONE-UVM(I,J,bi,bj))
169 CU(I,J)=-AA1*DELX2(I,J)*UVM(I,J,bi,bj)
170 END DO
171 END DO
172
173 DO J=1-OLy+1,sNy+OLy-1
174 AU(1-OLx+1,J)=ZERO
175 CU(sNx+OLx-1,J)=ZERO
176 CU(1-OLx+1,J)=CU(1-OLx+1,J)/BU(1-OLx+1,J)
177 END DO
178
179 c$taf loop = parallel
180 DO 1200 J=1-OLy+1,sNy+OLy-1
181 DO I=1-OLx+1,sNx+OLx-1
182
183 AA1=((ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj))/CSUICE(I,J,bi,bj)
184 & +(ETA(I,J,bi,bj)+ZETA(I,J,bi,bj))
185 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
186 AA2=((ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj))
187 & /CSUICE(I,J,bi,bj)
188 & +(ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj))
189 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
190 AA3=ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
191 AA4=ETA(I-1,J-1,bi,bj)+ETA(I,J-1,bi,bj)
192 AA5=-(ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)-ETA(I-1,J-1,bi,bj)
193 & -ETA(I,J-1,bi,bj))*TNGICE(I,J,bi,bj)
194 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
195
196 IF(I.EQ.1-OLx+1) THEN
197 AA9=AA2*DELX2(I,J)*UICEC(I-1,J,bi,bj)*UVM(I,J,bi,bj)
198 ELSE IF(I.EQ.sNx+OLx-1) THEN
199 AA9=AA1*DELX2(I,J)*UICEC(I+1,J,bi,bj)*UVM(I,J,bi,bj)
200 ELSE
201 AA9=ZERO
202 END IF
203
204 URT(I)=AA9+FXY(I,J)-AA5*DELYR(I,J)*UICE(I,J,2,bi,bj)
205 1 -(AA3+AA4)*DELY2(I,J)*UICE(I,J,2,bi,bj)
206 1 +(ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj))
207 1 *UICE(I,J+1,2,bi,bj)*DELY2(I,J)
208 2 +(ETA(I-1,J-1,bi,bj)+ETA(I,J-1,bi,bj))
209 2 *UICE(I,J-1,2,bi,bj)*DELY2(I,J)
210 3 +ETAMEAN(I,J)*DELYR(I,J)*(UICE(I,J+1,2,bi,bj)
211 3 *TNGICE(I,J+1,bi,bj)
212 3 -UICE(I,J-1,2,bi,bj)*TNGICE(I,J-1,bi,bj))
213 4 -ETAMEAN(I,J)*DELYR(I,J)*TWO*TNGICE(I,J,bi,bj)
214 4 *(UICE(I,J+1,2,bi,bj)
215 4 -UICE(I,J-1,2,bi,bj))
216 URT(I)=(URT(I)+AMASS(I,J,bi,bj)/SEAICE_DT
217 & *UICE(I,J,2,bi,bj)*TWO)*UVM(I,J,bi,bj)
218 END DO
219
220 DO I=1-OLx+1,sNx+OLx-1
221 CUU(I)=CU(I,J)
222 END DO
223 URT(1-OLx+1)=URT(1-OLx+1)/BU(1-OLx+1,J)
224 DO I=1-OLx+2,sNx+OLx-1
225 IM=I-1
226 CUU(I)=CUU(I)/(BU(I,J)-AU(I,J)*CUU(IM))
227 URT(I)=(URT(I)-AU(I,J)*URT(IM))/(BU(I,J)-AU(I,J)*CUU(IM))
228 END DO
229 DO I=1-OLx+1,sNx+OLx-1-1
230 J1=sNx+OLx-1-I
231 J2=J1+1
232 URT(J1)=URT(J1)-CUU(J1)*URT(J2)
233 END DO
234 DO I=1-OLx+1,sNx+OLx-1
235 UICE(I,J,1,bi,bj)=URT(I)
236 END DO
237 1200 CONTINUE
238
239 c DO J=1,sNy
240 c DO I=1,sNx
241 c UICE(I,J,3,bi,bj)=UICE(I,J,1,bi,bj)
242 c END DO
243 c END DO
244
245 ENDDO
246 ENDDO
247
248 CALL SEAICE_EXCH( UICE, myThid )
249
250 C NOW SECOND HALF
251
252 c$taf loop = parallel
253 DO bj=myByLo(myThid),myByHi(myThid)
254 c$taf loop = parallel
255 DO bi=myBxLo(myThid),myBxHi(myThid)
256
257 DO I=1-OLx+1,sNx+OLx-1
258 DO J=1-OLy+1,sNy+OLy-1
259
260 AA1=ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
261 AA2=ETA(I-1,J-1,bi,bj)+ETA(I,J-1,bi,bj)
262 AA5=-(ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
263 & -ETA(I-1,J-1,bi,bj)-ETA(I,J-1,bi,bj))*TNGICE(I,J,bi,bj)
264 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
265
266 AV(I,J)=(-AA2*DELY2(I,J)+ETAMEAN(I,J)*DELYR(I,J)
267 & *(TNGICE(I,J-1,bi,bj)
268 & -TWO*TNGICE(I,J,bi,bj)))*UVM(I,J,bi,bj)
269 BV(I,J)=((AA1+AA2)*DELY2(I,J)+AA5*DELYR(I,J)+AA6*RADIUS2
270 & +AMASS(I,J,bi,bj)/SEAICE_DT*TWO
271 & +DRAGS(I,J,bi,bj))*UVM(I,J,bi,bj)
272 & +(ONE-UVM(I,J,bi,bj))
273 CV(I,J)=(-AA1*DELY2(I,J)-ETAMEAN(I,J)*DELYR(I,J)
274 & *(TNGICE(I,J+1,bi,bj)
275 & -TWO*TNGICE(I,J,bi,bj)))*UVM(I,J,bi,bj)
276 END DO
277 END DO
278
279 DO I=1-OLx+1,sNx+OLx-1
280 AV(I,1-OLy+1)=ZERO
281 CV(I,sNy+OLy-1)=ZERO
282 CV(I,1-OLy+1)=CV(I,1-OLy+1)/BV(I,1-OLy+1)
283 END DO
284
285 DO I=1-OLx+1,sNx+OLx-1
286 DO J=1-OLy+1,sNy+OLy-1
287
288 AA1=((ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj))/CSUICE(I,J,bi,bj)
289 & +(ETA(I,J,bi,bj)+ZETA(I,J,bi,bj))
290 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
291 AA2=((ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj))
292 & /CSUICE(I,J,bi,bj)
293 & +(ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj))
294 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
295
296 AA3=ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
297 AA4=ETA(I-1,J-1,bi,bj)+ETA(I,J-1,bi,bj)
298
299 IF(J.EQ.1-OLy+1) THEN
300 AA9=( AA4*DELY2(I,J)*UICEC(I,J-1,bi,bj)
301 & -ETAMEAN(I,J)*DELYR(I,J)*(TNGICE(I,J-1,bi,bj)
302 & -TWO*TNGICE(I,J,bi,bj))
303 & *UICEC(I,J-1,bi,bj) )*UVM(I,J,bi,bj)
304 ELSE IF(J.EQ.sNy+OLy-1) THEN
305 AA9=( AA3*DELY2(I,J)*UICEC(I,J+1,bi,bj)
306 & +ETAMEAN(I,J)*DELYR(I,J)*(TNGICE(I,J+1,bi,bj)
307 & -TWO*TNGICE(I,J,bi,bj))
308 & *UICEC(I,J+1,bi,bj) )*UVM(I,J,bi,bj)
309 ELSE
310 AA9=ZERO
311 END IF
312
313 FXY1(I,J)=AA9+AMASS(I,J,bi,bj)/SEAICE_DT*UICE(I,J,1,bi,bj)*TWO
314 5 -(AA1+AA2)*DELX2(I,J)*UICE(I,J,1,bi,bj)
315 6 +((ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj)
316 6 +ETA(I,J,bi,bj)+ZETA(I,J,bi,bj))
317 6 *UICE(I+1,J,1,bi,bj)
318 6 +(ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj)
319 6 +ETA(I-1,J,bi,bj)
320 6 +ZETA(I-1,J,bi,bj))*UICE(I-1,J,1,bi,bj))
321 6 *DELX2(I,J)/CSUICE(I,J,bi,bj)/CSUICE(I,J,bi,bj)
322
323 END DO
324 END DO
325
326 DO 1300 I=1-OLx+1,sNx+OLx-1
327 DO J=1-OLy+1,sNy+OLy-1
328 VRT(J)=FXY(I,J)+FXY1(I,J)
329 VRT(J)=VRT(J)*UVM(I,J,bi,bj)
330 END DO
331
332 DO J=1-OLy+1,sNy+OLy-1
333 CVV(J)=CV(I,J)
334 END DO
335 VRT(1-OLy+1)=VRT(1-OLy+1)/BV(I,1-OLy+1)
336 DO J=1-OLy+2,sNy+OLy-1
337 JM=J-1
338 CVV(J)=CVV(J)/(BV(I,J)-AV(I,J)*CVV(JM))
339 VRT(J)=(VRT(J)-AV(I,J)*VRT(JM))/(BV(I,J)-AV(I,J)*CVV(JM))
340 END DO
341 DO J=1-OLy+1,sNy+OLy-1-1
342 J1=sNy+OLy-1-J
343 J2=J1+1
344 VRT(J1)=VRT(J1)-CVV(J1)*VRT(J2)
345 END DO
346 DO J=1-OLy+1,sNy+OLy-1
347 UICE(I,J,1,bi,bj)=VRT(J)
348 END DO
349 1300 CONTINUE
350
351 ENDDO
352 ENDDO
353
354 C SOLVE FOR VICE
355 C FIRST HALF FIRST
356
357 c$taf loop = parallel
358 DO bj=myByLo(myThid),myByHi(myThid)
359 c$taf loop = parallel
360 DO bi=myBxLo(myThid),myBxHi(myThid)
361
362 DO I=1-OLx+1,sNx+OLx-1
363 DO J=1-OLy+1,sNy+OLy-1
364
365 FXY(I,J)=-DRAGA(I,J,bi,bj)*UICEC(I,J,bi,bj)+FORCEY(I,J,bi,bj)
366 3 +(HALF*(UICEC(I+1,J,bi,bj)-UICEC(I-1,J,bi,bj))
367 3 *(ZETA(I-1,J,bi,bj)+ZETA(I,J,bi,bj)
368 3 -ZETA(I-1,J-1,bi,bj)-ZETA(I,J-1,bi,bj))*DELXY(I,J)
369 3 /CSUICE(I,J,bi,bj)+HALF*ZETAMEAN(I,J)
370 3 *((UICEC(I+1,J+1,bi,bj)
371 3 -UICEC(I-1,J+1,bi,bj))/CSUICE(I,J+1,bi,bj)
372 3 -(UICEC(I+1,J-1,bi,bj)-UICEC(I-1,J-1,bi,bj))
373 3 /CSUICE(I,J-1,bi,bj))*DELXY(I,J))
374 3
375 4 -(HALF*(UICEC(I+1,J,bi,bj)-UICEC(I-1,J,bi,bj))
376 4 *(ETA(I-1,J,bi,bj)+ETA(I,J,bi,bj)
377 4 -ETA(I-1,J-1,bi,bj)-ETA(I,J-1,bi,bj))*DELXY(I,J)
378 4 /CSUICE(I,J,bi,bj)+HALF*ETAMEAN(I,J)
379 4 *((UICEC(I+1,J+1,bi,bj)
380 4 -UICEC(I-1,J+1,bi,bj))/CSUICE(I,J+1,bi,bj)
381 4 -(UICEC(I+1,J-1,bi,bj)-UICEC(I-1,J-1,bi,bj))
382 4 /CSUICE(I,J-1,bi,bj))*DELXY(I,J))
383 4
384 5 +HALF*(ETA(I,J,bi,bj)*(UICEC(I+1,J+1,bi,bj)
385 5 +UICEC(I,J+1,bi,bj)
386 5 -UICEC(I+1,J,bi,bj)-UICEC(I,J,bi,bj))+ETA(I,J-1,bi,bj)
387 5 *(UICEC(I+1,J,bi,bj)
388 5 +UICEC(I,J,bi,bj)-UICEC(I+1,J-1,bi,bj)-UICEC(I,J-1,bi,bj))
389 5 +ETA(I-1,J,bi,bj)
390 5 *(UICEC(I,J,bi,bj)+UICEC(I-1,J,bi,bj)-UICEC(I,J+1,bi,bj)
391 5 -UICEC(I-1,J+1,bi,bj))
392 5 +ETA(I-1,J-1,bi,bj)*(UICEC(I,J-1,bi,bj)
393 5 +UICEC(I-1,J-1,bi,bj)
394 5 -UICEC(I,J,bi,bj)
395 5 -UICEC(I-1,J,bi,bj)))*DELXY(I,J)/CSUICE(I,J,bi,bj)
396 5
397 6 +(ETA(I,J,bi,bj)+ETA(I,J-1,bi,bj)
398 6 -ETA(I-1,J-1,bi,bj)-ETA(I-1,J,bi,bj))
399 6 *TNGICE(I,J,bi,bj)*UICEC(I,J,bi,bj)
400 6 *DELXR(I,J)/CSUICE(I,J,bi,bj)
401 6 +ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*(UICEC(I+1,J,bi,bj)
402 6 -UICEC(I-1,J,bi,bj))*DELXR(I,J)/CSUICE(I,J,bi,bj)
403 6
404 7 +ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)*(UICEC(I+1,J,bi,bj)
405 7 -UICEC(I-1,J,bi,bj))*DELXR(I,J)/CSUICE(I,J,bi,bj)
406
407 END DO
408 END DO
409
410 DO I=1-OLx+1,sNx+OLx-1
411 DO J=1-OLy+1,sNy+OLy-1
412 AA1=ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj)
413 & +ETA(I,J,bi,bj)+ZETA(I,J,bi,bj)
414 AA2=ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj)
415 & +ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj)
416 AA3=(ETA(I,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I,J,bi,bj)
417 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
418 AA4=(ETA(I-1,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I-1,J,bi,bj)
419 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
420 AA5=((ZETA(I-1,J,bi,bj)-ETA(I-1,J,bi,bj))
421 & +(ZETA(I,J,bi,bj)-ETA(I,J,bi,bj))
422 & -(ZETA(I-1,J-1,bi,bj)-ETA(I-1,J-1,bi,bj))
423 & -(ZETA(I,J-1,bi,bj)
424 & -ETA(I,J-1,bi,bj)))*TNGICE(I,J,bi,bj)
425 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
426
427 AV(I,J)=(-AA2*DELY2(I,J)-(ZETAMEAN(I,J)-ETAMEAN(I,J))
428 & *TNGICE(I,J-1,bi,bj)
429 & *DELYR(I,J)-ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)
430 & *DELYR(I,J))*UVM(I,J,bi,bj)
431 BV(I,J)=((AA1+AA2)*DELY2(I,J)+AA5*DELYR(I,J)+AA6*RADIUS2
432 & +AMASS(I,J,bi,bj)/SEAICE_DT*TWO
433 & +DRAGS(I,J,bi,bj))*UVM(I,J,bi,bj)
434 & +(ONE-UVM(I,J,bi,bj))
435 CV(I,J)=(-AA1*DELY2(I,J)+(ZETAMEAN(I,J)-ETAMEAN(I,J))
436 & *TNGICE(I,J+1,bi,bj)
437 & *DELYR(I,J)+ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)
438 & *DELYR(I,J))*UVM(I,J,bi,bj)
439 END DO
440 END DO
441 DO I=1-OLx+1,sNx+OLx-1
442 AV(I,1-OLy+1)=ZERO
443 CV(I,sNy+OLy-1)=ZERO
444 CV(I,1-OLy+1)=CV(I,1-OLy+1)/BV(I,1-OLy+1)
445 END DO
446
447 c$taf loop = parallel
448 DO 1301 I=1-OLx+1,sNx+OLx-1
449 DO J=1-OLy+1,sNy+OLy-1
450
451 AA1=ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj)
452 & +ETA(I,J,bi,bj)+ZETA(I,J,bi,bj)
453 AA2=ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj)
454 & +ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj)
455 AA3=(ETA(I,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I,J,bi,bj)
456 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
457 AA4=(ETA(I-1,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I-1,J,bi,bj)
458 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
459 AA5=((ZETA(I-1,J,bi,bj)-ETA(I-1,J,bi,bj))
460 & +(ZETA(I,J,bi,bj)-ETA(I,J,bi,bj))
461 & -(ZETA(I-1,J-1,bi,bj)-ETA(I-1,J-1,bi,bj))
462 & -(ZETA(I,J-1,bi,bj)-ETA(I,J-1,bi,bj)))*TNGICE(I,J,bi,bj)
463 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
464
465 IF(J.EQ.1-OLy+1) THEN
466 AA9=(AA2*DELY2(I,J)+(ZETAMEAN(I,J)-ETAMEAN(I,J))
467 & *TNGICE(I,J-1,bi,bj)*DELYR(I,J)
468 & +ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)*DELYR(I,J))
469 & *VICEC(I,J-1,bi,bj)*UVM(I,J,bi,bj)
470 ELSE IF(J.EQ.sNy+OLy-1) THEN
471 AA9=(AA1*DELY2(I,J)-(ZETAMEAN(I,J)-ETAMEAN(I,J))
472 & *TNGICE(I,J+1,bi,bj)*DELYR(I,J)
473 & -ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)*DELYR(I,J))
474 & *VICEC(I,J+1,bi,bj)*UVM(I,J,bi,bj)
475 ELSE
476 AA9=ZERO
477 END IF
478
479 VRT(J)=AA9+FXY(I,J)-(AA3+AA4)*DELX2(I,J)*VICE(I,J,2,bi,bj)
480 6 +((ETA(I,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I,J,bi,bj)
481 6 /CSUICE(I,J,bi,bj))*VICE(I+1,J,2,bi,bj)*DELX2(I,J)
482 7 +(ETA(I-1,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I-1,J,bi,bj)
483 7 /CSUICE(I,J,bi,bj))*VICE(I-1,J,2,bi,bj)*DELX2(I,J))
484 7 /CSUICE(I,J,bi,bj)
485 VRT(J)=(VRT(J)+AMASS(I,J,bi,bj)/SEAICE_DT
486 & *VICE(I,J,2,bi,bj)*TWO)
487 & *UVM(I,J,bi,bj)
488 END DO
489
490 DO J=1-OLy+1,sNy+OLy-1
491 CVV(J)=CV(I,J)
492 END DO
493 VRT(1-OLy+1)=VRT(1-OLy+1)/BV(I,1-OLy+1)
494 DO J=1-OLy+2,sNy+OLy-1
495 JM=J-1
496 CVV(J)=CVV(J)/(BV(I,J)-AV(I,J)*CVV(JM))
497 VRT(J)=(VRT(J)-AV(I,J)*VRT(JM))/(BV(I,J)-AV(I,J)*CVV(JM))
498 END DO
499 DO J=1-OLy+1,sNy+OLy-1-1
500 J1=sNy+OLy-1-J
501 J2=J1+1
502 VRT(J1)=VRT(J1)-CVV(J1)*VRT(J2)
503 END DO
504 DO J=1-OLy+1,sNy+OLy-1
505 VICE(I,J,1,bi,bj)=VRT(J)
506 END DO
507 1301 CONTINUE
508
509 c DO J=1,sNy
510 c DO I=1,sNx
511 c VICE(I,J,3,bi,bj)=VICE(I,J,1,bi,bj)
512 c END DO
513 c END DO
514
515 ENDDO
516 ENDDO
517
518 CALL SEAICE_EXCH( VICE, myThid )
519
520 C NOW SECOND HALF
521
522 c$taf loop = parallel
523 DO bj=myByLo(myThid),myByHi(myThid)
524 c$taf loop = parallel
525 DO bi=myBxLo(myThid),myBxHi(myThid)
526
527 DO J=1-OLy+1,sNy+OLy-1
528 DO I=1-OLx+1,sNx+OLx-1
529
530 AA1=ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj)
531 & +ETA(I,J,bi,bj)+ZETA(I,J,bi,bj)
532 AA2=ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj)
533 & +ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj)
534 AA3=(ETA(I,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I,J,bi,bj)
535 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
536 AA4=(ETA(I-1,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I-1,J,bi,bj)
537 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
538 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
539
540 AU(I,J)=-AA4*DELX2(I,J)*UVM(I,J,bi,bj)
541 BU(I,J)=((AA3+AA4)*DELX2(I,J)+AA6*RADIUS2
542 & +AMASS(I,J,bi,bj)/SEAICE_DT*TWO
543 & +DRAGS(I,J,bi,bj))*UVM(I,J,bi,bj)
544 & +(ONE-UVM(I,J,bi,bj))
545 CU(I,J)=-AA3*DELX2(I,J)*UVM(I,J,bi,bj)
546 END DO
547 END DO
548 DO J=1-OLy+1,sNy+OLy-1
549 AU(1-OLx+1,J)=ZERO
550 CU(sNx+OLx-1,J)=ZERO
551 CU(1-OLx+1,J)=CU(1-OLx+1,J)/BU(1-OLx+1,J)
552 END DO
553
554 DO J=1-OLy+1,sNy+OLy-1
555 DO I=1-OLx+1,sNx+OLx-1
556
557 AA1=ETA(I-1,J,bi,bj)+ZETA(I-1,J,bi,bj)
558 & +ETA(I,J,bi,bj)+ZETA(I,J,bi,bj)
559 AA2=ETA(I-1,J-1,bi,bj)+ZETA(I-1,J-1,bi,bj)
560 & +ETA(I,J-1,bi,bj)+ZETA(I,J-1,bi,bj)
561 AA3=(ETA(I,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I,J,bi,bj)
562 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
563 AA4=(ETA(I-1,J-1,bi,bj)/CSUICE(I,J,bi,bj)+ETA(I-1,J,bi,bj)
564 & /CSUICE(I,J,bi,bj))/CSUICE(I,J,bi,bj)
565 AA5=((ZETA(I-1,J,bi,bj)-ETA(I-1,J,bi,bj))
566 & +(ZETA(I,J,bi,bj)-ETA(I,J,bi,bj))
567 & -(ZETA(I-1,J-1,bi,bj)-ETA(I-1,J-1,bi,bj))
568 & -(ZETA(I,J-1,bi,bj)
569 & -ETA(I,J-1,bi,bj)))*TNGICE(I,J,bi,bj)
570 AA6=TWO*ETAMEAN(I,J)*TNGICE(I,J,bi,bj)*TNGICE(I,J,bi,bj)
571
572 IF(I.EQ.1-OLx+1) THEN
573 AA9=AA4*DELX2(I,J)*VICEC(I-1,J,bi,bj)*UVM(I,J,bi,bj)
574 ELSE IF(I.EQ.sNx+OLx-1) THEN
575 AA9=AA3*DELX2(I,J)*VICEC(I+1,J,bi,bj)*UVM(I,J,bi,bj)
576 ELSE
577 AA9=ZERO
578 END IF
579
580 FXY1(I,J)=AA9+AMASS(I,J,bi,bj)/SEAICE_DT
581 1 *VICE(I,J,1,bi,bj)*TWO
582 1 -AA5*DELYR(I,J)*VICE(I,J,1,bi,bj)
583 1 -(AA1+AA2)*DELY2(I,J)*VICE(I,J,1,bi,bj)
584 1 +AA1*DELY2(I,J)*VICE(I,J+1,1,bi,bj)
585 1 -((ZETAMEAN(I,J)-ETAMEAN(I,J))
586 1 *TNGICE(I,J+1,bi,bj)*DELYR(I,J)
587 1 +ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)*DELYR(I,J))
588 1 *VICE(I,J+1,1,bi,bj)
589 2 +AA2*DELY2(I,J)*VICE(I,J-1,1,bi,bj)
590 2 +((ZETAMEAN(I,J)-ETAMEAN(I,J))
591 2 *TNGICE(I,J-1,bi,bj)*DELYR(I,J)
592 2 +ETAMEAN(I,J)*TWO*TNGICE(I,J,bi,bj)*DELYR(I,J))
593 2 *VICE(I,J-1,1,bi,bj)
594 END DO
595 END DO
596
597 DO 1201 J=1-OLy+1,sNy+OLy-1
598 DO I=1-OLx+1,sNx+OLx-1
599 URT(I)=FXY(I,J)+FXY1(I,J)
600 URT(I)=URT(I)*UVM(I,J,bi,bj)
601 END DO
602
603 DO I=1-OLx+1,sNx+OLx-1
604 CUU(I)=CU(I,J)
605 END DO
606 URT(1-OLx+1)=URT(1-OLx+1)/BU(1-OLx+1,J)
607 DO I=1-OLx+2,sNx+OLx-1
608 IM=I-1
609 CUU(I)=CUU(I)/(BU(I,J)-AU(I,J)*CUU(IM))
610 URT(I)=(URT(I)-AU(I,J)*URT(IM))/(BU(I,J)-AU(I,J)*CUU(IM))
611 END DO
612 DO I=1-OLx+1,sNx+OLx-1-1
613 J1=sNx+OLx-1-I
614 J2=J1+1
615 URT(J1)=URT(J1)-CUU(J1)*URT(J2)
616 END DO
617 DO I=1-OLx+1,sNx+OLx-1
618 VICE(I,J,1,bi,bj)=URT(I)
619 END DO
620 1201 CONTINUE
621
622 ENDDO
623 ENDDO
624
625 DO bj=myByLo(myThid),myByHi(myThid)
626 DO bi=myBxLo(myThid),myBxHi(myThid)
627 DO J=1,sNy
628 DO I=1,sNx
629 UICEC(I,J,bi,bj)=UICE(I,J,1,bi,bj)*UVM(I,J,bi,bj)
630 VICEC(I,J,bi,bj)=VICE(I,J,1,bi,bj)*UVM(I,J,bi,bj)
631 END DO
632 END DO
633 ENDDO
634 ENDDO
635
636 C-- Update overlap regions
637 CALL EXCH_UV_XY_RL(UICEC,VICEC,.TRUE.,myThid)
638
639 DO bj=myByLo(myThid),myByHi(myThid)
640 DO bi=myBxLo(myThid),myBxHi(myThid)
641 DO j=1-OLy,sNy+OLy
642 DO i=1-OLx,sNx+OLx
643 UICE(I,J,1,bi,bj)=UICEC(I,J,bi,bj)
644 VICE(I,J,1,bi,bj)=VICEC(I,J,bi,bj)
645 ENDDO
646 ENDDO
647 ENDDO
648 ENDDO
649
650 #endif /* SEAICE_ALLOW_DYNAMICS */
651 #endif /* ALLOW_SEAICE */
652
653 RETURN
654 END

  ViewVC Help
Powered by ViewVC 1.1.22