core_eval_potential_points_impl Subroutine

public subroutine core_eval_potential_points_impl(plan, state, target_pos, phi)

複数の評価点で電位を計算する。

Arguments

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

構築済みの FMM 計画。

type(fmm_state_type), intent(inout) :: state

評価に使う FMM state。

real(kind=dp), intent(in) :: target_pos(:,:)
real(kind=dp), intent(out) :: phi(:)

Calls

proc~~core_eval_potential_points_impl~~CallsGraph proc~core_eval_potential_points_impl core_eval_potential_points_impl proc~active_tree_child_count active_tree_child_count proc~core_eval_potential_points_impl->proc~active_tree_child_count proc~active_tree_child_idx active_tree_child_idx proc~core_eval_potential_points_impl->proc~active_tree_child_idx proc~active_tree_child_octant active_tree_child_octant proc~core_eval_potential_points_impl->proc~active_tree_child_octant proc~active_tree_nnode active_tree_nnode proc~core_eval_potential_points_impl->proc~active_tree_nnode proc~active_tree_node_center active_tree_node_center proc~core_eval_potential_points_impl->proc~active_tree_node_center proc~active_tree_node_half_size active_tree_node_half_size proc~core_eval_potential_points_impl->proc~active_tree_node_half_size proc~add_periodic2_exact_ewald_potential_correction_all_sources add_periodic2_exact_ewald_potential_correction_all_sources proc~core_eval_potential_points_impl->proc~add_periodic2_exact_ewald_potential_correction_all_sources proc~build_axis_powers build_axis_powers proc~core_eval_potential_points_impl->proc~build_axis_powers proc~octant_index octant_index proc~core_eval_potential_points_impl->proc~octant_index proc~use_periodic2_m2l_root_oracle use_periodic2_m2l_root_oracle proc~core_eval_potential_points_impl->proc~use_periodic2_m2l_root_oracle proc~wrap_periodic2_point~2 wrap_periodic2_point proc~core_eval_potential_points_impl->proc~wrap_periodic2_point~2 proc~add_periodic2_exact_ewald_potential_correction_single_source add_periodic2_exact_ewald_potential_correction_single_source proc~add_periodic2_exact_ewald_potential_correction_all_sources->proc~add_periodic2_exact_ewald_potential_correction_single_source

Source Code

  subroutine core_eval_potential_points_impl(plan, state, target_pos, phi)
    type(fmm_plan_type), intent(in) :: plan
    type(fmm_state_type), intent(inout) :: state
    real(dp), intent(in) :: target_pos(:, :)
    real(dp), intent(out) :: phi(:)
    integer(i32) :: i, ntarget

    if (size(target_pos, 1) /= 3) error stop 'FMM core expects target_pos(3,m).'
    if (size(phi) /= size(target_pos, 2)) then
      error stop 'FMM eval_potential_points expects phi(m).'
    end if
    ntarget = int(size(target_pos, 2), i32)

    !$omp parallel do default(none) schedule(static) &
    !$omp   shared(plan, state, target_pos, phi, ntarget) private(i)
    do i = 1_i32, ntarget
      call core_eval_potential_point_xyz_impl( &
        plan, state, target_pos(1, i), target_pos(2, i), target_pos(3, i), phi(i) &
        )
    end do
    !$omp end parallel do
  end subroutine core_eval_potential_points_impl