/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_driving_stress.F
ViewVC logotype

Annotation of /MITgcm_contrib/dgoldberg/streamice/streamice_driving_stress.F

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


Revision 1.6 - (hide annotations) (download)
Wed Aug 27 19:29:13 2014 UTC (10 years, 10 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +259 -156 lines
updating contrib streamice repo with latest files, and separated out convergence checks; and parameterised maximum iteration counts and interface w shelfice for coupling

1 dgoldberg 1.6 C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_driving_stress.F,v 1.5 2014/08/23 10:29:47 dgoldberg Exp $
2 heimbach 1.1 C $Name: $
3    
4     #include "STREAMICE_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    
8     CBOP
9     SUBROUTINE STREAMICE_DRIVING_STRESS( myThid )
10     ! O taudx,
11     ! O taudy )
12    
13     C /============================================================\
14     C | SUBROUTINE |
15     C | o |
16     C |============================================================|
17     C | |
18     C \============================================================/
19     IMPLICIT NONE
20    
21     C === Global variables ===
22     #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "PARAMS.h"
25     #include "GRID.h"
26     #include "STREAMICE.h"
27     #include "STREAMICE_CG.h"
28    
29     C !INPUT/OUTPUT ARGUMENTS
30     INTEGER myThid
31     ! _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
32     ! _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
33    
34     #ifdef ALLOW_STREAMICE
35    
36    
37     C LOCAL VARIABLES
38     INTEGER i, j, bi, bj, k, l,
39     & Gi, Gj
40     LOGICAL at_west_bdry, at_east_bdry,
41     & at_north_bdry, at_south_bdry
42 dgoldberg 1.6 _RL sx, sy, diffx, diffy, geom_fac
43 heimbach 1.1
44     IF (myXGlobalLo.eq.1) at_west_bdry = .true.
45     IF (myYGlobalLo.eq.1) at_south_bdry = .true.
46     IF (myXGlobalLo-1+sNx*nSx.eq.Nx)
47     & at_east_bdry = .false.
48     IF (myYGlobalLo-1+sNy*nSy.eq.Ny)
49     & at_north_bdry = .false.
50    
51     DO bj = myByLo(myThid), myByHi(myThid)
52     DO bi = myBxLo(myThid), myBxHi(myThid)
53 dgoldberg 1.6 DO j=1-OLy+1,sNy+OLy-1
54     DO i=1-OLx+1,sNx+OLx-1
55 heimbach 1.1 taudx_SI(i,j,bi,bj) = 0. _d 0
56     taudy_SI(i,j,bi,bj) = 0. _d 0
57     ENDDO
58     ENDDO
59     ENDDO
60     ENDDO
61    
62     DO bj = myByLo(myThid), myByHi(myThid)
63     DO bi = myBxLo(myThid), myBxHi(myThid)
64    
65 dgoldberg 1.6 DO i=1,sNx
66     DO j=1,sNy
67 heimbach 1.1
68     diffx = 0. _d 0
69     diffy = 0. _d 0
70     sx = 0. _d 0
71     sy = 0. _d 0
72    
73     Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
74     Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
75    
76 dgoldberg 1.6 IF (streamice_umask(i,j,bi,bj).eq.1.0) THEN
77 dgoldberg 1.3
78 dgoldberg 1.6 IF (streamice_hmask(i-1,j,bi,bj).eq.1.0.AND.
79     & streamice_hmask(i,j,bi,bj).eq.1.0) THEN
80    
81     ! geom_fac = sqrt(rA(i-1,j,bi,bj)*recip_rA(i,j,bi,bj)*
82     ! & dxF(i,j,bi,bj)*recip_dxF(i-1,j,bi,bj))
83    
84     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
85     & 0.25 * dyG(i,j,bi,bj) *
86     & streamice_density * gravity *
87     & (H_streamice(i,j,bi,bj)+
88     & H_streamice(i-1,j,bi,bj)) *
89     & (surf_el_streamice(i,j,bi,bj)-
90     & surf_el_streamice(i-1,j,bi,bj))
91    
92     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
93     & streamice_density * gravity *
94     & streamice_bg_surf_slope_x * .25 * rA(i,j,bi,bj) *
95     & (H_streamice(i-1,j,bi,bj) + H_streamice(i,j,bi,bj))
96    
97     ELSE IF (streamice_hmask(i-1,j,bi,bj).eq.1.0) THEN
98    
99     IF (float_frac_streamice(i-1,j,bi,bj) .eq. 1.0) THEN
100    
101     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) +
102     & 0.25 * dyG(i,j,bi,bj) *
103     & gravity *
104     & (streamice_density * H_streamice(i-1,j,bi,bj)**2 -
105     #ifdef USE_ALT_RLOW
106     & streamice_density_ocean_avg * R_low_si(i-1,j,bi,bj)**2)
107     #else
108     & streamice_density_ocean_avg * R_low(i-1,j,bi,bj)**2)
109     #endif
110    
111     ELSE
112    
113     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) +
114     & 0.25 * dyG(i,j,bi,bj) *
115     & streamice_density * gravity *
116     & (1-streamice_density/streamice_density_ocean_avg) *
117     & H_streamice(i-1,j,bi,bj)**2
118 dgoldberg 1.3
119 dgoldberg 1.6 ENDIF
120 dgoldberg 1.3
121 dgoldberg 1.6 ELSE IF (streamice_hmask(i,j,bi,bj).eq.1.0) THEN
122 dgoldberg 1.3
123 dgoldberg 1.6 IF (float_frac_streamice(i,j,bi,bj) .eq. 1.0) THEN
124    
125     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
126     & 0.25 * dyG(i,j,bi,bj) *
127     & gravity *
128     & (streamice_density * H_streamice(i,j,bi,bj)**2 -
129     #ifdef USE_ALT_RLOW
130     & streamice_density_ocean_avg * R_low_si(i,j,bi,bj)**2)
131     #else
132     & streamice_density_ocean_avg * R_low(i,j,bi,bj)**2)
133     #endif
134    
135     ELSE
136 dgoldberg 1.3
137 dgoldberg 1.6 taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
138     & 0.25 * dyG(i,j,bi,bj) *
139     & streamice_density * gravity *
140     & (1-streamice_density/streamice_density_ocean_avg) *
141     & H_streamice(i,j,bi,bj)**2
142    
143     END IF
144     END IF
145    
146     ! cells below
147    
148     IF (streamice_hmask(i-1,j-1,bi,bj).eq.1.0.AND.
149     & streamice_hmask(i,j-1,bi,bj).eq.1.0) THEN
150    
151     ! geom_fac = sqrt(rA(i-1,j-1,bi,bj)*recip_rA(i,j-1,bi,bj)*
152     ! & dxF(i,j-1,bi,bj)*recip_dxF(i-1,j-1,bi,bj))
153    
154     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
155     & 0.25 * dyg(i,j-1,bi,bj) *
156     & streamice_density * gravity *
157     & (H_streamice(i,j-1,bi,bj)+
158     & H_streamice(i-1,j-1,bi,bj)) *
159     & (surf_el_streamice(i,j-1,bi,bj)-
160     & surf_el_streamice(i-1,j-1,bi,bj))
161    
162     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
163     & streamice_density * gravity *
164     & streamice_bg_surf_slope_x * .25 * rA(i,j-1,bi,bj) *
165     & (H_streamice(i-1,j-1,bi,bj) + H_streamice(i,j-1,bi,bj))
166    
167     ELSE IF (streamice_hmask(i-1,j-1,bi,bj).eq.1.0) THEN
168    
169     IF (float_frac_streamice(i-1,j-1,bi,bj) .eq. 1.0) THEN
170    
171     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) +
172     & 0.25 * dyg(i,j-1,bi,bj) *
173     & gravity *
174     & (streamice_density * H_streamice(i-1,j-1,bi,bj)**2 -
175     #ifdef USE_ALT_RLOW
176     & streamice_density_ocean_avg*R_low_si(i-1,j-1,bi,bj)**2)
177     #else
178     & streamice_density_ocean_avg * R_low(i-1,j-1,bi,bj)**2)
179     #endif
180 dgoldberg 1.3
181 heimbach 1.1 ELSE
182 dgoldberg 1.3
183 dgoldberg 1.6 taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) +
184     & 0.25 * dyg(i,j-1,bi,bj) *
185     & streamice_density * gravity *
186     & (1-streamice_density/streamice_density_ocean_avg) *
187     & H_streamice(i-1,j-1,bi,bj)**2
188 dgoldberg 1.3
189 heimbach 1.1 ENDIF
190 dgoldberg 1.3
191 dgoldberg 1.6 ELSE IF (streamice_hmask(i,j-1,bi,bj).eq.1.0) THEN
192 dgoldberg 1.3
193 dgoldberg 1.6 IF (float_frac_streamice(i,j-1,bi,bj) .eq. 1.0) THEN
194 dgoldberg 1.3
195 dgoldberg 1.6 taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
196     & 0.25 * dyg(i,j-1,bi,bj) *
197     & gravity *
198     & (streamice_density * H_streamice(i,j-1,bi,bj)**2 -
199     #ifdef USE_ALT_RLOW
200     & streamice_density_ocean_avg * R_low_si(i,j-1,bi,bj)**2)
201     #else
202     & streamice_density_ocean_avg * R_low(i,j-1,bi,bj)**2)
203     #endif
204 dgoldberg 1.3
205 dgoldberg 1.6 ELSE
206    
207     taudx_si(i,j,bi,bj) = taudx_si(i,j,bi,bj) -
208     & 0.25 * dyg(i,j-1,bi,bj) *
209     & streamice_density * gravity *
210     & (1-streamice_density/streamice_density_ocean_avg) *
211     & H_streamice(i,j-1,bi,bj)**2
212    
213     END IF
214     END IF
215     END IF ! if umask==1
216    
217     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
218    
219     IF (streamice_vmask(i,j,bi,bj).eq.1.0) THEN
220    
221     IF (streamice_hmask(i,j-1,bi,bj).eq.1.0.AND.
222     & streamice_hmask(i,j,bi,bj).eq.1.0) THEN
223    
224     ! geom_fac = sqrt(rA(i,j-1,bi,bj)*recip_rA(i,j,bi,bj)*
225     ! & dxF(i,j,bi,bj)*recip_dyF(i,j-1,bi,bj))
226    
227     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
228     & 0.25 * dxG(i,j,bi,bj) *
229     & streamice_density * gravity *
230     & (H_streamice(i,j,bi,bj)+
231     & H_streamice(i,j-1,bi,bj)) *
232     & (surf_el_streamice(i,j,bi,bj)-
233     & surf_el_streamice(i,j-1,bi,bj))
234    
235     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
236     & streamice_density * gravity *
237     & streamice_bg_surf_slope_y * .25 * rA(i,j,bi,bj) *
238     & (H_streamice(i,j-1,bi,bj) + H_streamice(i,j,bi,bj))
239    
240     ELSE IF (streamice_hmask(i,j-1,bi,bj).eq.1.0) THEN
241    
242     IF (float_frac_streamice(i,j-1,bi,bj) .eq. 1.0) THEN
243    
244     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) +
245     & 0.25 * dxG(i,j,bi,bj) *
246     & gravity *
247     & (streamice_density * H_streamice(i,j-1,bi,bj)**2 -
248     #ifdef USE_ALT_RLOW
249     & streamice_density_ocean_avg * R_low_si(i,j-1,bi,bj)**2)
250     #else
251     & streamice_density_ocean_avg * R_low(i,j-1,bi,bj)**2)
252     #endif
253 dgoldberg 1.3
254 heimbach 1.1 ELSE
255 dgoldberg 1.3
256 dgoldberg 1.6 taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) +
257     & 0.25 * dxG(i,j,bi,bj) *
258     & streamice_density * gravity *
259     & (1-streamice_density/streamice_density_ocean_avg) *
260     & H_streamice(i,j-1,bi,bj)**2
261 dgoldberg 1.3
262 heimbach 1.1 ENDIF
263 dgoldberg 1.3
264 dgoldberg 1.6 ELSE IF (streamice_hmask(i,j,bi,bj).eq.1.0) THEN
265 dgoldberg 1.3
266 dgoldberg 1.6 IF (float_frac_streamice(i,j,bi,bj) .eq. 1.0) THEN
267 dgoldberg 1.3
268 dgoldberg 1.6 taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
269     & 0.25 * dxG(i,j,bi,bj) *
270     & gravity *
271     & (streamice_density * H_streamice(i,j,bi,bj)**2 -
272     #ifdef USE_ALT_RLOW
273     & streamice_density_ocean_avg * R_low_si(i,j,bi,bj)**2)
274     #else
275     & streamice_density_ocean_avg * R_low(i,j,bi,bj)**2)
276     #endif
277 dgoldberg 1.3
278 heimbach 1.1 ELSE
279 dgoldberg 1.3
280 dgoldberg 1.6 taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
281     & 0.25 * dxG(i,j,bi,bj) *
282     & streamice_density * gravity *
283     & (1-streamice_density/streamice_density_ocean_avg) *
284     & H_streamice(i,j,bi,bj)**2
285    
286     END IF
287     END IF
288    
289     ! cells to left
290    
291     IF (streamice_hmask(i-1,j-1,bi,bj).eq.1.0.AND.
292     & streamice_hmask(i-1,j,bi,bj).eq.1.0) THEN
293    
294     ! geom_fac = sqrt(rA(i-1,j-1,bi,bj)*recip_rA(i-1,j,bi,bj)*
295     ! & dxF(i-1,j,bi,bj)*recip_dxF(i-1,j-1,bi,bj))
296    
297     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
298     & 0.25 * dxG(i-1,j,bi,bj) *
299     & streamice_density * gravity *
300     & (H_streamice(i-1,j,bi,bj)+
301     & H_streamice(i-1,j-1,bi,bj)) *
302     & (surf_el_streamice(i-1,j,bi,bj)-
303     & surf_el_streamice(i-1,j-1,bi,bj))
304    
305     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
306     & streamice_density * gravity *
307     & streamice_bg_surf_slope_y * .25 * rA(i-1,j,bi,bj) *
308     & (H_streamice(i-1,j-1,bi,bj) + H_streamice(i-1,j,bi,bj))
309    
310    
311     ELSE IF (streamice_hmask(i-1,j-1,bi,bj).eq.1.0) THEN
312    
313     IF (float_frac_streamice(i-1,j-1,bi,bj) .eq. 1.0) THEN
314    
315     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) +
316     & 0.25 * dxG(i-1,j,bi,bj) *
317     & gravity *
318     & (streamice_density * H_streamice(i-1,j-1,bi,bj)**2 -
319     #ifdef USE_ALT_RLOW
320     & streamice_density_ocean_avg*R_low_si(i-1,j-1,bi,bj)**2)
321     #else
322     & streamice_density_ocean_avg * R_low(i-1,j-1,bi,bj)**2)
323     #endif
324 dgoldberg 1.3
325 heimbach 1.1 ELSE
326 dgoldberg 1.3
327 dgoldberg 1.6 taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) +
328     & 0.25 * dxG(i-1,j,bi,bj) *
329     & streamice_density * gravity *
330     & (1-streamice_density/streamice_density_ocean_avg) *
331     & H_streamice(i-1,j-1,bi,bj)**2
332 heimbach 1.1
333 dgoldberg 1.6 ENDIF
334 heimbach 1.1
335 dgoldberg 1.6 ELSE IF (streamice_hmask(i-1,j,bi,bj).eq.1.0) THEN
336 heimbach 1.1
337 dgoldberg 1.6 IF (float_frac_streamice(i-1,j,bi,bj) .eq. 1.0) THEN
338 heimbach 1.1
339 dgoldberg 1.6 taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
340     & 0.25 * dxG(i-1,j,bi,bj) *
341     & gravity *
342     & (streamice_density * H_streamice(i-1,j,bi,bj)**2 -
343 dgoldberg 1.3 #ifdef USE_ALT_RLOW
344 dgoldberg 1.6 & streamice_density_ocean_avg * R_low_si(i-1,j,bi,bj)**2)
345     #else
346     & streamice_density_ocean_avg * R_low(i-1,j,bi,bj)**2)
347 dgoldberg 1.3 #endif
348 heimbach 1.1
349 dgoldberg 1.6 ELSE
350    
351     taudy_si(i,j,bi,bj) = taudy_si(i,j,bi,bj) -
352     & 0.25 * dxG(i-1,j,bi,bj) *
353     & streamice_density * gravity *
354     & (1-streamice_density/streamice_density_ocean_avg) *
355     & H_streamice(i-1,j,bi,bj)**2
356    
357     END IF
358     END IF
359     END IF ! if vmask ==1
360    
361 heimbach 1.1 ENDDO
362     ENDDO
363     ENDDO
364     ENDDO
365    
366 dgoldberg 1.6 ! taudx_SI (1,1,1,1) = taudx_SI (1,1,1,1) +
367     ! & streamice_v_normal_pert (1,1,1,1)
368    
369 heimbach 1.1
370    
371     #endif
372     RETURN
373     END
374    
375    

  ViewVC Help
Powered by ViewVC 1.1.22