WarpX
|
#include "Particles/Gather/GetExternalFields.H"
#include "Particles/Pusher/GetAndSetPosition.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 int n_rz_azimuthal_modes) |
Field gather for a single particle. More... | |
template<int depos_order> | |
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void | doGatherShapeNEsirkepovStencilImplicit ([[maybe_unused]] const amrex::ParticleReal xp_n, [[maybe_unused]] const amrex::ParticleReal yp_n, const amrex::ParticleReal zp_n, [[maybe_unused]] const amrex::ParticleReal xp_nph, [[maybe_unused]] 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, [[maybe_unused]] const amrex::IndexType Ex_type, [[maybe_unused]] const amrex::IndexType Ey_type, [[maybe_unused]] const amrex::IndexType Ez_type, [[maybe_unused]] const amrex::IndexType Bx_type, [[maybe_unused]] const amrex::IndexType By_type, [[maybe_unused]] const amrex::IndexType Bz_type, const amrex::GpuArray< amrex::Real, 3 > &dx, const amrex::GpuArray< amrex::Real, 3 > &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. More... | |
template<int depos_order> | |
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void | doGatherPicnicShapeN ([[maybe_unused]] const amrex::ParticleReal xp_n, [[maybe_unused]] const amrex::ParticleReal yp_n, const amrex::ParticleReal zp_n, [[maybe_unused]] const amrex::ParticleReal xp_nph, [[maybe_unused]] 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, [[maybe_unused]] const amrex::IndexType Ex_type, [[maybe_unused]] const amrex::IndexType Ey_type, [[maybe_unused]] const amrex::IndexType Ez_type, [[maybe_unused]] const amrex::IndexType Bx_type, [[maybe_unused]] const amrex::IndexType By_type, [[maybe_unused]] const amrex::IndexType Bz_type, const amrex::GpuArray< amrex::Real, 3 > &dx, const amrex::GpuArray< amrex::Real, 3 > &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. More... | |
template<int depos_order, int lower_in_v> | |
void | doGatherShapeN (const GetParticlePosition< PIdx > &getPosition, const GetExternalEBField &getExternalEB, 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 int 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 int n_rz_azimuthal_modes, const int nox, const bool galerkin_interpolation) |
Field gather for a single particle. More... | |
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::GpuArray< amrex::Real, 3 > &dx_arr, const amrex::GpuArray< amrex::Real, 3 > &xyzmin_arr, const amrex::Dim3 &lo, const int n_rz_azimuthal_modes, const int nox, const int depos_type) |
Field gather for a single particle. More... | |
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherPicnicShapeN | ( | [[maybe_unused] ] const amrex::ParticleReal | xp_n, |
[[maybe_unused] ] const amrex::ParticleReal | yp_n, | ||
const amrex::ParticleReal | zp_n, | ||
[[maybe_unused] ] const amrex::ParticleReal | xp_nph, | ||
[[maybe_unused] ] 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, | ||
[[maybe_unused] ] const amrex::IndexType | Ex_type, | ||
[[maybe_unused] ] const amrex::IndexType | Ey_type, | ||
[[maybe_unused] ] const amrex::IndexType | Ez_type, | ||
[[maybe_unused] ] const amrex::IndexType | Bx_type, | ||
[[maybe_unused] ] const amrex::IndexType | By_type, | ||
[[maybe_unused] ] const amrex::IndexType | Bz_type, | ||
const amrex::GpuArray< amrex::Real, 3 > & | dx, | ||
const amrex::GpuArray< amrex::Real, 3 > & | 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.
depos_order | Particle shape order |
xp_n,yp_n,zp_n | Particle position coordinates at start of step |
xp_nph,yp_nph,zp_nph | Particle position coordinates at half step |
Exp,Eyp,Ezp | Electric field on particles. |
Bxp,Byp,Bzp | Magnetic field on particles. |
Ex_arr,Ey_arr,Ez_arr | Array4 of the electric field, either full array or tile. |
Bx_arr,By_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 |
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 int | n_rz_azimuthal_modes | ||
) |
Field gather for a single particle.
depos_order | Particle shape order |
galerkin_interpolation | Lower the order of the particle shape by this value (0/1) for the parallel field component |
xp,yp,zp | Particle position coordinates |
Exp,Eyp,Ezp | Electric field on particles. |
Bxp,Byp,Bzp | Magnetic field on particles. |
ex_arr,ey_arr,ez_arr | Array4 of the electric field, either full array or tile. |
bx_arr,by_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 |
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 int | n_rz_azimuthal_modes, | ||
const int | nox, | ||
const bool | galerkin_interpolation | ||
) |
Field gather for a single particle.
xp,yp,zp | Particle position coordinates |
Exp,Eyp,Ezp | Electric field on particles. |
Bxp,Byp,Bzp | Magnetic field on particles. |
ex_arr,ey_arr,ez_arr | Array4 of the electric field, either full array or tile. |
bx_arr,by_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_arr | 3D cell spacing |
xyzmin_arr | 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 |
void doGatherShapeN | ( | const GetParticlePosition< PIdx > & | getPosition, |
const GetExternalEBField & | getExternalEB, | ||
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 int | n_rz_azimuthal_modes | ||
) |
Field gather for particles.
depos_order | deposition order |
lower_in_v | lower shape order in parallel direction (Galerkin) |
getPosition | A functor for returning the particle position. |
getExternalEB | A functor for assigning the external E and B fields. |
Exp,Eyp,Ezp | Pointer to array of electric field on particles. |
Bxp,Byp,Bzp | Pointer to array of magnetic field on particles. |
exfab,eyfab,ezfab | Array4 of the electric field, either full array or tile. |
bxfab,byfab,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 |
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void doGatherShapeNEsirkepovStencilImplicit | ( | [[maybe_unused] ] const amrex::ParticleReal | xp_n, |
[[maybe_unused] ] const amrex::ParticleReal | yp_n, | ||
const amrex::ParticleReal | zp_n, | ||
[[maybe_unused] ] const amrex::ParticleReal | xp_nph, | ||
[[maybe_unused] ] 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, | ||
[[maybe_unused] ] const amrex::IndexType | Ex_type, | ||
[[maybe_unused] ] const amrex::IndexType | Ey_type, | ||
[[maybe_unused] ] const amrex::IndexType | Ez_type, | ||
[[maybe_unused] ] const amrex::IndexType | Bx_type, | ||
[[maybe_unused] ] const amrex::IndexType | By_type, | ||
[[maybe_unused] ] const amrex::IndexType | Bz_type, | ||
const amrex::GpuArray< amrex::Real, 3 > & | dx, | ||
const amrex::GpuArray< amrex::Real, 3 > & | 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.
depos_order | Particle shape order |
xp_n,yp_n,zp_n | Particle position coordinates at start of step |
xp_nph,yp_nph,zp_nph | Particle position coordinates at half step |
Exp,Eyp,Ezp | Electric field on particles. |
Bxp,Byp,Bzp | Magnetic field on particles. |
Ex_arr,Ey_arr,Ez_arr | Array4 of the electric field, either full array or tile. |
Bx_arr,By_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 |
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::GpuArray< amrex::Real, 3 > & | dx_arr, | ||
const amrex::GpuArray< amrex::Real, 3 > & | xyzmin_arr, | ||
const amrex::Dim3 & | lo, | ||
const int | n_rz_azimuthal_modes, | ||
const int | nox, | ||
const int | depos_type | ||
) |
Field gather for a single particle.
xp_n,yp_n,zp_n | Particle position coordinates at start of step |
xp_nph,yp_nph,zp_nph | Particle position coordinates at half time level (n + half) |
Exp,Eyp,Ezp | Electric field on particles. |
Bxp,Byp,Bzp | Magnetic field on particles. |
ex_arr,ey_arr,ez_arr | Array4 of the electric field, either full array or tile. |
bx_arr,by_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_arr | 3D cell spacing |
xyzmin_arr | 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 |
gather_type | integer identifier for which algorithm to use |
galerkin_interpolation | whether to use lower order in v |