同一時刻の粒子状態から、空間電場を中点評価した1ステップ候補を構築する。
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=i32), | public, | parameter | :: | particle_step_ok | = | collision_query_ok | |
| integer(kind=i32), | public, | parameter | :: | particle_step_invalid_boundary | = | 1001_i32 | |
| integer(kind=i32), | public, | parameter | :: | particle_step_multiple_box_events | = | 1002_i32 | |
| integer(kind=i32), | public, | parameter | :: | particle_step_ambiguous_open_corner | = | 1003_i32 | |
| integer(kind=i32), | public, | parameter | :: | particle_step_unsupported_barrier_corner | = | particle_step_ambiguous_open_corner |
| 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 | :: | field_eval_count | = | 0_i32 | ||
| integer(kind=i32), | public | :: | collision_query_count | = | 0_i32 | ||
| integer(kind=i32), | public | :: | z_high_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 | :: | z_high_outward_normal_kinetic_energy_j_sum | = | 0.0_dp |
予測中点の電場と一様磁場を使い、次時刻の位置・速度候補を返す。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| type(sim_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 | |||
| type(sim_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) |
上部真空域のfactorized P0-panel Fourier場だけで、失敗した1 stepを最初から再試行する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| type(sim_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) |
構築済みcandidateとその場評価値からbox eventを解決する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh | |||
| type(sim_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) |