bem_field_solver Module

粒子位置での電場評価を direct / treecode / fmm で切り替える場ソルバ。


Uses

  • module~~bem_field_solver~~UsesGraph module~bem_field_solver bem_field_solver ieee_arithmetic ieee_arithmetic module~bem_field_solver->ieee_arithmetic module~bem_constants bem_constants module~bem_field_solver->module~bem_constants module~bem_coulomb_fmm_core bem_coulomb_fmm_core module~bem_field_solver->module~bem_coulomb_fmm_core module~bem_kinds bem_kinds module~bem_field_solver->module~bem_kinds module~bem_physics_config_types bem_physics_config_types module~bem_field_solver->module~bem_physics_config_types module~bem_string_utils bem_string_utils module~bem_field_solver->module~bem_string_utils module~bem_types bem_types module~bem_field_solver->module~bem_types module~bem_constants->module~bem_kinds module~bem_coulomb_fmm_core->module~bem_kinds module~bem_coulomb_fmm_types bem_coulomb_fmm_types module~bem_coulomb_fmm_core->module~bem_coulomb_fmm_types iso_fortran_env iso_fortran_env module~bem_kinds->iso_fortran_env module~bem_physics_config_types->ieee_arithmetic module~bem_physics_config_types->module~bem_kinds module~bem_physics_config_types->module~bem_string_utils module~bem_physics_config_types->module~bem_types module~bem_types->module~bem_kinds module~bem_coulomb_fmm_types->module~bem_kinds module~bem_panel_geometry bem_panel_geometry module~bem_coulomb_fmm_types->module~bem_panel_geometry module~bem_periodic_zero_mode_plan bem_periodic_zero_mode_plan module~bem_coulomb_fmm_types->module~bem_periodic_zero_mode_plan module~bem_panel_geometry->ieee_arithmetic module~bem_panel_geometry->module~bem_kinds module~bem_periodic_zero_mode_plan->ieee_arithmetic module~bem_periodic_zero_mode_plan->module~bem_constants module~bem_periodic_zero_mode_plan->module~bem_kinds module~bem_periodic_zero_mode_plan->module~bem_types

Used by

  • module~~bem_field_solver~~UsedByGraph module~bem_field_solver bem_field_solver module~bem_electrostatic_snapshot bem_electrostatic_snapshot module~bem_electrostatic_snapshot->module~bem_field_solver module~bem_field_solver_config bem_field_solver_config 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_field_solver module~bem_field_solver_fmm bem_field_solver_fmm module~bem_field_solver_fmm->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_matching_plane_coupling bem_matching_plane_coupling module~bem_matching_plane_coupling->module~bem_electrostatic_snapshot module~bem_app_config bem_app_config module~bem_matching_plane_coupling->module~bem_app_config 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_app_config_runtime bem_app_config_runtime module~bem_simulator->module~bem_app_config_runtime module~bem_simulator->module~bem_app_config 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_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_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_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_matching_plane_coupling 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_particles bem_simulator_particles module~bem_simulator_particles->module~bem_simulator module~bem_simulator_stats bem_simulator_stats module~bem_simulator_stats->module~bem_simulator module~bem_app_config->module~bem_app_config_runtime program~zhao_atlas_main zhao_atlas_main program~zhao_atlas_main->module~bem_app_config program~zhao_response_main zhao_response_main program~zhao_response_main->module~bem_app_config

Variables

Type Visibility Attributes Name Initial
integer(kind=i32), public, parameter :: field_solver_fmm_expansion_order = 4_i32

Interfaces

interface

  • public module function resolve_field_solver_mode(nelem, sim) result(mode)

    solver指定と要素数から実際に使用する direct/treecode/fmm mode を解決する。

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=i32), intent(in) :: nelem
    type(sim_config), intent(in) :: sim

    Return Value character(len=16)

interface

  • public pure module subroutine resolve_field_solver_tree_params(nelem, sim, theta, leaf_max)

    solver mode、要素数、明示overrideから実際に使うtree/FMMパラメータを解決する。

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=i32), intent(in) :: nelem
    type(sim_config), intent(in) :: sim
    real(kind=dp), intent(out) :: theta
    integer(kind=i32), intent(out) :: leaf_max

Derived Types

type, public ::  field_solver_type

Components

Type Visibility Attributes Name Initial
character(len=16), public :: mode = 'direct'
character(len=16), public :: field_bc_mode = 'free'
character(len=16), public :: field_normalization = 'si'
real(kind=dp), public :: field_length_scale = 1.0d0
real(kind=dp), public :: field_origin(3) = 0.0d0
real(kind=dp), public :: field_inv_length_scale = 1.0d0
real(kind=dp), public :: field_output_scale = k_coulomb
real(kind=dp), public :: potential_output_scale = k_coulomb
real(kind=dp), public :: theta = 0.5d0
integer(kind=i32), public :: leaf_max = 16_i32
integer(kind=i32), public :: min_nelem = 256_i32
logical, public :: use_periodic2 = .false.
integer(kind=i32), public :: periodic_axes(2) = 0_i32
real(kind=dp), public :: periodic_len(2) = 0.0d0
integer(kind=i32), public :: periodic_image_layers = 1_i32
character(len=16), public :: periodic_far_correction = 'none'
real(kind=dp), public :: periodic_ewald_alpha = 0.0d0
integer(kind=i32), public :: periodic_ewald_layers = 4_i32
character(len=256), public :: periodic_cache_dir = '.beach_cache/periodic2'
real(kind=dp), public :: periodic_generation_tolerance = 1.0d-8
real(kind=dp), public :: target_box_min(3) = 0.0d0
real(kind=dp), public :: target_box_max(3) = 0.0d0
logical, public :: tree_ready = .false.
integer(kind=i32), public :: nelem = 0_i32
integer(kind=i32), public :: max_node = 0_i32
integer(kind=i32), public :: nnode = 0_i32
integer(kind=i32), public, allocatable :: elem_order(:)
integer(kind=i32), public, allocatable :: node_start(:)
integer(kind=i32), public, allocatable :: node_count(:)
integer(kind=i32), public, allocatable :: child_count(:)
integer(kind=i32), public, allocatable :: child_idx(:,:)
integer(kind=i32), public, allocatable :: child_octant(:,:)
integer(kind=i32), public, allocatable :: node_depth(:)
integer(kind=i32), public :: node_max_depth = 0_i32
integer(kind=i32), public, allocatable :: node_level_start(:)
integer(kind=i32), public, allocatable :: node_level_nodes(:)
real(kind=dp), public, allocatable :: node_center(:,:)
real(kind=dp), public, allocatable :: node_half_size(:,:)
real(kind=dp), public, allocatable :: node_radius(:)
real(kind=dp), public, allocatable :: node_q(:)
real(kind=dp), public, allocatable :: node_abs_q(:)
real(kind=dp), public, allocatable :: node_qx(:)
real(kind=dp), public, allocatable :: node_qy(:)
real(kind=dp), public, allocatable :: node_qz(:)
real(kind=dp), public, allocatable :: node_charge_center(:,:)
logical, public :: fmm_core_ready = .false.
type(fmm_options_type), public :: fmm_core_options = fmm_options_type()
type(fmm_plan_type), public :: fmm_core_plan
type(fmm_state_type), public :: fmm_core_state = fmm_state_type()

Type-Bound Procedures

procedure, public :: init => init_field_solver
procedure, public :: refresh => refresh_field_solver
procedure, public :: eval_e => eval_e_field_solver
procedure, public :: eval_potential => eval_potential_field_solver
procedure, public :: compute_mesh_potential => compute_mesh_potential_field_solver
procedure, public :: compute_cached_kneq0_mesh_potential_step => compute_cached_kneq0_mesh_potential_step_field_solver