zero_mode_heights_coincide Function

public pure function zero_mode_heights_coincide(a, b, geometric_tolerance) result(coincide)

Two heights are one breakpoint when they differ by at most the plan's geometric tolerance or by the few ULPs that binary64 cannot resolve at their magnitude. Only the second term sees the absolute coordinate, so a representable tilt (tens of ULPs) far from the origin stays inclined.

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: a
real(kind=dp), intent(in) :: b
real(kind=dp), intent(in) :: geometric_tolerance

Return Value logical


Called by

proc~~zero_mode_heights_coincide~~CalledByGraph proc~zero_mode_heights_coincide zero_mode_heights_coincide proc~build_periodic_zero_mode_height_plan build_periodic_zero_mode_height_plan proc~build_periodic_zero_mode_height_plan->proc~zero_mode_heights_coincide proc~locate_zero_mode_interval locate_zero_mode_interval proc~locate_zero_mode_interval->proc~zero_mode_heights_coincide proc~beach_zero_mode_build beach_zero_mode_build proc~beach_zero_mode_build->proc~build_periodic_zero_mode_height_plan proc~build_periodic_zero_mode_plan build_periodic_zero_mode_plan proc~build_periodic_zero_mode_plan->proc~build_periodic_zero_mode_height_plan proc~core_complete_plan_impl core_complete_plan_impl proc~core_complete_plan_impl->proc~build_periodic_zero_mode_height_plan 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~build_periodic_zero_mode_plan 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_build_panel_plan_impl core_build_panel_plan_impl proc~core_build_panel_plan_impl->proc~core_complete_plan_impl proc~core_build_plan_impl core_build_plan_impl proc~core_build_plan_impl->proc~core_complete_plan_impl 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 logical function zero_mode_heights_coincide(a, b, geometric_tolerance) result(coincide)
    real(dp), intent(in) :: a, b, geometric_tolerance

    coincide = abs(a - b) <= max(geometric_tolerance, 8.0_dp*spacing(max(abs(a), abs(b))))
  end function zero_mode_heights_coincide