fmm_plan_type Derived Type

type, public :: fmm_plan_type


Inherits

type~~fmm_plan_type~~InheritsGraph type~fmm_plan_type fmm_plan_type type~fmm_options_type fmm_options_type type~fmm_plan_type->type~fmm_options_type options type~periodic2_ewald_data_type periodic2_ewald_data_type type~fmm_plan_type->type~periodic2_ewald_data_type periodic_ewald

Inherited by

type~~fmm_plan_type~~InheritedByGraph type~fmm_plan_type fmm_plan_type type~field_solver_type field_solver_type type~field_solver_type->type~fmm_plan_type fmm_core_plan

Components

Type Visibility Attributes Name Initial
type(fmm_options_type), public :: options = fmm_options_type()
logical, public :: built = .false.
integer(kind=i32), public :: nsrc = 0_i32
integer(kind=i32), public :: ncoef = 0_i32
integer(kind=i32), public :: nderiv = 0_i32
integer(kind=i32), public, allocatable :: alpha(:,:)
integer(kind=i32), public, allocatable :: alpha_degree(:)
real(kind=dp), public, allocatable :: alpha_factorial(:)
real(kind=dp), public, allocatable :: alpha_sign(:)
integer(kind=i32), public, allocatable :: alpha_map(:,:,:)
integer(kind=i32), public, allocatable :: alpha_plus_axis(:,:)
integer(kind=i32), public, allocatable :: deriv_alpha(:,:)
integer(kind=i32), public, allocatable :: deriv_degree(:)
real(kind=dp), public, allocatable :: deriv_factorial(:)
integer(kind=i32), public, allocatable :: deriv_map(:,:,:)
integer(kind=i32), public, allocatable :: alpha_beta_deriv_idx(:,:)
integer(kind=i32), public :: eval_term_count = 0_i32
integer(kind=i32), public, allocatable :: eval_exp(:,:)
integer(kind=i32), public, allocatable :: eval_deriv_idx(:,:)
real(kind=dp), public, allocatable :: eval_inv_factorial(:)
real(kind=dp), public, allocatable :: src_pos(:,:)
integer(kind=i32), public :: max_node = 0_i32
integer(kind=i32), public :: nnode = 0_i32
integer(kind=i32), public :: node_max_depth = 0_i32
integer(kind=i32), public, allocatable :: elem_order(:)
integer(kind=i32), public, allocatable :: node_start(:)
integer(kind=i32), public, allocatable :: node_count(:)
integer(kind=i32), public, allocatable :: child_count(:)
integer(kind=i32), public, allocatable :: child_idx(:,:)
integer(kind=i32), public, allocatable :: child_octant(:,:)
integer(kind=i32), public, allocatable :: node_depth(:)
integer(kind=i32), public, allocatable :: node_level_start(:)
integer(kind=i32), public, allocatable :: node_level_nodes(:)
real(kind=dp), public, allocatable :: node_center(:,:)
real(kind=dp), public, allocatable :: node_half_size(:,:)
real(kind=dp), public, allocatable :: node_radius(:)
logical, public :: target_tree_ready = .false.
integer(kind=i32), public :: target_max_node = 0_i32
integer(kind=i32), public :: target_nnode = 0_i32
integer(kind=i32), public :: target_node_max_depth = 0_i32
integer(kind=i32), public, allocatable :: target_child_count(:)
integer(kind=i32), public, allocatable :: target_child_idx(:,:)
integer(kind=i32), public, allocatable :: target_child_octant(:,:)
integer(kind=i32), public, allocatable :: target_node_depth(:)
integer(kind=i32), public, allocatable :: target_level_start(:)
integer(kind=i32), public, allocatable :: target_level_nodes(:)
real(kind=dp), public, allocatable :: target_node_center(:,:)
real(kind=dp), public, allocatable :: target_node_half_size(:,:)
real(kind=dp), public, allocatable :: target_node_radius(:)
integer(kind=i32), public :: nsource_leaf = 0_i32
integer(kind=i32), public, allocatable :: source_leaf_nodes(:)
integer(kind=i32), public :: nleaf = 0_i32
integer(kind=i32), public, allocatable :: leaf_nodes(:)
integer(kind=i32), public, allocatable :: leaf_slot_of_node(:)
integer(kind=i32), public, allocatable :: near_start(:)
integer(kind=i32), public, allocatable :: near_nodes(:)
integer(kind=i32), public, allocatable :: near_source_start(:)
integer(kind=i32), public, allocatable :: near_source_idx(:)
real(kind=dp), public, allocatable :: near_source_shift1(:)
real(kind=dp), public, allocatable :: near_source_shift2(:)
integer(kind=i32), public, allocatable :: far_start(:)
integer(kind=i32), public, allocatable :: far_nodes(:)
integer(kind=i32), public :: m2l_pair_count = 0_i32
integer(kind=i32), public :: m2l_build_count = 0_i32
integer(kind=i32), public :: m2l_visit_count = 0_i32
integer(kind=i32), public, allocatable :: m2l_target_nodes(:)
integer(kind=i32), public, allocatable :: m2l_source_nodes(:)
integer(kind=i32), public, allocatable :: m2l_shift_idx1(:)
integer(kind=i32), public, allocatable :: m2l_shift_idx2(:)
integer(kind=i32), public, allocatable :: m2l_target_start(:)
integer(kind=i32), public, allocatable :: m2l_pair_order(:)
integer(kind=i32), public, allocatable :: source_parent_of(:)
integer(kind=i32), public, allocatable :: parent_of(:)
integer(kind=i32), public, allocatable :: m2m_term_count(:)
integer(kind=i32), public, allocatable :: m2m_alpha_list(:,:)
integer(kind=i32), public, allocatable :: m2m_delta_list(:,:)
integer(kind=i32), public, allocatable :: l2l_term_count(:)
integer(kind=i32), public, allocatable :: l2l_gamma_list(:,:)
integer(kind=i32), public, allocatable :: l2l_delta_list(:,:)
real(kind=dp), public, allocatable :: shift_axis1(:)
real(kind=dp), public, allocatable :: shift_axis2(:)
type(periodic2_ewald_data_type), public :: periodic_ewald = periodic2_ewald_data_type()
logical, public :: periodic_root_operator_ready = .false.
integer(kind=i32), public :: periodic_root_target_count = 0_i32
integer(kind=i32), public, allocatable :: periodic_root_target_nodes(:)
real(kind=dp), public, allocatable :: periodic_root_operator(:,:,:)
real(kind=dp), public, allocatable :: m2l_deriv(:,:)
real(kind=dp), public, allocatable :: source_p2m_basis(:,:)
real(kind=dp), public, allocatable :: source_shift_monomial(:,:)
real(kind=dp), public, allocatable :: target_shift_monomial(:,:)

Source Code

  type :: fmm_plan_type
    type(fmm_options_type) :: options = fmm_options_type()
    logical :: built = .false.
    integer(i32) :: nsrc = 0_i32
    integer(i32) :: ncoef = 0_i32
    integer(i32) :: nderiv = 0_i32
    integer(i32), allocatable :: alpha(:, :)
    integer(i32), allocatable :: alpha_degree(:)
    real(dp), allocatable :: alpha_factorial(:)
    real(dp), allocatable :: alpha_sign(:)
    integer(i32), allocatable :: alpha_map(:, :, :)
    integer(i32), allocatable :: alpha_plus_axis(:, :)
    integer(i32), allocatable :: deriv_alpha(:, :)
    integer(i32), allocatable :: deriv_degree(:)
    real(dp), allocatable :: deriv_factorial(:)
    integer(i32), allocatable :: deriv_map(:, :, :)
    integer(i32), allocatable :: alpha_beta_deriv_idx(:, :)
    integer(i32) :: eval_term_count = 0_i32
    integer(i32), allocatable :: eval_exp(:, :)
    integer(i32), allocatable :: eval_deriv_idx(:, :)
    real(dp), allocatable :: eval_inv_factorial(:)
    real(dp), allocatable :: src_pos(:, :)
    integer(i32) :: max_node = 0_i32
    integer(i32) :: nnode = 0_i32
    integer(i32) :: node_max_depth = 0_i32
    integer(i32), allocatable :: elem_order(:)
    integer(i32), allocatable :: node_start(:), node_count(:)
    integer(i32), allocatable :: child_count(:), child_idx(:, :), child_octant(:, :)
    integer(i32), allocatable :: node_depth(:)
    integer(i32), allocatable :: node_level_start(:), node_level_nodes(:)
    real(dp), allocatable :: node_center(:, :)
    real(dp), allocatable :: node_half_size(:, :)
    real(dp), allocatable :: node_radius(:)
    logical :: target_tree_ready = .false.
    integer(i32) :: target_max_node = 0_i32
    integer(i32) :: target_nnode = 0_i32
    integer(i32) :: target_node_max_depth = 0_i32
    integer(i32), allocatable :: target_child_count(:), target_child_idx(:, :), target_child_octant(:, :)
    integer(i32), allocatable :: target_node_depth(:)
    integer(i32), allocatable :: target_level_start(:), target_level_nodes(:)
    real(dp), allocatable :: target_node_center(:, :)
    real(dp), allocatable :: target_node_half_size(:, :)
    real(dp), allocatable :: target_node_radius(:)
    integer(i32) :: nsource_leaf = 0_i32
    integer(i32), allocatable :: source_leaf_nodes(:)
    integer(i32) :: nleaf = 0_i32
    integer(i32), allocatable :: leaf_nodes(:)
    integer(i32), allocatable :: leaf_slot_of_node(:)
    integer(i32), allocatable :: near_start(:), near_nodes(:)
    integer(i32), allocatable :: near_source_start(:), near_source_idx(:)
    real(dp), allocatable :: near_source_shift1(:), near_source_shift2(:)
    integer(i32), allocatable :: far_start(:), far_nodes(:)
    integer(i32) :: m2l_pair_count = 0_i32
    integer(i32) :: m2l_build_count = 0_i32
    integer(i32) :: m2l_visit_count = 0_i32
    integer(i32), allocatable :: m2l_target_nodes(:), m2l_source_nodes(:)
    integer(i32), allocatable :: m2l_shift_idx1(:), m2l_shift_idx2(:)
    integer(i32), allocatable :: m2l_target_start(:), m2l_pair_order(:)
    integer(i32), allocatable :: source_parent_of(:)
    integer(i32), allocatable :: parent_of(:)
    integer(i32), allocatable :: m2m_term_count(:)
    integer(i32), allocatable :: m2m_alpha_list(:, :)
    integer(i32), allocatable :: m2m_delta_list(:, :)
    integer(i32), allocatable :: l2l_term_count(:)
    integer(i32), allocatable :: l2l_gamma_list(:, :)
    integer(i32), allocatable :: l2l_delta_list(:, :)
    real(dp), allocatable :: shift_axis1(:), shift_axis2(:)
    type(periodic2_ewald_data_type) :: periodic_ewald = periodic2_ewald_data_type()
    logical :: periodic_root_operator_ready = .false.
    integer(i32) :: periodic_root_target_count = 0_i32
    integer(i32), allocatable :: periodic_root_target_nodes(:)
    real(dp), allocatable :: periodic_root_operator(:, :, :)
    real(dp), allocatable :: m2l_deriv(:, :)
    real(dp), allocatable :: source_p2m_basis(:, :)
    real(dp), allocatable :: source_shift_monomial(:, :)
    real(dp), allocatable :: target_shift_monomial(:, :)
  end type fmm_plan_type