/[MITgcm]/MITgcm/pkg/streamice/streamice_cg_functions.F
ViewVC logotype

Contents of /MITgcm/pkg/streamice/streamice_cg_functions.F

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


Revision 1.3 - (show annotations) (download)
Tue Sep 29 15:56:27 2015 UTC (8 years, 7 months ago) by dgoldberg
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, HEAD
Changes since 1.2: +99 -49 lines
do away with intermediate vars "colx", "coly", etc to reduce IT+ tape for openad

1 C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_cg_functions.F,v 1.2 2013/08/24 20:35:17 dgoldberg Exp $
2 C $Name: $
3
4 #include "STREAMICE_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7
8 CBOP
9 SUBROUTINE STREAMICE_CG_ACTION( myThid,
10 O uret,
11 O vret,
12 I u,
13 I v,
14 I is, ie, js, je )
15 C /============================================================\
16 C | SUBROUTINE |
17 C | o |
18 C |============================================================|
19 C | |
20 C \============================================================/
21 IMPLICIT NONE
22
23 C === Global variables ===
24 #include "SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "GRID.h"
28 #include "STREAMICE.h"
29 #include "STREAMICE_CG.h"
30
31 C !INPUT/OUTPUT ARGUMENTS
32 C uret, vret - result of matrix operating on u, v
33 C is, ie, js, je - starting and ending cells
34 INTEGER myThid
35 _RL uret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
36 _RL vret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
37 _RL u (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
38 _RL v (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
39 INTEGER is, ie, js, je
40
41 #ifdef ALLOW_STREAMICE
42
43 C the linear action of the matrix on (u,v) with triangular finite elements
44 C as of now everything is passed in so no grid pointers or anything of the sort have to be dereferenced,
45 C but this may change pursuant to conversations with others
46 C
47 C is & ie are the cells over which the iteration is done; this may change between calls to this subroutine
48 C in order to make less frequent halo updates
49 C isym = 1 if grid is symmetric, 0 o.w.
50
51 C the linear action of the matrix on (u,v) with triangular finite elements
52 C Phi has the form
53 C Phi (i,j,k,q) - applies to cell i,j
54
55 C 3 - 4
56 C | |
57 C 1 - 2
58
59 C Phi (i,j,2*k-1,q) gives d(Phi_k)/dx at quadrature point q
60 C Phi (i,j,2*k,q) gives d(Phi_k)/dy at quadrature point q
61 C Phi_k is equal to 1 at vertex k, and 0 at vertex l .ne. k, and bilinear
62
63 C !LOCAL VARIABLES:
64 C == Local variables ==
65 INTEGER iq, jq, inode, jnode, i, j, bi, bj, ilq, jlq, m, n,Gi,Gj
66 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy
67 _RL Ucell (2,2)
68 _RL Vcell (2,2)
69 _RL Hcell (2,2)
70 _RL phival(2,2)
71
72 uret(1,1,1,1) = uret(1,1,1,1)
73 vret(1,1,1,1) = vret(1,1,1,1)
74
75 DO j = js, je
76 DO i = is, ie
77 DO bj = myByLo(myThid), myByHi(myThid)
78 DO bi = myBxLo(myThid), myBxHi(myThid)
79
80 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
81 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
82
83 IF (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) THEN
84 DO iq = 1,2
85 DO jq = 1,2
86
87 n = 2*(jq-1)+iq
88
89
90 uq = u(i,j,bi,bj) * Xquad(3-iq) * Xquad(3-jq) +
91 & u(i+1,j,bi,bj) * Xquad(iq) * Xquad(3-jq) +
92 & u(i,j+1,bi,bj) * Xquad(3-iq) * Xquad(jq) +
93 & u(i+1,j+1,bi,bj) * Xquad(iq) * Xquad(jq)
94 vq = v(i,j,bi,bj) * Xquad(3-iq) * Xquad(3-jq) +
95 & v(i+1,j,bi,bj) * Xquad(iq) * Xquad(3-jq) +
96 & v(i,j+1,bi,bj) * Xquad(3-iq) * Xquad(jq) +
97 & v(i+1,j+1,bi,bj) * Xquad(iq) * Xquad(jq)
98 ux = u(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
99 & u(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
100 & u(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
101 & u(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
102 uy = u(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
103 & u(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
104 & u(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
105 & u(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
106 vx = v(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
107 & v(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
108 & v(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
109 & v(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
110 vy = v(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
111 & v(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
112 & v(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
113 & v(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
114 exx = ux + k1AtC_str(i,j,bi,bj)*vq
115 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
116 exy = .5*(uy+vx) +
117 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
118
119 do inode = 1,2
120 do jnode = 1,2
121
122 m = 2*(jnode-1)+inode
123 ilq = 1
124 jlq = 1
125 if (inode.eq.iq) ilq = 2
126 if (jnode.eq.jq) jlq = 2
127 phival(inode,jnode) = Xquad(ilq)*Xquad(jlq)
128
129 if (STREAMICE_umask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
130
131 uret(i-1+inode,j-1+jnode,bi,bj) =
132 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
133 & grid_jacq_streamice(i,j,bi,bj,n) *
134 & visc_streamice(i,j,bi,bj) * (
135 & DPhi(i,j,bi,bj,m,n,1)*(4*exx+2*eyy) +
136 & DPhi(i,j,bi,bj,m,n,2)*(2*exy))
137
138
139 uret(i-1+inode,j-1+jnode,bi,bj) =
140 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
141 & grid_jacq_streamice(i,j,bi,bj,n) *
142 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
143 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*exx+
144 & 4*0.5*k1AtC_str(i,j,bi,bj)*exy)
145
146
147 uret(i-1+inode,j-1+jnode,bi,bj) =
148 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
149 & phival(inode,jnode) *
150 & grid_jacq_streamice(i,j,bi,bj,n) *
151 & tau_beta_eff_streamice (i,j,bi,bj) * uq
152
153
154 endif
155
156 if (STREAMICE_vmask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
157 vret(i-1+inode,j-1+jnode,bi,bj) =
158 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
159 & grid_jacq_streamice(i,j,bi,bj,n) *
160 & visc_streamice(i,j,bi,bj) * (
161 & DPhi(i,j,bi,bj,m,n,2)*(4*eyy+2*exx) +
162 & DPhi(i,j,bi,bj,m,n,1)*(2*exy))
163 vret(i-1+inode,j-1+jnode,bi,bj) =
164 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
165 & grid_jacq_streamice(i,j,bi,bj,n) *
166 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
167 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*eyy+
168 & 4*0.5*k2AtC_str(i,j,bi,bj)*exy)
169 vret(i-1+inode,j-1+jnode,bi,bj) =
170 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
171 & phival(inode,jnode) *
172 & grid_jacq_streamice(i,j,bi,bj,n) *
173 & tau_beta_eff_streamice (i,j,bi,bj) * vq
174
175 endif
176 enddo
177 enddo
178
179 enddo
180 enddo
181 c-- STREAMICE_hmask
182 endif
183
184 enddo
185 enddo
186 enddo
187 enddo
188
189 #endif
190 RETURN
191 END SUBROUTINE
192
193 SUBROUTINE STREAMICE_CG_MAKE_A( myThid )
194 C /============================================================\
195 C | SUBROUTINE |
196 C | o |
197 C |============================================================|
198 C | |
199 C \============================================================/
200 IMPLICIT NONE
201
202 C === Global variables ===
203 #include "SIZE.h"
204 #include "EEPARAMS.h"
205 #include "PARAMS.h"
206 #include "GRID.h"
207 #include "STREAMICE.h"
208 #include "STREAMICE_CG.h"
209
210 C !INPUT/OUTPUT ARGUMENTS
211 C uret, vret - result of matrix operating on u, v
212 C is, ie, js, je - starting and ending cells
213 INTEGER myThid
214
215 #ifdef ALLOW_STREAMICE
216
217 #ifdef STREAMICE_CONSTRUCT_MATRIX
218
219 C the linear action of the matrix on (u,v) with triangular finite elements
220 C as of now everything is passed in so no grid pointers or anything of the sort have to be dereferenced,
221 C but this may change pursuant to conversations with others
222 C
223 C is & ie are the cells over which the iteration is done; this may change between calls to this subroutine
224 C in order to make less frequent halo updates
225 C isym = 1 if grid is symmetric, 0 o.w.
226
227 C the linear action of the matrix on (u,v) with triangular finite elements
228 C Phi has the form
229 C Phi (i,j,k,q) - applies to cell i,j
230
231 C 3 - 4
232 C | |
233 C 1 - 2
234
235 C Phi (i,j,2*k-1,q) gives d(Phi_k)/dx at quadrature point q
236 C Phi (i,j,2*k,q) gives d(Phi_k)/dy at quadrature point q
237 C Phi_k is equal to 1 at vertex k, and 0 at vertex l .ne. k, and bilinear
238
239 C !LOCAL VARIABLES:
240 C == Local variables ==
241 INTEGER iq, jq, inodx, inody, i, j, bi, bj, ilqx, ilqy, m_i, n
242 INTEGER jlqx, jlqy, jnodx,jnody, m_j, col_y, col_x, cg_halo, k
243 INTEGER colx_rev, coly_rev
244 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy, tmpval
245 _RL phival(2,2)
246
247 ! do i=1,3
248 ! do j=0,2
249 ! col_index_a = i + j*3
250 ! enddo
251 ! enddo
252
253 cg_halo = min(OLx-1,OLy-1)
254
255 DO j = 1-cg_halo, sNy+cg_halo
256 DO i = 1-cg_halo, sNx+cg_halo
257 DO bj = myByLo(myThid), myByHi(myThid)
258 DO bi = myBxLo(myThid), myBxHi(myThid)
259 cc DO k=1,4
260 DO col_x=-1,1
261 DO col_y=-1,1
262 streamice_cg_A1(i,j,bi,bj,col_x,col_y)=0.0
263 streamice_cg_A2(i,j,bi,bj,col_x,col_y)=0.0
264 streamice_cg_A3(i,j,bi,bj,col_x,col_y)=0.0
265 streamice_cg_A4(i,j,bi,bj,col_x,col_y)=0.0
266 ENDDO
267 ENDDO
268 cc ENDDO
269 ENDDO
270 ENDDO
271 ENDDO
272 ENDDO
273
274 c$openad xxx simple loop
275 DO j = 1-cg_halo, sNy+cg_halo
276 DO i = 1-cg_halo, sNx+cg_halo
277 DO bj = myByLo(myThid), myByHi(myThid)
278 DO bi = myBxLo(myThid), myBxHi(myThid)
279 IF (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) THEN
280 DO iq=1,2
281 DO jq = 1,2
282
283 n = 2*(jq-1)+iq
284
285 DO inodx = 1,2
286 DO inody = 1,2
287
288 if (STREAMICE_umask(i-1+inodx,j-1+inody,bi,bj)
289 & .eq.1.0 .or.
290 & streamice_vmask(i-1+inodx,j-1+inody,bi,bj).eq.1.0)
291 & then
292
293 m_i = 2*(inody-1)+inodx
294 ilqx = 1
295 ilqy = 1
296
297 if (inodx.eq.iq) ilqx = 2
298 if (inody.eq.jq) ilqy = 2
299 phival(inodx,inody) = Xquad(ilqx)*Xquad(ilqy)
300
301 DO jnodx = 1,2
302 DO jnody = 1,2
303 if (STREAMICE_umask(i-1+jnodx,j-1+jnody,bi,bj)
304 & .eq.1.0 .or.
305 & STREAMICE_vmask(i-1+jnodx,j-1+jnody,bi,bj).eq.1.0)
306 & then
307
308 m_j = 2*(jnody-1)+jnodx
309 ilqx = 1
310 ilqy = 1
311 if (jnodx.eq.iq) ilqx = 2
312 if (jnody.eq.jq) ilqy = 2
313
314 ! col_j = col_index_a (
315 ! & jnodx+mod(inodx,2),
316 ! & jnody+mod(inody,2) )
317
318 col_x = mod(inodx,2)+jnodx-2
319 colx_rev = mod(jnodx,2)+inodx-2
320 col_y = mod(inody,2)+jnody-2
321 coly_rev = mod(jnody,2)+inody-2
322 c
323
324
325 IF ( (inodx.eq.jnodx .and. inody.eq.jnody) .or.
326 & (inodx.eq.1 .and. inody.eq.1) .or.
327 & (jnody.eq.2 .and. inody.eq.1) .or.
328 & (jnody.eq.2 .and. jnodx.eq.2)) THEN
329
330
331
332 ux = DPhi (i,j,bi,bj,m_j,n,1)
333 uy = DPhi (i,j,bi,bj,m_j,n,2)
334 vx = 0
335 vy = 0
336 uq = Xquad(ilqx) * Xquad(ilqy)
337 vq = 0
338
339 exx = ux + k1AtC_str(i,j,bi,bj)*vq
340 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
341 exy = .5*(uy+vx) +
342 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
343
344 tmpval = .25 *
345 & grid_jacq_streamice(i,j,bi,bj,n) *
346 & visc_streamice(i,j,bi,bj) * (
347 & DPhi(i,j,bi,bj,m_i,n,1)*(4*exx+2*eyy) +
348 & DPhi(i,j,bi,bj,m_i,n,2)*(2*exy))
349
350 streamice_cg_A1
351 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
352 & mod(inody,2)+jnody-2)=
353 & streamice_cg_A1
354 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
355 & mod(inody,2)+jnody-2)+tmpval
356
357 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
358 streamice_cg_A1
359 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
360 & mod(jnody,2)+inody-2)=
361 & streamice_cg_A1
362 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
363 & mod(jnody,2)+inody-2)+
364 & tmpval
365 ENDIF
366
367 !!!
368
369 tmpval = .25 *
370 & grid_jacq_streamice(i,j,bi,bj,n) *
371 & visc_streamice(i,j,bi,bj) * (
372 & DPhi(i,j,bi,bj,m_i,n,2)*(4*eyy+2*exx) +
373 & DPhi(i,j,bi,bj,m_i,n,1)*(2*exy))
374
375 streamice_cg_A3
376 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
377 & mod(inody,2)+jnody-2)=
378 & streamice_cg_A3
379 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
380 & mod(inody,2)+jnody-2)+tmpval
381
382 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
383 streamice_cg_A2
384 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
385 & mod(jnody,2)+inody-2)=
386 & streamice_cg_A2
387 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
388 & mod(jnody,2)+inody-2)+
389 & tmpval
390 ENDIF
391
392 !!!
393
394 tmpval = .25 *
395 & grid_jacq_streamice(i,j,bi,bj,n) *
396 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
397 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*
398 & exx+4*0.5*k1AtC_str(i,j,bi,bj)*exy)
399
400 streamice_cg_A1
401 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
402 & mod(inody,2)+jnody-2)=
403 & streamice_cg_A1
404 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
405 & mod(inody,2)+jnody-2)+tmpval
406
407 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
408 streamice_cg_A1
409 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
410 & mod(jnody,2)+inody-2)=
411 & streamice_cg_A1
412 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
413 & mod(jnody,2)+inody-2)+
414 & tmpval
415 ENDIF
416
417 !!!
418
419 tmpval = .25 *
420 & grid_jacq_streamice(i,j,bi,bj,n) *
421 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
422 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*
423 & eyy+4*0.5*k2AtC_str(i,j,bi,bj)*exy)
424
425 streamice_cg_A3
426 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
427 & mod(inody,2)+jnody-2)=
428 & streamice_cg_A3
429 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
430 & mod(inody,2)+jnody-2)+tmpval
431
432 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
433 streamice_cg_A2
434 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
435 & mod(jnody,2)+inody-2)=
436 & streamice_cg_A2
437 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
438 & mod(jnody,2)+inody-2)+
439 & tmpval
440 ENDIF
441
442
443 !!!
444
445 tmpval = .25*phival(inodx,inody) *
446 & grid_jacq_streamice(i,j,bi,bj,n) *
447 & tau_beta_eff_streamice (i,j,bi,bj) * uq
448
449 streamice_cg_A1
450 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
451 & mod(inody,2)+jnody-2)=
452 & streamice_cg_A1
453 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
454 & mod(inody,2)+jnody-2)+tmpval
455
456 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
457 streamice_cg_A1
458 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
459 & mod(jnody,2)+inody-2)=
460 & streamice_cg_A1
461 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
462 & mod(jnody,2)+inody-2)+
463 & tmpval
464 ENDIF
465
466
467 !!!
468 tmpval = .25*phival(inodx,inody) *
469 & grid_jacq_streamice(i,j,bi,bj,n) *
470 & tau_beta_eff_streamice (i,j,bi,bj) * vq
471
472 streamice_cg_A3
473 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
474 & mod(inody,2)+jnody-2)=
475 & streamice_cg_A3
476 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
477 & mod(inody,2)+jnody-2)+tmpval
478
479 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
480 streamice_cg_A2
481 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
482 & mod(jnody,2)+inody-2)=
483 & streamice_cg_A2
484 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
485 & mod(jnody,2)+inody-2)+
486 & tmpval
487 ENDIF
488
489
490
491 !!!
492
493 vx = DPhi (i,j,bi,bj,m_j,n,1)
494 vy = DPhi (i,j,bi,bj,m_j,n,2)
495 ux = 0
496 uy = 0
497 vq = Xquad(ilqx) * Xquad(ilqy)
498 uq = 0
499
500 exx = ux + k1AtC_str(i,j,bi,bj)*vq
501 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
502 exy = .5*(uy+vx) +
503 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
504
505 tmpval = .25 *
506 & grid_jacq_streamice(i,j,bi,bj,n) *
507 & visc_streamice(i,j,bi,bj) * (
508 & DPhi(i,j,bi,bj,m_i,n,1)*(4*exx+2*eyy) +
509 & DPhi(i,j,bi,bj,m_i,n,2)*(2*exy))
510
511 streamice_cg_A2
512 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
513 & mod(inody,2)+jnody-2)=
514 & streamice_cg_A2
515 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
516 & mod(inody,2)+jnody-2)+tmpval
517
518 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
519 streamice_cg_A3
520 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
521 & mod(jnody,2)+inody-2)=
522 & streamice_cg_A3
523 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
524 & mod(jnody,2)+inody-2)+
525 & tmpval
526 ENDIF
527
528
529 tmpval = .25 *
530 & grid_jacq_streamice(i,j,bi,bj,n) *
531 & visc_streamice(i,j,bi,bj) * (
532 & DPhi(i,j,bi,bj,m_i,n,2)*(4*eyy+2*exx) +
533 & DPhi(i,j,bi,bj,m_i,n,1)*(2*exy))
534
535 streamice_cg_A4
536 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
537 & mod(inody,2)+jnody-2)=
538 & streamice_cg_A4
539 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
540 & mod(inody,2)+jnody-2)+tmpval
541
542 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
543 streamice_cg_A4
544 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
545 & mod(jnody,2)+inody-2)=
546 & streamice_cg_A4
547 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
548 & mod(jnody,2)+inody-2)+
549 & tmpval
550 ENDIF
551
552
553 tmpval = .25 *
554 & grid_jacq_streamice(i,j,bi,bj,n) *
555 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
556 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*
557 & exx+4*0.5*k1AtC_str(i,j,bi,bj)*exy)
558
559 streamice_cg_A2
560 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
561 & mod(inody,2)+jnody-2)=
562 & streamice_cg_A2
563 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
564 & mod(inody,2)+jnody-2)+tmpval
565
566 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
567 streamice_cg_A3
568 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
569 & mod(jnody,2)+inody-2)=
570 & streamice_cg_A3
571 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
572 & mod(jnody,2)+inody-2)+
573 & tmpval
574 ENDIF
575
576
577 tmpval = .25 *
578 & grid_jacq_streamice(i,j,bi,bj,n) *
579 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
580 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*
581 & eyy+4*0.5*k2AtC_str(i,j,bi,bj)*exy)
582
583 streamice_cg_A4
584 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
585 & mod(inody,2)+jnody-2)=
586 & streamice_cg_A4
587 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
588 & mod(inody,2)+jnody-2)+tmpval
589
590 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
591 streamice_cg_A4
592 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
593 & mod(jnody,2)+inody-2)=
594 & streamice_cg_A4
595 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
596 & mod(jnody,2)+inody-2)+
597 & tmpval
598 ENDIF
599
600
601 tmpval = .25*phival(inodx,inody) *
602 & grid_jacq_streamice(i,j,bi,bj,n) *
603 & tau_beta_eff_streamice (i,j,bi,bj) * uq
604
605 streamice_cg_A2
606 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
607 & mod(inody,2)+jnody-2)=
608 & streamice_cg_A2
609 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
610 & mod(inody,2)+jnody-2)+tmpval
611
612 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
613 streamice_cg_A3
614 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
615 & mod(jnody,2)+inody-2)=
616 & streamice_cg_A3
617 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
618 & mod(jnody,2)+inody-2)+
619 & tmpval
620 ENDIF
621
622
623 tmpval = .25*phival(inodx,inody) *
624 & grid_jacq_streamice(i,j,bi,bj,n) *
625 & tau_beta_eff_streamice (i,j,bi,bj) * vq
626
627 streamice_cg_A4
628 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
629 & mod(inody,2)+jnody-2)=
630 & streamice_cg_A4
631 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
632 & mod(inody,2)+jnody-2)+tmpval
633
634 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
635 streamice_cg_A4
636 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
637 & mod(jnody,2)+inody-2)=
638 & streamice_cg_A4
639 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
640 & mod(jnody,2)+inody-2)+
641 & tmpval
642 ENDIF
643
644
645 endif
646 endif
647 enddo
648 enddo
649 endif
650 enddo
651 enddo
652 enddo
653 enddo
654 endif
655 enddo
656 enddo
657 enddo
658 enddo
659
660
661
662 #endif
663 #endif
664 RETURN
665 END SUBROUTINE
666 ! END MAKE_A
667
668 SUBROUTINE STREAMICE_CG_ADIAG( myThid,
669 O uret,
670 O vret)
671
672 C /============================================================\
673 C | SUBROUTINE |
674 C | o |
675 C |============================================================|
676 C | |
677 C \============================================================/
678 IMPLICIT NONE
679
680 C === Global variables ===
681 #include "SIZE.h"
682 #include "EEPARAMS.h"
683 #include "PARAMS.h"
684 #include "GRID.h"
685 #include "STREAMICE.h"
686 #include "STREAMICE_CG.h"
687
688 C !INPUT/OUTPUT ARGUMENTS
689 C uret, vret - result of matrix operating on u, v
690 C is, ie, js, je - starting and ending cells
691 INTEGER myThid
692 _RL uret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
693 _RL vret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
694
695
696 #ifdef ALLOW_STREAMICE
697
698 C the linear action of the matrix on (u,v) with triangular finite elements
699 C as of now everything is passed in so no grid pointers or anything of the sort have to be dereferenced,
700 C but this may change pursuant to conversations with others
701 C
702 C is & ie are the cells over which the iteration is done; this may change between calls to this subroutine
703 C in order to make less frequent halo updates
704 C isym = 1 if grid is symmetric, 0 o.w.
705
706 C the linear action of the matrix on (u,v) with triangular finite elements
707 C Phi has the form
708 C Phi (i,j,k,q) - applies to cell i,j
709
710 C 3 - 4
711 C | |
712 C 1 - 2
713
714 C Phi (i,j,2*k-1,q) gives d(Phi_k)/dx at quadrature point q
715 C Phi (i,j,2*k,q) gives d(Phi_k)/dy at quadrature point q
716 C Phi_k is equal to 1 at vertex k, and 0 at vertex l .ne. k, and bilinear
717
718 C !LOCAL VARIABLES:
719 C == Local variables ==
720 INTEGER iq, jq, inode, jnode, i, j, bi, bj, ilq, jlq, m, n
721 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy
722 _RL Ucell (2,2)
723 _RL Vcell (2,2)
724 _RL Hcell (2,2)
725 _RL phival(2,2)
726
727 uret(1,1,1,1) = uret(1,1,1,1)
728 vret(1,1,1,1) = vret(1,1,1,1)
729
730 DO j = 0, sNy+1
731 DO i = 0, sNx+1
732 DO bj = myByLo(myThid), myByHi(myThid)
733 DO bi = myBxLo(myThid), myBxHi(myThid)
734 IF (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) THEN
735 DO iq=1,2
736 DO jq = 1,2
737
738 n = 2*(jq-1)+iq
739
740 DO inode = 1,2
741 DO jnode = 1,2
742
743 m = 2*(jnode-1)+inode
744
745 if (STREAMICE_umask(i-1+inode,j-1+jnode,bi,bj).eq.1.0 .or.
746 & STREAMICE_vmask(i-1+inode,j-1+jnode,bi,bj).eq.1.0)
747 & then
748
749 ilq = 1
750 jlq = 1
751
752 if (inode.eq.iq) ilq = 2
753 if (jnode.eq.jq) jlq = 2
754 phival(inode,jnode) = Xquad(ilq)*Xquad(jlq)
755
756 ux = DPhi (i,j,bi,bj,m,n,1)
757 uy = DPhi (i,j,bi,bj,m,n,2)
758 vx = 0
759 vy = 0
760 uq = Xquad(ilq) * Xquad(jlq)
761 vq = 0
762
763 exx = ux + k1AtC_str(i,j,bi,bj)*vq
764 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
765 exy = .5*(uy+vx) +
766 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
767
768 uret(i-1+inode,j-1+jnode,bi,bj) =
769 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
770 & grid_jacq_streamice(i,j,bi,bj,n) *
771 & visc_streamice(i,j,bi,bj) * (
772 & DPhi(i,j,bi,bj,m,n,1)*(4*exx+2*eyy) +
773 & DPhi(i,j,bi,bj,m,n,2)*(2*exy))
774
775 uret(i-1+inode,j-1+jnode,bi,bj) =
776 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
777 & grid_jacq_streamice(i,j,bi,bj,n) *
778 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
779 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*exx+
780 & 4*0.5*k1AtC_str(i,j,bi,bj)*exy)
781
782
783 uret(i-1+inode,j-1+jnode,bi,bj) =
784 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
785 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
786 & tau_beta_eff_streamice (i,j,bi,bj) * uq
787
788
789 vx = DPhi (i,j,bi,bj,m,n,1)
790 vy = DPhi (i,j,bi,bj,m,n,2)
791 ux = 0
792 uy = 0
793 vq = Xquad(ilq) * Xquad(jlq)
794 uq = 0
795
796 exx = ux + k1AtC_str(i,j,bi,bj)*vq
797 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
798 exy = .5*(uy+vx) +
799 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
800
801 vret(i-1+inode,j-1+jnode,bi,bj) =
802 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
803 & grid_jacq_streamice(i,j,bi,bj,n) *
804 & visc_streamice(i,j,bi,bj) * (
805 & DPhi(i,j,bi,bj,m,n,2)*(4*eyy+2*exx) +
806 & DPhi(i,j,bi,bj,m,n,1)*(2*exy))
807 vret(i-1+inode,j-1+jnode,bi,bj) =
808 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
809 & grid_jacq_streamice(i,j,bi,bj,n) *
810 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
811 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*eyy+
812 & 4*0.5*k2AtC_str(i,j,bi,bj)*exy)
813
814
815 vret(i-1+inode,j-1+jnode,bi,bj) =
816 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
817 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
818 & tau_beta_eff_streamice (i,j,bi,bj) * vq
819
820 endif
821
822 enddo
823 enddo
824 enddo
825 enddo
826 endif
827 enddo
828 enddo
829 enddo
830 enddo
831
832 #endif
833 RETURN
834 END SUBROUTINE
835
836
837
838 SUBROUTINE STREAMICE_CG_BOUND_VALS( myThid,
839 O uret,
840 O vret)
841 C /============================================================\
842 C | SUBROUTINE |
843 C | o |
844 C |============================================================|
845 C | |
846 C \============================================================/
847 IMPLICIT NONE
848
849 C === Global variables ===
850 #include "SIZE.h"
851 #include "EEPARAMS.h"
852 #include "PARAMS.h"
853 #include "GRID.h"
854 #include "STREAMICE.h"
855 #include "STREAMICE_CG.h"
856
857 C !INPUT/OUTPUT ARGUMENTS
858 C uret, vret - result of matrix operating on u, v
859 C is, ie, js, je - starting and ending cells
860 INTEGER myThid
861 _RL uret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
862 _RL vret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
863
864 #ifdef ALLOW_STREAMICE
865
866 C the linear action of the matrix on (u,v) with triangular finite elements
867 C as of now everything is passed in so no grid pointers or anything of the sort have to be dereferenced,
868 C but this may change pursuant to conversations with others
869 C
870 C is & ie are the cells over which the iteration is done; this may change between calls to this subroutine
871 C in order to make less frequent halo updates
872 C isym = 1 if grid is symmetric, 0 o.w.
873
874 C the linear action of the matrix on (u,v) with triangular finite elements
875 C Phi has the form
876 C Phi (i,j,k,q) - applies to cell i,j
877
878 C 3 - 4
879 C | |
880 C 1 - 2
881
882 C Phi (i,j,2*k-1,q) gives d(Phi_k)/dx at quadrature point q
883 C Phi (i,j,2*k,q) gives d(Phi_k)/dy at quadrature point q
884 C Phi_k is equal to 1 at vertex k, and 0 at vertex l .ne. k, and bilinear
885
886 C !LOCAL VARIABLES:
887 C == Local variables ==
888 INTEGER iq, jq, inode, jnode, i, j, bi, bj, ilq, jlq, m, n
889 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy
890 _RL Ucell (2,2)
891 _RL Vcell (2,2)
892 _RL Hcell (2,2)
893 _RL phival(2,2)
894
895 uret(1,1,1,1) = uret(1,1,1,1)
896 vret(1,1,1,1) = vret(1,1,1,1)
897
898 DO j = 0, sNy+1
899 DO i = 0, sNx+1
900 DO bj = myByLo(myThid), myByHi(myThid)
901 DO bi = myBxLo(myThid), myBxHi(myThid)
902 IF ((STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) .AND.
903 & ((STREAMICE_umask(i,j,bi,bj).eq.3.0) .OR.
904 & (STREAMICE_umask(i,j+1,bi,bj).eq.3.0) .OR.
905 & (STREAMICE_umask(i+1,j,bi,bj).eq.3.0) .OR.
906 & (STREAMICE_umask(i+1,j+1,bi,bj).eq.3.0) .OR.
907 & (STREAMICE_vmask(i,j,bi,bj).eq.3.0) .OR.
908 & (STREAMICE_vmask(i,j+1,bi,bj).eq.3.0) .OR.
909 & (STREAMICE_vmask(i+1,j,bi,bj).eq.3.0) .OR.
910 & (STREAMICE_vmask(i+1,j+1,bi,bj).eq.3.0))) THEN
911
912 DO iq=1,2
913 DO jq = 1,2
914
915 n = 2*(jq-1)+iq
916
917 uq = u_bdry_values_SI(i,j,bi,bj)*Xquad(3-iq)*Xquad(3-jq)+
918 & u_bdry_values_SI(i+1,j,bi,bj)*Xquad(iq)*Xquad(3-jq)+
919 & u_bdry_values_SI(i,j+1,bi,bj)*Xquad(3-iq)*Xquad(jq)+
920 & u_bdry_values_SI(i+1,j+1,bi,bj)*Xquad(iq)*Xquad(jq)
921 vq = v_bdry_values_SI(i,j,bi,bj)*Xquad(3-iq)*Xquad(3-jq)+
922 & v_bdry_values_SI(i+1,j,bi,bj)*Xquad(iq)*Xquad(3-jq)+
923 & v_bdry_values_SI(i,j+1,bi,bj)*Xquad(3-iq)*Xquad(jq)+
924 & v_bdry_values_SI(i+1,j+1,bi,bj)*Xquad(iq)*Xquad(jq)
925 ux = u_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
926 & u_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
927 & u_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
928 & u_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
929 uy = u_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
930 & u_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
931 & u_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
932 & u_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
933 vx = v_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
934 & v_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
935 & v_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
936 & v_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
937 vy = v_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
938 & v_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
939 & v_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
940 & v_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
941 exx = ux + k1AtC_str(i,j,bi,bj)*vq
942 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
943 exy = .5*(uy+vx) +
944 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
945
946
947 do inode = 1,2
948 do jnode = 1,2
949
950 m = 2*(jnode-1)+inode
951 ilq = 1
952 jlq = 1
953 if (inode.eq.iq) ilq = 2
954 if (jnode.eq.jq) jlq = 2
955 phival(inode,jnode) = Xquad(ilq)*Xquad(jlq)
956
957 if (STREAMICE_umask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
958
959
960 uret(i-1+inode,j-1+jnode,bi,bj) =
961 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
962 & grid_jacq_streamice(i,j,bi,bj,n) *
963 & visc_streamice(i,j,bi,bj) * (
964 & DPhi(i,j,bi,bj,m,n,1)*(4*exx+2*eyy) +
965 & DPhi(i,j,bi,bj,m,n,2)*(2*exy))
966
967
968 uret(i-1+inode,j-1+jnode,bi,bj) =
969 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
970 & grid_jacq_streamice(i,j,bi,bj,n) *
971 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
972 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*exx+
973 & 4*0.5*k1AtC_str(i,j,bi,bj)*exy)
974
975
976 ! if (STREAMICE_float_cond(i,j,bi,bj) .eq. 1) then
977 uret(i-1+inode,j-1+jnode,bi,bj) =
978 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
979 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
980 & tau_beta_eff_streamice (i,j,bi,bj) * uq
981
982
983 ! endif
984 endif
985 if (STREAMICE_vmask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
986 vret(i-1+inode,j-1+jnode,bi,bj) =
987 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
988 & grid_jacq_streamice(i,j,bi,bj,n) *
989 & visc_streamice(i,j,bi,bj) * (
990 & DPhi(i,j,bi,bj,m,n,2)*(4*eyy+2*exx) +
991 & DPhi(i,j,bi,bj,m,n,1)*(2*exy))
992 vret(i-1+inode,j-1+jnode,bi,bj) =
993 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
994 & grid_jacq_streamice(i,j,bi,bj,n) *
995 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
996 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*eyy+
997 & 4*0.5*k2AtC_str(i,j,bi,bj)*exy)
998 vret(i-1+inode,j-1+jnode,bi,bj) =
999 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
1000 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
1001 & tau_beta_eff_streamice (i,j,bi,bj) * vq
1002 endif
1003 enddo
1004 enddo
1005 enddo
1006 enddo
1007 endif
1008 enddo
1009 enddo
1010 enddo
1011 enddo
1012
1013 #endif
1014 RETURN
1015 END SUBROUTINE

  ViewVC Help
Powered by ViewVC 1.1.22