WarpX
Functions
FieldGather.H File Reference
#include "Particles/Pusher/GetAndSetPosition.H"
#include "Particles/Gather/GetExternalFields.H"
#include "Particles/ShapeFactors.H"
#include "Utils/WarpX_Complex.H"
#include <AMReX.H>

Go to the source code of this file.

Functions

template<int depos_order, int galerkin_interpolation>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeN (const amrex::ParticleReal xp, const amrex::ParticleReal yp, const amrex::ParticleReal zp, amrex::ParticleReal &Exp, amrex::ParticleReal &Eyp, amrex::ParticleReal &Ezp, amrex::ParticleReal &Bxp, amrex::ParticleReal &Byp, amrex::ParticleReal &Bzp, amrex::Array4< amrex::Real const > const &ex_arr, amrex::Array4< amrex::Real const > const &ey_arr, amrex::Array4< amrex::Real const > const &ez_arr, amrex::Array4< amrex::Real const > const &bx_arr, amrex::Array4< amrex::Real const > const &by_arr, amrex::Array4< amrex::Real const > const &bz_arr, const amrex::IndexType ex_type, const amrex::IndexType ey_type, const amrex::IndexType ez_type, const amrex::IndexType bx_type, const amrex::IndexType by_type, const amrex::IndexType bz_type, const amrex::GpuArray< amrex::Real, 3 > &dx, const amrex::GpuArray< amrex::Real, 3 > &xyzmin, const amrex::Dim3 &lo, const long n_rz_azimuthal_modes)
 Field gather for a single particle. More...
 
template<int depos_order, int lower_in_v>
void doGatherShapeN (const GetParticlePosition &getPosition, const GetExternalEField &getExternalE, const GetExternalBField &getExternalB, amrex::ParticleReal *const Exp, amrex::ParticleReal *const Eyp, amrex::ParticleReal *const Ezp, amrex::ParticleReal *const Bxp, amrex::ParticleReal *const Byp, amrex::ParticleReal *const Bzp, amrex::FArrayBox const *const exfab, amrex::FArrayBox const *const eyfab, amrex::FArrayBox const *const ezfab, amrex::FArrayBox const *const bxfab, amrex::FArrayBox const *const byfab, amrex::FArrayBox const *const bzfab, const long np_to_gather, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > xyzmin, const amrex::Dim3 lo, const long n_rz_azimuthal_modes)
 Field gather for particles. More...
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeN (const amrex::ParticleReal xp, const amrex::ParticleReal yp, const amrex::ParticleReal zp, amrex::ParticleReal &Exp, amrex::ParticleReal &Eyp, amrex::ParticleReal &Ezp, amrex::ParticleReal &Bxp, amrex::ParticleReal &Byp, amrex::ParticleReal &Bzp, amrex::Array4< amrex::Real const > const &ex_arr, amrex::Array4< amrex::Real const > const &ey_arr, amrex::Array4< amrex::Real const > const &ez_arr, amrex::Array4< amrex::Real const > const &bx_arr, amrex::Array4< amrex::Real const > const &by_arr, amrex::Array4< amrex::Real const > const &bz_arr, const amrex::IndexType ex_type, const amrex::IndexType ey_type, const amrex::IndexType ez_type, const amrex::IndexType bx_type, const amrex::IndexType by_type, const amrex::IndexType bz_type, const amrex::GpuArray< amrex::Real, 3 > &dx_arr, const amrex::GpuArray< amrex::Real, 3 > &xyzmin_arr, const amrex::Dim3 &lo, const long n_rz_azimuthal_modes, const int nox, const bool galerkin_interpolation)
 Field gather for a single particle. More...
 

Function Documentation

◆ doGatherShapeN() [1/3]

template<int depos_order, int galerkin_interpolation>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeN ( const amrex::ParticleReal  xp,
const amrex::ParticleReal  yp,
const amrex::ParticleReal  zp,
amrex::ParticleReal &  Exp,
amrex::ParticleReal &  Eyp,
amrex::ParticleReal &  Ezp,
amrex::ParticleReal &  Bxp,
amrex::ParticleReal &  Byp,
amrex::ParticleReal &  Bzp,
amrex::Array4< amrex::Real const > const &  ex_arr,
amrex::Array4< amrex::Real const > const &  ey_arr,
amrex::Array4< amrex::Real const > const &  ez_arr,
amrex::Array4< amrex::Real const > const &  bx_arr,
amrex::Array4< amrex::Real const > const &  by_arr,
amrex::Array4< amrex::Real const > const &  bz_arr,
const amrex::IndexType  ex_type,
const amrex::IndexType  ey_type,
const amrex::IndexType  ez_type,
const amrex::IndexType  bx_type,
const amrex::IndexType  by_type,
const amrex::IndexType  bz_type,
const amrex::GpuArray< amrex::Real, 3 > &  dx,
const amrex::GpuArray< amrex::Real, 3 > &  xyzmin,
const amrex::Dim3 &  lo,
const long  n_rz_azimuthal_modes 
)

Field gather for a single particle.

Template Parameters
depos_orderParticle shape order
galerkin_interpolationLower the order of the particle shape by this value (0/1) for the parallel field component
Parameters
xp,yp,zpParticle position coordinates
Exp,Eyp,EzpElectric field on particles.
Bxp,Byp,BzpMagnetic field on particles.
ex_arrey_arr ez_arr Array4 of the electric field, either full array or tile.
bx_arrby_arr bz_arr Array4 of the magnetic field, either full array or tile.
ex_type,ey_type,ez_typeIndexType of the electric field
bx_type,by_type,bz_typeIndexType of the magnetic field
dx3D cell spacing
xyzminPhysical lower bounds of domain in x, y, z.
loIndex lower bounds of domain.
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry

◆ doGatherShapeN() [2/3]

template<int depos_order, int lower_in_v>
void doGatherShapeN ( const GetParticlePosition getPosition,
const GetExternalEField getExternalE,
const GetExternalBField getExternalB,
amrex::ParticleReal *const  Exp,
amrex::ParticleReal *const  Eyp,
amrex::ParticleReal *const  Ezp,
amrex::ParticleReal *const  Bxp,
amrex::ParticleReal *const  Byp,
amrex::ParticleReal *const  Bzp,
amrex::FArrayBox const *const  exfab,
amrex::FArrayBox const *const  eyfab,
amrex::FArrayBox const *const  ezfab,
amrex::FArrayBox const *const  bxfab,
amrex::FArrayBox const *const  byfab,
amrex::FArrayBox const *const  bzfab,
const long  np_to_gather,
const std::array< amrex::Real, 3 > &  dx,
const std::array< amrex::Real, 3 >  xyzmin,
const amrex::Dim3  lo,
const long  n_rz_azimuthal_modes 
)

Field gather for particles.

/param getPosition : A functor for returning the particle position. /param getExternalEField : A functor for assigning the external E field. /param getExternalBField : A functor for assigning the external B field.

Parameters
Exp,Eyp,Ezp: Pointer to array of electric field on particles.
Bxp,Byp,Bzp: Pointer to array of magnetic field on particles.
exfabeyfab ezfab : Array4 of the electric field, either full array or tile.
ezfabbxfab bzfab : Array4 of the magnetic field, either full array or tile.
np_to_gather: Number of particles for which field is gathered.
dx: 3D cell size
xyzmin: Physical lower bounds of domain.
lo: Index lower bounds of domain.
n_rz_azimuthal_modes: Number of azimuthal modes when using RZ geometry

◆ doGatherShapeN() [3/3]

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeN ( const amrex::ParticleReal  xp,
const amrex::ParticleReal  yp,
const amrex::ParticleReal  zp,
amrex::ParticleReal &  Exp,
amrex::ParticleReal &  Eyp,
amrex::ParticleReal &  Ezp,
amrex::ParticleReal &  Bxp,
amrex::ParticleReal &  Byp,
amrex::ParticleReal &  Bzp,
amrex::Array4< amrex::Real const > const &  ex_arr,
amrex::Array4< amrex::Real const > const &  ey_arr,
amrex::Array4< amrex::Real const > const &  ez_arr,
amrex::Array4< amrex::Real const > const &  bx_arr,
amrex::Array4< amrex::Real const > const &  by_arr,
amrex::Array4< amrex::Real const > const &  bz_arr,
const amrex::IndexType  ex_type,
const amrex::IndexType  ey_type,
const amrex::IndexType  ez_type,
const amrex::IndexType  bx_type,
const amrex::IndexType  by_type,
const amrex::IndexType  bz_type,
const amrex::GpuArray< amrex::Real, 3 > &  dx_arr,
const amrex::GpuArray< amrex::Real, 3 > &  xyzmin_arr,
const amrex::Dim3 &  lo,
const long  n_rz_azimuthal_modes,
const int  nox,
const bool  galerkin_interpolation 
)

Field gather for a single particle.

/param xp, yp, zp : Particle position coordinates

Parameters
Exp,Eyp,Ezp: Electric field on particles.
Bxp,Byp,Bzp: Magnetic field on particles.
ex_arrey_arr ez_arr : Array4 of the electric field, either full array or tile.
bx_arrby_arr bz_arr : Array4 of the magnetic field, either full array or tile.
ex_type,ey_type,ez_type: IndexType of the electric field
bx_type,by_type,bz_type: IndexType of the magnetic field
dx: 3D cell spacing
xyzmin: Physical lower bounds of domain in x, y, z.
lo: Index lower bounds of domain.
n_rz_azimuthal_modes: Number of azimuthal modes when using RZ geometry
nox: order of the particle shape function
galerkin_interpolation: whether to use lower order in v