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

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

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


Revision 1.14 - (hide annotations) (download)
Wed Dec 22 00:49:36 2004 UTC (19 years, 5 months ago) by dimitri
Branch: MAIN
Changes since 1.13: +4 -7 lines
o pkg/seaice: some test code for ice-modified ocean stress

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

  ViewVC Help
Powered by ViewVC 1.1.22