bem_coulomb_fmm_periodic_ewald Module

periodic2 cached operator生成用のEwald teacher。


Uses

  • module~~bem_coulomb_fmm_periodic_ewald~~UsesGraph module~bem_coulomb_fmm_periodic_ewald bem_coulomb_fmm_periodic_ewald module~bem_coulomb_fmm_periodic bem_coulomb_fmm_periodic module~bem_coulomb_fmm_periodic_ewald->module~bem_coulomb_fmm_periodic module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic_ewald->module~bem_coulomb_fmm_types module~bem_kinds bem_kinds module~bem_coulomb_fmm_periodic_ewald->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 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_periodic_ewald~~UsedByGraph module~bem_coulomb_fmm_periodic_ewald bem_coulomb_fmm_periodic_ewald module~bem_coulomb_fmm_periodic_root_ops bem_coulomb_fmm_periodic_root_ops 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_periodic_ewald 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

Functions

public function resolve_periodic2_ewald_alpha(plan)

periodic2 Ewald の減衰係数 alpha を決定する。

Arguments

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

FMM 計画。

Return Value real(kind=dp)

public pure function periodic2_ewald_exp_erfc(kz, karg0, adz) result(term)

periodic2 Ewald の k≠0 項 exp(kz)erfc(karg0 + adz) を overflow させずに返す。 kz = ±|k|dz と adz = ±alphadz は同じ符号で、karg0 = |k|/(2 alpha) なので kz - (karg0 + adz)^2 = -(karg0^2 + adz^2) が成り立つ。 exp(kz) が binary64 で有限な kz では元の積をそのまま返す(従来の式とビット一致)。 exp(kz) が overflow する kz では y = karg0 + adz >= sqrt(2 kz) > 37 なので erfc は 0 に underflow し、 元の積は inf0 = NaN になる。この範囲だけ exp(-(karg0^2 + adz^2))erfc_scaled(y) で評価する。 真値はこのとき exp(-kz) 以下で、binary64 では 0 か非正規数になる。

Arguments

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

指数の引数 ±|k|dz。

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

指数の引数 ±|k|dz。 |k|/(2 alpha)。

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

指数の引数 ±|k|dz。 |k|/(2 alpha)。 kz と同符号の ±alpha*dz。

Return Value real(kind=dp)


Subroutines

public subroutine precompute_periodic2_ewald_data(plan)

periodic2 Ewald の事前計算データを作成する。

Arguments

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

FMM 計画。

public subroutine add_periodic2_exact_ewald_correction_single_source(plan, q, src, target, e)

1 粒子分の periodic2 Ewald 補正を加算する。

Arguments

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

FMM 計画。

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

電荷量。

real(kind=dp), intent(in) :: src(3)
real(kind=dp), intent(in) :: target(3)
real(kind=dp), intent(inout) :: e(3)

public subroutine add_periodic2_exact_ewald_kneq0_correction_single_source(plan, q, src, target, e)

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(in) :: plan
real(kind=dp), intent(in) :: q
real(kind=dp), intent(in) :: src(3)
real(kind=dp), intent(in) :: target(3)
real(kind=dp), intent(inout) :: e(3)

public subroutine add_periodic2_exact_ewald_potential_correction_single_source(plan, q, src, target, phi)

1 粒子分の periodic2 Ewald の電位補正を加算する。

Arguments

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

FMM 計画。

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

電荷量。

real(kind=dp), intent(in) :: src(3)
real(kind=dp), intent(in) :: target(3)
real(kind=dp), intent(inout) :: phi

電位。

public subroutine add_periodic2_exact_ewald_field_potential_single_source(plan, q, src, target, e, phi)

1 粒子分の periodic2 Ewald 補正の電場と電位を、超越関数を共有して 1 回で加算する。 個別の電場・電位ルーチンを続けて呼ぶのと同じ値を返す(operator 作成の teacher 用)。

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(in) :: plan
real(kind=dp), intent(in) :: q
real(kind=dp), intent(in) :: src(3)
real(kind=dp), intent(in) :: target(3)
real(kind=dp), intent(inout) :: e(3)
real(kind=dp), intent(inout) :: phi

public subroutine add_periodic2_kneq0_potential_correction_single_source(plan, q, src, target, phi)

Arguments

Type IntentOptional Attributes Name
type(fmm_plan_type), intent(in) :: plan
real(kind=dp), intent(in) :: q
real(kind=dp), intent(in) :: src(3)
real(kind=dp), intent(in) :: target(3)
real(kind=dp), intent(inout) :: phi