WarpX
|
#include "Particles/Deposition/SharedDepositionUtils.H"
#include "ablastr/parallelization/KernelTimer.H"
#include "Particles/Pusher/GetAndSetPosition.H"
#include "Particles/ShapeFactors.H"
#include "Utils/TextMsg.H"
#include "Utils/WarpXAlgorithmSelection.H"
#include "Utils/WarpXConst.H"
#include "Utils/WarpX_Complex.H"
#include "WarpX.H"
#include <AMReX.H>
#include <AMReX_Arena.H>
#include <AMReX_Array4.H>
#include <AMReX_REAL.H>
Go to the source code of this file.
Functions | |
template<int depos_order> | |
AMREX_GPU_HOST_DEVICE AMREX_INLINE void | doDepositionShapeNKernel (const amrex::ParticleReal xp, const amrex::ParticleReal yp, const amrex::ParticleReal zp, const amrex::ParticleReal wq, const amrex::ParticleReal vx, const amrex::ParticleReal vy, const amrex::ParticleReal vz, amrex::Array4< amrex::Real > const &jx_arr, amrex::Array4< amrex::Real > const &jy_arr, amrex::Array4< amrex::Real > const &jz_arr, amrex::IntVect const &jx_type, amrex::IntVect const &jy_type, amrex::IntVect const &jz_type, const amrex::Real relative_time, AMREX_D_DECL(const amrex::Real dzi, const amrex::Real dxi, const amrex::Real dyi), AMREX_D_DECL(const amrex::Real zmin, const amrex::Real xmin, const amrex::Real ymin), const amrex::Real invvol, const amrex::Dim3 lo, const int n_rz_azimuthal_modes) |
Kernel for the direct current deposition for thread thread_num. More... | |
template<int depos_order> | |
void | doDepositionShapeN (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *ion_lev, amrex::FArrayBox &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, long np_to_deposit, amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes) |
Current Deposition for thread thread_num. More... | |
template<int depos_order> | |
void | doDepositionShapeNImplicit (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp_n, const amrex::ParticleReal *const uyp_n, const amrex::ParticleReal *const uzp_n, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *const ion_lev, amrex::FArrayBox &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, const long np_to_deposit, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, const amrex::Dim3 lo, const amrex::Real q, const int n_rz_azimuthal_modes) |
Direct current deposition for thread thread_num for the implicit scheme The only difference from doDepositionShapeN is in how the particle gamma is calculated. More... | |
template<int depos_order> | |
void | doDepositionSharedShapeN (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *ion_lev, amrex::FArrayBox &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, long np_to_deposit, const amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes, const amrex::DenseBins< WarpXParticleContainer::ParticleTileType::ParticleTileDataType > &a_bins, const amrex::Box &box, const amrex::Geometry &geom, const amrex::IntVect &a_tbox_max_size) |
Current Deposition for thread thread_num using shared memory. More... | |
template<int depos_order> | |
void | doEsirkepovDepositionShapeN (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *ion_lev, const amrex::Array4< amrex::Real > &Jx_arr, const amrex::Array4< amrex::Real > &Jy_arr, const amrex::Array4< amrex::Real > &Jz_arr, long np_to_deposit, amrex::Real dt, amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, std::array< amrex::Real, 3 > xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes) |
Esirkepov Current Deposition for thread thread_num. More... | |
template<int depos_order> | |
void | doChargeConservingDepositionShapeNImplicit (const amrex::ParticleReal *const xp_n, const amrex::ParticleReal *const yp_n, const amrex::ParticleReal *const zp_n, const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, [[maybe_unused]]const amrex::ParticleReal *const uxp_n, [[maybe_unused]]const amrex::ParticleReal *const uyp_n, [[maybe_unused]]const amrex::ParticleReal *const uzp_n, [[maybe_unused]]const amrex::ParticleReal *const uxp_nph, [[maybe_unused]]const amrex::ParticleReal *const uyp_nph, [[maybe_unused]]const amrex::ParticleReal *const uzp_nph, const int *const ion_lev, const amrex::Array4< amrex::Real > &Jx_arr, const amrex::Array4< amrex::Real > &Jy_arr, const amrex::Array4< amrex::Real > &Jz_arr, const long np_to_deposit, const amrex::Real dt, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > xyzmin, const amrex::Dim3 lo, const amrex::Real q, const int n_rz_azimuthal_modes) |
Esirkepov Current Deposition for thread thread_num for implicit scheme The difference from doEsirkepovDepositionShapeN is in how the old and new particles positions are determined and in how the particle gamma is calculated. More... | |
template<int depos_order> | |
void | doVillasenorDepositionShapeNImplicit (const amrex::ParticleReal *const xp_n, const amrex::ParticleReal *const yp_n, const amrex::ParticleReal *const zp_n, const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, [[maybe_unused]]const amrex::ParticleReal *const uxp_n, [[maybe_unused]]const amrex::ParticleReal *const uyp_n, [[maybe_unused]]const amrex::ParticleReal *const uzp_n, [[maybe_unused]]const amrex::ParticleReal *const uxp_nph, [[maybe_unused]]const amrex::ParticleReal *const uyp_nph, [[maybe_unused]]const amrex::ParticleReal *const uzp_nph, const int *const ion_lev, const amrex::Array4< amrex::Real > &Jx_arr, const amrex::Array4< amrex::Real > &Jy_arr, const amrex::Array4< amrex::Real > &Jz_arr, const long np_to_deposit, const amrex::Real dt, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > xyzmin, const amrex::Dim3 lo, const amrex::Real q, const int n_rz_azimuthal_modes) |
Villasenor and Buneman Current Deposition for thread thread_num for implicit scheme. The specifics for the implicit scheme are in how gamma is determined. This is a charge- conserving deposition. The difference from Esirkepov is that the deposit is done segment by segment, where the segments are determined by cell crossings. In general, this results in a tighter stencil. The implementation is valid for an arbitrary number of cell crossings. More... | |
template<int depos_order> | |
void | doVayDepositionShapeN (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *const ion_lev, amrex::FArrayBox &Dx_fab, amrex::FArrayBox &Dy_fab, amrex::FArrayBox &Dz_fab, long np_to_deposit, amrex::Real dt, amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes) |
Vay current deposition (Vay et al, 2013) for thread thread_num: deposit D in real space and store the result in Dx_fab , Dy_fab , Dz_fab . More... | |
void doChargeConservingDepositionShapeNImplicit | ( | const amrex::ParticleReal *const | xp_n, |
const amrex::ParticleReal *const | yp_n, | ||
const amrex::ParticleReal *const | zp_n, | ||
const GetParticlePosition< PIdx > & | GetPosition, | ||
const amrex::ParticleReal *const | wp, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uxp_n, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uyp_n, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uzp_n, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uxp_nph, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uyp_nph, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uzp_nph, | ||
const int *const | ion_lev, | ||
const amrex::Array4< amrex::Real > & | Jx_arr, | ||
const amrex::Array4< amrex::Real > & | Jy_arr, | ||
const amrex::Array4< amrex::Real > & | Jz_arr, | ||
const long | np_to_deposit, | ||
const amrex::Real | dt, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
const std::array< amrex::Real, 3 > | xyzmin, | ||
const amrex::Dim3 | lo, | ||
const amrex::Real | q, | ||
const int | n_rz_azimuthal_modes | ||
) |
Esirkepov Current Deposition for thread thread_num for implicit scheme The difference from doEsirkepovDepositionShapeN is in how the old and new particles positions are determined and in how the particle gamma is calculated.
depos_order | deposition order |
xp_n,yp_n,zp_n | Pointer to arrays of particle position at time level n. |
GetPosition | A functor for returning the particle position. |
wp | Pointer to array of particle weights. |
uxp_n,uyp_n,uzp_n | Pointer to arrays of particle momentum at time level n. |
uxp_nph,uyp_nph,uzp_nph | Pointer to arrays of particle momentum at time level n + 1/2. |
ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is a null pointer. |
Jx_arr,Jy_arr,Jz_arr | Array4 of current density, either full array or tile. |
np_to_deposit | Number of particles for which current is deposited. |
dt | Time step for particle level |
dx | 3D cell size |
xyzmin | Physical lower bounds of domain. |
lo | Index lower bounds of domain. |
q | species charge. |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |
void doDepositionShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
const amrex::ParticleReal *const | wp, | ||
const amrex::ParticleReal *const | uxp, | ||
const amrex::ParticleReal *const | uyp, | ||
const amrex::ParticleReal *const | uzp, | ||
const int * | ion_lev, | ||
amrex::FArrayBox & | jx_fab, | ||
amrex::FArrayBox & | jy_fab, | ||
amrex::FArrayBox & | jz_fab, | ||
long | np_to_deposit, | ||
amrex::Real | relative_time, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
const std::array< amrex::Real, 3 > & | xyzmin, | ||
amrex::Dim3 | lo, | ||
amrex::Real | q, | ||
int | n_rz_azimuthal_modes | ||
) |
Current Deposition for thread thread_num.
depos_order | deposition order |
GetPosition | A functor for returning the particle position. |
wp | Pointer to array of particle weights. |
uxp,uyp,uzp | Pointer to arrays of particle momentum. |
ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is a null pointer. |
jx_fab,jy_fab,jz_fab | FArrayBox of current density, either full array or tile. |
np_to_deposit | Number of particles for which current is deposited. |
relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition. |
dx | 3D cell size |
xyzmin | Physical lower bounds of domain. |
lo | Index lower bounds of domain. |
q | species charge. |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |
void doDepositionShapeNImplicit | ( | const GetParticlePosition< PIdx > & | GetPosition, |
const amrex::ParticleReal *const | wp, | ||
const amrex::ParticleReal *const | uxp_n, | ||
const amrex::ParticleReal *const | uyp_n, | ||
const amrex::ParticleReal *const | uzp_n, | ||
const amrex::ParticleReal *const | uxp, | ||
const amrex::ParticleReal *const | uyp, | ||
const amrex::ParticleReal *const | uzp, | ||
const int *const | ion_lev, | ||
amrex::FArrayBox & | jx_fab, | ||
amrex::FArrayBox & | jy_fab, | ||
amrex::FArrayBox & | jz_fab, | ||
const long | np_to_deposit, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
const std::array< amrex::Real, 3 > & | xyzmin, | ||
const amrex::Dim3 | lo, | ||
const amrex::Real | q, | ||
const int | n_rz_azimuthal_modes | ||
) |
Direct current deposition for thread thread_num for the implicit scheme The only difference from doDepositionShapeN is in how the particle gamma is calculated.
depos_order | deposition order |
GetPosition | A functor for returning the particle position. |
wp | Pointer to array of particle weights. |
uxp_n,uyp_n,uzp_n | Pointer to arrays of particle momentum at time n. |
uxp,uyp,uzp | Pointer to arrays of particle momentum at time n+1/2. |
ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is a null pointer. |
jx_fab,jy_fab,jz_fab | FArrayBox of current density, either full array or tile. |
np_to_deposit | Number of particles for which current is deposited. |
dx | 3D cell size |
xyzmin | Physical lower bounds of domain. |
lo | Index lower bounds of domain. |
q | species charge. |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |
AMREX_GPU_HOST_DEVICE AMREX_INLINE void doDepositionShapeNKernel | ( | const amrex::ParticleReal | xp, |
const amrex::ParticleReal | yp, | ||
const amrex::ParticleReal | zp, | ||
const amrex::ParticleReal | wq, | ||
const amrex::ParticleReal | vx, | ||
const amrex::ParticleReal | vy, | ||
const amrex::ParticleReal | vz, | ||
amrex::Array4< amrex::Real > const & | jx_arr, | ||
amrex::Array4< amrex::Real > const & | jy_arr, | ||
amrex::Array4< amrex::Real > const & | jz_arr, | ||
amrex::IntVect const & | jx_type, | ||
amrex::IntVect const & | jy_type, | ||
amrex::IntVect const & | jz_type, | ||
const amrex::Real | relative_time, | ||
AMREX_D_DECL(const amrex::Real dzi, const amrex::Real dxi, const amrex::Real dyi) | , | ||
AMREX_D_DECL(const amrex::Real zmin, const amrex::Real xmin, const amrex::Real ymin) | , | ||
const amrex::Real | invvol, | ||
const amrex::Dim3 | lo, | ||
const int | n_rz_azimuthal_modes | ||
) |
Kernel for the direct current deposition for thread thread_num.
depos_order | deposition order |
xp,yp,zp | The particle positions. |
wq | The charge of the macroparticle |
vx,vy,vz | The particle velocities |
jx_arr,jy_arr,jz_arr | Array4 of current density, either full array or tile. |
jx_type,jy_type,jz_type | The grid types along each direction, either NODE or CELL |
relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition. |
dzi,dxi,dyi | The inverse cell sizes |
zmin,xmin,ymin | The lower bounds of the domain |
invvol | The inverse volume of a grid cell |
lo | Index lower bounds of domain. |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |
void doDepositionSharedShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
const amrex::ParticleReal *const | wp, | ||
const amrex::ParticleReal *const | uxp, | ||
const amrex::ParticleReal *const | uyp, | ||
const amrex::ParticleReal *const | uzp, | ||
const int * | ion_lev, | ||
amrex::FArrayBox & | jx_fab, | ||
amrex::FArrayBox & | jy_fab, | ||
amrex::FArrayBox & | jz_fab, | ||
long | np_to_deposit, | ||
const amrex::Real | relative_time, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
const std::array< amrex::Real, 3 > & | xyzmin, | ||
amrex::Dim3 | lo, | ||
amrex::Real | q, | ||
int | n_rz_azimuthal_modes, | ||
const amrex::DenseBins< WarpXParticleContainer::ParticleTileType::ParticleTileDataType > & | a_bins, | ||
const amrex::Box & | box, | ||
const amrex::Geometry & | geom, | ||
const amrex::IntVect & | a_tbox_max_size | ||
) |
Current Deposition for thread thread_num using shared memory.
depos_order | deposition order |
GetPosition | A functor for returning the particle position. |
wp | Pointer to array of particle weights. |
uxp,uyp,uzp | Pointer to arrays of particle momentum. |
ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is a null pointer. |
jx_fab,jy_fab,jz_fab | FArrayBox of current density, either full array or tile. |
np_to_deposit | Number of particles for which current is deposited. |
dt | Time step for particle level |
relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition. |
dx | 3D cell size |
xyzmin | Physical lower bounds of domain. |
lo | Index lower bounds of domain. |
q | species charge. |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |
void doEsirkepovDepositionShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
const amrex::ParticleReal *const | wp, | ||
const amrex::ParticleReal *const | uxp, | ||
const amrex::ParticleReal *const | uyp, | ||
const amrex::ParticleReal *const | uzp, | ||
const int * | ion_lev, | ||
const amrex::Array4< amrex::Real > & | Jx_arr, | ||
const amrex::Array4< amrex::Real > & | Jy_arr, | ||
const amrex::Array4< amrex::Real > & | Jz_arr, | ||
long | np_to_deposit, | ||
amrex::Real | dt, | ||
amrex::Real | relative_time, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
std::array< amrex::Real, 3 > | xyzmin, | ||
amrex::Dim3 | lo, | ||
amrex::Real | q, | ||
int | n_rz_azimuthal_modes | ||
) |
Esirkepov Current Deposition for thread thread_num.
depos_order | deposition order |
GetPosition | A functor for returning the particle position. | |
wp | Pointer to array of particle weights. | |
uxp,uyp,uzp | Pointer to arrays of particle momentum. | |
ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is a null pointer. | |
Jx_arr,Jy_arr,Jz_arr | Array4 of current density, either full array or tile. | |
np_to_deposit | Number of particles for which current is deposited. | |
dt | Time step for particle level | |
[in] | relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition. |
dx | 3D cell size | |
xyzmin | Physical lower bounds of domain. | |
lo | Index lower bounds of domain. | |
q | species charge. | |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |
void doVayDepositionShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
const amrex::ParticleReal *const | wp, | ||
const amrex::ParticleReal *const | uxp, | ||
const amrex::ParticleReal *const | uyp, | ||
const amrex::ParticleReal *const | uzp, | ||
const int *const | ion_lev, | ||
amrex::FArrayBox & | Dx_fab, | ||
amrex::FArrayBox & | Dy_fab, | ||
amrex::FArrayBox & | Dz_fab, | ||
long | np_to_deposit, | ||
amrex::Real | dt, | ||
amrex::Real | relative_time, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
const std::array< amrex::Real, 3 > & | xyzmin, | ||
amrex::Dim3 | lo, | ||
amrex::Real | q, | ||
int | n_rz_azimuthal_modes | ||
) |
Vay current deposition (Vay et al, 2013) for thread thread_num:
deposit D
in real space and store the result in Dx_fab
, Dy_fab
, Dz_fab
.
depos_order | deposition order |
[in] | GetPosition | Functor that returns the particle position |
[in] | wp | Pointer to array of particle weights |
[in] | uxp,uyp,uzp | Pointer to arrays of particle momentum along x |
[in] | ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is null |
[in,out] | Dx_fab,Dy_fab,Dz_fab | FArrayBox of Vay current density, either full array or tile |
[in] | np_to_deposit | Number of particles for which current is deposited |
[in] | dt | Time step for particle level |
[in] | relative_time | Time at which to deposit D, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition. |
[in] | dx | 3D cell size |
[in] | xyzmin | 3D lower bounds of physical domain |
[in] | lo | Dimension-agnostic lower bounds of index domain |
[in] | q | Species charge |
[in] | n_rz_azimuthal_modes | Number of azimuthal modes in RZ geometry |
void doVillasenorDepositionShapeNImplicit | ( | const amrex::ParticleReal *const | xp_n, |
const amrex::ParticleReal *const | yp_n, | ||
const amrex::ParticleReal *const | zp_n, | ||
const GetParticlePosition< PIdx > & | GetPosition, | ||
const amrex::ParticleReal *const | wp, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uxp_n, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uyp_n, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uzp_n, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uxp_nph, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uyp_nph, | ||
[[maybe_unused] ]const amrex::ParticleReal *const | uzp_nph, | ||
const int *const | ion_lev, | ||
const amrex::Array4< amrex::Real > & | Jx_arr, | ||
const amrex::Array4< amrex::Real > & | Jy_arr, | ||
const amrex::Array4< amrex::Real > & | Jz_arr, | ||
const long | np_to_deposit, | ||
const amrex::Real | dt, | ||
const std::array< amrex::Real, 3 > & | dx, | ||
const std::array< amrex::Real, 3 > | xyzmin, | ||
const amrex::Dim3 | lo, | ||
const amrex::Real | q, | ||
const int | n_rz_azimuthal_modes | ||
) |
Villasenor and Buneman Current Deposition for thread thread_num for implicit scheme. The specifics for the implicit scheme are in how gamma is determined. This is a charge- conserving deposition. The difference from Esirkepov is that the deposit is done segment by segment, where the segments are determined by cell crossings. In general, this results in a tighter stencil. The implementation is valid for an arbitrary number of cell crossings.
depos_order | deposition order |
xp_n,yp_n,zp_n | Pointer to arrays of particle position at time level n. |
GetPosition | A functor for returning the particle position. |
wp | Pointer to array of particle weights. |
uxp_n,uyp_n,uzp_n | Pointer to arrays of particle momentum at time level n. |
uxp_nph,uyp_nph,uzp_nph | Pointer to arrays of particle momentum at time level n + 1/2. |
ion_lev | Pointer to array of particle ionization level. This is required to have the charge of each macroparticle since q is a scalar. For non-ionizable species, ion_lev is a null pointer. |
Jx_arr,Jy_arr,Jz_arr | Array4 of current density, either full array or tile. |
np_to_deposit | Number of particles for which current is deposited. |
dt | Time step for particle level |
dx | 3D cell size |
xyzmin | Physical lower bounds of domain. |
lo | Index lower bounds of domain. |
q | species charge. |
n_rz_azimuthal_modes | Number of azimuthal modes when using RZ geometry. |