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.