WarpX
Functions
CurrentDeposition.H File Reference
#include "Particles/Pusher/GetAndSetPosition.H"
#include "Particles/ShapeFactors.H"
#include "Utils/WarpX_Complex.H"
#include <AMReX.H>
#include <AMReX_Array4.H>
#include <AMReX_REAL.H>

Go to the source code of this file.

Functions

template<int depos_order>
void doDepositionShapeN (const GetParticlePosition &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 &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, const long np_to_depose, 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 long n_rz_azimuthal_modes)
 Current Deposition for thread thread_num /param GetPosition : A functor for returning the particle position. More...
 
template<int depos_order>
void doEsirkepovDepositionShapeN (const GetParticlePosition &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, const long np_to_depose, 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 long n_rz_azimuthal_modes)
 Esirkepov Current Deposition for thread thread_num. More...
 
template<int depos_order>
void doVayDepositionShapeN (const GetParticlePosition &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 &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, const long np_to_depose, 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 long 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 jx_fab, jy_fab, jz_fab. More...
 

Function Documentation

◆ doDepositionShapeN()

template<int depos_order>
void doDepositionShapeN ( const GetParticlePosition 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 &  jx_fab,
amrex::FArrayBox &  jy_fab,
amrex::FArrayBox &  jz_fab,
const long  np_to_depose,
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 long  n_rz_azimuthal_modes 
)

Current Deposition for thread thread_num /param GetPosition : A functor for returning the particle position.

Parameters
wp: Pointer to array of particle weights.
uxpuyp 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: FArrayBox of current density, either full array or tile.
jy_fab: FArrayBox of current density, either full array or tile.
jz_fab: FArrayBox of current density, either full array or tile.
np_to_depose: 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. /param q : species charge.

◆ doEsirkepovDepositionShapeN()

template<int depos_order>
void doEsirkepovDepositionShapeN ( const GetParticlePosition 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,
const long  np_to_depose,
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 long  n_rz_azimuthal_modes 
)

Esirkepov Current Deposition for thread thread_num.

/param GetPosition : A functor for returning the particle position.

Parameters
wp: Pointer to array of particle weights.
uxpuyp 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: Array4 of current density, either full array or tile.
Jy_arr: Array4 of current density, either full array or tile.
Jz_arr: Array4 of current density, either full array or tile.
np_to_depose: 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_modesNumber of azimuthal modes when using RZ geometry

◆ doVayDepositionShapeN()

template<int depos_order>
void doVayDepositionShapeN ( const GetParticlePosition 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 &  jx_fab,
amrex::FArrayBox &  jy_fab,
amrex::FArrayBox &  jz_fab,
const long  np_to_depose,
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 long  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 jx_fab, jy_fab, jz_fab.

Parameters
[in]GetPositionFunctor that returns the particle position
[in]wpPointer to array of particle weights
[in]uxpPointer to arrays of particle momentum along x
[in]uypPointer to arrays of particle momentum along y
[in]uzpPointer to arrays of particle momentum along z
[in]ion_levPointer 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]jx_fabFArrayBox of current density, either full array or tile
[in,out]jy_fabFArrayBox of current density, either full array or tile
[in,out]jz_fabFArrayBox of current density, either full array or tile
[in]np_to_deposeNumber of particles for which current is deposited
[in]dtTime step for particle level
[in]dx3D cell size
[in]xyzmin3D lower bounds of physical domain
[in]loDimension-agnostic lower bounds of index domain
[in]qSpecies charge
[in]n_rz_azimuthal_modesNumber of azimuthal modes in RZ geometry