シミュレーション設定・統計・メッシュ・粒子・衝突情報の主要データ型を定義する。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i32), | public, | parameter | :: | bc_open | = | 0_i32 | |
| integer(kind=i32), | public, | parameter | :: | bc_reflect | = | 1_i32 | |
| integer(kind=i32), | public, | parameter | :: | bc_periodic | = | 2_i32 | |
| integer(kind=i32), | public, | parameter | :: | bc_redistributed_reflect | = | 3_i32 | |
| integer(kind=i32), | public, | parameter | :: | surface_model_insulator | = | 1_i32 | |
| integer(kind=i32), | public, | parameter | :: | surface_model_conductor | = | 2_i32 | |
| integer(kind=i32), | public, | parameter | :: | surface_model_dielectric | = | 3_i32 |
粒子の追跡・衝突・境界 event が使う解決済みの領域と乱数 seed。 入力の has_*、外部場の角度指定、solver の選択や batch 制御は含めない。
| 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' |
photo ray に必要な領域、解決済み batch 幅、反射回数上限。
| 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 |
入力と 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 |
adaptive batch(非零 mode の電位変化で batch 幅を縮める)の状態。summary の adaptive_nonzero_mode_* キー。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i64), | public | :: | rejected_trials | = | 0_i64 | ||
| real(kind=dp), | public | :: | last_batch_duration | = | 0.0_dp | ||
| real(kind=dp), | public | :: | last_potential_step | = | 0.0_dp | ||
| integer(kind=i32), | public | :: | omp_threads | = | 0_i32 |
外部シースの receipt。summary の matching_plane_* キー(top_field_v_m は surface_current_top_field_v_m)。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | state_valid | = | .false. | ||
| real(kind=dp), | public | :: | displacement_c_m2 | = | 0.0_dp | ||
| real(kind=dp), | public | :: | phi_v | = | 0.0_dp | ||
| real(kind=dp), | public | :: | top_field_v_m | = | 0.0_dp | ||
| real(kind=dp), | public | :: | top_cell_mean_v_m | = | 0.0_dp | ||
| real(kind=dp), | public | :: | response(6) | = | 0.0_dp | ||
| real(kind=dp), | public | :: | feedback(4) | = | 0.0_dp | ||
| real(kind=dp), | public | :: | photoelectron_return_flux_m2_s | = | 0.0_dp | ||
| real(kind=dp), | public | :: | photoelectron_escape_flux_m2_s | = | 0.0_dp | ||
| real(kind=dp), | public | :: | photoelectron_spectrum_m2_s(outflow_spectrum_bins) | = | 0.0_dp |
外部根の光電子源に使った H 外向きスペクトル [1/(m2 s)]、bin 別。全て 0 は表面放出の半 Maxwell 源。 |
|
| integer(kind=i32), | public | :: | iterations | = | 0_i32 | ||
| real(kind=dp), | public | :: | residual | = | 0.0_dp | ||
| real(kind=dp), | public | :: | secondary_share | = | 0.0_dp | ||
| real(kind=dp), | public | :: | secondary_budget_residual_a_m2 | = | 0.0_dp |
処理済み粒子数、吸着/脱出数、バッチ数、最終相対変化量を集計する統計型。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i64), | public | :: | processed_particles | = | 0_i64 | ||
| integer(kind=i64), | public | :: | absorbed | = | 0_i64 | ||
| integer(kind=i64), | public | :: | escaped | = | 0_i64 | ||
| integer(kind=i64), | public | :: | escaped_boundary | = | 0_i64 | ||
| integer(kind=i64), | public | :: | survived_max_step | = | 0_i64 | ||
| integer(kind=i64), | public | :: | multiple_box_events_retry_attempted | = | 0_i64 | ||
| integer(kind=i64), | public | :: | multiple_box_events_retry_resolved | = | 0_i64 | ||
| integer(kind=i64), | public | :: | multiple_box_events_soft_discarded | = | 0_i64 | ||
| real(kind=dp), | public | :: | multiple_box_events_soft_discarded_abs_charge | = | 0.0_dp | ||
| integer(kind=i64), | public | :: | adaptive_substep_halved_steps | = | 0_i64 |
適応サブステップ: 半分にした dt step の数、その中で受理した sub-step の総数、半分化の上限に達した step の数。 |
|
| integer(kind=i64), | public | :: | adaptive_substeps | = | 0_i64 | ||
| integer(kind=i64), | public | :: | adaptive_substep_depth_limited_steps | = | 0_i64 | ||
| integer(kind=i64), | public | :: | adaptive_grown_steps | = | 0_i64 |
step 伸長で |
|
| integer(kind=i32), | public | :: | batches | = | 0 | ||
| real(kind=dp), | public | :: | last_rel_change | = | -1.0d0 | ||
| real(kind=dp), | public | :: | simulated_time | = | 0.0_dp | ||
| type(adaptive_nonzero_mode_stats), | public | :: | adaptive_nonzero_mode |
非零 mode の電位変化で batch 幅を縮める adaptive batch の状態。 |
|||
| integer(kind=i64), | public | :: | particle_pool_claims | = | 0_i64 |
shared particle pool の claim 回数と、claim の critical 区間で費やした秒数(全 rank 合計)。 |
|
| real(kind=dp), | public | :: | particle_pool_claim_seconds | = | 0.0_dp | ||
| type(matching_plane_stats), | public | :: | matching_plane |
外部シース(Zhao 根と z-high の matching-plane)の receipt。summary と checkpoint に出る。 |
|||
| integer(kind=i64), | public | :: | secondary_emission_hits | = | 0_i64 | ||
| integer(kind=i64), | public | :: | secondary_emission_count | = | 0_i64 | ||
| integer(kind=i64), | public | :: | secondary_generation_capped_count | = | 0_i64 | ||
| real(kind=dp), | public | :: | secondary_emitted_charge_c | = | 0.0_dp | ||
| real(kind=dp), | public | :: | secondary_yield_sum | = | 0.0_dp |
種ごとのマクロ粒子端数を保持し、再開時にも注入期待値を保つ。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | public, | allocatable | :: | macro_residual(:) | |||
| real(kind=dp), | public, | allocatable | :: | boundary_macro_residual(:,:) |
三角形頂点と前計算幾何量、要素電荷を保持する境界要素メッシュ型。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i32), | public | :: | nelem | = | 0 | ||
| real(kind=dp), | public, | allocatable | :: | v0(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | v1(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | v2(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | centers(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | center_x(:) | |||
| real(kind=dp), | public, | allocatable | :: | center_y(:) | |||
| real(kind=dp), | public, | allocatable | :: | center_z(:) | |||
| real(kind=dp), | public, | allocatable | :: | normals(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | bb_min(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | bb_max(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | h_elem(:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_area(:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_moment1(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_moment2(:,:,:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_edge_length(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_edge_outward(:,:,:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_quad_position(:,:,:) | |||
| real(kind=dp), | public, | allocatable | :: | panel_quad_weight(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | q_elem(:) | |||
| integer(kind=i32), | public, | allocatable | :: | elem_mesh_id(:) | |||
| integer(kind=i32), | public, | allocatable | :: | elem_surface_model(:) | |||
| real(kind=dp), | public, | allocatable | :: | elem_epsilon_r(:) | |||
| integer(kind=i32), | public, | allocatable | :: | elem_vacuum_sign(:) | |||
| real(kind=dp), | public, | allocatable | :: | vacuum_normals(:,:) | |||
| real(kind=dp), | public | :: | grid_bb_min(3) | = | 0.0d0 | ||
| real(kind=dp), | public | :: | grid_bb_max(3) | = | 0.0d0 | ||
| integer(kind=i32), | public | :: | grid_ncell(3) | = | 1_i32 | ||
| real(kind=dp), | public | :: | grid_inv_cell(3) | = | 1.0d0 | ||
| integer(kind=i32), | public, | allocatable | :: | grid_cell_start(:) | |||
| integer(kind=i32), | public, | allocatable | :: | grid_cell_elem(:) | |||
| logical, | public | :: | use_collision_grid | = | .false. | ||
| logical, | public | :: | periodic2_collision_ready | = | .false. | ||
| integer(kind=i32), | public | :: | periodic2_axes(2) | = | 0_i32 |
prepare_periodic2_collision_mesh が解決した周期軸と周期長。ray query のたびに設定を解き直さない。 |
|
| real(kind=dp), | public | :: | periodic2_len(2) | = | 0.0d0 |
粒子の位置・速度・物性値・生存フラグをSoA形式で保持する型。
配列長は容量で、有効な粒子は先頭 n 個。利用側は 1:n だけを読む。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i32), | public | :: | n | = | 0 | ||
| real(kind=dp), | public, | allocatable | :: | x(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | v(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | q(:) | |||
| real(kind=dp), | public, | allocatable | :: | m(:) | |||
| real(kind=dp), | public, | allocatable | :: | w(:) | |||
| integer(kind=i32), | public, | allocatable | :: | species_id(:) | |||
| integer(kind=i32), | public, | allocatable | :: | source_element(:) |
|
||
| logical, | public, | allocatable | :: | alive(:) |
衝突有無、命中要素番号、線分パラメータ、交点座標を返す衝突結果型。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | has_hit | = | .false. | ||
| integer(kind=i32), | public | :: | elem_idx | = | -1 | ||
| real(kind=dp), | public | :: | t | = | 0.0d0 | ||
| real(kind=dp), | public | :: | pos(3) | = | 0.0d0 | ||
| integer(kind=i32), | public | :: | image_shift(2) | = | 0_i32 | ||
| real(kind=dp), | public | :: | pos_wrapped(3) | = | 0.0d0 |