Hamiltonian splitting Boris

HamiltonianSplittingBoris( maxwell_solver,
                           kernel_smoother_0, kernel_smoother_1,
                           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.
push_v_epart(splitting, dt)

Pusher for $E \nabla_v$ part

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

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$


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

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