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 module~bem_mpi bem_mpi module~bem_coulomb_fmm_types->module~bem_mpi module~bem_panel_geometry bem_panel_geometry module~bem_coulomb_fmm_types->module~bem_panel_geometry module~bem_periodic_shell_mean bem_periodic_shell_mean module~bem_coulomb_fmm_types->module~bem_periodic_shell_mean module~bem_periodic_zero_mode_plan bem_periodic_zero_mode_plan module~bem_coulomb_fmm_types->module~bem_periodic_zero_mode_plan iso_fortran_env iso_fortran_env module~bem_kinds->iso_fortran_env module~bem_mpi->module~bem_kinds module~bem_panel_geometry->module~bem_kinds ieee_arithmetic ieee_arithmetic module~bem_panel_geometry->ieee_arithmetic module~bem_periodic_shell_mean->module~bem_kinds module~bem_periodic_zero_mode_plan->module~bem_kinds module~bem_periodic_zero_mode_plan->ieee_arithmetic module~bem_constants bem_constants module~bem_periodic_zero_mode_plan->module~bem_constants module~bem_sorting bem_sorting module~bem_periodic_zero_mode_plan->module~bem_sorting module~bem_types bem_types module~bem_periodic_zero_mode_plan->module~bem_types module~bem_constants->module~bem_kinds module~bem_sorting->module~bem_kinds module~bem_types->module~bem_kinds module~bem_outflow_spectrum bem_outflow_spectrum module~bem_types->module~bem_outflow_spectrum module~bem_outflow_spectrum->module~bem_kinds sheath_model sheath_model module~bem_outflow_spectrum->sheath_model

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_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_cell_cache bem_coulomb_fmm_periodic_cell_cache module~bem_coulomb_fmm_periodic_cell_cache->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic_ewald bem_coulomb_fmm_periodic_ewald 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_cell_cache module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_periodic_ewald 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_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_kernel_c bem_field_kernel_c module~bem_field_kernel_c->module~bem_coulomb_fmm_core module~bem_field_solver bem_field_solver 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_eval bem_field_solver_eval module~bem_field_solver_eval->module~bem_coulomb_fmm_core module~bem_field_solver_eval->module~bem_field_solver module~bem_field_solver_fmm bem_field_solver_fmm module~bem_field_solver_fmm->module~bem_coulomb_fmm_core module~bem_field_solver_fmm->module~bem_field_solver module~bem_electrostatic_snapshot bem_electrostatic_snapshot module~bem_electrostatic_snapshot->module~bem_field_solver module~bem_field_solver_tree bem_field_solver_tree module~bem_field_solver_tree->module~bem_field_solver module~bem_output_writer_summary bem_output_writer_summary module~bem_output_writer_summary->module~bem_field_solver module~bem_output_writer bem_output_writer module~bem_output_writer_summary->module~bem_output_writer module~bem_app_config_particle_runtime bem_app_config_particle_runtime module~bem_app_config_particle_runtime->module~bem_electrostatic_snapshot module~bem_app_config_potential_runtime bem_app_config_potential_runtime module~bem_app_config_particle_runtime->module~bem_app_config_potential_runtime module~bem_app_config_potential_runtime->module~bem_electrostatic_snapshot module~bem_electrostatic_snapshot_eval bem_electrostatic_snapshot_eval module~bem_electrostatic_snapshot_eval->module~bem_electrostatic_snapshot module~bem_electrostatic_snapshot_upper_fourier bem_electrostatic_snapshot_upper_fourier module~bem_electrostatic_snapshot_upper_fourier->module~bem_electrostatic_snapshot module~bem_output_writer->module~bem_electrostatic_snapshot module~bem_particle_stepper bem_particle_stepper module~bem_particle_stepper->module~bem_electrostatic_snapshot module~bem_simulator bem_simulator module~bem_simulator->module~bem_electrostatic_snapshot module~bem_simulator->module~bem_output_writer module~bem_simulator->module~bem_particle_stepper module~bem_surface_models bem_surface_models module~bem_simulator->module~bem_surface_models module~bem_app_config_runtime bem_app_config_runtime module~bem_simulator->module~bem_app_config_runtime module~bem_run_outputs bem_run_outputs module~bem_simulator->module~bem_run_outputs module~bem_app_config bem_app_config module~bem_simulator->module~bem_app_config module~bem_surface_models->module~bem_electrostatic_snapshot program~main main program~main->module~bem_electrostatic_snapshot program~main->module~bem_output_writer program~main->module~bem_simulator module~bem_periodic_checkpoint bem_periodic_checkpoint program~main->module~bem_periodic_checkpoint program~main->module~bem_run_outputs program~main->module~bem_app_config module~bem_app_config_particle_runtime_batch bem_app_config_particle_runtime_batch module~bem_app_config_particle_runtime_batch->module~bem_app_config_particle_runtime module~bem_app_config_particle_runtime_sampling bem_app_config_particle_runtime_sampling module~bem_app_config_particle_runtime_sampling->module~bem_app_config_particle_runtime module~bem_app_config_particle_runtime_slots bem_app_config_particle_runtime_slots module~bem_app_config_particle_runtime_slots->module~bem_app_config_particle_runtime module~bem_app_config_runtime->module~bem_app_config_particle_runtime module~bem_app_config_runtime->module~bem_app_config_potential_runtime module~bem_output_writer_files bem_output_writer_files module~bem_output_writer_files->module~bem_output_writer module~bem_output_writer_history bem_output_writer_history module~bem_output_writer_history->module~bem_output_writer module~bem_periodic_checkpoint->module~bem_output_writer module~bem_run_outputs->module~bem_output_writer module~bem_run_outputs->module~bem_periodic_checkpoint module~bem_simulator_charge bem_simulator_charge module~bem_simulator_charge->module~bem_simulator module~bem_simulator_io bem_simulator_io module~bem_simulator_io->module~bem_output_writer module~bem_simulator_io->module~bem_simulator module~bem_simulator_io->module~bem_app_config_runtime module~bem_simulator_loop bem_simulator_loop module~bem_simulator_loop->module~bem_output_writer module~bem_simulator_loop->module~bem_simulator module~bem_simulator_loop->module~bem_app_config_runtime module~bem_simulator_loop->module~bem_periodic_checkpoint module~bem_simulator_loop->module~bem_run_outputs module~bem_zhao_outflow_refresh bem_zhao_outflow_refresh module~bem_simulator_loop->module~bem_zhao_outflow_refresh module~bem_simulator_particles bem_simulator_particles module~bem_simulator_particles->module~bem_particle_stepper module~bem_simulator_particles->module~bem_simulator module~bem_simulator_stats bem_simulator_stats module~bem_simulator_stats->module~bem_simulator module~bem_surface_models_conductor bem_surface_models_conductor module~bem_surface_models_conductor->module~bem_surface_models module~bem_app_config->module~bem_app_config_runtime module~bem_zhao_outflow_refresh->module~bem_app_config

Variables

Type Visibility Attributes Name Initial
real(kind=dp), public, parameter :: inv_sqrt_pi = 0.56418958354775628695d0
real(kind=dp), public, parameter :: periodic_operator_proxy_shell_scale = 1.5_dp
real(kind=dp), public, parameter :: periodic_operator_source_radius_ratio = 0.4_dp
real(kind=dp), public, parameter :: periodic_operator_target_radius_ratio = 0.5_dp

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
logical, public :: near_field_single = .false.

Panel sources only: keep the per-leaf near-field tables in single precision (relative to the leaf center) and sum them with the single-precision SIMD kernel. Off by default; results then differ at the 1e-6 level.

real(kind=dp), public :: softening = 0.0d0
logical, public :: use_periodic2 = .false.
character(len=16), public :: periodic_far_correction = 'none'
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
character(len=256), public :: periodic_cache_dir = ''
real(kind=dp), public :: periodic_generation_tolerance = 1.0d-8
integer(kind=i32), public :: periodic_operator_source_cells(3) = -1_i32

cached_kneq0 の遠方補正が使う source セルと target anchor の box 格子の各軸の分割数。負なら box と周期長から 自動で選ぶ(anchor は半対角線が短い周期長の 0.5 倍以下、source は 0.4 倍以下になるほぼ立方体のセルで、 source の分割数は anchor の 2^k 倍)。粗いと作成は速いが、粒子層の高さが周期長に近いとき非零モードに 面平均が漏れる。

integer(kind=i32), public :: periodic_operator_anchor_cells(3) = -1_i32
real(kind=dp), public :: target_box_min(3) = 0.0d0
real(kind=dp), public :: target_box_max(3) = 0.0d0
type(mpi_context), public :: mpi

cached_kneq0 の root operator を rank で分担して作るときの MPI 文脈。呼び出し側(runtime)が渡す。 既定は単一 rank で、collective は何もしない(C ABI・テスト・非 MPI build)。

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 :: sources_ready = .false.

Options, src_pos and panel_geometry are set; enough for exact-direct evaluation.

logical, public :: built = .false.

Tree, interaction lists and operators are built as well (implies sources_ready).

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(:,:)
logical, public :: panel_source = .false.
type(panel_geometry_type), public, allocatable :: panel_geometry(:)
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(:)
real(kind=dp), public, allocatable :: near_vx(:,:)

Panel sources only: the near-field panels in near_source_idx order as translated component arrays (vertex x/y/z per vertex, normal, edge lengths, outward edge normals per component, area), so a point evaluation reads its leaf's panels without gathering them from panel_geometry.

real(kind=dp), public, allocatable :: near_vy(:,:)

Panel sources only: the near-field panels in near_source_idx order as translated component arrays (vertex x/y/z per vertex, normal, edge lengths, outward edge normals per component, area), so a point evaluation reads its leaf's panels without gathering them from panel_geometry.

real(kind=dp), public, allocatable :: near_vz(:,:)

Panel sources only: the near-field panels in near_source_idx order as translated component arrays (vertex x/y/z per vertex, normal, edge lengths, outward edge normals per component, area), so a point evaluation reads its leaf's panels without gathering them from panel_geometry.

real(kind=dp), public, allocatable :: near_nx(:)
real(kind=dp), public, allocatable :: near_ny(:)
real(kind=dp), public, allocatable :: near_nz(:)
real(kind=dp), public, allocatable :: near_edge(:,:)
real(kind=dp), public, allocatable :: near_ox(:,:)
real(kind=dp), public, allocatable :: near_oy(:,:)
real(kind=dp), public, allocatable :: near_oz(:,:)
real(kind=dp), public, allocatable :: near_area(:)
real(kind=sp), public, allocatable :: near_sp_vx(:,:)

Single-precision counterparts used when options%near_field_single: vertices relative to the leaf center.

real(kind=sp), public, allocatable :: near_sp_vy(:,:)

Single-precision counterparts used when options%near_field_single: vertices relative to the leaf center.

real(kind=sp), public, allocatable :: near_sp_vz(:,:)

Single-precision counterparts used when options%near_field_single: vertices relative to the leaf center.

real(kind=sp), public, allocatable :: near_sp_nx(:)
real(kind=sp), public, allocatable :: near_sp_ny(:)
real(kind=sp), public, allocatable :: near_sp_nz(:)
real(kind=sp), public, allocatable :: near_sp_edge(:,:)
real(kind=sp), public, allocatable :: near_sp_ox(:,:)
real(kind=sp), public, allocatable :: near_sp_oy(:,:)
real(kind=sp), public, allocatable :: near_sp_oz(:,:)
real(kind=sp), public, allocatable :: near_sp_area(:)
real(kind=dp), public, allocatable :: near_leaf_center(:,:)
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
logical, public :: periodic_root_operator_ready = .false.
integer(kind=i32), public :: periodic_root_target_count = 0_i32

遠方補正の (target anchor, source cell) 組の数。anchor は box を各軸 periodic_operator_anchor_cells に分けた 格子で、適応木とは独立に点評価で参照する。operator は panel を含む source cell だけを持ち、 組 k = (slot-1)*anchor_count + anchor で並ぶ。slot は periodic_operator_cell_slot(cell)、 0 のセルは operator を持たない(線源を置けない)。

integer(kind=i32), public :: periodic_operator_anchor_count = 0_i32
integer(kind=i32), public :: periodic_operator_anchor_cells(3) = 0_i32
integer(kind=i32), public :: periodic_operator_source_cells(3) = 0_i32
real(kind=dp), public :: periodic_anchor_half(3) = 0.0_dp
real(kind=dp), public :: periodic_source_half(3) = 0.0_dp
real(kind=dp), public, allocatable :: periodic_anchor_center(:,:)
integer(kind=i32), public :: periodic_operator_built_count = 0_i32
integer(kind=i32), public, allocatable :: periodic_operator_cell_slot(:)
integer(kind=i32), public, allocatable :: periodic_operator_cells(:)
integer(kind=i32), public :: periodic_operator_new_cell_count = 0_i32

今回の初期化で新たに作った source cell の数(cache にあったセルは数えない)。

integer(kind=i32), public :: periodic_root_source_count = 0_i32
integer(kind=i32), public, allocatable :: periodic_source_cell(:)
real(kind=dp), public, allocatable :: periodic_source_center(:,:)
real(kind=dp), public, allocatable :: periodic_source_p2m_basis(:,:)
real(kind=dp), public, allocatable :: periodic_root_operator(:,:,:)
logical, public :: periodic_cache_hit = .false.
integer(kind=i32), public :: periodic_operator_build_count = 0_i32
integer(kind=i32), public :: periodic_qr_preparation_count = 0_i32
integer(kind=i32), public :: periodic_operator_local_target_count = 0_i32
integer(kind=i32), public :: periodic_operator_thread_count = 0_i32
integer(kind=i32), public :: periodic_operator_class_count = 0_i32
integer(kind=i64), public :: periodic_operator_ewald_evaluation_count = 0_i64
character(len=16), public :: periodic_cache_fingerprint = ''
character(len=512), public :: periodic_cache_path = ''
logical, public :: periodic_k0_ready = .false.
integer(kind=i32), public :: periodic_k0_free_axis = 0_i32
type(periodic_zero_mode_plan_type), public :: periodic_k0_plan
type(periodic_shell_mean_plan_type), public :: periodic_shell_mean

有限画像殻の面平均のうち、対称な平均場を除いた滑らかな残り(cached_kneq0 で実行時に引く)。

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()
real(kind=dp), public, allocatable :: periodic_multipole(:,:)
real(kind=dp), public, allocatable :: anchor_local(:,:)

遠方補正の anchor ごとの局所展開。点評価で、点を含む anchor の展開を葉の局所展開に加える。

integer(kind=i32), public, allocatable :: anchor_local_active(:)
type(periodic_zero_mode_state_type), public :: periodic_k0_state
type(periodic_shell_mean_state_type), public :: periodic_shell_mean_state

Functions

public pure function periodic_source_proxy_half_size(half) result(proxy_half)

Expand all box faces by the same padding, with proxy corner radius = scale * cell half diagonal.

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: half(3)

Return Value real(kind=dp), (3)


Subroutines

public subroutine reset_periodic2_ewald_data(data)

periodic2 Ewald 用の補助データを初期状態へ戻す。 intent(out) deallocates every allocatable component and applies the type's default values.

Arguments

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

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

public subroutine reset_fmm_plan(plan)

FMM plan を初期状態へ戻す。 The plan owns only allocatable storage (no pointers), so intent(out) deallocates every component and applies the type's default values; there is no second list of fields to keep in sync.

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(out) :: 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。