bem_coulomb_fmm_tree_utils Module

Coulomb FMM tree 構造の共通ユーティリティ。


Uses

  • module~~bem_coulomb_fmm_tree_utils~~UsesGraph module~bem_coulomb_fmm_tree_utils bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_periodic bem_coulomb_fmm_periodic module~bem_coulomb_fmm_tree_utils->module~bem_coulomb_fmm_periodic module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_coulomb_fmm_tree_utils->module~bem_coulomb_fmm_types module~bem_kinds bem_kinds module~bem_coulomb_fmm_tree_utils->module~bem_kinds module~bem_coulomb_fmm_periodic->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic->module~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_tree_utils~~UsedByGraph module~bem_coulomb_fmm_tree_utils bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_eval_ops bem_coulomb_fmm_eval_ops module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_periodic_root_ops bem_coulomb_fmm_periodic_root_ops 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_tree_utils module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_periodic_root_ops module~bem_coulomb_fmm_state_ops bem_coulomb_fmm_state_ops module~bem_coulomb_fmm_state_ops->module~bem_coulomb_fmm_tree_utils module~bem_coulomb_fmm_core_build bem_coulomb_fmm_core_build 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_eval_ops module~bem_coulomb_fmm_core_state bem_coulomb_fmm_core_state module~bem_coulomb_fmm_core_state->module~bem_coulomb_fmm_state_ops

Functions

public pure function octant_index(x, y, z, center)

座標が親ノード中心のどの八分木に属するかを返す。

Arguments

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

判定する x 座標。

real(kind=dp), intent(in) :: y

判定する x 座標。 判定する y 座標。

real(kind=dp), intent(in) :: z

判定する x 座標。 判定する y 座標。 判定する z 座標。

real(kind=dp), intent(in) :: center(3)

判定する x 座標。 判定する y 座標。 判定する z 座標。

Return Value integer(kind=i32)

public pure function active_tree_nnode(plan, use_target_tree)

現在有効な木のノード数を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

Return Value integer(kind=i32)

public pure function active_tree_child_count(plan, use_target_tree, node_idx)

有効な木の指定ノードにある子ノード数を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: node_idx

ノード番号。

Return Value integer(kind=i32)

public pure function active_tree_child_idx(plan, use_target_tree, child_k, node_idx)

有効な木の子ノード番号を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: child_k

子の連番。

integer(kind=i32), intent(in) :: node_idx

子の連番。 親ノード番号。

Return Value integer(kind=i32)

public pure function active_tree_child_octant(plan, use_target_tree, child_k, node_idx)

有効な木の子ノードが属する八分木番号を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: child_k

子の連番。

integer(kind=i32), intent(in) :: node_idx

子の連番。 親ノード番号。

Return Value integer(kind=i32)

public pure function active_tree_node_center(plan, use_target_tree, node_idx) result(center)

有効な木のノード中心座標を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: node_idx

ノード番号。

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

public pure function active_tree_node_half_size(plan, use_target_tree, node_idx) result(half_size)

有効な木のノード半サイズを返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: node_idx

ノード番号。

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

public pure function active_tree_node_radius(plan, use_target_tree, node_idx)

有効な木のノード外接半径を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: node_idx

ノード番号。

Return Value real(kind=dp)

public pure function active_tree_max_depth(plan, use_target_tree)

有効な木の最大深さを返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

Return Value integer(kind=i32)

public pure function active_tree_level_node(plan, use_target_tree, level_pos)

レベル配列からノード番号を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: level_pos

レベル内位置。

Return Value integer(kind=i32)

public function nodes_well_separated(plan, target_node, source_node)

target/source ノードが十分離れているかを判定する。

Arguments

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

FMM 計画。

integer(kind=i32), intent(in) :: target_node

target ノード番号。

integer(kind=i32), intent(in) :: source_node

target ノード番号。 source ノード番号。

Return Value logical


Subroutines

public pure subroutine active_tree_level_bounds(plan, use_target_tree, depth, level_start_pos, level_end_pos)

指定深さのレベル範囲を返す。

Arguments

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

FMM 計画。

logical, intent(in) :: use_target_tree

target 木を使うなら .true.

integer(kind=i32), intent(in) :: depth

深さ。

integer(kind=i32), intent(out) :: level_start_pos

レベル先頭位置。

integer(kind=i32), intent(out) :: level_end_pos

レベル先頭位置。 レベル末尾位置。

public subroutine append_i32_buffer(buf, n_used, capacity, value)

整数バッファへ値を追加し、必要なら容量を拡張する。

Arguments

Type IntentOptional Attributes Name
integer(kind=i32), intent(inout), allocatable :: buf(:)
integer(kind=i32), intent(inout) :: n_used

使用中要素数。

integer(kind=i32), intent(inout) :: capacity

使用中要素数。 確保容量。

integer(kind=i32), intent(in) :: value

追加する値。