入力と run 制御の設定。physics へは必要な親 component だけを渡す。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i32), | public | :: | rng_seed | = | 12345_i32 | ||
| logical, | public | :: | use_box | = | .false. | ||
| real(kind=dp), | public | :: | box_min(3) | = | [-1.0d0, -1.0d0, -1.0d0] | ||
| real(kind=dp), | public | :: | box_max(3) | = | [1.0d0, 1.0d0, 1.0d0] | ||
| integer(kind=i32), | public | :: | bc_low(3) | = | [bc_open, bc_open, bc_open] | ||
| integer(kind=i32), | public | :: | bc_high(3) | = | [bc_open, bc_open, bc_open] | ||
| character(len=16), | public | :: | field_bc_mode | = | 'free' | ||
| real(kind=dp), | public | :: | batch_duration | = | 0.0d0 | ||
| integer(kind=i32), | public | :: | raycast_max_bounce | = | 16_i32 | ||
| real(kind=dp), | public | :: | dt | = | 1.0d-12 | ||
| integer(kind=i32), | public | :: | batch_count | = | 1_i32 | ||
| logical, | public | :: | has_batch_duration | = | .false. | ||
| real(kind=dp), | public | :: | batch_duration_step | = | 0.0d0 | ||
| logical, | public | :: | has_batch_duration_step | = | .false. | ||
| integer(kind=i32), | public | :: | max_step | = | 100 | ||
| real(kind=dp), | public | :: | substep_field_change_max | = | 0.0d0 |
粒子ごとの適応サブステップ。step 候補の中点電場が前回受理した中点電場からこの割合より大きく変わり、 その差が step の仕事に換算して 1e-4 eV を超えるときは step を半分にして取り直す。0 で無効。 |
|
| integer(kind=i32), | public | :: | substep_max_halvings | = | 6_i32 |
1 つの dt を半分にする回数の上限(最小 sub-step は dt/2^n)。 |
|
| logical, | public | :: | step_growth | = | .false. |
場の変化が小さい領域で step を |
|
| integer(kind=i32), | public | :: | step_growth_max | = | 5_i32 | ||
| real(kind=dp), | public | :: | step_growth_energy_fraction | = | 1.0d-2 |
伸長時の仕事の床値を運動エネルギーのこの割合にする(1e-4 eV との大きい方)。 |
|
| real(kind=dp), | public | :: | tol_rel | = | 1.0d-4 | ||
| real(kind=dp), | public | :: | q_floor | = | 1.0d-30 | ||
| character(len=16), | public | :: | field_solver | = | 'auto' | ||
| character(len=16), | public | :: | field_normalization | = | 'si' | ||
| real(kind=dp), | public | :: | field_length_scale | = | 1.0d0 | ||
| integer(kind=i32), | public | :: | field_periodic_image_layers | = | 1_i32 | ||
| character(len=16), | public | :: | field_periodic_far_correction | = | 'none' | ||
| real(kind=dp), | public | :: | field_periodic_ewald_alpha | = | 0.0d0 | ||
| integer(kind=i32), | public | :: | field_periodic_ewald_layers | = | 4_i32 | ||
| character(len=256), | public | :: | field_periodic_cache_dir | = | '' | ||
| real(kind=dp), | public | :: | field_periodic_generation_tolerance | = | 1.0d-8 | ||
| real(kind=dp), | public | :: | tree_theta | = | 0.5d0 | ||
| logical, | public | :: | has_tree_theta | = | .false. | ||
| integer(kind=i32), | public | :: | tree_leaf_max | = | 16_i32 | ||
| character(len=8), | public | :: | near_field_precision | = | 'double' |
'double' (default, bitwise-reproducible) or 'single' for the FMM near-field panel sums. |
|
| logical, | public | :: | has_tree_leaf_max | = | .false. | ||
| integer(kind=i32), | public | :: | tree_min_nelem | = | 256_i32 | ||
| real(kind=dp), | public | :: | e0(3) | = | 0.0d0 | ||
| logical, | public | :: | has_e0_vector | = | .false. | ||
| real(kind=dp), | public | :: | e0_abs | = | 0.0d0 | ||
| logical, | public | :: | has_e0_abs | = | .false. | ||
| real(kind=dp), | public | :: | e0_phi_xy_deg | = | 0.0d0 | ||
| logical, | public | :: | has_e0_phi_xy_deg | = | .false. | ||
| real(kind=dp), | public | :: | e0_phi_z_deg | = | 0.0d0 | ||
| logical, | public | :: | has_e0_phi_z_deg | = | .false. | ||
| real(kind=dp), | public | :: | b0(3) | = | 0.0d0 | ||
| character(len=32), | public | :: | reservoir_potential_model | = | 'none' | ||
| real(kind=dp), | public | :: | phi_infty | = | 0.0d0 | ||
| character(len=8), | public | :: | particle_distribution | = | 'static' |
バッチ粒子の rank 配分。 |
|
| integer(kind=i32), | public | :: | particle_pool_chunk | = | 64_i32 |
|
|
| character(len=32), | public | :: | multiple_box_events_policy | = | 'abort' | ||
| character(len=32), | public | :: | multiple_box_events_retry_backend | = | 'none' | ||
| integer(kind=i32), | public | :: | multiple_box_events_soft_discard_count_grace | = | 1000_i32 | ||
| real(kind=dp), | public | :: | multiple_box_events_soft_discard_fraction_limit | = | 1.0d-6 | ||
| real(kind=dp), | public | :: | multiple_box_events_soft_discard_abs_charge_limit | = | 1.0d-12 | ||
| integer(kind=i32), | public | :: | injection_face_phi_grid_n | = | 3_i32 |
type, extends(photo_raycast_config) :: sim_config real(dp) :: dt = 1.0d-12 integer(i32) :: batch_count = 1_i32 logical :: has_batch_duration = .false. real(dp) :: batch_duration_step = 0.0d0 logical :: has_batch_duration_step = .false. integer(i32) :: max_step = 100 !> 粒子ごとの適応サブステップ。step 候補の中点電場が前回受理した中点電場からこの割合より大きく変わり、 !! その差が step の仕事に換算して 1e-4 eV を超えるときは step を半分にして取り直す。0 で無効。 real(dp) :: substep_field_change_max = 0.0d0 !> 1 つの dt を半分にする回数の上限(最小 sub-step は dt/2^n)。 integer(i32) :: substep_max_halvings = 6_i32 !> 場の変化が小さい領域で step を `dt_s` の 2^n 倍まで伸ばす(opt-in)。有効時に `substep_field_change_max` が 0 なら 0.05 を使う。 logical :: step_growth = .false. integer(i32) :: step_growth_max = 5_i32 !> 伸長時の仕事の床値を運動エネルギーのこの割合にする(1e-4 eV との大きい方)。 real(dp) :: step_growth_energy_fraction = 1.0d-2 real(dp) :: tol_rel = 1.0d-4 real(dp) :: q_floor = 1.0d-30 character(len=16) :: field_solver = 'auto' character(len=16) :: field_normalization = 'si' real(dp) :: field_length_scale = 1.0d0 integer(i32) :: field_periodic_image_layers = 1_i32 character(len=16) :: field_periodic_far_correction = 'none' real(dp) :: field_periodic_ewald_alpha = 0.0d0 integer(i32) :: field_periodic_ewald_layers = 4_i32 character(len=256) :: field_periodic_cache_dir = '' real(dp) :: field_periodic_generation_tolerance = 1.0d-8 real(dp) :: tree_theta = 0.5d0 logical :: has_tree_theta = .false. integer(i32) :: tree_leaf_max = 16_i32 !> 'double' (default, bitwise-reproducible) or 'single' for the FMM near-field panel sums. character(len=8) :: near_field_precision = 'double' logical :: has_tree_leaf_max = .false. integer(i32) :: tree_min_nelem = 256_i32 real(dp) :: e0(3) = 0.0d0 logical :: has_e0_vector = .false. real(dp) :: e0_abs = 0.0d0 logical :: has_e0_abs = .false. real(dp) :: e0_phi_xy_deg = 0.0d0 logical :: has_e0_phi_xy_deg = .false. real(dp) :: e0_phi_z_deg = 0.0d0 logical :: has_e0_phi_z_deg = .false. real(dp) :: b0(3) = 0.0d0 character(len=32) :: reservoir_potential_model = 'none' real(dp) :: phi_infty = 0.0d0 !> バッチ粒子の rank 配分。`static` は rank ごとに固定分割、`shared` は全 rank 共有の slot pool を chunk 単位で取り合う。 character(len=8) :: particle_distribution = 'static' !> `shared` で 1 回の claim が取る slot 数。 integer(i32) :: particle_pool_chunk = 64_i32 character(len=32) :: multiple_box_events_policy = 'abort' character(len=32) :: multiple_box_events_retry_backend = 'none' integer(i32) :: multiple_box_events_soft_discard_count_grace = 1000_i32 real(dp) :: multiple_box_events_soft_discard_fraction_limit = 1.0d-6 real(dp) :: multiple_box_events_soft_discard_abs_charge_limit = 1.0d-12 integer(i32) :: injection_face_phi_grid_n = 3_i32 end type sim_config