/[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.17 - (hide annotations) (download)
Wed Feb 15 20:44:07 2006 UTC (18 years, 3 months ago) by mlosch
Branch: MAIN
Changes since 1.16: +6 -12 lines
replace 1/RADIUS by recip_rSphere: This changes lab_sea-results, but rSphere
is set to 6371km in data, whereas in pkg/seaice RADIUS was hardwired to 6370km.
Bummer! I will update the output.txt later, after I will have made my other
changes to seaice.

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

  ViewVC Help
Powered by ViewVC 1.1.22