PLUTO  4.4-patch2
Functions
particles_cr_update.c File Reference

Update CR particles (with feedback) using Boris scheme. More...

#include "pluto.h"

Functions

void Particles_CR_Update (Data *data, timeStep *Dts, double dt, Grid *grid)
 

Detailed Description

Boris pusher for updating Cosmic ray particles.

dt = dt_g/Nsub
for n = 0,Nsub-1 {
Compute Fcr
Loop on particles{
x(n+1/2) = x(n) + (dt/2)*v(n) (drift)
v(n+1) = v(n) + dt*a(n+1/2) (kick+rotate+kick)
x(n+1) = x(n+1/2) + (dt/2)*v(n+1) (drift)
save dL += dt*(v(n) + v(n+1))/2
Compute time step:
dL < Nz*dx --> dt < Nz*dx/[v(0)/2 + v(1) + .. V(Nsub-1)/2)]
}
}

Time step restriction is computed by requiring that no particle travels more than Nmax = PARTICLES_CR_NCELL_MAX zones and that the Larmor scale is resolved with more than 1 cycle:

\[ \left\{ \begin{array}{lcl} \Delta s_d &=& \DS\Delta t\max_{n,p}\left( \frac{|v_{p,d}^n + v_{p,d}^{n+1}|}{2}\right) < \epsilon_s N_{\max}\Delta x_d \\ \noalign{\medskip} \Delta t &<& \epsilon_L \Omega_L^{-1} \end{array} \right. \]

where the maximum extends to all sub-steps (n) and particles (p), $ \Omega_L = qB_\perp/(\gamma m c) $ is the Larmor frequency while $\epsilon_s (\sim 0.9)$ and $\epsilon_L\sim 0.3$ are safety factors while

\[ \vec{B}^2_\perp = \vec{B}^2 - \frac{(\vec{v}\cdot\vec{B})^2} {\vec{v}\cdot\vec{v}} \]

Authors
A. Mignone (migno.nosp@m.ne@t.nosp@m.o.inf.nosp@m.n.it)
References
  • "MAGNETOHYDRODYNAMIC-PARTICLE-IN-CELL METHOD FOR COUPLING COSMIC RAYS WITH A THERMAL PLASMA: APPLICATION TO NON-RELATIVISTIC SHOCKS"
    Bai et al., ApJ (2015) 809, 55
Date
May 09, 2020

Function Documentation

◆ Particles_CR_Update()

void Particles_CR_Update ( Data data,
timeStep Dts,
double  dt,
Grid grid 
)

Advance particle by a step dt.

Parameters
[in,out]dData structure (contains paeticles list)
[in,out]DtstimeStep structure
[in]dttime time increment
[in]gridpointer to Grid structure