粒子位置での電場評価を direct / treecode / fmm で切り替える場ソルバ。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=16), | public | :: | mode | = | 'direct' | ||
| character(len=16), | public | :: | field_bc_mode | = | 'free' | ||
| real(kind=dp), | public | :: | softening | = | 1.0d-6 | ||
| 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 | = | 'auto' | ||
| real(kind=dp), | public | :: | periodic_ewald_alpha | = | 0.0d0 | ||
| integer(kind=i32), | public | :: | periodic_ewald_layers | = | 4_i32 | ||
| 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_ready | = | .false. | ||
| integer(kind=i32), | public | :: | nleaf | = | 0_i32 | ||
| integer(kind=i32), | public, | allocatable | :: | leaf_nodes(:) | |||
| integer(kind=i32), | public, | allocatable | :: | leaf_slot_of_node(:) | |||
| logical, | public | :: | target_tree_ready | = | .false. | ||
| integer(kind=i32), | public | :: | target_max_node | = | 0_i32 | ||
| integer(kind=i32), | public | :: | target_nnode | = | 0_i32 | ||
| integer(kind=i32), | public, | allocatable | :: | target_child_count(:) | |||
| integer(kind=i32), | public, | allocatable | :: | target_child_idx(:,:) | |||
| integer(kind=i32), | public, | allocatable | :: | target_child_octant(:,:) | |||
| integer(kind=i32), | public, | allocatable | :: | target_node_depth(:) | |||
| integer(kind=i32), | public | :: | target_node_max_depth | = | 0_i32 | ||
| integer(kind=i32), | public, | allocatable | :: | target_level_start(:) | |||
| integer(kind=i32), | public, | allocatable | :: | target_level_nodes(:) | |||
| real(kind=dp), | public, | allocatable | :: | target_node_center(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | target_node_half_size(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | target_node_radius(:) | |||
| integer(kind=i32), | public, | allocatable | :: | near_start(:) | |||
| integer(kind=i32), | public, | allocatable | :: | near_nodes(:) | |||
| integer(kind=i32), | public, | allocatable | :: | far_start(:) | |||
| integer(kind=i32), | public, | allocatable | :: | far_nodes(:) | |||
| integer(kind=i32), | public, | allocatable | :: | fmm_m2l_target_nodes(:) | |||
| integer(kind=i32), | public, | allocatable | :: | fmm_m2l_source_nodes(:) | |||
| integer(kind=i32), | public, | allocatable | :: | fmm_m2l_target_start(:) | |||
| integer(kind=i32), | public, | allocatable | :: | fmm_m2l_pair_order(:) | |||
| integer(kind=i32), | public, | allocatable | :: | fmm_parent_of(:) | |||
| real(kind=dp), | public, | allocatable | :: | fmm_node_local_e0(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | fmm_node_local_jac(:,:,:) | |||
| real(kind=dp), | public, | allocatable | :: | fmm_node_local_hess(:,:,:,:) | |||
| real(kind=dp), | public, | allocatable | :: | fmm_shift_axis1(:) | |||
| real(kind=dp), | public, | allocatable | :: | fmm_shift_axis2(:) | |||
| real(kind=dp), | public, | allocatable | :: | leaf_far_e0(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | leaf_far_jac(:,:,:) | |||
| real(kind=dp), | public, | allocatable | :: | leaf_far_hess(:,:,:,:) | |||
| logical, | public | :: | fmm_use_core | = | .false. | ||
| 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 | = | fmm_plan_type() | ||
| 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 :: compute_mesh_potential => compute_mesh_potential_field_solver |