boris_push Subroutine

public subroutine boris_push(x, v, q, m, dt, e, b, x_new, v_new)

Boris速度更新を使い、1タイムステップ後の位置・速度を計算する。

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: x(3)
real(kind=dp), intent(in) :: v(3)
real(kind=dp), intent(in) :: q

粒子1個あたりの電荷 [C]。

real(kind=dp), intent(in) :: m

粒子1個あたりの電荷 [C]。 粒子1個あたりの質量 [kg]。

real(kind=dp), intent(in) :: dt

粒子1個あたりの電荷 [C]。 粒子1個あたりの質量 [kg]。 時間刻み幅 [s]。

real(kind=dp), intent(in) :: e(3)

粒子1個あたりの電荷 [C]。 粒子1個あたりの質量 [kg]。 時間刻み幅 [s]。

real(kind=dp), intent(in) :: b(3)

粒子1個あたりの電荷 [C]。 粒子1個あたりの質量 [kg]。 時間刻み幅 [s]。

real(kind=dp), intent(out) :: x_new(3)
real(kind=dp), intent(out) :: v_new(3)

Calls

proc~~boris_push~~CallsGraph proc~boris_push boris_push proc~boris_update_velocity boris_update_velocity proc~boris_push->proc~boris_update_velocity proc~cross~2 cross proc~boris_update_velocity->proc~cross~2

Called by

proc~~boris_push~~CalledByGraph proc~boris_push boris_push proc~build_particle_step_candidate build_particle_step_candidate proc~build_particle_step_candidate->proc~boris_push proc~advance_particle_step advance_particle_step proc~advance_particle_step->proc~build_particle_step_candidate proc~advance_particle_step_upper_panel_fourier advance_particle_step_upper_panel_fourier proc~advance_particle_step_upper_panel_fourier->proc~build_particle_step_candidate proc~resolve_particle_boundary_candidate resolve_particle_boundary_candidate proc~resolve_particle_boundary_candidate->proc~build_particle_step_candidate

Source Code

  subroutine boris_push(x, v, q, m, dt, e, b, x_new, v_new)
    real(dp), intent(in) :: x(3), v(3), q, m, dt, e(3), b(3)
    real(dp), intent(out) :: x_new(3), v_new(3)

    call boris_update_velocity(v, q, m, dt, e, b, v_new)
    x_new = x + 0.5d0*(v + v_new)*dt
  end subroutine boris_push