pure subroutine apply_nudge_meridional_north(v_layer, nx_total, ny_total, nz, &
j_n, i0, i1, tau_in, tau_out, dt, v_data)
!! Post-anomaly nudging for the north edge.
!! "Incoming" at north = v_wall < 0 ⟹ tau_in.
integer, intent(in) :: nx_total, ny_total, nz, j_n, i0, i1
real(wp), intent(inout) :: v_layer(nx_total, ny_total + 1, nz)
real(wp), intent(in) :: tau_in, tau_out, dt, v_data
integer :: i, k
real(wp) :: tau, g2, v_b
do concurrent(i=i0:i1, k=1:nz) local(tau, g2, v_b)
if (v_layer(i, j_n, k) < 0.0_wp) then
tau = tau_in
else
tau = tau_out
end if
if (tau > 0.0_wp) then
g2 = dt/(tau + dt)
v_b = (1.0_wp - g2)*v_layer(i, j_n, k) + g2*v_data
v_layer(i, j_n, k) = v_b
end if
end do
end subroutine apply_nudge_meridional_north