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

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

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


Revision 1.6 - (show annotations) (download)
Wed Apr 30 07:04:08 2003 UTC (21 years, 2 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint50c_pre
Changes since 1.5: +57 -40 lines
checkpoint50c_pre
Merging from release1_p13:
o bug fix for pkg/seaice dynamic solver
o Added SEAICE_initialHEFF to pkg/seaice

1 C $Header:
2
3 #include "SEAICE_OPTIONS.h"
4
5 CStartOfInterface
6 SUBROUTINE dynsolver( myTime, myIter, myThid )
7 C /==========================================================\
8 C | SUBROUTINE dynsolver |
9 C | o Ice dynamics solver |
10 C | See Zhang and Hibler, JGR, 102, 8691-8702, 1997 |
11 C | Zhang and Rothrock, JGR, 105, 3325-3338, 2000 |
12 C | and Hibler, JPO, 9, 815- 846, 1979 |
13 C |==========================================================|
14 C \==========================================================/
15 IMPLICIT NONE
16
17 C === Global variables ===
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "FFIELDS.h"
22 #include "SEAICE.h"
23 #include "SEAICE_GRID.h"
24 #include "SEAICE_PARAMS.h"
25 #include "SEAICE_FFIELDS.h"
26
27 #ifdef ALLOW_AUTODIFF_TAMC
28 # include "tamc.h"
29 #endif
30
31 C === Routine arguments ===
32 C myTime - Simulation time
33 C myIter - Simulation timestep number
34 C myThid - Thread no. that called this routine.
35 _RL myTime
36 INTEGER myIter
37 INTEGER myThid
38 CEndOfInterface
39
40 #ifdef ALLOW_SEAICE
41
42 C === Local variables ===
43 C i,j,bi,bj - Loop counters
44
45 INTEGER i, j, bi, bj, kii
46 _RL DWAT, DAIR, RHOICE, RHOAIR, SINWIN, COSWIN, SINWAT, COSWAT
47 _RL GRAV, ECCEN, ECM2, GMIN, RADIUS, DELT1, DELT2, PSTAR, AAA
48
49 _RL PRESS (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
50 _RL DAIRN (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
51 _RL DWATN (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
52 _RL FORCEX0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
53 _RL FORCEY0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
54 _RL E11 (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
55 _RL E22 (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
56 _RL E12 (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
57 _RL COR_ICE (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
58 _RL ZMAX (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
59 _RL ZMIN (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
60
61 C-- FIRST SET UP BASIC CONSTANTS
62 DWAT=0.59 _d 0
63 DAIR=0.01462 _d 0
64 RHOICE=0.91 _d +03
65 RHOAIR=1.3 _d 0
66 GRAV=9.832 _d 0
67 ECCEN=TWO
68 ECM2=ONE/(ECCEN**2)
69 GMIN=1.0 _d -20
70 RADIUS=6370. _d 3
71 PSTAR=SEAICE_strength
72
73 C-- 25 DEG GIVES SIN EQUAL TO 0.4226
74 SINWIN=0.4226 _d 0
75 COSWIN=0.9063 _d 0
76 SINWAT=0.4226 _d 0
77 COSWAT=0.9063 _d 0
78
79 C-- Do not introduce turning angle
80 SINWIN=ZERO
81 COSWIN=ONE
82 SINWAT=ZERO
83 COSWAT=ONE
84
85 C-- NOW SET UP MASS PER UNIT AREA AND CORIOLIS TERM
86 DO bj=myByLo(myThid),myByHi(myThid)
87 DO bi=myBxLo(myThid),myBxHi(myThid)
88 DO j=1,sNy
89 DO i=1,sNx
90 AMASS(I,J,bi,bj)=RHOICE*QUART*(HEFF(i,j,1,bi,bj)
91 & +HEFF(i-1,j,1,bi,bj)
92 & +HEFF(i,j-1,1,bi,bj)
93 & +HEFF(i-1,j-1,1,bi,bj))
94 COR_ICE(I,J,bi,bj)=AMASS(I,J,bi,bj)
95 & *TWO*OMEGA*SINEICE(I,J,bi,bj)
96 ENDDO
97 ENDDO
98 ENDDO
99 ENDDO
100
101 C-- NOW SET UP FORCING FIELDS
102
103 IF (SEAICEwindOnCgrid) THEN
104 C-- Wind stress computed here from wind on South-West C-grid
105 DO bj=myByLo(myThid),myByHi(myThid)
106 DO bi=myBxLo(myThid),myBxHi(myThid)
107 DO j=1,sNy
108 DO i=1,sNx
109 AAA=(HALF*(UWIND(I,J,bi,bj)+UWIND(I,J-1,bi,bj)))**2+
110 & (HALF*(VWIND(I,J,bi,bj)+VWIND(I-1,J,bi,bj)))**2
111 IF ( AAA .LT. SEAICE_EPS_SQ ) THEN
112 AAA=SEAICE_EPS
113 ELSE
114 AAA=SQRT(AAA)
115 ENDIF
116 DAIRN(I,J,bi,bj)=RHOAIR*SEAICE_drag*
117 & (2.70 _d 0+0.142 _d 0*AAA+0.0764 _d 0*AAA*AAA)
118 FORCEX(I,J,bi,bj)=DAIRN(I,J,bi,bj)*
119 & (COSWIN*HALF*(UWIND(I,J,bi,bj)+UWIND(I,J-1,bi,bj))
120 & -SINWIN*HALF*(VWIND(I,J,bi,bj)+VWIND(I-1,J,bi,bj)))
121 FORCEY(I,J,bi,bj)=DAIRN(I,J,bi,bj)*
122 & (SINWIN*HALF*(UWIND(I,J,bi,bj)+UWIND(I,J-1,bi,bj))
123 & +COSWIN*HALF*(VWIND(I,J,bi,bj)+VWIND(I-1,J,bi,bj)))
124 ENDDO
125 ENDDO
126 ENDDO
127 ENDDO
128
129 ELSE
130 C-- Wind stress computed here from wind on South-West B-grid
131 DO bj=myByLo(myThid),myByHi(myThid)
132 DO bi=myBxLo(myThid),myBxHi(myThid)
133 DO j=1,sNy
134 DO i=1,sNx
135 AAA=UWIND(I,J,bi,bj)**2+VWIND(I,J,bi,bj)**2
136 IF ( AAA .LT. SEAICE_EPS_SQ ) THEN
137 AAA=SEAICE_EPS
138 ELSE
139 AAA=SQRT(AAA)
140 ENDIF
141 DAIRN(I,J,bi,bj)=RHOAIR*SEAICE_drag*
142 & (2.70 _d 0+0.142 _d 0*AAA+0.0764 _d 0*AAA*AAA)
143 FORCEX(I,J,bi,bj)=DAIRN(I,J,bi,bj)*(COSWIN*UWIND(I,J,bi,bj)
144 & -SINWIN*VWIND(I,J,bi,bj))
145 FORCEY(I,J,bi,bj)=DAIRN(I,J,bi,bj)*(SINWIN*UWIND(I,J,bi,bj)
146 & +COSWIN*VWIND(I,J,bi,bj))
147 ENDDO
148 ENDDO
149 ENDDO
150 ENDDO
151 ENDIF
152
153 DO bj=myByLo(myThid),myByHi(myThid)
154 DO bi=myBxLo(myThid),myBxHi(myThid)
155 DO j=1,sNy
156 DO i=1,sNx
157 C-- STORE WIND ONLY STRESS
158 WINDX(I,J,bi,bj)=FORCEX(I,J,bi,bj)
159 WINDY(I,J,bi,bj)=FORCEY(I,J,bi,bj)
160 C-- NOW ADD IN TILT
161 FORCEX(I,J,bi,bj)=FORCEX(I,J,bi,bj)
162 & -COR_ICE(I,J,bi,bj)*GWATY(I,J,bi,bj)
163 FORCEY(I,J,bi,bj)=FORCEY(I,J,bi,bj)
164 & +COR_ICE(I,J,bi,bj)*GWATX(I,J,bi,bj)
165 C-- NOW SET UP ICE PRESSURE AND VISCOSITIES
166 PRESS(I,J,bi,bj)=PSTAR*HEFF(I,J,1,bi,bj)
167 & *EXP(-20.0 _d 0*(ONE-AREA(I,J,1,bi,bj)))
168 ZMAX(I,J,bi,bj)=(5.0 _d +12/(2.0 _d +04))*PRESS(I,J,bi,bj)
169 ZMIN(I,J,bi,bj)=4.0 _d +08
170 PRESS(I,J,bi,bj)=PRESS(I,J,bi,bj)*HEFFM(I,J,bi,bj)
171 ENDDO
172 ENDDO
173 ENDDO
174 ENDDO
175
176 #ifdef SEAICE_ALLOW_DYNAMICS
177 IF ( SEAICEuseDYNAMICS ) THEN
178
179 C-- Update overlap regions for PRESS
180 _EXCH_XY_R8(PRESS, myThid)
181
182 DO bj=myByLo(myThid),myByHi(myThid)
183 DO bi=myBxLo(myThid),myBxHi(myThid)
184 DO j=1,sNy
185 DO i=1,sNx
186 C NOW CALCULATE PRESSURE FORCE AND ADD TO EXTERNAL FORCE
187 FORCEX(I,J,bi,bj)=FORCEX(I,J,bi,bj)
188 & -(QUART/(DXUICE(I,J,bi,bj)*CSUICE(I,J,bi,bj)))
189 & *(PRESS(I,J,bi,bj)+PRESS(I,J-1,bi,bj)
190 & -PRESS(I-1,J,bi,bj)-PRESS(I-1,J-1,bi,bj))
191 FORCEY(I,J,bi,bj)=FORCEY(I,J,bi,bj)-QUART/DYUICE(I,J,bi,bj)
192 & *(PRESS(I,J,bi,bj)+PRESS(I-1,J,bi,bj)
193 & -PRESS(I,J-1,bi,bj)-PRESS(I-1,J-1,bi,bj))
194 C NOW KEEP FORCEX0
195 FORCEX0(I,J,bi,bj)=FORCEX(I,J,bi,bj)
196 FORCEY0(I,J,bi,bj)=FORCEY(I,J,bi,bj)
197 ENDDO
198 ENDDO
199 ENDDO
200 ENDDO
201
202 C DO PSEUDO-TIMESTEPS TO OBTAIN AN ACCURATE VISCOUS-PLASTIC SOLUTION
203 C A RANGE OF 5-300 PSEUDO-TIMESTEPS IS SUGGESTED DEPENDING ON ACCURACY
204 C REQUIREMENTS OF SPECIFIC APPLICATION
205 C NPSEUDO is now set in data.seaice input file
206 C TIMESTEP FOR PSEUDO-TIMESTEPPING
207 SEAICE_DT = DELTAT/NPSEUDO
208
209 crg what about DWAIN,DRAGS,DRAGA,ETA,ZETA
210
211 crg later c$taf loop = iteration uice,vice
212
213 DO 5000 KII=1,NPSEUDO
214
215 c$taf store uice,vice = comlev1_seaice_ds,
216 c$taf& key = kii + (ikey_dynamics-1)*NPSEUDO
217
218 C NOW DO PREDICTOR TIME STEP
219 DO bj=myByLo(myThid),myByHi(myThid)
220 DO bi=myBxLo(myThid),myBxHi(myThid)
221 DO j=1-OLy,sNy+OLy
222 DO i=1-OLx,sNx+OLx
223 UICE(I,J,2,bi,bj)=UICE(I,J,1,bi,bj)
224 VICE(I,J,2,bi,bj)=VICE(I,J,1,bi,bj)
225 UICEC(I,J,bi,bj)=UICE(I,J,1,bi,bj)
226 VICEC(I,J,bi,bj)=VICE(I,J,1,bi,bj)
227 ENDDO
228 ENDDO
229 ENDDO
230 ENDDO
231
232 DO bj=myByLo(myThid),myByHi(myThid)
233 DO bi=myBxLo(myThid),myBxHi(myThid)
234 DO j=1,sNy
235 DO i=1,sNx
236 C NOW SET UP NON-LINEAR WATER DRAG, FORCEX, FORCEY
237 DWATN(I,J,bi,bj)=SEAICE_waterDrag*SQRT((UICE(I,J,1,bi,bj)
238 & -GWATX(I,J,bi,bj))**2
239 & +(VICE(I,J,1,bi,bj)-GWATY(I,J,bi,bj))**2)
240 DWATN(I,J,bi,bj)=MAX(DWATN(I,J,bi,bj),QUART)
241 C NOW SET UP SYMMETTRIC DRAG
242 DRAGS(I,J,bi,bj)=DWATN(I,J,bi,bj)*COSWAT
243 C NOW SET UP ANTI SYMMETTRIC DRAG PLUS CORIOLIS
244 DRAGA(I,J,bi,bj)=DWATN(I,J,bi,bj)*SINWAT+COR_ICE(I,J,bi,bj)
245 C NOW ADD IN CURRENT FORCE
246 FORCEX(I,J,bi,bj)=FORCEX0(I,J,bi,bj)+DWATN(I,J,bi,bj)
247 & *(COSWAT*GWATX(I,J,bi,bj)
248 & -SINWAT*GWATY(I,J,bi,bj))
249 FORCEY(I,J,bi,bj)=FORCEY0(I,J,bi,bj)+DWATN(I,J,bi,bj)
250 & *(SINWAT*GWATX(I,J,bi,bj)
251 & +COSWAT*GWATY(I,J,bi,bj))
252 ENDDO
253 ENDDO
254 ENDDO
255 ENDDO
256
257 DO bj=myByLo(myThid),myByHi(myThid)
258 DO bi=myBxLo(myThid),myBxHi(myThid)
259 DO j=1,sNy
260 DO i=1,sNx
261 C NOW EVALUATE STRAIN RATES
262 E11(I,J,bi,bj)=HALF/(DXTICE(I,J,bi,bj)*CSTICE(I,J,bi,bj))
263 & *(UICE(I+1,J+1,1,bi,bj)+UICE(I+1,J,1,bi,bj)
264 & -UICE(I,J+1,1,bi,bj)-UICE(I,J,1,bi,bj))
265 & -QUART*(VICE(I+1,J+1,1,bi,bj)
266 & +VICE(I,J+1,1,bi,bj)
267 & +VICE(I,J,1,bi,bj)+VICE(I+1,J,1,bi,bj))
268 & *TNGTICE(I,J,bi,bj)/RADIUS
269 E22(I,J,bi,bj)=HALF/DYTICE(I,J,bi,bj)
270 & *(VICE(I+1,J+1,1,bi,bj)+VICE(I,J+1,1,bi,bj)
271 & -VICE(I+1,J,1,bi,bj)-VICE(I,J,1,bi,bj))
272 E12(I,J,bi,bj)=HALF*(HALF/DYTICE(I,J,bi,bj)
273 & *(UICE(I+1,J+1,1,bi,bj)+UICE(I,J+1,1,bi,bj)
274 & -UICE(I+1,J,1,bi,bj)-UICE(I,J,1,bi,bj))
275 & +HALF/(DXTICE(I,J,bi,bj)*CSTICE(I,J,bi,bj))
276 & *(VICE(I+1,J+1,1,bi,bj)+VICE(I+1,J,1,bi,bj)
277 & -VICE(I,J+1,1,bi,bj)-VICE(I,J,1,bi,bj))
278 & +QUART*(UICE(I+1,J+1,1,bi,bj)
279 & +UICE(I,J+1,1,bi,bj)
280 & +UICE(I,J,1,bi,bj)+UICE(I+1,J,1,bi,bj))
281 & *TNGTICE(I,J,bi,bj)/RADIUS)
282 C NOW EVALUATE VISCOSITIES
283 DELT1=(E11(I,J,bi,bj)**2+E22(I,J,bi,bj)**2)*(ONE+ECM2)
284 & +4.0 _d 0*ECM2*E12(I,J,bi,bj)**2
285 1 +TWO*E11(I,J,bi,bj)*E22(I,J,bi,bj)*(ONE-ECM2)
286 DELT2=SQRT(DELT1)
287 DELT2=MAX(GMIN,DELT2)
288 ZETA(I,J,bi,bj)=HALF*PRESS(I,J,bi,bj)/DELT2
289 C NOW PUT MIN AND MAX VISCOSITIES IN
290 ZETA(I,J,bi,bj)=MIN(ZMAX(I,J,bi,bj),ZETA(I,J,bi,bj))
291 ZETA(I,J,bi,bj)=MAX(ZMIN(I,J,bi,bj),ZETA(I,J,bi,bj))
292 C NOW SET VISCOSITIES TO ZERO AT HEFFMFLOW PTS
293 ZETA(I,J,bi,bj)=ZETA(I,J,bi,bj)*HEFFM(I,J,bi,bj)
294 ETA(I,J,bi,bj)=ECM2*ZETA(I,J,bi,bj)
295 ENDDO
296 ENDDO
297 ENDDO
298 ENDDO
299
300 C-- Update overlap regions
301 _EXCH_XY_R8(ETA, myThid)
302 _EXCH_XY_R8(ZETA, myThid)
303
304 C NOW ADI SCHEME (ZHANG-J/ROTHROCK 1999,bi,bj)
305 IF ( SEAICEuseLSR ) THEN
306 CALL LSR( myThid )
307 ELSE
308 CALL ADI( myThid )
309 ENDIF
310
311 C NOW DO MODIFIED EULER STEP
312 DO bj=myByLo(myThid),myByHi(myThid)
313 DO bi=myBxLo(myThid),myBxHi(myThid)
314 DO j=1-OLy,sNy+OLy
315 DO i=1-OLx,sNx+OLx
316 UICE(I,J,1,bi,bj)=HALF*(UICE(I,J,1,bi,bj)+UICE(I,J,2,bi,bj))
317 VICE(I,J,1,bi,bj)=HALF*(VICE(I,J,1,bi,bj)+VICE(I,J,2,bi,bj))
318 UICEC(I,J,bi,bj)=UICE(I,J,1,bi,bj)
319 VICEC(I,J,bi,bj)=VICE(I,J,1,bi,bj)
320 ENDDO
321 ENDDO
322 ENDDO
323 ENDDO
324
325 DO bj=myByLo(myThid),myByHi(myThid)
326 DO bi=myBxLo(myThid),myBxHi(myThid)
327 DO j=1,sNy
328 DO i=1,sNx
329 C NOW SET UP NON-LINEAR WATER DRAG
330 DWATN(I,J,bi,bj)=SEAICE_waterDrag*SQRT((UICE(I,J,1,bi,bj)
331 & -GWATX(I,J,bi,bj))**2
332 & +(VICE(I,J,1,bi,bj)-GWATY(I,J,bi,bj))**2)
333 DWATN(I,J,bi,bj)=MAX(DWATN(I,J,bi,bj),QUART)
334 C NOW SET UP SYMMETTRIC DRAG
335 DRAGS(I,J,bi,bj)=DWATN(I,J,bi,bj)*COSWAT
336 C NOW SET UP ANTI SYMMETTRIC DRAG PLUS CORIOLIS
337 DRAGA(I,J,bi,bj)=DWATN(I,J,bi,bj)*SINWAT+COR_ICE(I,J,bi,bj)
338 C NOW ADD IN CURRENT FORCE
339 FORCEX(I,J,bi,bj)=FORCEX0(I,J,bi,bj)+DWATN(I,J,bi,bj)
340 & *(COSWAT*GWATX(I,J,bi,bj)
341 & -SINWAT*GWATY(I,J,bi,bj))
342 FORCEY(I,J,bi,bj)=FORCEY0(I,J,bi,bj)+DWATN(I,J,bi,bj)
343 & *(SINWAT*GWATX(I,J,bi,bj)
344 & +COSWAT*GWATY(I,J,bi,bj))
345 ENDDO
346 ENDDO
347 ENDDO
348 ENDDO
349
350 DO bj=myByLo(myThid),myByHi(myThid)
351 DO bi=myBxLo(myThid),myBxHi(myThid)
352 DO j=1,sNy
353 DO i=1,sNx
354 C NOW EVALUATE STRAIN RATES
355 E11(I,J,bi,bj)=HALF/(DXTICE(I,J,bi,bj)*CSTICE(I,J,bi,bj))
356 & *(UICE(I+1,J+1,1,bi,bj)+UICE(I+1,J,1,bi,bj)
357 & -UICE(I,J+1,1,bi,bj)-UICE(I,J,1,bi,bj))
358 & -QUART*(VICE(I+1,J+1,1,bi,bj)
359 & +VICE(I,J+1,1,bi,bj)
360 & +VICE(I,J,1,bi,bj)+VICE(I+1,J,1,bi,bj))
361 & *TNGTICE(I,J,bi,bj)/RADIUS
362 E22(I,J,bi,bj)=HALF/DYTICE(I,J,bi,bj)
363 & *(VICE(I+1,J+1,1,bi,bj)+VICE(I,J+1,1,bi,bj)
364 & -VICE(I+1,J,1,bi,bj)-VICE(I,J,1,bi,bj))
365 E12(I,J,bi,bj)=HALF*(HALF/DYTICE(I,J,bi,bj)
366 & *(UICE(I+1,J+1,1,bi,bj)+UICE(I,J+1,1,bi,bj)
367 & -UICE(I+1,J,1,bi,bj)-UICE(I,J,1,bi,bj))
368 & +HALF/(DXTICE(I,J,bi,bj)*CSTICE(I,J,bi,bj))
369 & *(VICE(I+1,J+1,1,bi,bj)+VICE(I+1,J,1,bi,bj)
370 & -VICE(I,J+1,1,bi,bj)-VICE(I,J,1,bi,bj))
371 & +QUART*(UICE(I+1,J+1,1,bi,bj)
372 & +UICE(I,J+1,1,bi,bj)
373 & +UICE(I,J,1,bi,bj)+UICE(I+1,J,1,bi,bj))
374 & *TNGTICE(I,J,bi,bj)/RADIUS)
375 C NOW EVALUATE VISCOSITIES
376 DELT1=(E11(I,J,bi,bj)**2+E22(I,J,bi,bj)**2)*(ONE+ECM2)
377 & +4. _d 0*ECM2*E12(I,J,bi,bj)**2
378 1 +TWO*E11(I,J,bi,bj)*E22(I,J,bi,bj)*(ONE-ECM2)
379 DELT2=SQRT(DELT1)
380 DELT2=MAX(GMIN,DELT2)
381 ZETA(I,J,bi,bj)=HALF*PRESS(I,J,bi,bj)/DELT2
382 C NOW PUT MIN AND MAX VISCOSITIES IN
383 ZETA(I,J,bi,bj)=MIN(ZMAX(I,J,bi,bj),ZETA(I,J,bi,bj))
384 ZETA(I,J,bi,bj)=MAX(ZMIN(I,J,bi,bj),ZETA(I,J,bi,bj))
385 C NOW SET VISCOSITIES TO ZERO AT HEFFMFLOW PTS
386 ZETA(I,J,bi,bj)=ZETA(I,J,bi,bj)*HEFFM(I,J,bi,bj)
387 ETA(I,J,bi,bj)=ECM2*ZETA(I,J,bi,bj)
388 ENDDO
389 ENDDO
390 ENDDO
391 ENDDO
392
393 C-- Update overlap regions
394 _EXCH_XY_R8(ETA, myThid)
395 _EXCH_XY_R8(ZETA, myThid)
396
397 C GET READY FOR SECOND CALL OF ADI
398 DO bj=myByLo(myThid),myByHi(myThid)
399 DO bi=myBxLo(myThid),myBxHi(myThid)
400 DO j=1-OLy,sNy+OLy
401 DO i=1-OLx,sNx+OLx
402 UICE(I,J,2,bi,bj)=UICEC(I,J,bi,bj)
403 VICE(I,J,2,bi,bj)=VICEC(I,J,bi,bj)
404 ENDDO
405 ENDDO
406 ENDDO
407 ENDDO
408
409 C NOW ADI SCHEME (ZHANG-J/ROTHROCK 1999)
410 IF ( SEAICEuseLSR ) THEN
411 CALL LSR( myThid )
412 ELSE
413 CALL ADI( myThid )
414 ENDIF
415
416 5000 CONTINUE
417
418 c$taf store uice,vice = comlev1, key=ikey_dynamics
419
420 ENDIF
421 #endif /* SEAICE_ALLOW_DYNAMICS */
422
423 C Calculate ocean surface stress
424 CALL OSTRES ( DWATN, COR_ICE, myThid )
425
426 #ifdef SEAICE_ALLOW_DYNAMICS
427 IF ( SEAICEuseDYNAMICS ) THEN
428
429 c Put a cap on ice velocity
430 c limit velocity to 0.40 m s-1 to avoid potential CFL violations
431 c in open water areas (drift of zero thickness ice)
432 DO bj=myByLo(myThid),myByHi(myThid)
433 DO bi=myBxLo(myThid),myBxHi(myThid)
434 DO j=1-OLy,sNy+OLy
435 DO i=1-OLx,sNx+OLx
436 #ifdef SEAICE_DEBUG
437 c write(*,'(2i4,2i2,f7.1,7f12.3)')
438 c & i,j,bi,bj,UVM(I,J,bi,bj),amass(i,j,bi,bj)
439 c & ,gwatx(I,J,bi,bj),gwaty(i,j,bi,bj)
440 c & ,forcex(I,J,bi,bj),forcey(i,j,bi,bj)
441 c & ,uice(i,j,1,bi,bj)
442 c & ,vice(i,j,1,bi,bj)
443 #endif /* SEAICE_DEBUG */
444 UICE(i,j,1,bi,bj)=min(UICE(i,j,1,bi,bj),0.40 _d +00)
445 VICE(i,j,1,bi,bj)=min(VICE(i,j,1,bi,bj),0.40 _d +00)
446 UICE(i,j,1,bi,bj)=max(UICE(i,j,1,bi,bj),-0.40 _d +00)
447 VICE(i,j,1,bi,bj)=max(VICE(i,j,1,bi,bj),-0.40 _d +00)
448 ENDDO
449 ENDDO
450 ENDDO
451 ENDDO
452
453 ENDIF
454 #endif /* SEAICE_ALLOW_DYNAMICS */
455
456 #endif /* ALLOW_SEAICE */
457
458 RETURN
459 END

  ViewVC Help
Powered by ViewVC 1.1.22