/[MITgcm]/MITgcm_contrib/lab_sea_test/dynsolver.F
ViewVC logotype

Annotation of /MITgcm_contrib/lab_sea_test/dynsolver.F

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


Revision 1.1 - (hide annotations) (download)
Mon Jul 12 01:00:20 2004 UTC (19 years, 9 months ago) by dimitri
Branch: MAIN
CVS Tags: HEAD
added my_min_max for pkg/seaice routines

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

  ViewVC Help
Powered by ViewVC 1.1.22