bem_coulomb_fmm_types Module

Coulomb FMM コアで共有する型定義。


Uses

  • module~~bem_coulomb_fmm_types~~UsesGraph module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_kinds bem_kinds module~bem_coulomb_fmm_types->module~bem_kinds iso_fortran_env iso_fortran_env module~bem_kinds->iso_fortran_env

Used by

  • module~~bem_coulomb_fmm_types~~UsedByGraph module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_coulomb_fmm_basis bem_coulomb_fmm_basis module~bem_coulomb_fmm_basis->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_core bem_coulomb_fmm_core module~bem_coulomb_fmm_core->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_eval_ops bem_coulomb_fmm_eval_ops module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_basis module~bem_coulomb_fmm_periodic bem_coulomb_fmm_periodic module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_periodic module~bem_coulomb_fmm_periodic_ewald bem_coulomb_fmm_periodic_ewald module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_periodic_ewald module~bem_coulomb_fmm_tree_utils bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_periodic->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic_ewald->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic_ewald->module~bem_coulomb_fmm_periodic module~bem_coulomb_fmm_periodic_root_ops bem_coulomb_fmm_periodic_root_ops module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_basis module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_periodic module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_periodic_ewald module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_plan_ops bem_coulomb_fmm_plan_ops module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_basis module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_periodic module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_periodic_ewald module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_periodic_root_ops module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_state_ops bem_coulomb_fmm_state_ops module~bem_coulomb_fmm_state_ops->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_state_ops->module~bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_tree_utils->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_tree_utils->module~bem_coulomb_fmm_periodic module~bem_field_solver_eval bem_field_solver_eval module~bem_field_solver_eval->module~bem_coulomb_fmm_types module~bem_field_solver_eval->module~bem_coulomb_fmm_core module~bem_field_solver_eval->module~bem_coulomb_fmm_periodic module~bem_field_solver_eval->module~bem_coulomb_fmm_periodic_ewald module~bem_field_solver bem_field_solver module~bem_field_solver_eval->module~bem_field_solver module~bem_coulomb_fmm_core_build bem_coulomb_fmm_core_build module~bem_coulomb_fmm_core_build->module~bem_coulomb_fmm_core module~bem_coulomb_fmm_core_build->module~bem_coulomb_fmm_plan_ops module~bem_coulomb_fmm_core_eval bem_coulomb_fmm_core_eval module~bem_coulomb_fmm_core_eval->module~bem_coulomb_fmm_core module~bem_coulomb_fmm_core_eval->module~bem_coulomb_fmm_eval_ops module~bem_coulomb_fmm_core_state bem_coulomb_fmm_core_state module~bem_coulomb_fmm_core_state->module~bem_coulomb_fmm_core module~bem_coulomb_fmm_core_state->module~bem_coulomb_fmm_state_ops module~bem_field_solver->module~bem_coulomb_fmm_core module~bem_field_solver_config bem_field_solver_config module~bem_field_solver_config->module~bem_coulomb_fmm_core module~bem_field_solver_config->module~bem_field_solver module~bem_field_solver_tree bem_field_solver_tree module~bem_field_solver_tree->module~bem_coulomb_fmm_core module~bem_field_solver_tree->module~bem_field_solver module~bem_simulator bem_simulator module~bem_simulator->module~bem_field_solver module~bem_simulator_io bem_simulator_io module~bem_simulator_io->module~bem_simulator module~bem_simulator_loop bem_simulator_loop module~bem_simulator_loop->module~bem_simulator module~bem_simulator_stats bem_simulator_stats module~bem_simulator_stats->module~bem_simulator program~main main program~main->module~bem_simulator

Variables

Type Visibility Attributes Name Initial
real(kind=dp), public, parameter :: inv_sqrt_pi = 0.56418958354775628695d0

Derived Types

type, public ::  fmm_options_type

Components

Type Visibility Attributes Name Initial
real(kind=dp), public :: theta = 0.5d0
integer(kind=i32), public :: leaf_max = 16_i32
integer(kind=i32), public :: order = 4_i32
real(kind=dp), public :: softening = 0.0d0
logical, public :: use_periodic2 = .false.
character(len=16), public :: periodic_far_correction = 'auto'
integer(kind=i32), public :: periodic_axes(2) = 0_i32
real(kind=dp), public :: periodic_len(2) = 0.0d0
integer(kind=i32), public :: periodic_image_layers = 1_i32
real(kind=dp), public :: periodic_ewald_alpha = 0.0d0
integer(kind=i32), public :: periodic_ewald_layers = 4_i32
real(kind=dp), public :: target_box_min(3) = 0.0d0
real(kind=dp), public :: target_box_max(3) = 0.0d0

type, public ::  periodic2_ewald_data_type

Components

Type Visibility Attributes Name Initial
logical, public :: ready = .false.
integer(kind=i32), public :: axis1 = 0_i32
integer(kind=i32), public :: axis2 = 0_i32
integer(kind=i32), public :: axis_free = 0_i32
integer(kind=i32), public :: nimg = 0_i32
integer(kind=i32), public :: img_outer = 0_i32
integer(kind=i32), public :: kmax = 0_i32
real(kind=dp), public :: alpha = 0.0d0
real(kind=dp), public :: soft2 = 0.0d0
real(kind=dp), public :: cell_area = 0.0d0
real(kind=dp), public :: k0_pref = 0.0d0
integer(kind=i32), public :: screen_count = 0_i32
integer(kind=i32), public :: inner_count = 0_i32
integer(kind=i32), public :: k_count = 0_i32
real(kind=dp), public, allocatable :: screen_shift1(:)
real(kind=dp), public, allocatable :: screen_shift2(:)
real(kind=dp), public, allocatable :: inner_shift1(:)
real(kind=dp), public, allocatable :: inner_shift2(:)
real(kind=dp), public, allocatable :: k1(:)
real(kind=dp), public, allocatable :: k2(:)
real(kind=dp), public, allocatable :: kmag(:)
real(kind=dp), public, allocatable :: karg0(:)
real(kind=dp), public, allocatable :: kpref1(:)
real(kind=dp), public, allocatable :: kpref2(:)
real(kind=dp), public, allocatable :: kprefz(:)

type, public ::  fmm_plan_type

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(:,:)

type, public ::  fmm_state_type

Components

Type Visibility Attributes Name Initial
logical, public :: ready = .false.
integer(kind=i32), public :: update_count = 0_i32
real(kind=dp), public, pointer :: src_q(:) => null()
real(kind=dp), public, pointer :: multipole(:,:) => null()
real(kind=dp), public, pointer :: local(:,:) => null()
integer(kind=i32), public, pointer :: multipole_active(:) => null()
integer(kind=i32), public, pointer :: local_active(:) => null()

Subroutines

public subroutine reset_periodic2_ewald_data(data)

periodic2 Ewald 用の補助データを初期状態へ戻す。

Arguments

Type IntentOptional Attributes Name
type(periodic2_ewald_data_type), intent(inout) :: data

リセット対象の補助データ。

public subroutine reset_fmm_plan(plan)

FMM plan を初期状態へ戻す。

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(inout) :: plan

リセット対象の FMM plan。

public subroutine initialize_fmm_state(state)

FMM state のポインタ成分を未関連状態へ初期化する。

Arguments

Type IntentOptional Attributes Name
type(fmm_state_type), intent(inout) :: state

初期化対象の FMM state。

public subroutine reset_fmm_state(state)

FMM state を初期状態へ戻す。

Arguments

Type IntentOptional Attributes Name
type(fmm_state_type), intent(inout) :: state

リセット対象の FMM state。