複数の評価点で電場を計算する。
| 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) | :: | e(:,:) |
subroutine core_eval_points_impl(plan, state, target_pos, e) type(fmm_plan_type), intent(in) :: plan type(fmm_state_type), intent(inout) :: state real(dp), intent(in) :: target_pos(:, :) real(dp), intent(out) :: e(:, :) integer(i32) :: i, ntarget if (size(target_pos, 1) /= 3) error stop 'FMM core expects target_pos(3,m).' if (size(e, 1) /= 3 .or. size(e, 2) /= size(target_pos, 2)) then error stop 'FMM eval_points expects e(3,m).' end if ntarget = int(size(target_pos, 2), i32) !$omp parallel do default(none) schedule(static) & !$omp shared(plan, state, target_pos, e, ntarget) private(i) do i = 1_i32, ntarget call core_eval_point_xyz_impl( & plan, state, target_pos(1, i), target_pos(2, i), target_pos(3, i), e(1, i), e(2, i), e(3, i) & ) end do !$omp end parallel do end subroutine core_eval_points_impl