166 type(ice_shelf_cs),
pointer :: cs
167 real,
dimension (:,:),
intent(inout) :: u_diagonal, v_diagonal
171 real,
pointer,
dimension (:,:) :: umask, vmask, &
172 nu_lower, nu_upper, beta_lower, beta_upper, hmask
174 integer :: i, j, is, js, cnt, isc, jsc, iec, jec
175 real :: a, n, ux, uy, vx, vy, eps_min, domain_width, dxh, dyh, dxdyh
186 isc = g%isc ; jsc = g%jsc ; iec = g%iec ; jec = g%jec
188 umask => cs%umask ; vmask => cs%vmask ; hmask => cs%hmask
189 nu_lower => cs%ice_visc_lower_tri ; nu_upper => cs%ice_visc_upper_tri
190 beta_lower => cs%taub_beta_eff_lower_tri ; beta_upper => cs%taub_beta_eff_upper_tri
192 do i=isc-1,iec+1 ;
do j=jsc-1,jec+1 ;
if (hmask(i,j) .eq. 1)
then 197 if (umask(i,j-1) .eq. 1)
then 199 ux = 1./dxh ; uy = 0./dyh
202 u_diagonal(i,j-1) = u_diagonal(i,j-1) + &
203 .5 * dxdyh * nu_lower(i,j) * ((4*ux+2*vy) * (1./dxh) + (uy+vy) * (0./dyh))
205 u_diagonal(i,j-1) = u_diagonal(i,j-1) + &
206 beta_lower(i,j) * dxdyh * 1./24
209 vx = 1./dxh ; vy = 0./dyh
211 v_diagonal(i,j-1) = v_diagonal(i,j-1) + &
212 .5 * dxdyh * nu_lower(i,j) * ((uy+vx) * (1./dxh) + (4*vy+2*ux) * (0./dyh))
214 v_diagonal(i,j-1) = v_diagonal(i,j-1) + &
215 beta_lower(i,j) * dxdyh * 1./24
217 ux = 0./dxh ; uy = -1./dyh
220 u_diagonal(i,j-1) = u_diagonal(i,j-1) + &
221 .5 * dxdyh * nu_upper(i,j) * ((4*ux+2*vy) * (0./dxh) + (uy+vy) * (-1./dyh))
223 u_diagonal(i,j-1) = u_diagonal(i,j-1) + &
224 beta_upper(i,j) * dxdyh * 1./24
226 vx = 0./dxh ; vy = -1./dyh
229 v_diagonal(i,j-1) = v_diagonal(i,j-1) + &
230 .5 * dxdyh * nu_upper(i,j) * ((uy+vx) * (0./dxh) + (4*vy+2*ux) * (-1./dyh))
232 v_diagonal(i,j-1) = v_diagonal(i,j-1) + &
233 beta_upper(i,j) * dxdyh * 1./24
237 if (umask(i-1,j) .eq. 1)
then 239 ux = 0./dxh ; uy = 1./dyh
242 u_diagonal(i-1,j) = u_diagonal(i-1,j) + &
243 .5 * dxdyh * nu_lower(i,j) * ((4*ux+2*vy) * (0./dxh) + (uy+vy) * (1./dyh))
245 u_diagonal(i,j-1) = u_diagonal(i,j-1) + &
246 beta_lower(i,j) * dxdyh * 1./24
249 vx = 0./dxh ; vy = 1./dyh
251 v_diagonal(i-1,j) = v_diagonal(i-1,j) + &
252 .5 * dxdyh * nu_lower(i,j) * ((uy+vx) * (0./dxh) + (4*vy+2*ux) * (1./dyh))
254 v_diagonal(i,j-1) = v_diagonal(i,j-1) + &
255 beta_lower(i,j) * dxdyh * 1./24
257 ux = -1./dxh ; uy = 0./dyh
260 u_diagonal(i-1,j) = u_diagonal(i-1,j) + &
261 .5 * dxdyh * nu_upper(i,j) * ((4*ux+2*vy) * (-1./dxh) + (uy+vy) * (0./dyh))
263 u_diagonal(i,j-1) = u_diagonal(i,j-1) + &
264 beta_upper(i,j) * dxdyh * 1./24
266 vx = -1./dxh ; vy = 0./dyh
269 v_diagonal(i-1,j) = v_diagonal(i-1,j) + &
270 .5 * dxdyh * nu_upper(i,j) * ((uy+vx) * (-1./dxh) + (4*vy+2*ux) * (0./dyh))
272 v_diagonal(i,j-1) = v_diagonal(i,j-1) + &
273 beta_upper(i,j) * dxdyh * 1./24
277 if (umask(i-1,j-1) .eq. 1)
then 279 ux = -1./dxh ; uy = -1./dyh
282 u_diagonal(i-1,j-1) = u_diagonal(i-1,j-1) + &
283 .5 * dxdyh * nu_upper(i,j) * ((4*ux+2*vy) * (-1./dxh) + (uy+vy) * (-1./dyh))
285 u_diagonal(i-1,j-1) = u_diagonal(i-1,j-1) + &
286 beta_lower(i,j) * dxdyh * 1./24
288 vx = -1./dxh ; vy = -1./dyh
291 v_diagonal(i-1,j-1) = v_diagonal(i-1,j-1) + &
292 .5 * dxdyh * nu_upper(i,j) * ((uy+vx) * (-1./dxh) + (4*vy+2*ux) * (-1./dyh))
294 v_diagonal(i-1,j-1) = v_diagonal(i-1,j-1) + &
295 beta_lower(i,j) * dxdyh * 1./24
298 if (umask(i,j) .eq. 1)
then 300 ux = 1./ dxh ; uy = 1./dyh
303 u_diagonal(i,j) = u_diagonal(i,j) + &
304 .5 * dxdyh * nu_upper(i,j) * ((4*ux+2*vy) * (1./dxh) + (uy+vy) * (1./dyh))
306 u_diagonal(i,j) = u_diagonal(i,j) + &
307 beta_upper(i,j) * dxdyh * 1./24
309 vx = 1./ dxh ; vy = 1./dyh
312 v_diagonal(i,j) = v_diagonal(i,j) + &
313 .5 * dxdyh * nu_upper(i,j) * ((uy+vx) * (1./dxh) + (4*vy+2*ux) * (1./dyh))
315 v_diagonal(i,j) = v_diagonal(i,j) + &
316 beta_upper(i,j) * dxdyh * 1./24
319 endif ;
enddo ;
enddo Ocean grid type. See mom_grid for details.