pure subroutine evp_stress_relax_impl(zeta, sh_dd, sh_dt, pres_mice, mice, &
i_1pdt_t, dt_2tdamp, i_ec2, str_d, str_t, nx, ny)
!! str_d/str_t semi-implicit relax (:1124-1134), non-weak_low_shear
!! branch only.
integer, intent(in) :: nx, ny
real(wp), intent(in) :: zeta(nx, ny), sh_dd(nx, ny), sh_dt(nx, ny)
real(wp), intent(in) :: pres_mice(nx, ny), mice(nx, ny)
real(wp), intent(in) :: i_1pdt_t, dt_2tdamp, i_ec2
real(wp), intent(inout) :: str_d(nx, ny), str_t(nx, ny)
integer :: i, j
do concurrent(j=1:ny, i=1:nx)
str_d(i, j) = i_1pdt_t*(str_d(i, j) + dt_2tdamp* &
(zeta(i, j)*sh_dd(i, j) - 0.5_wp*pres_mice(i, j)*mice(i, j)))
str_t(i, j) = i_1pdt_t*(str_t(i, j) + (i_ec2*dt_2tdamp)*(zeta(i, j)*sh_dt(i, j)))
end do
end subroutine evp_stress_relax_impl