粒子位置での電場評価を direct / treecode / fmm で切り替える場ソルバ。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i32), | public, | parameter | :: | field_solver_fmm_expansion_order | = | 4_i32 |
solver指定と要素数から実際に使用する direct/treecode/fmm mode を解決する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=i32), | intent(in) | :: | nelem | |||
| type(sim_config), | intent(in) | :: | sim |
solver mode、要素数、明示overrideから実際に使うtree/FMMパラメータを解決する。
| Type | Intent | Optional | 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 |
| 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() |
| 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 |