同一時刻の粒子状態から、空間電場を中点評価した1ステップ候補を構築する。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | public, | parameter | :: | particle_substep_energy_floor_j | = | 1.0e-4_dp*1.602176634e-19_dp |
適応サブステップが step を半分にする最小の仕事 [J]。電場変化が相対的に大きくても、 step の仕事に換算してこれより小さければ粒子のエネルギーには効かないので分けない。 |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | public | :: | x(3) | = | 0.0_dp | ||
| real(kind=dp), | public | :: | v(3) | = | 0.0_dp | ||
| logical, | public | :: | absorbed | = | .false. | ||
| logical, | public | :: | escaped_boundary | = | .false. | ||
| integer(kind=i32), | public | :: | elem_idx | = | -1_i32 | ||
| integer(kind=i32), | public | :: | status | = | particle_step_ok | ||
| integer(kind=i32), | public | :: | wall_outward_event_count | = | 0_i32 | ||
| integer(kind=i32), | public | :: | outer_barrier_return_count | = | 0_i32 | ||
| integer(kind=i32), | public | :: | outer_barrier_escape_count | = | 0_i32 | ||
| real(kind=dp), | public | :: | wall_outward_normal_kinetic_energy_j_sum | = | 0.0_dp |
step 候補の中点電場 e_mid が参照電場 e_ref から change_max の割合より大きく変わり、 その差が変位 x1-x0 にわたる仕事に換算して床値を超えるとき真。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | e_mid(3) | |||
| real(kind=dp), | intent(in) | :: | e_ref(3) | |||
| real(kind=dp), | intent(in) | :: | q | |||
| real(kind=dp), | intent(in) | :: | x0(3) | |||
| real(kind=dp), | intent(in) | :: | x1(3) | |||
| real(kind=dp), | intent(in) | :: | change_max | |||
| real(kind=dp), | intent(in), | optional | :: | energy_floor |
仕事の床値 [J](省略時は |
予測中点の電場と一様磁場を使い、次時刻の位置・速度候補を返す。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| class(particle_domain_config), | intent(in) | :: | sim | |||
| type(electrostatic_snapshot_type), | intent(inout) | :: | snapshot | |||
| real(kind=dp), | intent(in) | :: | bfield(3) | |||
| real(kind=dp), | intent(in) | :: | x0(3) | |||
| real(kind=dp), | intent(in) | :: | v0(3) | |||
| real(kind=dp), | intent(in) | :: | q | |||
| real(kind=dp), | intent(in) | :: | m | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| real(kind=dp), | intent(out) | :: | x1(3) | |||
| real(kind=dp), | intent(out) | :: | v1(3) | |||
| real(kind=dp), | intent(out), | optional | :: | sampled_electric_field(3) | ||
| logical, | intent(in), | optional | :: | use_upper_panel_fourier | ||
| logical, | intent(out), | optional | :: | field_available |
一つの粒子stepについてmesh/boxの最早eventを順序付ける。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| class(particle_domain_config), | intent(in) | :: | sim | |||
| type(electrostatic_snapshot_type), | intent(inout) | :: | snapshot | |||
| real(kind=dp), | intent(in) | :: | bfield(3) | |||
| real(kind=dp), | intent(in) | :: | x0(3) | |||
| real(kind=dp), | intent(in) | :: | v0(3) | |||
| real(kind=dp), | intent(in) | :: | q | |||
| real(kind=dp), | intent(in) | :: | m | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| type(particle_step_result), | intent(out) | :: | result | |||
| type(external_boundary_contract_type), | intent(in), | optional | :: | boundary_contract | ||
| integer(kind=i64), | intent(in), | optional | :: | boundary_rng_counter(4) | ||
| type(irradiation_cell_contract_type), | intent(in) | :: | cell |
上部真空域のfactorized P0-panel Fourier場だけで、失敗した1 stepを最初から再試行する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| class(particle_domain_config), | intent(in) | :: | sim | |||
| type(electrostatic_snapshot_type), | intent(inout) | :: | snapshot | |||
| real(kind=dp), | intent(in) | :: | bfield(3) | |||
| real(kind=dp), | intent(in) | :: | x0(3) | |||
| real(kind=dp), | intent(in) | :: | v0(3) | |||
| real(kind=dp), | intent(in) | :: | q | |||
| real(kind=dp), | intent(in) | :: | m | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| type(particle_step_result), | intent(out) | :: | result | |||
| logical, | intent(out) | :: | field_available | |||
| type(external_boundary_contract_type), | intent(in), | optional | :: | boundary_contract | ||
| integer(kind=i64), | intent(in), | optional | :: | boundary_rng_counter(4) | ||
| type(irradiation_cell_contract_type), | intent(in) | :: | cell |
構築済みcandidateとその場評価値からbox eventを解決する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| class(particle_domain_config), | intent(in) | :: | sim | |||
| type(electrostatic_snapshot_type), | intent(inout) | :: | snapshot | |||
| real(kind=dp), | intent(in) | :: | bfield(3) | |||
| real(kind=dp), | intent(in) | :: | x0(3) | |||
| real(kind=dp), | intent(in) | :: | v0(3) | |||
| real(kind=dp), | intent(in) | :: | q | |||
| real(kind=dp), | intent(in) | :: | m | |||
| real(kind=dp), | intent(in) | :: | dt | |||
| real(kind=dp), | intent(in) | :: | x_candidate(3) | |||
| real(kind=dp), | intent(in) | :: | v_candidate(3) | |||
| type(hit_info), | intent(in), | optional | :: | hit | ||
| type(particle_step_result), | intent(out) | :: | result | |||
| type(external_boundary_contract_type), | intent(in), | optional | :: | boundary_contract | ||
| integer(kind=i64), | intent(in), | optional | :: | boundary_rng_counter(4) | ||
| real(kind=dp), | intent(in), | optional | :: | sampled_electric_field(3) | ||
| type(irradiation_cell_contract_type), | intent(in) | :: | cell |