periodic_source_proxy_half_size Function

public pure function periodic_source_proxy_half_size(half) result(proxy_half)

Expand all box faces by the same padding, with proxy corner radius = scale * cell half diagonal.

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: half(3)

Return Value real(kind=dp), (3)


Called by

proc~~periodic_source_proxy_half_size~~CalledByGraph proc~periodic_source_proxy_half_size periodic_source_proxy_half_size proc~core_complete_plan_impl core_complete_plan_impl proc~core_complete_plan_impl->proc~periodic_source_proxy_half_size proc~precompute_periodic_root_operator precompute_periodic_root_operator proc~core_complete_plan_impl->proc~precompute_periodic_root_operator proc~precompute_periodic_root_operator->proc~periodic_source_proxy_half_size 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

Source Code

  pure function periodic_source_proxy_half_size(half) result(proxy_half)
    real(dp), intent(in) :: half(3)
    real(dp) :: proxy_half(3), radius, normalized_sum, padding

    radius = norm2(half)
    normalized_sum = sum(half)/radius
    padding = radius*(sqrt(normalized_sum**2 + 3.0_dp*(periodic_operator_proxy_shell_scale**2 - 1.0_dp)) - &
                      normalized_sum)/3.0_dp
    proxy_half = half + padding
  end function periodic_source_proxy_half_size