Hamiltonian splitting Boris

GEMPIC.HamiltonianSplittingBorisType
HamiltonianSplittingBoris( maxwell_solver,
                           kernel_smoother_0, kernel_smoother_1,
                           particle_group,
                           e_dofs_1, e_dofs_2, b_dofs)

Boris pusher in GEMPIC framework (spline finite elements)

  • mid describing the magnetic field at time $t_{n+1/2}$ (used for push)
  • j_dofs for kernel representation of current density.
  • maxwell_solver : Maxwell solver
  • kernel_smoother_0 : Kernel smoother
  • kernel_smoother_1 : Kernel smoother
  • particle_group : Particle group
  • efield_dofs : array for the coefficients of the efields
  • bfield_dofs : array for the coefficients of the bfield
  • x_min : Lower bound of x domain
  • Lx : Length of the domain in x direction.
GEMPIC.push_v_epart!Method
push_v_epart(splitting, dt)

Pusher for $E \nabla_v$ part

\[V_{new} = V_{old} + dt ⋅ E\]

GEMPIC.push_x_accumulate_j!Method
push_x_accumulate_j!(splitting, dt)

Pusher for x and accumulate current densities

For each particle compute the index of the first DoF on the grid it contributes to and its position (normalized to cell size one).

Then update particle position: $X_{new} = X_{old} + dt ⋅ V$

Note

j_dofs does not hold the values for j itself but for the integrated j.

GEMPIC.staggering!Method
staggering(splitting, dt)

Propagate $E_0$ to $E_{1/2}$ and $x_0$ to $x_{1/2}$ to initialize the staggering

  • splitting : time splitting object
  • dt : time step
GEMPIC.strang_splitting!Method
strang_splitting(splitting, dt, number_steps)

Second order Boris pusher using staggered grid

  • splitting : time splitting object
  • dt : time step
  • number_steps : number of time steps