File indexing completed on 2023-09-21 05:10:48 UTC
view on githubraw file Latest commit 96b00645 on 2023-09-20 15:15:14 UTC
5ca83cd8f7 Dani*0001 #include "STREAMICE_OPTIONS.h"
0002
96b006450c dngo*0003
0004
0005
0006
0007
0008
0009
5ca83cd8f7 Dani*0010
0011
0012
96b006450c dngo*0013 SUBROUTINE STREAMICE_CG_ACTION( myThid,
0014 O uret,
0015 O vret,
0016 I u,
0017 I v,
5ca83cd8f7 Dani*0018 I is, ie, js, je )
0019
96b006450c dngo*0020
5ca83cd8f7 Dani*0021
0022
0023
0024
0025 IMPLICIT NONE
0026
0027
0028 #include "SIZE.h"
0029 #include "EEPARAMS.h"
0030 #include "PARAMS.h"
0031 #include "GRID.h"
96b006450c dngo*0032 #include "STREAMICE.h"
0033 #include "STREAMICE_CG.h"
5ca83cd8f7 Dani*0034
0035
0036
0037
0038 INTEGER myThid
0039 _RL uret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0040 _RL vret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0041 _RL u (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0042 _RL v (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0043 INTEGER is, ie, js, je
0044
0045 #ifdef ALLOW_STREAMICE
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
96b006450c dngo*0063
5ca83cd8f7 Dani*0064
0065
0066
0067
96b006450c dngo*0068
5ca83cd8f7 Dani*0069 INTEGER iq, jq, inode, jnode, i, j, bi, bj, ilq, jlq, m, n,Gi,Gj
0070 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy
0071 _RL phival(2,2)
0072
0073 uret(1,1,1,1) = uret(1,1,1,1)
0074 vret(1,1,1,1) = vret(1,1,1,1)
0075
0076 DO j = js, je
0077 DO i = is, ie
0078 DO bj = myByLo(myThid), myByHi(myThid)
0079 DO bi = myBxLo(myThid), myBxHi(myThid)
0080
0081 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
0082 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
0083
0084 IF (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) THEN
96b006450c dngo*0085 DO iq = 1,2
5ca83cd8f7 Dani*0086 DO jq = 1,2
0087
0088 n = 2*(jq-1)+iq
0089
96b006450c dngo*0090 uq = u(i,j,bi,bj) * Xquad(3-iq) * Xquad(3-jq) +
0091 & u(i+1,j,bi,bj) * Xquad(iq) * Xquad(3-jq) +
0092 & u(i,j+1,bi,bj) * Xquad(3-iq) * Xquad(jq) +
5ca83cd8f7 Dani*0093 & u(i+1,j+1,bi,bj) * Xquad(iq) * Xquad(jq)
96b006450c dngo*0094 vq = v(i,j,bi,bj) * Xquad(3-iq) * Xquad(3-jq) +
0095 & v(i+1,j,bi,bj) * Xquad(iq) * Xquad(3-jq) +
0096 & v(i,j+1,bi,bj) * Xquad(3-iq) * Xquad(jq) +
5ca83cd8f7 Dani*0097 & v(i+1,j+1,bi,bj) * Xquad(iq) * Xquad(jq)
96b006450c dngo*0098 ux = u(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
0099 & u(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
0100 & u(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
5ca83cd8f7 Dani*0101 & u(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
96b006450c dngo*0102 uy = u(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
0103 & u(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
0104 & u(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
5ca83cd8f7 Dani*0105 & u(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
96b006450c dngo*0106 vx = v(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
0107 & v(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
0108 & v(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
5ca83cd8f7 Dani*0109 & v(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
96b006450c dngo*0110 vy = v(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
0111 & v(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
0112 & v(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
5ca83cd8f7 Dani*0113 & v(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
0114 exx = ux + k1AtC_str(i,j,bi,bj)*vq
0115 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
96b006450c dngo*0116 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0117 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
0118
96b006450c dngo*0119 do inode = 1,2
5ca83cd8f7 Dani*0120 do jnode = 1,2
0121
0122 m = 2*(jnode-1)+inode
96b006450c dngo*0123 ilq = 1
5ca83cd8f7 Dani*0124 jlq = 1
0125 if (inode.eq.iq) ilq = 2
96b006450c dngo*0126 if (jnode.eq.jq) jlq = 2
5ca83cd8f7 Dani*0127 phival(inode,jnode) = Xquad(ilq)*Xquad(jlq)
0128
96b006450c dngo*0129 if (STREAMICE_umask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
5ca83cd8f7 Dani*0130
96b006450c dngo*0131 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0132 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0133 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0134 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0135 & DPhi(i,j,bi,bj,m,n,1)*(4*exx+2*eyy) +
5ca83cd8f7 Dani*0136 & DPhi(i,j,bi,bj,m,n,2)*(2*exy))
0137
96b006450c dngo*0138 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0139 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0140 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0141 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
0142 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*exx+
0143 & 4*0.5*k1AtC_str(i,j,bi,bj)*exy)
0144
96b006450c dngo*0145 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0146 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0147 & phival(inode,jnode) *
0148 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0149 & tau_beta_eff_streamice (i,j,bi,bj) * uq
0150
0151 endif
96b006450c dngo*0152
5ca83cd8f7 Dani*0153 if (STREAMICE_vmask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
96b006450c dngo*0154 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0155 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0156 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0157 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0158 & DPhi(i,j,bi,bj,m,n,2)*(4*eyy+2*exx) +
5ca83cd8f7 Dani*0159 & DPhi(i,j,bi,bj,m,n,1)*(2*exy))
96b006450c dngo*0160 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0161 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0162 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0163 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
0164 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*eyy+
0165 & 4*0.5*k2AtC_str(i,j,bi,bj)*exy)
96b006450c dngo*0166 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0167 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0168 & phival(inode,jnode) *
0169 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0170 & tau_beta_eff_streamice (i,j,bi,bj) * vq
96b006450c dngo*0171
5ca83cd8f7 Dani*0172 endif
96b006450c dngo*0173 enddo
5ca83cd8f7 Dani*0174 enddo
0175
96b006450c dngo*0176 enddo
5ca83cd8f7 Dani*0177 enddo
0178
0179 endif
0180
0181 enddo
0182 enddo
0183 enddo
0184 enddo
0185
0186 #endif
0187 RETURN
0188 END SUBROUTINE
0189
0190 SUBROUTINE STREAMICE_CG_MAKE_A( myThid )
0191
96b006450c dngo*0192
5ca83cd8f7 Dani*0193
0194
0195
0196
0197 IMPLICIT NONE
0198
0199
0200 #include "SIZE.h"
0201 #include "EEPARAMS.h"
0202 #include "PARAMS.h"
0203 #include "GRID.h"
96b006450c dngo*0204 #include "STREAMICE.h"
0205 #include "STREAMICE_CG.h"
5ca83cd8f7 Dani*0206
0207
0208
0209
0210 INTEGER myThid
0211
0212 #ifdef ALLOW_STREAMICE
0213
0214 #ifdef STREAMICE_CONSTRUCT_MATRIX
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
96b006450c dngo*0232
5ca83cd8f7 Dani*0233
0234
0235
0236
96b006450c dngo*0237
5ca83cd8f7 Dani*0238 INTEGER iq, jq, inodx, inody, i, j, bi, bj, ilqx, ilqy, m_i, n
96b006450c dngo*0239 INTEGER jnodx,jnody, m_j, col_y, col_x, cg_halo
ddf49ceb53 Dani*0240 INTEGER colx_rev, coly_rev
0241 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy, tmpval
5ca83cd8f7 Dani*0242 _RL phival(2,2)
0243
96b006450c dngo*0244
0245
0246
0247
0248
5ca83cd8f7 Dani*0249
0250 cg_halo = min(OLx-1,OLy-1)
0251
0252 DO j = 1-cg_halo, sNy+cg_halo
0253 DO i = 1-cg_halo, sNx+cg_halo
0254 DO bj = myByLo(myThid), myByHi(myThid)
0255 DO bi = myBxLo(myThid), myBxHi(myThid)
0256
0257 DO col_x=-1,1
0258 DO col_y=-1,1
0259 streamice_cg_A1(i,j,bi,bj,col_x,col_y)=0.0
0260 streamice_cg_A2(i,j,bi,bj,col_x,col_y)=0.0
0261 streamice_cg_A3(i,j,bi,bj,col_x,col_y)=0.0
0262 streamice_cg_A4(i,j,bi,bj,col_x,col_y)=0.0
0263 ENDDO
0264 ENDDO
0265
0266 ENDDO
0267 ENDDO
0268 ENDDO
0269 ENDDO
0270
28bae0294d Dani*0271
5ca83cd8f7 Dani*0272 DO j = 1-cg_halo, sNy+cg_halo
0273 DO i = 1-cg_halo, sNx+cg_halo
0274 DO bj = myByLo(myThid), myByHi(myThid)
0275 DO bi = myBxLo(myThid), myBxHi(myThid)
0276 IF (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) THEN
96b006450c dngo*0277 DO iq=1,2
5ca83cd8f7 Dani*0278 DO jq = 1,2
96b006450c dngo*0279
5ca83cd8f7 Dani*0280 n = 2*(jq-1)+iq
96b006450c dngo*0281
0282 DO inodx = 1,2
5ca83cd8f7 Dani*0283 DO inody = 1,2
0284
0285 if (STREAMICE_umask(i-1+inodx,j-1+inody,bi,bj)
96b006450c dngo*0286 & .eq.1.0 .or.
5ca83cd8f7 Dani*0287 & streamice_vmask(i-1+inodx,j-1+inody,bi,bj).eq.1.0)
96b006450c dngo*0288 & then
0289
5ca83cd8f7 Dani*0290 m_i = 2*(inody-1)+inodx
96b006450c dngo*0291 ilqx = 1
5ca83cd8f7 Dani*0292 ilqy = 1
96b006450c dngo*0293
5ca83cd8f7 Dani*0294 if (inodx.eq.iq) ilqx = 2
96b006450c dngo*0295 if (inody.eq.jq) ilqy = 2
5ca83cd8f7 Dani*0296 phival(inodx,inody) = Xquad(ilqx)*Xquad(ilqy)
0297
0298 DO jnodx = 1,2
96b006450c dngo*0299 DO jnody = 1,2
5ca83cd8f7 Dani*0300 if (STREAMICE_umask(i-1+jnodx,j-1+jnody,bi,bj)
0301 & .eq.1.0 .or.
96b006450c dngo*0302 & STREAMICE_vmask(i-1+jnodx,j-1+jnody,bi,bj).eq.1.0)
0303 & then
5ca83cd8f7 Dani*0304
0305 m_j = 2*(jnody-1)+jnodx
96b006450c dngo*0306 ilqx = 1
5ca83cd8f7 Dani*0307 ilqy = 1
0308 if (jnodx.eq.iq) ilqx = 2
96b006450c dngo*0309 if (jnody.eq.jq) ilqy = 2
5ca83cd8f7 Dani*0310
96b006450c dngo*0311
0312
0313
5ca83cd8f7 Dani*0314
0315 col_x = mod(inodx,2)+jnodx-2
ddf49ceb53 Dani*0316 colx_rev = mod(jnodx,2)+inodx-2
5ca83cd8f7 Dani*0317 col_y = mod(inody,2)+jnody-2
ddf49ceb53 Dani*0318 coly_rev = mod(jnody,2)+inody-2
5ca83cd8f7 Dani*0319
0320
ddf49ceb53 Dani*0321 IF ( (inodx.eq.jnodx .and. inody.eq.jnody) .or.
0322 & (inodx.eq.1 .and. inody.eq.1) .or.
0323 & (jnody.eq.2 .and. inody.eq.1) .or.
0324 & (jnody.eq.2 .and. jnodx.eq.2)) THEN
0325
5ca83cd8f7 Dani*0326 ux = DPhi (i,j,bi,bj,m_j,n,1)
0327 uy = DPhi (i,j,bi,bj,m_j,n,2)
96b006450c dngo*0328 vx = 0
5ca83cd8f7 Dani*0329 vy = 0
96b006450c dngo*0330 uq = Xquad(ilqx) * Xquad(ilqy)
5ca83cd8f7 Dani*0331 vq = 0
0332
0333 exx = ux + k1AtC_str(i,j,bi,bj)*vq
0334 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
96b006450c dngo*0335 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0336 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
96b006450c dngo*0337
ddf49ceb53 Dani*0338 tmpval = .25 *
96b006450c dngo*0339 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0340 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0341 & DPhi(i,j,bi,bj,m_i,n,1)*(4*exx+2*eyy) +
5ca83cd8f7 Dani*0342 & DPhi(i,j,bi,bj,m_i,n,2)*(2*exy))
0343
ddf49ceb53 Dani*0344 streamice_cg_A1
28bae0294d Dani*0345 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0346 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0347 & streamice_cg_A1
28bae0294d Dani*0348 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0349 & mod(inody,2)+jnody-2)+tmpval
ddf49ceb53 Dani*0350
0351 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0352 streamice_cg_A1
28bae0294d Dani*0353 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0354 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0355 & streamice_cg_A1
28bae0294d Dani*0356 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0357 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0358 & tmpval
0359 ENDIF
0360
96b006450c dngo*0361
ddf49ceb53 Dani*0362
0363 tmpval = .25 *
96b006450c dngo*0364 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0365 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0366 & DPhi(i,j,bi,bj,m_i,n,2)*(4*eyy+2*exx) +
5ca83cd8f7 Dani*0367 & DPhi(i,j,bi,bj,m_i,n,1)*(2*exy))
0368
ddf49ceb53 Dani*0369 streamice_cg_A3
28bae0294d Dani*0370 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0371 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0372 & streamice_cg_A3
28bae0294d Dani*0373 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0374 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0375
0376 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
ddf49ceb53 Dani*0377 streamice_cg_A2
28bae0294d Dani*0378 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0379 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0380 & streamice_cg_A2
28bae0294d Dani*0381 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0382 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0383 & tmpval
0384 ENDIF
0385
96b006450c dngo*0386
ddf49ceb53 Dani*0387
0388 tmpval = .25 *
96b006450c dngo*0389 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0390 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
0391 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*
96b006450c dngo*0392 & exx+4*0.5*k1AtC_str(i,j,bi,bj)*exy)
5ca83cd8f7 Dani*0393
ddf49ceb53 Dani*0394 streamice_cg_A1
28bae0294d Dani*0395 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0396 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0397 & streamice_cg_A1
28bae0294d Dani*0398 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0399 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0400
ddf49ceb53 Dani*0401 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0402 streamice_cg_A1
28bae0294d Dani*0403 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0404 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0405 & streamice_cg_A1
28bae0294d Dani*0406 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0407 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0408 & tmpval
0409 ENDIF
0410
96b006450c dngo*0411
ddf49ceb53 Dani*0412
96b006450c dngo*0413 tmpval = .25 *
0414 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0415 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
0416 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*
0417 & eyy+4*0.5*k2AtC_str(i,j,bi,bj)*exy)
0418
ddf49ceb53 Dani*0419 streamice_cg_A3
28bae0294d Dani*0420 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0421 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0422 & streamice_cg_A3
28bae0294d Dani*0423 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0424 & mod(inody,2)+jnody-2)+tmpval
ddf49ceb53 Dani*0425
0426 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0427 streamice_cg_A2
28bae0294d Dani*0428 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0429 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0430 & streamice_cg_A2
28bae0294d Dani*0431 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0432 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0433 & tmpval
0434 ENDIF
0435
96b006450c dngo*0436
ddf49ceb53 Dani*0437
96b006450c dngo*0438 tmpval = .25*phival(inodx,inody) *
0439 & grid_jacq_streamice(i,j,bi,bj,n) *
ddf49ceb53 Dani*0440 & tau_beta_eff_streamice (i,j,bi,bj) * uq
0441
5ca83cd8f7 Dani*0442 streamice_cg_A1
28bae0294d Dani*0443 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0444 & mod(inody,2)+jnody-2)=
5ca83cd8f7 Dani*0445 & streamice_cg_A1
28bae0294d Dani*0446 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0447 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0448
ddf49ceb53 Dani*0449 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0450 streamice_cg_A1
28bae0294d Dani*0451 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0452 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0453 & streamice_cg_A1
28bae0294d Dani*0454 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0455 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0456 & tmpval
0457 ENDIF
0458
96b006450c dngo*0459
0460 tmpval = .25*phival(inodx,inody) *
0461 & grid_jacq_streamice(i,j,bi,bj,n) *
ddf49ceb53 Dani*0462 & tau_beta_eff_streamice (i,j,bi,bj) * vq
5ca83cd8f7 Dani*0463
0464 streamice_cg_A3
28bae0294d Dani*0465 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0466 & mod(inody,2)+jnody-2)=
5ca83cd8f7 Dani*0467 & streamice_cg_A3
28bae0294d Dani*0468 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0469 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0470
0471 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
ddf49ceb53 Dani*0472 streamice_cg_A2
28bae0294d Dani*0473 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0474 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0475 & streamice_cg_A2
28bae0294d Dani*0476 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0477 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0478 & tmpval
0479 ENDIF
0480
96b006450c dngo*0481
5ca83cd8f7 Dani*0482
0483 vx = DPhi (i,j,bi,bj,m_j,n,1)
0484 vy = DPhi (i,j,bi,bj,m_j,n,2)
96b006450c dngo*0485 ux = 0
5ca83cd8f7 Dani*0486 uy = 0
96b006450c dngo*0487 vq = Xquad(ilqx) * Xquad(ilqy)
5ca83cd8f7 Dani*0488 uq = 0
0489
0490 exx = ux + k1AtC_str(i,j,bi,bj)*vq
0491 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
96b006450c dngo*0492 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0493 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
0494
ddf49ceb53 Dani*0495 tmpval = .25 *
96b006450c dngo*0496 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0497 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0498 & DPhi(i,j,bi,bj,m_i,n,1)*(4*exx+2*eyy) +
5ca83cd8f7 Dani*0499 & DPhi(i,j,bi,bj,m_i,n,2)*(2*exy))
0500
ddf49ceb53 Dani*0501 streamice_cg_A2
28bae0294d Dani*0502 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0503 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0504 & streamice_cg_A2
28bae0294d Dani*0505 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0506 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0507
ddf49ceb53 Dani*0508 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0509 streamice_cg_A3
28bae0294d Dani*0510 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0511 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0512 & streamice_cg_A3
28bae0294d Dani*0513 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0514 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0515 & tmpval
0516 ENDIF
0517
0518 tmpval = .25 *
96b006450c dngo*0519 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0520 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0521 & DPhi(i,j,bi,bj,m_i,n,2)*(4*eyy+2*exx) +
5ca83cd8f7 Dani*0522 & DPhi(i,j,bi,bj,m_i,n,1)*(2*exy))
0523
ddf49ceb53 Dani*0524 streamice_cg_A4
28bae0294d Dani*0525 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0526 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0527 & streamice_cg_A4
28bae0294d Dani*0528 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0529 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0530
ddf49ceb53 Dani*0531 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0532 streamice_cg_A4
28bae0294d Dani*0533 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0534 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0535 & streamice_cg_A4
28bae0294d Dani*0536 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0537 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0538 & tmpval
0539 ENDIF
0540
0541 tmpval = .25 *
96b006450c dngo*0542 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0543 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
0544 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*
96b006450c dngo*0545 & exx+4*0.5*k1AtC_str(i,j,bi,bj)*exy)
5ca83cd8f7 Dani*0546
ddf49ceb53 Dani*0547 streamice_cg_A2
28bae0294d Dani*0548 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0549 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0550 & streamice_cg_A2
28bae0294d Dani*0551 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0552 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0553
ddf49ceb53 Dani*0554 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0555 streamice_cg_A3
28bae0294d Dani*0556 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0557 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0558 & streamice_cg_A3
28bae0294d Dani*0559 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0560 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0561 & tmpval
0562 ENDIF
0563
96b006450c dngo*0564 tmpval = .25 *
0565 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0566 & visc_streamice(i,j,bi,bj) * phival(inodx,inody) *
0567 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*
0568 & eyy+4*0.5*k2AtC_str(i,j,bi,bj)*exy)
0569
ddf49ceb53 Dani*0570 streamice_cg_A4
28bae0294d Dani*0571 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0572 & mod(inody,2)+jnody-2)=
ddf49ceb53 Dani*0573 & streamice_cg_A4
28bae0294d Dani*0574 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0575 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0576
ddf49ceb53 Dani*0577 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0578 streamice_cg_A4
28bae0294d Dani*0579 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0580 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0581 & streamice_cg_A4
28bae0294d Dani*0582 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0583 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0584 & tmpval
0585 ENDIF
0586
96b006450c dngo*0587 tmpval = .25*phival(inodx,inody) *
0588 & grid_jacq_streamice(i,j,bi,bj,n) *
ddf49ceb53 Dani*0589 & tau_beta_eff_streamice (i,j,bi,bj) * uq
0590
5ca83cd8f7 Dani*0591 streamice_cg_A2
28bae0294d Dani*0592 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0593 & mod(inody,2)+jnody-2)=
5ca83cd8f7 Dani*0594 & streamice_cg_A2
28bae0294d Dani*0595 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0596 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0597
ddf49ceb53 Dani*0598 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0599 streamice_cg_A3
28bae0294d Dani*0600 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0601 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0602 & streamice_cg_A3
28bae0294d Dani*0603 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0604 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0605 & tmpval
0606 ENDIF
0607
96b006450c dngo*0608 tmpval = .25*phival(inodx,inody) *
0609 & grid_jacq_streamice(i,j,bi,bj,n) *
ddf49ceb53 Dani*0610 & tau_beta_eff_streamice (i,j,bi,bj) * vq
5ca83cd8f7 Dani*0611
0612 streamice_cg_A4
28bae0294d Dani*0613 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0614 & mod(inody,2)+jnody-2)=
5ca83cd8f7 Dani*0615 & streamice_cg_A4
28bae0294d Dani*0616 & (i-1+inodx,j-1+inody,bi,bj,mod(inodx,2)+jnodx-2,
0617 & mod(inody,2)+jnody-2)+tmpval
96b006450c dngo*0618
ddf49ceb53 Dani*0619 IF (.not. (inodx.eq.jnodx .and. inody.eq.jnody)) THEN
0620 streamice_cg_A4
28bae0294d Dani*0621 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0622 & mod(jnody,2)+inody-2)=
ddf49ceb53 Dani*0623 & streamice_cg_A4
28bae0294d Dani*0624 & (i-1+jnodx,j-1+jnody,bi,bj,mod(jnodx,2)+inodx-2,
0625 & mod(jnody,2)+inody-2)+
ddf49ceb53 Dani*0626 & tmpval
0627 ENDIF
0628
0629 endif
96b006450c dngo*0630 endif
5ca83cd8f7 Dani*0631 enddo
0632 enddo
0633 endif
0634 enddo
0635 enddo
0636 enddo
0637 enddo
0638 endif
0639 enddo
0640 enddo
0641 enddo
0642 enddo
0643
0644 #endif
0645 #endif
0646 RETURN
0647 END SUBROUTINE
96b006450c dngo*0648
5ca83cd8f7 Dani*0649
96b006450c dngo*0650 SUBROUTINE STREAMICE_CG_ADIAG( myThid,
0651 O uret,
5ca83cd8f7 Dani*0652 O vret)
96b006450c dngo*0653
5ca83cd8f7 Dani*0654
96b006450c dngo*0655
5ca83cd8f7 Dani*0656
0657
0658
0659
0660 IMPLICIT NONE
0661
0662
0663 #include "SIZE.h"
0664 #include "EEPARAMS.h"
0665 #include "PARAMS.h"
0666 #include "GRID.h"
0667 #include "STREAMICE.h"
96b006450c dngo*0668 #include "STREAMICE_CG.h"
5ca83cd8f7 Dani*0669
0670
0671
0672
0673 INTEGER myThid
0674 _RL uret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0675 _RL vret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0676
0677 #ifdef ALLOW_STREAMICE
0678
0679
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
96b006450c dngo*0695
5ca83cd8f7 Dani*0696
0697
0698
0699
96b006450c dngo*0700
5ca83cd8f7 Dani*0701 INTEGER iq, jq, inode, jnode, i, j, bi, bj, ilq, jlq, m, n
0702 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy
0703 _RL phival(2,2)
0704
0705 uret(1,1,1,1) = uret(1,1,1,1)
0706 vret(1,1,1,1) = vret(1,1,1,1)
0707
0708 DO j = 0, sNy+1
0709 DO i = 0, sNx+1
0710 DO bj = myByLo(myThid), myByHi(myThid)
0711 DO bi = myBxLo(myThid), myBxHi(myThid)
0712 IF (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) THEN
96b006450c dngo*0713 DO iq=1,2
5ca83cd8f7 Dani*0714 DO jq = 1,2
96b006450c dngo*0715
5ca83cd8f7 Dani*0716 n = 2*(jq-1)+iq
96b006450c dngo*0717
0718 DO inode = 1,2
5ca83cd8f7 Dani*0719 DO jnode = 1,2
96b006450c dngo*0720
5ca83cd8f7 Dani*0721 m = 2*(jnode-1)+inode
0722
0723 if (STREAMICE_umask(i-1+inode,j-1+jnode,bi,bj).eq.1.0 .or.
96b006450c dngo*0724 & STREAMICE_vmask(i-1+inode,j-1+jnode,bi,bj).eq.1.0)
5ca83cd8f7 Dani*0725 & then
0726
96b006450c dngo*0727 ilq = 1
5ca83cd8f7 Dani*0728 jlq = 1
96b006450c dngo*0729
5ca83cd8f7 Dani*0730 if (inode.eq.iq) ilq = 2
96b006450c dngo*0731 if (jnode.eq.jq) jlq = 2
5ca83cd8f7 Dani*0732 phival(inode,jnode) = Xquad(ilq)*Xquad(jlq)
0733
0734 ux = DPhi (i,j,bi,bj,m,n,1)
0735 uy = DPhi (i,j,bi,bj,m,n,2)
96b006450c dngo*0736 vx = 0
5ca83cd8f7 Dani*0737 vy = 0
96b006450c dngo*0738 uq = Xquad(ilq) * Xquad(jlq)
5ca83cd8f7 Dani*0739 vq = 0
0740
0741 exx = ux + k1AtC_str(i,j,bi,bj)*vq
0742 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
96b006450c dngo*0743 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0744 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
0745
96b006450c dngo*0746 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0747 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0748 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0749 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0750 & DPhi(i,j,bi,bj,m,n,1)*(4*exx+2*eyy) +
5ca83cd8f7 Dani*0751 & DPhi(i,j,bi,bj,m,n,2)*(2*exy))
0752
96b006450c dngo*0753 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0754 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0755 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0756 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
0757 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*exx+
96b006450c dngo*0758 & 4*0.5*k1AtC_str(i,j,bi,bj)*exy)
5ca83cd8f7 Dani*0759
96b006450c dngo*0760 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0761 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0762 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0763 & tau_beta_eff_streamice (i,j,bi,bj) * uq
0764
0765 vx = DPhi (i,j,bi,bj,m,n,1)
0766 vy = DPhi (i,j,bi,bj,m,n,2)
96b006450c dngo*0767 ux = 0
5ca83cd8f7 Dani*0768 uy = 0
96b006450c dngo*0769 vq = Xquad(ilq) * Xquad(jlq)
5ca83cd8f7 Dani*0770 uq = 0
0771
0772 exx = ux + k1AtC_str(i,j,bi,bj)*vq
0773 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
96b006450c dngo*0774 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0775 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
0776
96b006450c dngo*0777 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0778 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0779 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0780 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0781 & DPhi(i,j,bi,bj,m,n,2)*(4*eyy+2*exx) +
5ca83cd8f7 Dani*0782 & DPhi(i,j,bi,bj,m,n,1)*(2*exy))
96b006450c dngo*0783 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0784 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0785 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0786 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
0787 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*eyy+
0788 & 4*0.5*k2AtC_str(i,j,bi,bj)*exy)
0789
96b006450c dngo*0790 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0791 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0792 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0793 & tau_beta_eff_streamice (i,j,bi,bj) * vq
96b006450c dngo*0794
5ca83cd8f7 Dani*0795 endif
0796
0797 enddo
96b006450c dngo*0798 enddo
0799 enddo
5ca83cd8f7 Dani*0800 enddo
0801 endif
0802 enddo
0803 enddo
0804 enddo
0805 enddo
0806
0807 #endif
0808 RETURN
0809 END SUBROUTINE
0810
96b006450c dngo*0811 SUBROUTINE STREAMICE_CG_BOUND_VALS( myThid,
0812 O uret,
5ca83cd8f7 Dani*0813 O vret)
0814
96b006450c dngo*0815
5ca83cd8f7 Dani*0816
0817
0818
0819
0820 IMPLICIT NONE
0821
0822
0823 #include "SIZE.h"
0824 #include "EEPARAMS.h"
0825 #include "PARAMS.h"
0826 #include "GRID.h"
96b006450c dngo*0827 #include "STREAMICE.h"
5ca83cd8f7 Dani*0828 #include "STREAMICE_CG.h"
0829
0830
0831
0832
0833 INTEGER myThid
0834 _RL uret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0835 _RL vret (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
96b006450c dngo*0836
5ca83cd8f7 Dani*0837 #ifdef ALLOW_STREAMICE
0838
0839
0840
0841
0842
0843
0844
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854
96b006450c dngo*0855
5ca83cd8f7 Dani*0856
0857
0858
0859
96b006450c dngo*0860
5ca83cd8f7 Dani*0861 INTEGER iq, jq, inode, jnode, i, j, bi, bj, ilq, jlq, m, n
0862 _RL ux, vx, uy, vy, uq, vq, exx, eyy, exy
0863 _RL phival(2,2)
0864
0865 uret(1,1,1,1) = uret(1,1,1,1)
0866 vret(1,1,1,1) = vret(1,1,1,1)
0867
0868 DO j = 0, sNy+1
0869 DO i = 0, sNx+1
0870 DO bj = myByLo(myThid), myByHi(myThid)
0871 DO bi = myBxLo(myThid), myBxHi(myThid)
0872 IF ((STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) .AND.
0873 & ((STREAMICE_umask(i,j,bi,bj).eq.3.0) .OR.
0874 & (STREAMICE_umask(i,j+1,bi,bj).eq.3.0) .OR.
0875 & (STREAMICE_umask(i+1,j,bi,bj).eq.3.0) .OR.
0876 & (STREAMICE_umask(i+1,j+1,bi,bj).eq.3.0) .OR.
0877 & (STREAMICE_vmask(i,j,bi,bj).eq.3.0) .OR.
0878 & (STREAMICE_vmask(i,j+1,bi,bj).eq.3.0) .OR.
0879 & (STREAMICE_vmask(i+1,j,bi,bj).eq.3.0) .OR.
0880 & (STREAMICE_vmask(i+1,j+1,bi,bj).eq.3.0))) THEN
96b006450c dngo*0881
0882 DO iq=1,2
5ca83cd8f7 Dani*0883 DO jq = 1,2
0884
0885 n = 2*(jq-1)+iq
0886
96b006450c dngo*0887 uq = u_bdry_values_SI(i,j,bi,bj)*Xquad(3-iq)*Xquad(3-jq)+
0888 & u_bdry_values_SI(i+1,j,bi,bj)*Xquad(iq)*Xquad(3-jq)+
0889 & u_bdry_values_SI(i,j+1,bi,bj)*Xquad(3-iq)*Xquad(jq)+
5ca83cd8f7 Dani*0890 & u_bdry_values_SI(i+1,j+1,bi,bj)*Xquad(iq)*Xquad(jq)
96b006450c dngo*0891 vq = v_bdry_values_SI(i,j,bi,bj)*Xquad(3-iq)*Xquad(3-jq)+
0892 & v_bdry_values_SI(i+1,j,bi,bj)*Xquad(iq)*Xquad(3-jq)+
0893 & v_bdry_values_SI(i,j+1,bi,bj)*Xquad(3-iq)*Xquad(jq)+
5ca83cd8f7 Dani*0894 & v_bdry_values_SI(i+1,j+1,bi,bj)*Xquad(iq)*Xquad(jq)
96b006450c dngo*0895 ux = u_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
0896 & u_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
0897 & u_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
5ca83cd8f7 Dani*0898 & u_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
0899 uy = u_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
96b006450c dngo*0900 & u_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
0901 & u_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
5ca83cd8f7 Dani*0902 & u_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
96b006450c dngo*0903 vx = v_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,1) +
0904 & v_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,1) +
0905 & v_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,1) +
5ca83cd8f7 Dani*0906 & v_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,1)
96b006450c dngo*0907 vy = v_bdry_values_SI(i,j,bi,bj) * DPhi(i,j,bi,bj,1,n,2) +
0908 & v_bdry_values_SI(i+1,j,bi,bj) * DPhi(i,j,bi,bj,2,n,2) +
0909 & v_bdry_values_SI(i,j+1,bi,bj) * DPhi(i,j,bi,bj,3,n,2) +
5ca83cd8f7 Dani*0910 & v_bdry_values_SI(i+1,j+1,bi,bj) * DPhi(i,j,bi,bj,4,n,2)
0911 exx = ux + k1AtC_str(i,j,bi,bj)*vq
0912 eyy = vy + k2AtC_str(i,j,bi,bj)*uq
96b006450c dngo*0913 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0914 & k1AtC_str(i,j,bi,bj)*uq + k2AtC_str(i,j,bi,bj)*vq
0915
96b006450c dngo*0916 do inode = 1,2
5ca83cd8f7 Dani*0917 do jnode = 1,2
0918
0919 m = 2*(jnode-1)+inode
96b006450c dngo*0920 ilq = 1
5ca83cd8f7 Dani*0921 jlq = 1
0922 if (inode.eq.iq) ilq = 2
96b006450c dngo*0923 if (jnode.eq.jq) jlq = 2
5ca83cd8f7 Dani*0924 phival(inode,jnode) = Xquad(ilq)*Xquad(jlq)
0925
96b006450c dngo*0926 if (STREAMICE_umask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
5ca83cd8f7 Dani*0927
96b006450c dngo*0928 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0929 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0930 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0931 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0932 & DPhi(i,j,bi,bj,m,n,1)*(4*exx+2*eyy) +
5ca83cd8f7 Dani*0933 & DPhi(i,j,bi,bj,m,n,2)*(2*exy))
0934
96b006450c dngo*0935 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0936 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0937 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0938 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
0939 & (4*k2AtC_str(i,j,bi,bj)*eyy+2*k2AtC_str(i,j,bi,bj)*exx+
96b006450c dngo*0940 & 4*0.5*k1AtC_str(i,j,bi,bj)*exy)
5ca83cd8f7 Dani*0941
96b006450c dngo*0942
0943 uret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0944 & uret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0945 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0946 & tau_beta_eff_streamice (i,j,bi,bj) * uq
0947
96b006450c dngo*0948
5ca83cd8f7 Dani*0949 endif
96b006450c dngo*0950 if (STREAMICE_vmask(i-1+inode,j-1+jnode,bi,bj).eq.1.0) then
0951 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0952 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0953 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0954 & visc_streamice(i,j,bi,bj) * (
96b006450c dngo*0955 & DPhi(i,j,bi,bj,m,n,2)*(4*eyy+2*exx) +
5ca83cd8f7 Dani*0956 & DPhi(i,j,bi,bj,m,n,1)*(2*exy))
96b006450c dngo*0957 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0958 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0959 & grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0960 & visc_streamice(i,j,bi,bj) * phival(inode,jnode) *
0961 & (4*k1AtC_str(i,j,bi,bj)*exx+2*k1AtC_str(i,j,bi,bj)*eyy+
0962 & 4*0.5*k2AtC_str(i,j,bi,bj)*exy)
96b006450c dngo*0963 vret(i-1+inode,j-1+jnode,bi,bj) =
5ca83cd8f7 Dani*0964 & vret(i-1+inode,j-1+jnode,bi,bj) + .25 *
96b006450c dngo*0965 & phival(inode,jnode) * grid_jacq_streamice(i,j,bi,bj,n) *
5ca83cd8f7 Dani*0966 & tau_beta_eff_streamice (i,j,bi,bj) * vq
0967 endif
0968 enddo
96b006450c dngo*0969 enddo
0970 enddo
5ca83cd8f7 Dani*0971 enddo
0972 endif
0973 enddo
0974 enddo
0975 enddo
0976 enddo
0977
0978 #endif
0979 RETURN
0980 END SUBROUTINE