core_build_panel_plan_impl Subroutine

public subroutine core_build_panel_plan_impl(plan, v0, v1, v2, options)

Arguments

Type IntentOptional 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

Calls

proc~~core_build_panel_plan_impl~~CallsGraph proc~core_build_panel_plan_impl core_build_panel_plan_impl proc~active_tree_child_count active_tree_child_count proc~core_build_panel_plan_impl->proc~active_tree_child_count proc~active_tree_child_idx active_tree_child_idx proc~core_build_panel_plan_impl->proc~active_tree_child_idx proc~active_tree_nnode active_tree_nnode proc~core_build_panel_plan_impl->proc~active_tree_nnode proc~active_tree_node_center active_tree_node_center proc~core_build_panel_plan_impl->proc~active_tree_node_center proc~active_tree_node_radius active_tree_node_radius proc~core_build_panel_plan_impl->proc~active_tree_node_radius proc~append_i32_buffer append_i32_buffer proc~core_build_panel_plan_impl->proc~append_i32_buffer proc~build_axis_powers build_axis_powers proc~core_build_panel_plan_impl->proc~build_axis_powers proc~build_periodic_shift_values build_periodic_shift_values proc~core_build_panel_plan_impl->proc~build_periodic_shift_values proc~build_periodic_zero_mode_height_plan build_periodic_zero_mode_height_plan proc~core_build_panel_plan_impl->proc~build_periodic_zero_mode_height_plan proc~compute_laplace_derivatives compute_laplace_derivatives proc~core_build_panel_plan_impl->proc~compute_laplace_derivatives proc~core_destroy_plan_impl core_destroy_plan_impl proc~core_build_panel_plan_impl->proc~core_destroy_plan_impl proc~distance_to_source_bbox distance_to_source_bbox proc~core_build_panel_plan_impl->proc~distance_to_source_bbox proc~distance_to_source_bbox_periodic distance_to_source_bbox_periodic proc~core_build_panel_plan_impl->proc~distance_to_source_bbox_periodic proc~has_valid_target_box has_valid_target_box proc~core_build_panel_plan_impl->proc~has_valid_target_box proc~init_panel_geometry init_panel_geometry proc~core_build_panel_plan_impl->proc~init_panel_geometry proc~initialize_basis_tables initialize_basis_tables proc~core_build_panel_plan_impl->proc~initialize_basis_tables proc~nodes_well_separated nodes_well_separated proc~core_build_panel_plan_impl->proc~nodes_well_separated proc~octant_index octant_index proc~core_build_panel_plan_impl->proc~octant_index proc~precompute_periodic2_ewald_data precompute_periodic2_ewald_data proc~core_build_panel_plan_impl->proc~precompute_periodic2_ewald_data proc~precompute_periodic_root_operator precompute_periodic_root_operator proc~core_build_panel_plan_impl->proc~precompute_periodic_root_operator proc~use_periodic2_cached_kneq0 use_periodic2_cached_kneq0 proc~core_build_panel_plan_impl->proc~use_periodic2_cached_kneq0 proc~wrap_src_pos_to_primary_cell wrap_src_pos_to_primary_cell proc~core_build_panel_plan_impl->proc~wrap_src_pos_to_primary_cell proc~reset_fmm_plan reset_fmm_plan proc~core_destroy_plan_impl->proc~reset_fmm_plan proc~apply_periodic2_minimum_image apply_periodic2_minimum_image proc~distance_to_source_bbox_periodic->proc~apply_periodic2_minimum_image proc~nodes_well_separated->proc~active_tree_node_center proc~nodes_well_separated->proc~active_tree_node_radius proc~nodes_well_separated->proc~apply_periodic2_minimum_image proc~reset_periodic2_ewald_data reset_periodic2_ewald_data proc~precompute_periodic2_ewald_data->proc~reset_periodic2_ewald_data proc~resolve_periodic2_ewald_alpha resolve_periodic2_ewald_alpha proc~precompute_periodic2_ewald_data->proc~resolve_periodic2_ewald_alpha proc~use_periodic2_root_operator use_periodic2_root_operator proc~precompute_periodic2_ewald_data->proc~use_periodic2_root_operator proc~precompute_periodic_root_operator->proc~active_tree_child_count proc~precompute_periodic_root_operator->proc~active_tree_child_idx proc~precompute_periodic_root_operator->proc~active_tree_nnode proc~precompute_periodic_root_operator->proc~active_tree_node_center proc~precompute_periodic_root_operator->proc~build_axis_powers proc~precompute_periodic_root_operator->proc~use_periodic2_cached_kneq0 proc~acquire_file_lock acquire_file_lock proc~precompute_periodic_root_operator->proc~acquire_file_lock proc~active_tree_max_depth active_tree_max_depth proc~precompute_periodic_root_operator->proc~active_tree_max_depth proc~active_tree_node_half_size active_tree_node_half_size proc~precompute_periodic_root_operator->proc~active_tree_node_half_size proc~add_periodic2_exact_ewald_correction_single_source add_periodic2_exact_ewald_correction_single_source proc~precompute_periodic_root_operator->proc~add_periodic2_exact_ewald_correction_single_source proc~add_periodic2_exact_ewald_potential_correction_single_source add_periodic2_exact_ewald_potential_correction_single_source proc~precompute_periodic_root_operator->proc~add_periodic2_exact_ewald_potential_correction_single_source proc~create_directories create_directories proc~precompute_periodic_root_operator->proc~create_directories proc~mpi_allreduce_sum_real_dp_array mpi_allreduce_sum_real_dp_array proc~precompute_periodic_root_operator->proc~mpi_allreduce_sum_real_dp_array proc~mpi_bcast_i32_array mpi_bcast_i32_array proc~precompute_periodic_root_operator->proc~mpi_bcast_i32_array proc~mpi_bcast_real_dp_array mpi_bcast_real_dp_array proc~precompute_periodic_root_operator->proc~mpi_bcast_real_dp_array proc~mpi_get_rank_size mpi_get_rank_size proc~precompute_periodic_root_operator->proc~mpi_get_rank_size proc~mpi_initialize mpi_initialize proc~precompute_periodic_root_operator->proc~mpi_initialize proc~mpi_is_root mpi_is_root proc~precompute_periodic_root_operator->proc~mpi_is_root proc~mpi_shutdown mpi_shutdown proc~precompute_periodic_root_operator->proc~mpi_shutdown proc~periodic_cache_fingerprint periodic_cache_fingerprint proc~precompute_periodic_root_operator->proc~periodic_cache_fingerprint proc~prepare_regularized_qr prepare_regularized_qr proc~precompute_periodic_root_operator->proc~prepare_regularized_qr proc~read_periodic_operator_cache read_periodic_operator_cache proc~precompute_periodic_root_operator->proc~read_periodic_operator_cache proc~release_file_lock release_file_lock proc~precompute_periodic_root_operator->proc~release_file_lock proc~solve_regularized_qr solve_regularized_qr proc~precompute_periodic_root_operator->proc~solve_regularized_qr proc~write_periodic_operator_cache write_periodic_operator_cache proc~precompute_periodic_root_operator->proc~write_periodic_operator_cache proc~periodic_operator_checksum periodic_operator_checksum proc~read_periodic_operator_cache->proc~periodic_operator_checksum proc~reset_fmm_plan->proc~reset_periodic2_ewald_data proc~use_periodic2_root_operator->proc~use_periodic2_cached_kneq0 proc~atomic_rename atomic_rename proc~write_periodic_operator_cache->proc~atomic_rename proc~write_periodic_operator_cache->proc~periodic_operator_checksum

Source Code

  subroutine core_build_panel_plan_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 core_build_plan_common(plan, src_pos, options, v0, v1, v2)
  end subroutine core_build_panel_plan_impl