advance_particle_step_upper_panel_fourier Subroutine

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

上部真空域のfactorized P0-panel Fourier場だけで、失敗した1 stepを最初から再試行する。

Arguments

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

Calls

proc~~advance_particle_step_upper_panel_fourier~~CallsGraph proc~advance_particle_step_upper_panel_fourier advance_particle_step_upper_panel_fourier none~eval_local_phi electrostatic_snapshot_type%eval_local_phi proc~advance_particle_step_upper_panel_fourier->none~eval_local_phi none~eval_upper_panel_fourier_phi electrostatic_snapshot_type%eval_upper_panel_fourier_phi proc~advance_particle_step_upper_panel_fourier->none~eval_upper_panel_fourier_phi proc~apply_escape_reflect_periodic_event apply_escape_reflect_periodic_event proc~advance_particle_step_upper_panel_fourier->proc~apply_escape_reflect_periodic_event proc~build_particle_step_candidate build_particle_step_candidate proc~advance_particle_step_upper_panel_fourier->proc~build_particle_step_candidate proc~find_first_boundary_event find_first_boundary_event proc~advance_particle_step_upper_panel_fourier->proc~find_first_boundary_event proc~find_first_hit find_first_hit proc~advance_particle_step_upper_panel_fourier->proc~find_first_hit 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 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 proc~resolve_periodic2_collision_config resolve_periodic2_collision_config proc~find_first_hit->proc~resolve_periodic2_collision_config 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~find_first_hit_periodic2->proc~resolve_periodic2_collision_config proc~compute_periodic_shift_bounds compute_periodic_shift_bounds proc~find_first_hit_periodic2->proc~compute_periodic_shift_bounds 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 wrap_periodic2_point proc~find_first_hit_periodic2->proc~wrap_periodic2_point proc~lower_ascii lower_ascii proc~resolve_periodic2_collision_config->proc~lower_ascii proc~cross~2 cross proc~boris_update_velocity->proc~cross~2 proc~find_first_hit_base_grid->proc~lower_ascii proc~bbox_inside_box bbox_inside_box proc~find_first_hit_base_grid->proc~bbox_inside_box proc~cell_id cell_id proc~find_first_hit_base_grid->proc~cell_id proc~coord_to_cell coord_to_cell proc~find_first_hit_base_grid->proc~coord_to_cell 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 cross proc~segment_triangle_intersect->proc~cross

Source Code

  subroutine advance_particle_step_upper_panel_fourier( &
    mesh, sim, snapshot, bfield, x0, v0, q, m, dt, result, field_available, &
    boundary_contract, boundary_rng_counter &
    )
    type(mesh_type), intent(in) :: mesh
    type(sim_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
    logical, intent(out) :: field_available
    type(external_boundary_contract_type), intent(in), optional :: boundary_contract
    integer(i64), intent(in), optional :: boundary_rng_counter(4)

    field_available = .true.
    call advance_particle_step_impl( &
      mesh, sim, snapshot, bfield, x0, v0, q, m, dt, result, boundary_contract, boundary_rng_counter, 0_i32, &
      .true., field_available &
      )
  end subroutine advance_particle_step_upper_panel_fourier