Panel sources only: options, centroids and panel geometry, as the first part of a plan build.
The plan then supports exact-direct evaluation; core_complete_plan_impl adds the FMM part.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(fmm_plan_type), | intent(inout) | :: | plan | |||
| real(kind=dp), | intent(in) | :: | v0(:,:) | |||
| real(kind=dp), | intent(in) | :: | v1(:,:) | |||
| real(kind=dp), | intent(in) | :: | v2(:,:) | |||
| type(fmm_options_type), | intent(in) | :: | options |
subroutine core_prepare_panel_sources_impl(plan, v0, v1, v2, options) type(fmm_plan_type), intent(inout) :: plan real(dp), intent(in) :: v0(:, :), v1(:, :), v2(:, :) type(fmm_options_type), intent(in) :: options real(dp), allocatable :: src_pos(:, :) if (size(v0, 1) /= 3 .or. size(v1, 1) /= 3 .or. size(v2, 1) /= 3 .or. & size(v0, 2) /= size(v1, 2) .or. size(v0, 2) /= size(v2, 2)) then error stop 'FMM panel core expects v0/v1/v2(3,n).' end if allocate (src_pos(3, size(v0, 2))) src_pos = (v0 + v1 + v2)/3.0_dp call prepare_plan_sources(plan, src_pos, options, v0, v1, v2) end subroutine core_prepare_panel_sources_impl