複数の評価点で電位を計算する。
| Type | Intent | Optional | 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(:) |
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