pure subroutine evp_sh_dd_dt_impl(dy_dxT, dx_dyT, iareaT, idyCu, idxCv, dyCu, dxCv, &
ui, vi, sh_dd, sh_dt, nx, ny)
!! sh_Dt / sh_Dd at cells (:1053-1061).
integer, intent(in) :: nx, ny
real(wp), intent(in) :: dy_dxT(nx, ny), dx_dyT(nx, ny), iareaT(nx, ny)
real(wp), intent(in) :: idyCu(nx + 1, ny), idxCv(nx, ny + 1)
real(wp), intent(in) :: dyCu(nx + 1, ny), dxCv(nx, ny + 1)
real(wp), intent(in) :: ui(nx + 1, ny), vi(nx, ny + 1)
real(wp), intent(out) :: sh_dd(nx, ny), sh_dt(nx, ny)
integer :: i, j
do concurrent(j=1:ny, i=1:nx)
sh_dt(i, j) = dy_dxT(i, j)*(idyCu(i + 1, j)*ui(i + 1, j) - idyCu(i, j)*ui(i, j)) - &
dx_dyT(i, j)*(idxCv(i, j + 1)*vi(i, j + 1) - idxCv(i, j)*vi(i, j))
sh_dd(i, j) = iareaT(i, j)*((dyCu(i + 1, j)*ui(i + 1, j) - dyCu(i, j)*ui(i, j)) + &
(dxCv(i, j + 1)*vi(i, j + 1) - dxCv(i, j)*vi(i, j)))
end do
end subroutine evp_sh_dd_dt_impl