pure subroutine ice_mass_update_y_impl(iareaT, vh, mca, dt_adv, nghost, ny_phys, ncat, nx, ny)
!! Meridional twin of `ice_mass_update_x_impl`.
integer, intent(in) :: nghost, ny_phys, ncat, nx, ny
real(wp), intent(in) :: iareaT(nx, ny)
real(wp), intent(in) :: vh(nx, ny + 1, ncat)
real(wp), intent(inout) :: mca(nx, ny, ncat)
real(wp), intent(in) :: dt_adv
integer :: i, j, c, j_lo, j_hi
j_lo = nghost + 1
j_hi = nghost + ny_phys
do concurrent(j=j_lo:j_hi, i=1:nx, c=1:ncat)
mca(i, j, c) = mca(i, j, c) - dt_adv*iareaT(i, j)*(vh(i, j + 1, c) - vh(i, j, c))
end do
end subroutine ice_mass_update_y_impl