locate_zero_mode_interval Subroutine

public pure subroutine locate_zero_mode_interval(break_z, tolerance, z, interval, breakpoint)

A target on a breakpoint (same coincidence rule as the plan's breakpoint merge) takes the requested sheet trace; any other target lies strictly inside one interval.

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: break_z(:)
real(kind=dp), intent(in) :: tolerance
real(kind=dp), intent(in) :: z
integer(kind=i32), intent(out) :: interval
integer(kind=i32), intent(out) :: breakpoint

Calls

proc~~locate_zero_mode_interval~~CallsGraph proc~locate_zero_mode_interval locate_zero_mode_interval proc~zero_mode_heights_coincide zero_mode_heights_coincide proc~locate_zero_mode_interval->proc~zero_mode_heights_coincide

Called by

proc~~locate_zero_mode_interval~~CalledByGraph proc~locate_zero_mode_interval locate_zero_mode_interval proc~eval_periodic_zero_mode eval_periodic_zero_mode proc~eval_periodic_zero_mode->proc~locate_zero_mode_interval proc~refresh_periodic_zero_mode_state refresh_periodic_zero_mode_state proc~refresh_periodic_zero_mode_state->proc~locate_zero_mode_interval none~init~6 electrostatic_snapshot_type%init none~init~6->proc~refresh_periodic_zero_mode_state proc~beach_zero_mode_eval beach_zero_mode_eval proc~beach_zero_mode_eval->proc~eval_periodic_zero_mode proc~beach_zero_mode_update beach_zero_mode_update proc~beach_zero_mode_update->proc~refresh_periodic_zero_mode_state proc~core_eval_point_impl core_eval_point_impl proc~core_eval_point_impl->proc~eval_periodic_zero_mode proc~core_eval_points_impl core_eval_points_impl proc~core_eval_points_impl->proc~eval_periodic_zero_mode proc~core_eval_potential_point_impl core_eval_potential_point_impl proc~core_eval_potential_point_impl->proc~eval_periodic_zero_mode proc~core_eval_potential_points_impl core_eval_potential_points_impl proc~core_eval_potential_points_impl->proc~eval_periodic_zero_mode proc~core_update_state_impl core_update_state_impl proc~core_update_state_impl->proc~refresh_periodic_zero_mode_state proc~prepare_periodic_cache_and_stop prepare_periodic_cache_and_stop proc~prepare_periodic_cache_and_stop->none~init~6 program~main main program~main->proc~prepare_periodic_cache_and_stop

Source Code

  pure subroutine locate_zero_mode_interval(break_z, tolerance, z, interval, breakpoint)
    real(dp), intent(in) :: break_z(:), tolerance, z
    integer(i32), intent(out) :: interval, breakpoint
    integer(i32) :: low, high, middle

    low = 1_i32
    high = size(break_z)
    breakpoint = 0_i32
    do while (low <= high)
      middle = (low + high)/2_i32
      if (zero_mode_heights_coincide(z, break_z(middle), tolerance)) then
        breakpoint = middle
        interval = middle + 1_i32
        return
      else if (z < break_z(middle)) then
        high = middle - 1_i32
      else
        low = middle + 1_i32
      end if
    end do
    interval = low
  end subroutine locate_zero_mode_interval