WarpX
Loading...
Searching...
No Matches
FieldGather.H File Reference

Go to the source code of this file.

Functions

template<int depos_order_perp, int depos_order_para>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doDirectGatherVectorField (const amrex::ParticleReal xp, const amrex::ParticleReal yp, const amrex::ParticleReal zp, amrex::ParticleReal &Fxp, amrex::ParticleReal &Fyp, amrex::ParticleReal &Fzp, amrex::Array4< amrex::Real const > const &Fx_arr, amrex::Array4< amrex::Real const > const &Fy_arr, amrex::Array4< amrex::Real const > const &Fz_arr, const amrex::IndexType Fx_type, const amrex::IndexType Fy_type, const amrex::IndexType Fz_type, const amrex::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes)
 Gather vector field F for a single particle.
 
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::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes)
 Field gather for a single particle.
 
template<int depos_order>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeNEsirkepovStencilImplicit (const amrex::ParticleReal xp_n, const amrex::ParticleReal yp_n, const amrex::ParticleReal zp_n, const amrex::ParticleReal xp_nph, const amrex::ParticleReal yp_nph, const amrex::ParticleReal zp_nph, 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::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes)
 Energy conserving field gather for thread thread_num for the implicit scheme This uses the same stencil for the gather that is used for Esirkepov current deposition.
 
template<int depos_order>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherPicnicShapeN (const amrex::ParticleReal xp_n, const amrex::ParticleReal yp_n, const amrex::ParticleReal zp_n, const amrex::ParticleReal xp_nph, const amrex::ParticleReal yp_nph, const amrex::ParticleReal zp_nph, 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::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes)
 Energy conserving field gather for thread thread_num for the implicit scheme This uses the same stencil for the gather that is used for Villasenor current deposition. The magnetic field is deposited using direct deposition.
 
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::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes, const int nox, const bool galerkin_interpolation)
 Field gather for a single particle.
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeNImplicit (const amrex::ParticleReal xp_n, const amrex::ParticleReal yp_n, const amrex::ParticleReal zp_n, const amrex::ParticleReal xp_nph, const amrex::ParticleReal yp_nph, const amrex::ParticleReal zp_nph, 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::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes, const int nox, const CurrentDepositionAlgo depos_type)
 Field gather for a single particle.
 

Function Documentation

◆ doDirectGatherVectorField()

template<int depos_order_perp, int depos_order_para>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doDirectGatherVectorField ( const amrex::ParticleReal xp,
const amrex::ParticleReal yp,
const amrex::ParticleReal zp,
amrex::ParticleReal & Fxp,
amrex::ParticleReal & Fyp,
amrex::ParticleReal & Fzp,
amrex::Array4< amrex::Real const > const & Fx_arr,
amrex::Array4< amrex::Real const > const & Fy_arr,
amrex::Array4< amrex::Real const > const & Fz_arr,
const amrex::IndexType Fx_type,
const amrex::IndexType Fy_type,
const amrex::IndexType Fz_type,
const amrex::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 & lo,
const int n_rz_azimuthal_modes )

Gather vector field F for a single particle.

Template Parameters
depos_order_perpParticle shape order in parallel direction
depos_order_paraParticle shape order in perpendicular direction
Parameters
xp,yp,zpParticle position coordinates
Fxp,Fyp,FzpVector field on particle
Fx_arr,Fy_arr,Fz_arrArray4 of the vector field, either full array or tile
Fx_type,Fy_type,Fz_typeIndex type of the vector fields
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry

◆ doGatherPicnicShapeN()

template<int depos_order>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherPicnicShapeN ( const amrex::ParticleReal xp_n,
const amrex::ParticleReal yp_n,
const amrex::ParticleReal zp_n,
const amrex::ParticleReal xp_nph,
const amrex::ParticleReal yp_nph,
const amrex::ParticleReal zp_nph,
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::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 & lo,
const int n_rz_azimuthal_modes )

Energy conserving field gather for thread thread_num for the implicit scheme This uses the same stencil for the gather that is used for Villasenor current deposition. The magnetic field is deposited using direct deposition.

Template Parameters
depos_orderParticle shape order
Parameters
xp_n,yp_n,zp_nParticle position coordinates at start of step
xp_nph,yp_nph,zp_nphParticle position coordinates at half step
Exp,Eyp,EzpElectric field on particles.
Bxp,Byp,BzpMagnetic field on particles.
Ex_arr,Ey_arr,Ez_arrArray4 of the electric field, either full array or tile.
Bx_arr,By_arr,Bz_arrArray4 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
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain.
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry

◆ doGatherShapeN() [1/2]

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::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 & lo,
const int 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_arr,ey_arr,ez_arrArray4 of the electric field, either full array or tile.
bx_arr,by_arr,bz_arrArray4 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
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain.
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry

◆ doGatherShapeN() [2/2]

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::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 & lo,
const int n_rz_azimuthal_modes,
const int nox,
const bool galerkin_interpolation )

Field gather for a single particle.

Parameters
xp,yp,zpParticle position coordinates
Exp,Eyp,EzpElectric field on particles.
Bxp,Byp,BzpMagnetic field on particles.
ex_arr,ey_arr,ez_arrArray4 of the electric field, either full array or tile.
bx_arr,by_arr,bz_arrArray4 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
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain.
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry
noxorder of the particle shape function
galerkin_interpolationwhether to use lower order in v

◆ doGatherShapeNEsirkepovStencilImplicit()

template<int depos_order>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeNEsirkepovStencilImplicit ( const amrex::ParticleReal xp_n,
const amrex::ParticleReal yp_n,
const amrex::ParticleReal zp_n,
const amrex::ParticleReal xp_nph,
const amrex::ParticleReal yp_nph,
const amrex::ParticleReal zp_nph,
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::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 & lo,
const int n_rz_azimuthal_modes )

Energy conserving field gather for thread thread_num for the implicit scheme This uses the same stencil for the gather that is used for Esirkepov current deposition.

Template Parameters
depos_orderParticle shape order
Parameters
xp_n,yp_n,zp_nParticle position coordinates at start of step
xp_nph,yp_nph,zp_nphParticle position coordinates at half step
Exp,Eyp,EzpElectric field on particles.
Bxp,Byp,BzpMagnetic field on particles.
Ex_arr,Ey_arr,Ez_arrArray4 of the electric field, either full array or tile.
Bx_arr,By_arr,Bz_arrArray4 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
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain.
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry

◆ doGatherShapeNImplicit()

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeNImplicit ( const amrex::ParticleReal xp_n,
const amrex::ParticleReal yp_n,
const amrex::ParticleReal zp_n,
const amrex::ParticleReal xp_nph,
const amrex::ParticleReal yp_nph,
const amrex::ParticleReal zp_nph,
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::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 & lo,
const int n_rz_azimuthal_modes,
const int nox,
const CurrentDepositionAlgo depos_type )

Field gather for a single particle.

Parameters
xp_n,yp_n,zp_nParticle position coordinates at start of step
xp_nph,yp_nph,zp_nphParticle position coordinates at half time level (n + half)
Exp,Eyp,EzpElectric field on particles.
Bxp,Byp,BzpMagnetic field on particles.
ex_arr,ey_arr,ez_arrArray4 of the electric field, either full array or tile.
bx_arr,by_arr,bz_arrArray4 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
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain.
n_rz_azimuthal_modesNumber of azimuthal modes when using RZ geometry
noxorder of the particle shape function
depos_typecurrent deposition algorithm (e.g., direct, Esirkepov, Vay, Villasenor, etc.)