WarpX
Functions
CurrentDeposition.H File Reference
#include "Parallelization/KernelTimer.H"
#include "Particles/Pusher/GetAndSetPosition.H"
#include "Particles/ShapeFactors.H"
#include "Utils/WarpXAlgorithmSelection.H"
#include "Utils/WarpX_Complex.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>
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 relative_t, 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, amrex::Real *cost, const long load_balance_costs_update_algo)
 Current Deposition for thread thread_num. 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 *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_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 int n_rz_azimuthal_modes, amrex::Real *const cost, const long load_balance_costs_update_algo)
 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 int n_rz_azimuthal_modes, amrex::Real *cost, const long load_balance_costs_update_algo)
 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  relative_t,
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,
amrex::Real *  cost,
const long  load_balance_costs_update_algo 
)

Current Deposition for thread thread_num.

Parameters
GetPosition: A functor for returning the particle position.
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.
relative_t: Time at which to deposit J, relative to the time of the current positions of the particles (expressed in physical units). 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_modesNumber of azimuthal modes when using RZ geometry.
costPointer to (load balancing) cost corresponding to box where present particles deposit current.
load_balance_costs_update_algoSelected method for updating load balance costs.

◆ 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 *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_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 int  n_rz_azimuthal_modes,
amrex::Real *const  cost,
const long  load_balance_costs_update_algo 
)

Esirkepov Current Deposition for thread thread_num.

Parameters
GetPosition: A functor for returning the particle position.
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.
costPointer to (load balancing) cost corresponding to box where present particles deposit current.
load_balance_costs_update_algoSelected method for updating load balance costs.

◆ 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 int  n_rz_azimuthal_modes,
amrex::Real *  cost,
const long  load_balance_costs_update_algo 
)

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
[in,out]costPointer to (load balancing) cost corresponding to box where present particles deposit current
[in]load_balance_costs_update_algoSelected method for updating load balance costs