bem_periodic_shell_mean Module

periodic2 の有限画像殻の面平均を、無限面電荷の平均場から差し引いた滑らかな残り。

有限画像殻(中心セルと周囲 N 層の画像)の電位をセル C 上で面平均すると、無限面電荷の平均場 k0(h) = -2*pi*|h|/A と、滑らかな残り s(h) の和になる。s は 1/r を画像ブロック [c-(N+1/2)L, c+(N+1/2)L]^2 上で積分した閉じた式から k0 を引いたもので、h=0 でも解析的である。 cached_kneq0 の遠方補正は面平均 0 の残差だけを当てはめ、s は実行時に高さの表から引く。 単位は FMM core と同じ raw(1/r、Coulomb 定数なし)。


Uses

  • module~~bem_periodic_shell_mean~~UsesGraph module~bem_periodic_shell_mean bem_periodic_shell_mean module~bem_kinds bem_kinds module~bem_periodic_shell_mean->module~bem_kinds iso_fortran_env iso_fortran_env module~bem_kinds->iso_fortran_env

Used by

  • module~~bem_periodic_shell_mean~~UsedByGraph module~bem_periodic_shell_mean bem_periodic_shell_mean module~bem_coulomb_fmm_eval_ops bem_coulomb_fmm_eval_ops module~bem_coulomb_fmm_eval_ops->module~bem_periodic_shell_mean module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_coulomb_fmm_eval_ops->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_basis bem_coulomb_fmm_basis 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_root_ops bem_coulomb_fmm_periodic_root_ops module~bem_coulomb_fmm_periodic_root_ops->module~bem_periodic_shell_mean 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_cell_cache bem_coulomb_fmm_periodic_cell_cache module~bem_coulomb_fmm_periodic_root_ops->module~bem_coulomb_fmm_periodic_cell_cache module~bem_coulomb_fmm_periodic_ewald bem_coulomb_fmm_periodic_ewald 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_periodic_shell_mean module~bem_coulomb_fmm_plan_ops->module~bem_coulomb_fmm_periodic_root_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_tree_utils module~bem_coulomb_fmm_state_ops bem_coulomb_fmm_state_ops module~bem_coulomb_fmm_state_ops->module~bem_periodic_shell_mean 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_types->module~bem_periodic_shell_mean 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_core_build bem_coulomb_fmm_core_build module~bem_coulomb_fmm_core_build->module~bem_coulomb_fmm_plan_ops module~bem_coulomb_fmm_core_build->module~bem_coulomb_fmm_core 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_eval->module~bem_coulomb_fmm_core module~bem_coulomb_fmm_core_state bem_coulomb_fmm_core_state module~bem_coulomb_fmm_core_state->module~bem_coulomb_fmm_state_ops module~bem_coulomb_fmm_core_state->module~bem_coulomb_fmm_core module~bem_coulomb_fmm_periodic->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_periodic_cell_cache->module~bem_coulomb_fmm_types 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_tree_utils->module~bem_coulomb_fmm_types module~bem_coulomb_fmm_tree_utils->module~bem_coulomb_fmm_periodic 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

Derived Types

type, public ::  periodic_shell_mean_plan_type

線源ごとの s の高さ表。高さの格子は等間隔。

Components

Type Visibility Attributes Name Initial
logical, public :: ready = .false.
integer(kind=i32), public :: nz = 0_i32
integer(kind=i32), public :: periodic_axes(2) = 0_i32
integer(kind=i32), public :: free_axis = 0_i32
real(kind=dp), public :: z0 = 0.0_dp
real(kind=dp), public :: dz = 0.0_dp
real(kind=dp), public :: cell_lo(2) = 0.0_dp

平均をとるセルの下端と周期長、画像の層数、softening の二乗。

real(kind=dp), public :: cell_len(2) = 0.0_dp
integer(kind=i32), public :: image_layers = 0_i32
real(kind=dp), public :: soft2 = 0.0_dp
real(kind=dp), public, allocatable :: value(:,:)

(nz, nsrc)。値と高さ微分。

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

type, public ::  periodic_shell_mean_state_type

電荷を重ねた S(z) = sum_i q_i s_i(z) と dS/dz の格子値。

Components

Type Visibility Attributes Name Initial
real(kind=dp), public, allocatable :: value(:)
real(kind=dp), public, allocatable :: slope(:)

Subroutines

public pure subroutine periodic_shell_mean_excess(h, x1, x2, y1, y2, area, soft2, s, dsdh)

単位電荷 1 個の s(h) と ds/dh。

Arguments

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

評価点の高さ − 線源の高さ。

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

評価点の高さ − 線源の高さ。

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

評価点の高さ − 線源の高さ。

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

評価点の高さ − 線源の高さ。

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

評価点の高さ − 線源の高さ。

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

評価点の高さ − 線源の高さ。 セルの面積。

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

評価点の高さ − 線源の高さ。 セルの面積。 softening の二乗(P0 panel では 0)。

real(kind=dp), intent(out) :: s
real(kind=dp), intent(out) :: dsdh

public pure subroutine periodic_shell_mean_point_excess(plan, source, target_z, s, dsdh)

点線源 1 個の s と ds/dh。平均をとるセルと画像の層数は plan の値を使う。

Arguments

Type IntentOptional Attributes Name
type(periodic_shell_mean_plan_type), intent(in) :: plan
real(kind=dp), intent(in) :: source(3)
real(kind=dp), intent(in) :: target_z
real(kind=dp), intent(out) :: s
real(kind=dp), intent(out) :: dsdh

public subroutine build_periodic_shell_mean_plan(periodic_axes, free_axis, cell_center, cell_len, image_layers, softening, z_min, z_max, spacing, vertices, plan)

線源ごとの s を高さの格子に表として持つ。

Arguments

Type IntentOptional Attributes Name
integer(kind=i32), intent(in) :: periodic_axes(2)
integer(kind=i32), intent(in) :: free_axis
real(kind=dp), intent(in) :: cell_center(2)
real(kind=dp), intent(in) :: cell_len(2)
integer(kind=i32), intent(in) :: image_layers
real(kind=dp), intent(in) :: softening
real(kind=dp), intent(in) :: z_min
real(kind=dp), intent(in) :: z_max
real(kind=dp), intent(in) :: spacing
real(kind=dp), intent(in) :: vertices(:,:,:)
type(periodic_shell_mean_plan_type), intent(inout) :: plan

public subroutine refresh_periodic_shell_mean_state(plan, charge, state)

線源電荷から S と dS/dz の格子値を作る。

Arguments

Type IntentOptional Attributes Name
type(periodic_shell_mean_plan_type), intent(in) :: plan
real(kind=dp), intent(in) :: charge(:)
type(periodic_shell_mean_state_type), intent(inout) :: state

public pure subroutine eval_periodic_shell_mean(plan, state, z, value, slope)

3 次 Hermite 補間した S(z) と、同じ多項式の微分 dS/dz。電場は電位の勾配と一致する。

Arguments

Type IntentOptional Attributes Name
type(periodic_shell_mean_plan_type), intent(in) :: plan
type(periodic_shell_mean_state_type), intent(in) :: state
real(kind=dp), intent(in) :: z
real(kind=dp), intent(out) :: value
real(kind=dp), intent(out) :: slope

public subroutine reset_periodic_shell_mean_plan(plan)

Arguments

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

public subroutine reset_periodic_shell_mean_state(state)

Arguments

Type IntentOptional Attributes Name
type(periodic_shell_mean_state_type), intent(inout) :: state