sim_config Derived Type

type, public, extends(photo_raycast_config) :: sim_config

入力と run 制御の設定。physics へは必要な親 component だけを渡す。


Inherits

type~~sim_config~~InheritsGraph type~sim_config sim_config type~photo_raycast_config photo_raycast_config type~sim_config->type~photo_raycast_config type~particle_domain_config particle_domain_config type~photo_raycast_config->type~particle_domain_config

Inherited by

type~~sim_config~~InheritedByGraph type~sim_config sim_config type~app_config app_config type~app_config->type~sim_config sim

Components

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 を dt_s の 2^n 倍まで伸ばす(opt-in)。有効時に substep_field_change_max が 0 なら 0.05 を使う。

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 配分。static は rank ごとに固定分割、shared は全 rank 共有の slot pool を chunk 単位で取り合う。

integer(kind=i32), public :: particle_pool_chunk = 64_i32

shared で 1 回の claim が取る slot 数。

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

Source Code

  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