bem_coulomb_fmm_basis Module

Coulomb FMM の multi-index と微分テーブル計算。


Uses

  • module~~bem_coulomb_fmm_basis~~UsesGraph module~bem_coulomb_fmm_basis bem_coulomb_fmm_basis module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_coulomb_fmm_basis->module~bem_coulomb_fmm_types module~bem_kinds bem_kinds module~bem_coulomb_fmm_basis->module~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_basis~~UsedByGraph module~bem_coulomb_fmm_basis bem_coulomb_fmm_basis module~bem_coulomb_fmm_eval_ops bem_coulomb_fmm_eval_ops module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_basis module~bem_coulomb_fmm_periodic_root_ops bem_coulomb_fmm_periodic_root_ops module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_basis module~bem_coulomb_fmm_plan_ops bem_coulomb_fmm_plan_ops module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_basis module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_periodic_root_ops 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

Subroutines

public subroutine initialize_basis_tables(plan, order)

FMM の多重指数テーブルと評価用補助テーブルを初期化する。

Arguments

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

初期化対象の FMM plan。

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

展開次数。

public subroutine build_axis_powers(d, order, xpow, ypow, zpow)

3 軸の冪を order まで順に計算する。

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: d(3)
integer(kind=i32), intent(in) :: order

計算する最大次数。

real(kind=dp), intent(out) :: xpow(0:order)
real(kind=dp), intent(out) :: ypow(0:order)
real(kind=dp), intent(out) :: zpow(0:order)

public subroutine compute_laplace_derivatives(plan, r, deriv)

ラプラス核の多重微分係数を計算する。 1/sqrt(|r|^2 + s^2) の全次数の偏微分 ∂^α f を漸化式で求める。 f = a^{-1/2}(a = |r|^2 + s^2)は a ∂_i f = -x_i f を満たし、Leibniz 則で ∂^β を当てると D(β+e_i) = -[ x_i D(β) + β_i D(β-e_i) + 2Σ_j β_j x_j D(β+e_i-e_j) + Σ_j β_j(β_j-1) D(β+e_i-2e_j) ] / a となる。multi-index は次数昇順に並んでいるので、1 回の走査で全次数が決まる。 旧来の多項式乗算版 compute_laplace_derivatives_reference と同じ値を返す(契約テストで検査)。

Arguments

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

多重指数テーブルを持つ FMM plan。

real(kind=dp), intent(in) :: r(3)
real(kind=dp), intent(out) :: deriv(:)

public subroutine compute_laplace_derivatives_reference(plan, r, deriv)

旧実装: (1+q)^{-1/2} の多項式展開を反復乗算で組み立てる。契約テストの参照用に残す。

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(in) :: plan
real(kind=dp), intent(in) :: r(3)
real(kind=dp), intent(out) :: deriv(:)