Build the tree, interaction lists and operators of a plan whose sources are prepared.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(fmm_plan_type), | intent(inout) | :: | plan |
subroutine core_complete_plan_impl(plan) type(fmm_plan_type), intent(inout) :: plan integer(i32) :: nsrc, idx, zero_status, free_axis real(dp), allocatable :: source_heights(:, :) character(len=256) :: zero_message nsrc = plan%nsrc if (use_periodic2_cached_kneq0(plan)) then free_axis = 6_i32 - sum(plan%options%periodic_axes) allocate (source_heights(3, nsrc)) do idx = 1_i32, nsrc if (plan%panel_source) then source_heights(:, idx) = plan%panel_geometry(idx)%vertex(free_axis, :) else source_heights(:, idx) = plan%src_pos(free_axis, idx) end if end do call build_periodic_zero_mode_height_plan( & source_heights, product(plan%options%periodic_len), plan%periodic_k0_plan, zero_status, zero_message & ) if (zero_status /= periodic_zero_mode_ok) error stop 'cached periodic k0 plan: '//trim(zero_message) plan%periodic_k0_free_axis = free_axis plan%periodic_k0_ready = .true. deallocate (source_heights) end if call initialize_basis_tables(plan, plan%options%order) if (use_periodic2_cached_kneq0(plan)) call precompute_periodic_source_grid(plan) call build_source_tree(plan) call precompute_source_p2m_basis(plan) call build_target_topology(plan) call build_interactions(plan) call precompute_translation_operators(plan) call precompute_periodic_shell_mean(plan) call precompute_periodic2_ewald_data(plan) call precompute_periodic_root_operator(plan) call precompute_m2l_derivatives(plan) plan%built = .true. end subroutine core_complete_plan_impl