10 implicit none ; 
private    12 #include <MOM_memory.h>    17   character(len=128) :: restart_output_dir = 
' '    18   real, 
pointer, 
dimension(:,:) :: &
    19     mass_shelf => null(), &   
    20     area_shelf_h => null(), & 
    24     salt_flux => null(), & 
    28     exch_vel_t => null(), &
    29     exch_vel_s => null(), &
    32     tflux_shelf => null(), & 
    51     u_face_mask => null(), v_face_mask => null(), &
    57     umask => null(), vmask => null(), &
    60     ice_visc_bilinear => null(), &
    61     ice_visc_lower_tri => null(), &
    62     ice_visc_upper_tri => null(), &
    63     thickness_boundary_values => null(), &
    64     u_boundary_values => null(), &
    65     v_boundary_values => null(), &
    68     taub_beta_eff_bilinear => null(), & 
    70     taub_beta_eff_lower_tri => null(), &
    71     taub_beta_eff_upper_tri => null(), &
    73     od_rt => null(), float_frac_rt => null(), &
    74     od_av => null(), float_frac => null()  
   105   real :: a_glen_isothermal
   108   real :: c_basal_friction
   109   real :: n_basal_friction
   110   real :: density_ocean_avg    
   113   real :: thresh_float_col_depth 
   115   real :: input_thickness
   120   real :: velocity_update_time_step 
   125   integer :: velocity_update_sub_counter 
   126   integer :: velocity_update_counter 
   127   integer :: nstep_velocity        
   129   real :: cg_tolerance, nonlinear_tolerance
   130   integer :: cg_max_iterations
   131   integer :: nonlin_solve_err_mode  
   138   type(time_type) :: time 
   142   logical :: shelf_mass_is_dynamic 
   144   logical :: override_shelf_movement 
   150   integer :: id_melt = -1, id_exch_vel_s = -1, id_exch_vel_t = -1, &
   151              id_tfreeze = -1, id_tfl_shelf = -1, &
   152          id_u_shelf = -1, id_v_shelf = -1, id_h_shelf = -1, id_h_mask = -1, &
   153          id_u_mask = -1, id_v_mask = -1, &
   154          id_surf_elev = -1, id_bathym = -1, id_float_frac = -1, id_col_thick = -1, &
   155          id_area_shelf_h = -1, id_od_rt = -1, id_float_frac_rt = -1
   160   logical :: write_output_to_file 
   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. 
 
Provides the ocean grid type. 
 
Provides subroutines for quantities specific to the equation of state. 
 
subroutine matrix_diagonal_triangle(CS, u_diagonal, v_diagonal)
 
subroutine, public restart_init(param_file, CS, restart_root)
 
subroutine, public restore_state(filename, directory, day, G, CS)
 
A control structure for the equation of state.