apply_periodic2_minimum_image Subroutine

public pure subroutine apply_periodic2_minimum_image(plan, d)

periodic2 の minimum image を差分ベクトルへ適用する。

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(in) :: plan

FMM 計画。

real(kind=dp), intent(inout) :: d(3)

Called by

proc~~apply_periodic2_minimum_image~~CalledByGraph proc~apply_periodic2_minimum_image apply_periodic2_minimum_image proc~distance_to_source_bbox_periodic distance_to_source_bbox_periodic proc~distance_to_source_bbox_periodic->proc~apply_periodic2_minimum_image proc~nodes_well_separated nodes_well_separated proc~nodes_well_separated->proc~apply_periodic2_minimum_image proc~core_build_plan_impl core_build_plan_impl proc~core_build_plan_impl->proc~distance_to_source_bbox_periodic proc~core_build_plan_impl->proc~nodes_well_separated

Source Code

  pure subroutine apply_periodic2_minimum_image(plan, d)
    type(fmm_plan_type), intent(in) :: plan
    real(dp), intent(inout) :: d(3)
    integer(i32) :: axis, k
    real(dp) :: len_k, half_len

    if (.not. plan%options%use_periodic2) return
    do k = 1_i32, 2_i32
      axis = plan%options%periodic_axes(k)
      len_k = plan%options%periodic_len(k)
      half_len = 0.5d0*len_k
      if (d(axis) > half_len) then
        d(axis) = d(axis) - len_k
      else if (d(axis) < -half_len) then
        d(axis) = d(axis) + len_k
      end if
    end do
  end subroutine apply_periodic2_minimum_image