pure subroutine relax_map_v_impl(v, v_ref, idamp_v, nx, nyv, nz, dt)
!! Relax `v_face_y_layer` toward `v_ref` at rate `idamp_v`. Mirror of
!! `relax_map_u_impl` for the y-direction.
integer, intent(in) :: nx, nyv, nz
real(wp), intent(inout) :: v(nx, nyv, nz)
real(wp), intent(in) :: v_ref(nx, nyv, nz)
real(wp), intent(in) :: idamp_v(nx, nyv)
real(wp), intent(in) :: dt
integer :: i, j, k
real(wp) :: decay
do concurrent(k=1:nz, j=1:nyv, i=1:nx) local(decay)
if (idamp_v(i, j) > 0.0_wp) then
decay = exp(-idamp_v(i, j)*dt)
v(i, j, k) = relax_toward(v(i, j, k), v_ref(i, j, k), decay)
end if
end do
end subroutine relax_map_v_impl