precompute_periodic_root_operator Subroutine

public subroutine precompute_periodic_root_operator(plan, reuse_translations)

periodic2 の root operator を前計算する。

Arguments

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

FMM 計画。

logical, intent(in), optional :: reuse_translations

Calls

proc~~precompute_periodic_root_operator~~CallsGraph proc~precompute_periodic_root_operator precompute_periodic_root_operator proc~add_periodic2_exact_ewald_field_potential_single_source add_periodic2_exact_ewald_field_potential_single_source proc~precompute_periodic_root_operator->proc~add_periodic2_exact_ewald_field_potential_single_source proc~build_axis_powers build_axis_powers proc~precompute_periodic_root_operator->proc~build_axis_powers proc~factor_tall_matrix_qr factor_tall_matrix_qr proc~precompute_periodic_root_operator->proc~factor_tall_matrix_qr proc~initialize_basis_tables initialize_basis_tables proc~precompute_periodic_root_operator->proc~initialize_basis_tables proc~lookup_cell_cache lookup_cell_cache proc~precompute_periodic_root_operator->proc~lookup_cell_cache 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_is_root mpi_is_root proc~precompute_periodic_root_operator->proc~mpi_is_root proc~periodic_cache_fingerprint periodic_cache_fingerprint proc~precompute_periodic_root_operator->proc~periodic_cache_fingerprint proc~periodic_shell_mean_point_excess periodic_shell_mean_point_excess proc~precompute_periodic_root_operator->proc~periodic_shell_mean_point_excess proc~periodic_source_proxy_half_size periodic_source_proxy_half_size proc~precompute_periodic_root_operator->proc~periodic_source_proxy_half_size proc~prepare_regularized_qr prepare_regularized_qr proc~precompute_periodic_root_operator->proc~prepare_regularized_qr proc~publish_cell_cache_and_unlock publish_cell_cache_and_unlock proc~precompute_periodic_root_operator->proc~publish_cell_cache_and_unlock proc~solve_regularized_qr solve_regularized_qr proc~precompute_periodic_root_operator->proc~solve_regularized_qr proc~use_periodic2_cached_kneq0 use_periodic2_cached_kneq0 proc~precompute_periodic_root_operator->proc~use_periodic2_cached_kneq0 proc~periodic2_ewald_exp_erfc periodic2_ewald_exp_erfc proc~add_periodic2_exact_ewald_field_potential_single_source->proc~periodic2_ewald_exp_erfc proc~acquire_file_lock acquire_file_lock proc~lookup_cell_cache->proc~acquire_file_lock proc~create_directories create_directories proc~lookup_cell_cache->proc~create_directories proc~read_periodic_operator_cache read_periodic_operator_cache proc~lookup_cell_cache->proc~read_periodic_operator_cache proc~release_file_lock release_file_lock proc~lookup_cell_cache->proc~release_file_lock proc~periodic_shell_mean_excess periodic_shell_mean_excess proc~periodic_shell_mean_point_excess->proc~periodic_shell_mean_excess proc~prepare_regularized_qr->proc~factor_tall_matrix_qr proc~publish_cell_cache_and_unlock->proc~release_file_lock proc~write_periodic_operator_cache write_periodic_operator_cache proc~publish_cell_cache_and_unlock->proc~write_periodic_operator_cache proc~periodic_operator_checksum periodic_operator_checksum proc~read_periodic_operator_cache->proc~periodic_operator_checksum proc~atomic_rename atomic_rename proc~write_periodic_operator_cache->proc~atomic_rename proc~write_periodic_operator_cache->proc~periodic_operator_checksum

Called by

proc~~precompute_periodic_root_operator~~CalledByGraph proc~precompute_periodic_root_operator precompute_periodic_root_operator proc~core_complete_plan_impl core_complete_plan_impl proc~core_complete_plan_impl->proc~precompute_periodic_root_operator proc~core_build_panel_plan_impl core_build_panel_plan_impl proc~core_build_panel_plan_impl->proc~core_complete_plan_impl proc~core_build_plan_impl core_build_plan_impl proc~core_build_plan_impl->proc~core_complete_plan_impl

Source Code

  subroutine precompute_periodic_root_operator(plan, reuse_translations)
    type(fmm_plan_type), intent(inout) :: plan
    ! Internal verification path: false computes every pair independently and bypasses disk cache.
    logical, intent(in), optional :: reuse_translations
    logical :: reuse

    if (allocated(plan%periodic_root_operator)) deallocate (plan%periodic_root_operator)
    if (allocated(plan%periodic_operator_cell_slot)) deallocate (plan%periodic_operator_cell_slot)
    if (allocated(plan%periodic_operator_cells)) deallocate (plan%periodic_operator_cells)
    plan%periodic_operator_built_count = 0_i32
    plan%periodic_operator_new_cell_count = 0_i32
    plan%periodic_root_operator_ready = .false.
    plan%periodic_root_target_count = 0_i32

    plan%periodic_cache_hit = .false.
    plan%periodic_cache_fingerprint = ''
    plan%periodic_cache_path = ''
    if (use_periodic2_cached_kneq0(plan)) then
      reuse = .true.
      if (present(reuse_translations)) reuse = reuse_translations
      ! MPI の初期化・終了は呼び出し側の責務。rank の分担は plan の options が持つ文脈に従う。
      call precompute_periodic_cached_operator_collective(plan, plan%options%mpi, reuse)
    end if
  end subroutine precompute_periodic_root_operator