advance_particle_step Subroutine

public subroutine advance_particle_step(mesh, sim, snapshot, bfield, x0, v0, q, m, dt, result, boundary_contract, boundary_rng_counter, cell)

一つの粒子stepについてmesh/boxの最早eventを順序付ける。

Arguments

Type IntentOptional 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

Calls

proc~~advance_particle_step~~CallsGraph proc~advance_particle_step advance_particle_step none~crosses_wall_outward irradiation_cell_contract_type%crosses_wall_outward proc~advance_particle_step->none~crosses_wall_outward none~eval_local_phi electrostatic_snapshot_type%eval_local_phi proc~advance_particle_step->none~eval_local_phi none~eval_upper_panel_fourier_phi electrostatic_snapshot_type%eval_upper_panel_fourier_phi proc~advance_particle_step->none~eval_upper_panel_fourier_phi none~outward_normal_velocity irradiation_cell_contract_type%outward_normal_velocity proc~advance_particle_step->none~outward_normal_velocity proc~apply_escape_reflect_periodic_event apply_escape_reflect_periodic_event proc~advance_particle_step->proc~apply_escape_reflect_periodic_event proc~build_particle_step_candidate build_particle_step_candidate proc~advance_particle_step->proc~build_particle_step_candidate proc~counter_uniforms counter_uniforms proc~advance_particle_step->proc~counter_uniforms proc~find_first_boundary_event find_first_boundary_event proc~advance_particle_step->proc~find_first_boundary_event proc~find_first_hit find_first_hit proc~advance_particle_step->proc~find_first_hit none~crosses_wall_outward->none~outward_normal_velocity none~wall_face_bit irradiation_cell_contract_type%wall_face_bit none~crosses_wall_outward->none~wall_face_bit none~eval_local_e electrostatic_snapshot_type%eval_local_e proc~build_particle_step_candidate->none~eval_local_e none~eval_upper_panel_fourier_e electrostatic_snapshot_type%eval_upper_panel_fourier_e proc~build_particle_step_candidate->none~eval_upper_panel_fourier_e proc~boris_push boris_push proc~build_particle_step_candidate->proc~boris_push none~next_uniform counter_stream_type%next_uniform proc~counter_uniforms->none~next_uniform proc~find_first_hit_base find_first_hit_base proc~find_first_hit->proc~find_first_hit_base proc~find_first_hit_periodic2 find_first_hit_periodic2 proc~find_first_hit->proc~find_first_hit_periodic2 proc~initialize_hit initialize_hit proc~find_first_hit->proc~initialize_hit pcg64_random_double53 pcg64_random_double53 none~next_uniform->pcg64_random_double53 proc~open_uniform_from_double53 open_uniform_from_double53 none~next_uniform->proc~open_uniform_from_double53 proc~boris_update_velocity boris_update_velocity proc~boris_push->proc~boris_update_velocity proc~find_first_hit_base->proc~initialize_hit proc~find_first_hit_base_grid find_first_hit_base_grid proc~find_first_hit_base->proc~find_first_hit_base_grid proc~find_first_hit_base_linear find_first_hit_base_linear proc~find_first_hit_base->proc~find_first_hit_base_linear proc~resolve_box_filter_args resolve_box_filter_args proc~find_first_hit_base->proc~resolve_box_filter_args proc~find_first_hit_periodic2->proc~find_first_hit_base proc~find_first_hit_periodic2->proc~initialize_hit proc~point_inside_box_periodic2 point_inside_box_periodic2 proc~find_first_hit_periodic2->proc~point_inside_box_periodic2 proc~prefer_periodic_candidate prefer_periodic_candidate proc~find_first_hit_periodic2->proc~prefer_periodic_candidate proc~find_first_hit_periodic2->proc~resolve_box_filter_args proc~wrap_periodic2_point~2 wrap_periodic2_point proc~find_first_hit_periodic2->proc~wrap_periodic2_point~2 proc~cross cross proc~boris_update_velocity->proc~cross proc~bbox_inside_box bbox_inside_box proc~find_first_hit_base_grid->proc~bbox_inside_box proc~cell_id~2 cell_id proc~find_first_hit_base_grid->proc~cell_id~2 proc~coord_to_cell~2 coord_to_cell proc~find_first_hit_base_grid->proc~coord_to_cell~2 proc~lower_ascii lower_ascii proc~find_first_hit_base_grid->proc~lower_ascii proc~point_inside_box point_inside_box proc~find_first_hit_base_grid->proc~point_inside_box proc~segment_aabb_intersection_t segment_aabb_intersection_t proc~find_first_hit_base_grid->proc~segment_aabb_intersection_t proc~segment_bbox_overlap_precomputed segment_bbox_overlap_precomputed proc~find_first_hit_base_grid->proc~segment_bbox_overlap_precomputed proc~segment_triangle_intersect segment_triangle_intersect proc~find_first_hit_base_grid->proc~segment_triangle_intersect proc~find_first_hit_base_linear->proc~bbox_inside_box proc~find_first_hit_base_linear->proc~point_inside_box proc~find_first_hit_base_linear->proc~segment_bbox_overlap_precomputed proc~find_first_hit_base_linear->proc~segment_triangle_intersect proc~cross~3 cross proc~segment_triangle_intersect->proc~cross~3

Source Code

  subroutine advance_particle_step( &
    mesh, sim, snapshot, bfield, x0, v0, q, m, dt, result, boundary_contract, boundary_rng_counter, &
    cell &
    )
    type(irradiation_cell_contract_type), intent(in) :: cell
    type(mesh_type), intent(in) :: mesh
    class(particle_domain_config), intent(in) :: sim
    type(electrostatic_snapshot_type), intent(inout) :: snapshot
    real(dp), intent(in) :: bfield(3), x0(3), v0(3), q, m, dt
    type(particle_step_result), intent(out) :: result
    type(external_boundary_contract_type), intent(in), optional :: boundary_contract
    integer(i64), intent(in), optional :: boundary_rng_counter(4)
    logical :: field_available

    field_available = .true.
    call advance_particle_step_impl( &
      mesh, sim, snapshot, &
      make_step_context(bfield, q, m, cell, .false., boundary_contract, boundary_rng_counter), &
      x0, v0, dt, result, field_available &
      )
  end subroutine advance_particle_step