Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ice shelf dHdt bugfix and optimization #472

Merged
merged 1 commit into from
Oct 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions src/ice_shelf/MOM_ice_shelf.F90
Original file line number Diff line number Diff line change
Expand Up @@ -858,9 +858,9 @@ subroutine change_thickness_using_melt(ISS, G, US, time_step, fluxes, density_ic
endif
enddo ; enddo

call pass_var(ISS%area_shelf_h, G%domain)
call pass_var(ISS%h_shelf, G%domain)
call pass_var(ISS%hmask, G%domain)
call pass_var(ISS%area_shelf_h, G%domain, complete=.false.)
call pass_var(ISS%h_shelf, G%domain, complete=.false.)
call pass_var(ISS%hmask, G%domain, complete=.false.)
call pass_var(ISS%mass_shelf, G%domain)

end subroutine change_thickness_using_melt
Expand Down Expand Up @@ -1753,10 +1753,10 @@ subroutine initialize_ice_shelf(param_file, ocn_grid, Time, CS, diag, forces_in,
id_clock_pass = cpu_clock_id(' Ice shelf halo updates', grain=CLOCK_ROUTINE)

call cpu_clock_begin(id_clock_pass)
call pass_var(ISS%area_shelf_h, G%domain)
call pass_var(ISS%h_shelf, G%domain)
call pass_var(ISS%mass_shelf, G%domain)
call pass_var(ISS%hmask, G%domain)
call pass_var(ISS%area_shelf_h, G%domain, complete=.false.)
call pass_var(ISS%h_shelf, G%domain, complete=.false.)
call pass_var(ISS%mass_shelf, G%domain, complete=.false.)
call pass_var(ISS%hmask, G%domain, complete=.false.)
call pass_var(G%bathyT, G%domain)
call cpu_clock_end(id_clock_pass)

Expand Down Expand Up @@ -2032,7 +2032,7 @@ subroutine change_thickness_using_precip(CS, ISS, G, US, fluxes, time_step, Time
do j=G%jsc,G%jec ; do i=G%isc,G%iec
if ((ISS%hmask(i,j) == 1) .or. (ISS%hmask(i,j) == 2)) then

if (-fluxes%shelf_sfc_mass_flux(i,j) * time_step < ISS%h_shelf(i,j)) then
if (-fluxes%shelf_sfc_mass_flux(i,j) * time_step * I_rho_ice < ISS%h_shelf(i,j)) then
ISS%h_shelf(i,j) = ISS%h_shelf(i,j) + fluxes%shelf_sfc_mass_flux(i,j) * time_step * I_rho_ice
else
! the ice is about to ablate, so set thickness, area, and mask to zero
Expand Down Expand Up @@ -2101,10 +2101,10 @@ subroutine update_shelf_mass(G, US, CS, ISS, Time)
CS%min_thickness_simple_calve, halo=0)
endif

call pass_var(ISS%area_shelf_h, G%domain)
call pass_var(ISS%h_shelf, G%domain)
call pass_var(ISS%hmask, G%domain)
call pass_var(ISS%mass_shelf, G%domain)
call pass_var(ISS%area_shelf_h, G%domain, complete=.false.)
call pass_var(ISS%h_shelf, G%domain, complete=.false.)
call pass_var(ISS%hmask, G%domain, complete=.false.)
call pass_var(ISS%mass_shelf, G%domain, complete=.true.)

end subroutine update_shelf_mass

Expand Down
142 changes: 71 additions & 71 deletions src/ice_shelf/MOM_ice_shelf_dynamics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module MOM_ice_shelf_dynamics
use MOM_unit_scaling, only : unit_scale_type, unit_scaling_init
!MJH use MOM_ice_shelf_initialize, only : initialize_ice_shelf_boundary
use MOM_ice_shelf_state, only : ice_shelf_state
use MOM_coms, only : reproducing_sum, sum_across_PEs, max_across_PEs, min_across_PEs
use MOM_coms, only : reproducing_sum, max_across_PEs, min_across_PEs
use MOM_checksums, only : hchksum, qchksum
use MOM_ice_shelf_initialize, only : initialize_ice_shelf_boundary_channel,initialize_ice_flow_from_file
use MOM_ice_shelf_initialize, only : initialize_ice_shelf_boundary_from_file,initialize_ice_C_basal_friction
Expand Down Expand Up @@ -551,20 +551,20 @@ subroutine initialize_ice_shelf_dyn(param_file, Time, ISS, CS, G, US, diag, new_
enddo ; enddo
endif

call pass_var(CS%OD_av,G%domain)
call pass_var(CS%ground_frac,G%domain)
call pass_var(CS%ice_visc,G%domain)
call pass_var(CS%basal_traction, G%domain)
call pass_var(CS%AGlen_visc, G%domain)
call pass_var(CS%bed_elev, G%domain)
call pass_var(CS%C_basal_friction, G%domain)
call pass_var(CS%h_bdry_val, G%domain)
call pass_var(CS%thickness_bdry_val, G%domain)
call pass_var(CS%OD_av,G%domain, complete=.false.)
call pass_var(CS%ground_frac,G%domain, complete=.false.)
call pass_var(CS%ice_visc,G%domain, complete=.false.)
call pass_var(CS%basal_traction, G%domain, complete=.false.)
call pass_var(CS%AGlen_visc, G%domain, complete=.false.)
call pass_var(CS%bed_elev, G%domain, complete=.false.)
call pass_var(CS%C_basal_friction, G%domain, complete=.false.)
call pass_var(CS%h_bdry_val, G%domain, complete=.false.)
call pass_var(CS%thickness_bdry_val, G%domain, complete=.true.)
if (trim(CS%ice_viscosity_compute) == "MODEL_QUADRATURE") call pass_var(CS%Ee,G%domain)

call pass_vector(CS%u_shelf, CS%v_shelf, G%domain, TO_ALL, BGRID_NE)
call pass_vector(CS%u_bdry_val, CS%v_bdry_val, G%domain, TO_ALL, BGRID_NE)
call pass_vector(CS%u_face_mask_bdry, CS%v_face_mask_bdry, G%domain, TO_ALL, BGRID_NE)
call pass_vector(CS%u_shelf, CS%v_shelf, G%domain, TO_ALL, BGRID_NE, complete=.false.)
call pass_vector(CS%u_bdry_val, CS%v_bdry_val, G%domain, TO_ALL, BGRID_NE, complete=.false.)
call pass_vector(CS%u_face_mask_bdry, CS%v_face_mask_bdry, G%domain, TO_ALL, BGRID_NE, complete=.true.)
call update_velocity_masks(CS, G, ISS%hmask, CS%umask, CS%vmask, CS%u_face_mask, CS%v_face_mask)
endif

Expand Down Expand Up @@ -597,28 +597,28 @@ subroutine initialize_ice_shelf_dyn(param_file, Time, ISS, CS, G, US, diag, new_
! initialize basal friction coefficients
if (new_sim) then
call initialize_ice_C_basal_friction(CS%C_basal_friction, G, US, param_file)
call pass_var(CS%C_basal_friction, G%domain)
call pass_var(CS%C_basal_friction, G%domain, complete=.false.)

! initialize ice-stiffness AGlen
call initialize_ice_AGlen(CS%AGlen_visc, G, US, param_file)
call pass_var(CS%AGlen_visc, G%domain)
call pass_var(CS%AGlen_visc, G%domain, complete=.false.)

!initialize boundary conditions
call initialize_ice_shelf_boundary_from_file(CS%u_face_mask_bdry, CS%v_face_mask_bdry, &
CS%u_bdry_val, CS%v_bdry_val, CS%umask, CS%vmask, CS%h_bdry_val, &
CS%thickness_bdry_val, ISS%hmask, ISS%h_shelf, G, US, param_file )
call pass_var(ISS%hmask, G%domain)
call pass_var(CS%h_bdry_val, G%domain)
call pass_var(CS%thickness_bdry_val, G%domain)
call pass_vector(CS%u_bdry_val, CS%v_bdry_val, G%domain, TO_ALL, BGRID_NE)
call pass_vector(CS%u_face_mask_bdry, CS%v_face_mask_bdry, G%domain, TO_ALL, BGRID_NE)
call pass_var(ISS%hmask, G%domain, complete=.false.)
call pass_var(CS%h_bdry_val, G%domain, complete=.false.)
call pass_var(CS%thickness_bdry_val, G%domain, complete=.true.)
call pass_vector(CS%u_bdry_val, CS%v_bdry_val, G%domain, TO_ALL, BGRID_NE, complete=.false.)
call pass_vector(CS%u_face_mask_bdry, CS%v_face_mask_bdry, G%domain, TO_ALL, BGRID_NE, complete=.false.)

!initialize ice flow characteristic (velocities, bed elevation under the grounded part, etc) from file
call initialize_ice_flow_from_file(CS%bed_elev,CS%u_shelf, CS%v_shelf, CS%ground_frac, &
G, US, param_file)
call pass_vector(CS%u_shelf, CS%v_shelf, G%domain, TO_ALL, BGRID_NE)
call pass_var(CS%ground_frac, G%domain)
call pass_var(CS%bed_elev, G%domain)
call pass_vector(CS%u_shelf, CS%v_shelf, G%domain, TO_ALL, BGRID_NE, complete=.true.)
call pass_var(CS%ground_frac, G%domain, complete=.false.)
call pass_var(CS%bed_elev, G%domain, complete=.true.)
call update_velocity_masks(CS, G, ISS%hmask, CS%umask, CS%vmask, CS%u_face_mask, CS%v_face_mask)
endif
! Register diagnostics.
Expand Down Expand Up @@ -775,11 +775,11 @@ subroutine update_ice_shelf(CS, ISS, G, US, time_step, Time, ocean_mass, coupled
if (CS%id_v_shelf > 0) call post_data(CS%id_v_shelf, CS%v_shelf, CS%diag)
! if (CS%id_t_shelf > 0) call post_data(CS%id_t_shelf, CS%t_shelf, CS%diag)
if (CS%id_taudx_shelf > 0) then
taud_x(:,:) = CS%taudx_shelf(:,:)*G%IareaT(:,:)
taud_x(:,:) = CS%taudx_shelf(:,:)*G%IareaBu(:,:)
call post_data(CS%id_taudx_shelf, taud_x, CS%diag)
endif
if (CS%id_taudy_shelf > 0) then
taud_y(:,:) = CS%taudy_shelf(:,:)*G%IareaT(:,:)
taud_y(:,:) = CS%taudy_shelf(:,:)*G%IareaBu(:,:)
call post_data(CS%id_taudy_shelf, taud_y, CS%diag)
endif
if (CS%id_ground_frac > 0) call post_data(CS%id_ground_frac, CS%ground_frac, CS%diag)
Expand Down Expand Up @@ -990,7 +990,7 @@ subroutine ice_shelf_solve_outer(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, i
endif
enddo ; enddo

call pass_var(float_cond, G%Domain)
call pass_var(float_cond, G%Domain, complete=.false.)

call bilinear_shape_functions_subgrid(Phisub, nsub)

Expand All @@ -1004,9 +1004,9 @@ subroutine ice_shelf_solve_outer(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, i
enddo ; enddo

call calc_shelf_visc(CS, ISS, G, US, u_shlf, v_shlf)
call pass_var(CS%ice_visc, G%domain)
call pass_var(CS%ice_visc, G%domain, complete=.false.)
call calc_shelf_taub(CS, ISS, G, US, u_shlf, v_shlf)
call pass_var(CS%basal_traction, G%domain)
call pass_var(CS%basal_traction, G%domain, complete=.true.)
if (trim(CS%ice_viscosity_compute) == "MODEL_QUADRATURE") call pass_var(CS%Ee,G%domain)

! This makes sure basal stress is only applied when it is supposed to be
Expand Down Expand Up @@ -1079,9 +1079,9 @@ subroutine ice_shelf_solve_outer(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, i
call MOM_mesg(mesg, 5)

call calc_shelf_visc(CS, ISS, G, US, u_shlf, v_shlf)
call pass_var(CS%ice_visc, G%domain)
call pass_var(CS%ice_visc, G%domain, complete=.false.)
call calc_shelf_taub(CS, ISS, G, US, u_shlf, v_shlf)
call pass_var(CS%basal_traction, G%domain)
call pass_var(CS%basal_traction, G%domain, complete=.true.)
if (trim(CS%ice_viscosity_compute) == "MODEL_QUADRATURE") call pass_var(CS%Ee,G%domain)

! makes sure basal stress is only applied when it is supposed to be
Expand Down Expand Up @@ -1272,18 +1272,18 @@ subroutine ice_shelf_solve_inner(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, H
RHSu(:,:) = taudx(:,:) !- ubd(:,:)
RHSv(:,:) = taudy(:,:) !- vbd(:,:)

call pass_vector(RHSu, RHSv, G%domain, TO_ALL, BGRID_NE)
call pass_vector(RHSu, RHSv, G%domain, TO_ALL, BGRID_NE, complete=.false.)

call matrix_diagonal(CS, G, US, float_cond, H_node, CS%ice_visc, CS%basal_traction, &
hmask, rhoi_rhow, Phisub, DIAGu, DIAGv)

call pass_vector(DIAGu, DIAGv, G%domain, TO_ALL, BGRID_NE)
call pass_vector(DIAGu, DIAGv, G%domain, TO_ALL, BGRID_NE, complete=.false.)

call CG_action(CS, Au, Av, u_shlf, v_shlf, Phi, Phisub, CS%umask, CS%vmask, hmask, &
H_node, CS%ice_visc, float_cond, CS%bed_elev, CS%basal_traction, &
G, US, isc-1, iec+1, jsc-1, jec+1, rhoi_rhow)

call pass_vector(Au, Av, G%domain, TO_ALL, BGRID_NE)
call pass_vector(Au, Av, G%domain, TO_ALL, BGRID_NE, complete=.true.)

Ru(:,:) = (RHSu(:,:) - Au(:,:))
Rv(:,:) = (RHSv(:,:) - Av(:,:))
Expand Down Expand Up @@ -1345,12 +1345,12 @@ subroutine ice_shelf_solve_inner(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, H

do j=jscq,jecq ; do i=iscq,iecq
if (CS%umask(I,J) == 1) then
sum_vec(I,J) = resid_scale * Zu(I,J) * Ru(I,J)
sum_vec_2(I,J) = resid_scale * Du(I,J) * Au(I,J)
sum_vec(I,J) = resid_scale * (Zu(I,J) * Ru(I,J))
sum_vec_2(I,J) = resid_scale * (Du(I,J) * Au(I,J))
endif
if (CS%vmask(I,J) == 1) then
sum_vec(I,J) = sum_vec(I,J) + resid_scale * Zv(I,J) * Rv(I,J)
sum_vec_2(I,J) = sum_vec_2(I,J) + resid_scale * Dv(I,J) * Av(I,J)
sum_vec(I,J) = sum_vec(I,J) + resid_scale * (Zv(I,J) * Rv(I,J))
sum_vec_2(I,J) = sum_vec_2(I,J) + resid_scale * (Dv(I,J) * Av(I,J))
endif
enddo ; enddo

Expand Down Expand Up @@ -1400,12 +1400,12 @@ subroutine ice_shelf_solve_inner(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, H

do j=jscq,jecq ; do i=iscq,iecq
if (CS%umask(I,J) == 1) then
sum_vec(I,J) = resid_scale * Zu(I,J) * Ru(I,J)
sum_vec_2(I,J) = resid_scale * Zu_old(I,J) * Ru_old(I,J)
sum_vec(I,J) = resid_scale * (Zu(I,J) * Ru(I,J))
sum_vec_2(I,J) = resid_scale * (Zu_old(I,J) * Ru_old(I,J))
endif
if (CS%vmask(I,J) == 1) then
sum_vec(I,J) = sum_vec(I,J) + resid_scale * Zv(I,J) * Rv(I,J)
sum_vec_2(I,J) = sum_vec_2(I,J) + resid_scale * Zv_old(I,J) * Rv_old(I,J)
sum_vec(I,J) = sum_vec(I,J) + resid_scale * (Zv(I,J) * Rv(I,J))
sum_vec_2(I,J) = sum_vec_2(I,J) + resid_scale * (Zv_old(I,J) * Rv_old(I,J))
endif
enddo ; enddo

Expand Down Expand Up @@ -1443,9 +1443,9 @@ subroutine ice_shelf_solve_inner(CS, ISS, G, US, u_shlf, v_shlf, taudx, taudy, H

if (cg_halo == 0) then
! pass vectors
call pass_vector(Du, Dv, G%domain, TO_ALL, BGRID_NE)
call pass_vector(u_shlf, v_shlf, G%domain, TO_ALL, BGRID_NE)
call pass_vector(Ru, Rv, G%domain, TO_ALL, BGRID_NE)
call pass_vector(Du, Dv, G%domain, TO_ALL, BGRID_NE, complete=.false.)
call pass_vector(u_shlf, v_shlf, G%domain, TO_ALL, BGRID_NE, complete=.false.)
call pass_vector(Ru, Rv, G%domain, TO_ALL, BGRID_NE, complete=.true.)
cg_halo = 3
endif

Expand Down Expand Up @@ -2262,15 +2262,15 @@ subroutine CG_action(CS, uret, vret, u_shlf, v_shlf, Phi, Phisub, umask, vmask,

do iq=1,2 ; do jq=1,2

uq = u_shlf(I-1,J-1) * xquad(3-iq) * xquad(3-jq) + &
u_shlf(I,J-1) * xquad(iq) * xquad(3-jq) + &
u_shlf(I-1,J) * xquad(3-iq) * xquad(jq) + &
u_shlf(I,J) * xquad(iq) * xquad(jq)
uq = u_shlf(I-1,J-1) * (xquad(3-iq) * xquad(3-jq)) + &
u_shlf(I,J-1) * (xquad(iq) * xquad(3-jq)) + &
u_shlf(I-1,J) * (xquad(3-iq) * xquad(jq)) + &
u_shlf(I,J) * (xquad(iq) * xquad(jq))

vq = v_shlf(I-1,J-1) * xquad(3-iq) * xquad(3-jq) + &
v_shlf(I,J-1) * xquad(iq) * xquad(3-jq) + &
v_shlf(I-1,J) * xquad(3-iq) * xquad(jq) + &
v_shlf(I,J) * xquad(iq) * xquad(jq)
vq = v_shlf(I-1,J-1) * (xquad(3-iq) * xquad(3-jq)) + &
v_shlf(I,J-1) * (xquad(iq) * xquad(3-jq)) + &
v_shlf(I-1,J) * (xquad(3-iq) * xquad(jq)) + &
v_shlf(I,J) * (xquad(iq) * xquad(jq))

ux = u_shlf(I-1,J-1) * Phi(1,2*(jq-1)+iq,i,j) + &
u_shlf(I,J-1) * Phi(3,2*(jq-1)+iq,i,j) + &
Expand All @@ -2287,7 +2287,7 @@ subroutine CG_action(CS, uret, vret, u_shlf, v_shlf, Phi, Phisub, umask, vmask,
u_shlf(I-1,J) * Phi(6,2*(jq-1)+iq,i,j) + &
u_shlf(I,J) * Phi(8,2*(jq-1)+iq,i,j)

vy = v_shlf(I-1,j-1) * Phi(2,2*(jq-1)+iq,i,j) + &
vy = v_shlf(I-1,J-1) * Phi(2,2*(jq-1)+iq,i,j) + &
v_shlf(I,J-1) * Phi(4,2*(jq-1)+iq,i,j) + &
v_shlf(I-1,J) * Phi(6,2*(jq-1)+iq,i,j) + &
v_shlf(I,J) * Phi(8,2*(jq-1)+iq,i,j)
Expand All @@ -2306,9 +2306,9 @@ subroutine CG_action(CS, uret, vret, u_shlf, v_shlf, Phi, Phisub, umask, vmask,
ilq = 1 ; if (iq == iphi) ilq = 2
jlq = 1 ; if (jq == jphi) jlq = 2
if (umask(Itgt,Jtgt) == 1) uret(Itgt,Jtgt) = uret(Itgt,Jtgt) + &
0.25 * basal_trac(i,j) * uq * xquad(ilq) * xquad(jlq)
0.25 * basal_trac(i,j) * uq * (xquad(ilq) * xquad(jlq))
if (vmask(Itgt,Jtgt) == 1) vret(Itgt,Jtgt) = vret(Itgt,Jtgt) + &
0.25 * basal_trac(i,j) * vq * xquad(ilq) * xquad(jlq)
0.25 * basal_trac(i,j) * vq * (xquad(ilq) * xquad(jlq))
endif
enddo ; enddo
enddo ; enddo
Expand Down Expand Up @@ -2600,15 +2600,15 @@ subroutine apply_boundary_values(CS, ISS, G, US, time, Phisub, H_node, ice_visc,

do iq=1,2 ; do jq=1,2

uq = CS%u_bdry_val(I-1,J-1) * xquad(3-iq) * xquad(3-jq) + &
CS%u_bdry_val(I,J-1) * xquad(iq) * xquad(3-jq) + &
CS%u_bdry_val(I-1,J) * xquad(3-iq) * xquad(jq) + &
CS%u_bdry_val(I,J) * xquad(iq) * xquad(jq)
uq = CS%u_bdry_val(I-1,J-1) * (xquad(3-iq) * xquad(3-jq)) + &
CS%u_bdry_val(I,J-1) * (xquad(iq) * xquad(3-jq)) + &
CS%u_bdry_val(I-1,J) * (xquad(3-iq) * xquad(jq)) + &
CS%u_bdry_val(I,J) * (xquad(iq) * xquad(jq))

vq = CS%v_bdry_val(I-1,J-1) * xquad(3-iq) * xquad(3-jq) + &
CS%v_bdry_val(I,J-1) * xquad(iq) * xquad(3-jq) + &
CS%v_bdry_val(I-1,J) * xquad(3-iq) * xquad(jq) + &
CS%v_bdry_val(I,J) * xquad(iq) * xquad(jq)
vq = CS%v_bdry_val(I-1,J-1) * (xquad(3-iq) * xquad(3-jq)) + &
CS%v_bdry_val(I,J-1) * (xquad(iq) * xquad(3-jq)) + &
CS%v_bdry_val(I-1,J) * (xquad(3-iq) * xquad(jq)) + &
CS%v_bdry_val(I,J) * (xquad(iq) * xquad(jq))

ux = CS%u_bdry_val(I-1,J-1) * Phi(1,2*(jq-1)+iq) + &
CS%u_bdry_val(I,J-1) * Phi(3,2*(jq-1)+iq) + &
Expand Down Expand Up @@ -2643,7 +2643,7 @@ subroutine apply_boundary_values(CS, ISS, G, US, time, Phisub, H_node, ice_visc,

if (float_cond(i,j) == 0) then
u_bdry_contr(Itgt,Jtgt) = u_bdry_contr(Itgt,Jtgt) + &
0.25 * basal_trac(i,j) * uq * xquad(ilq) * xquad(jlq)
0.25 * basal_trac(i,j) * uq * (xquad(ilq) * xquad(jlq))
endif
endif

Expand All @@ -2654,7 +2654,7 @@ subroutine apply_boundary_values(CS, ISS, G, US, time, Phisub, H_node, ice_visc,

if (float_cond(i,j) == 0) then
v_bdry_contr(Itgt,Jtgt) = v_bdry_contr(Itgt,Jtgt) + &
0.25 * basal_trac(i,j) * vq * xquad(ilq) * xquad(jlq)
0.25 * basal_trac(i,j) * vq * (xquad(ilq) * xquad(jlq))
endif
endif
enddo ; enddo
Expand Down Expand Up @@ -2916,8 +2916,8 @@ subroutine update_OD_ffrac(CS, G, US, ocean_mass, find_avg)
CS%OD_rt(i,j) = 0.0 ; CS%ground_frac_rt(i,j) = 0.0
enddo ; enddo

call pass_var(CS%ground_frac, G%domain)
call pass_var(CS%OD_av, G%domain)
call pass_var(CS%ground_frac, G%domain, complete=.false.)
call pass_var(CS%OD_av, G%domain, complete=.true.)
endif

end subroutine update_OD_ffrac
Expand Down Expand Up @@ -2989,8 +2989,8 @@ subroutine bilinear_shape_functions (X, Y, Phi, area)

a = -X(1)*(1-yquad(qpoint)) + X(2)*(1-yquad(qpoint)) - X(3)*yquad(qpoint) + X(4)*yquad(qpoint) ! d(x)/d(x*)
b = -Y(1)*(1-yquad(qpoint)) + Y(2)*(1-yquad(qpoint)) - Y(3)*yquad(qpoint) + Y(4)*yquad(qpoint) ! d(y)/d(x*)
c = -X(1)*(1-xquad(qpoint)) - X(2)*(xquad(qpoint)) + X(3)*(1-xquad(qpoint)) + X(4)*(xquad(qpoint)) ! d(x)/d(y*)
d = -Y(1)*(1-xquad(qpoint)) - Y(2)*(xquad(qpoint)) + Y(3)*(1-xquad(qpoint)) + Y(4)*(xquad(qpoint)) ! d(y)/d(y*)
c = -X(1)*(1-xquad(qpoint)) - X(2)*xquad(qpoint) + X(3)*(1-xquad(qpoint)) + X(4)*xquad(qpoint) ! d(x)/d(y*)
d = -Y(1)*(1-xquad(qpoint)) - Y(2)*xquad(qpoint) + Y(3)*(1-xquad(qpoint)) + Y(4)*xquad(qpoint) ! d(y)/d(y*)

do node=1,4

Expand Down Expand Up @@ -3480,8 +3480,8 @@ subroutine ice_shelf_temp(CS, ISS, G, US, time_step, melt_rate, Time)
endif
enddo ; enddo

call pass_var(CS%t_shelf, G%domain)
call pass_var(CS%tmask, G%domain)
call pass_var(CS%t_shelf, G%domain, complete=.false.)
call pass_var(CS%tmask, G%domain, complete=.true.)

if (CS%debug) then
call hchksum(CS%t_shelf, "temp after front", G%HI, haloshift=3, scale=US%C_to_degC)
Expand Down