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

Go to the source code of this file.

Functions

AMREX_GPU_HOST_DEVICE AMREX_INLINE void setMassMatricesKernels (const amrex::ParticleReal qs, const amrex::ParticleReal ms, const amrex::ParticleReal dt, const amrex::ParticleReal rhop, const amrex::ParticleReal uxp, const amrex::ParticleReal uyp, const amrex::ParticleReal uzp, const amrex::ParticleReal Bxp, const amrex::ParticleReal Byp, const amrex::ParticleReal Bzp, amrex::ParticleReal &fpxx, amrex::ParticleReal &fpxy, amrex::ParticleReal &fpxz, amrex::ParticleReal &fpyx, amrex::ParticleReal &fpyy, amrex::ParticleReal &fpyz, amrex::ParticleReal &fpzx, amrex::ParticleReal &fpzy, amrex::ParticleReal &fpzz)
 Set the mass matrices kernels for thread thread_num.
 
template<int depos_order>
AMREX_GPU_HOST_DEVICE AMREX_INLINE void doDirectJandSigmaDepositionKernel (const amrex::ParticleReal xp, const amrex::ParticleReal yp, const amrex::ParticleReal zp, const amrex::ParticleReal wqx, const amrex::ParticleReal wqy, const amrex::ParticleReal wqz, const amrex::ParticleReal fpxx, const amrex::ParticleReal fpxy, const amrex::ParticleReal fpxz, const amrex::ParticleReal fpyx, const amrex::ParticleReal fpyy, const amrex::ParticleReal fpyz, const amrex::ParticleReal fpzx, const amrex::ParticleReal fpzy, const amrex::ParticleReal fpzz, amrex::Array4< amrex::Real > const &jx_arr, amrex::Array4< amrex::Real > const &jy_arr, amrex::Array4< amrex::Real > const &jz_arr, int Sxx_nComp, int Syy_nComp, int Szz_nComp, amrex::Array4< amrex::Real > const &Sxx_arr, amrex::Array4< amrex::Real > const &Sxy_arr, amrex::Array4< amrex::Real > const &Sxz_arr, amrex::Array4< amrex::Real > const &Syx_arr, amrex::Array4< amrex::Real > const &Syy_arr, amrex::Array4< amrex::Real > const &Syz_arr, amrex::Array4< amrex::Real > const &Szx_arr, amrex::Array4< amrex::Real > const &Szy_arr, amrex::Array4< amrex::Real > const &Szz_arr, const amrex::IntVect &jx_type, const amrex::IntVect &jy_type, const amrex::IntVect &jz_type, const amrex::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 lo)
 Kernel for the direct deposition of J and S (mass matrices) for thread thread_num.
 
template<int depos_order>
void doDirectJandSigmaDeposition (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *wp, const amrex::ParticleReal *uxp_n, const amrex::ParticleReal *uyp_n, const amrex::ParticleReal *uzp_n, const amrex::ParticleReal *uxp_nph, const amrex::ParticleReal *uyp_nph, const amrex::ParticleReal *uzp_nph, amrex::FArrayBox &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, int Sxx_nComp, int Syy_nComp, int Szz_nComp, amrex::Array4< amrex::Real > const &Sxx_arr, amrex::Array4< amrex::Real > const &Sxy_arr, amrex::Array4< amrex::Real > const &Sxz_arr, amrex::Array4< amrex::Real > const &Syx_arr, amrex::Array4< amrex::Real > const &Syy_arr, amrex::Array4< amrex::Real > const &Syz_arr, amrex::Array4< amrex::Real > const &Szx_arr, amrex::Array4< amrex::Real > const &Szy_arr, amrex::Array4< amrex::Real > const &Szz_arr, const amrex::Array4< amrex::Real const > &Bx_arr, const amrex::Array4< amrex::Real const > &By_arr, const amrex::Array4< amrex::Real const > &Bz_arr, const amrex::IndexType Bx_type, const amrex::IndexType By_type, const amrex::IndexType Bz_type, const long np_to_deposit, const amrex::Real dt, const amrex::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 lo, const amrex::Real qs, const amrex::Real ms)
 direct deposition of J and mass matrices for thread thread_num
 
template<int depos_order, bool full_mass_matrices>
AMREX_GPU_HOST_DEVICE AMREX_INLINE void doVillasenorJandSigmaDepositionKernel (const amrex::ParticleReal xp_old, const amrex::ParticleReal yp_old, const amrex::ParticleReal zp_old, const amrex::ParticleReal xp_new, const amrex::ParticleReal yp_new, const amrex::ParticleReal zp_new, const amrex::ParticleReal wq_invvol, const amrex::ParticleReal uxp_mid, const amrex::ParticleReal uyp_mid, const amrex::ParticleReal uzp_mid, const amrex::ParticleReal gaminv, const amrex::ParticleReal fpxx, const amrex::ParticleReal fpxy, const amrex::ParticleReal fpxz, const amrex::ParticleReal fpyx, const amrex::ParticleReal fpyy, const amrex::ParticleReal fpyz, const amrex::ParticleReal fpzx, const amrex::ParticleReal fpzy, const amrex::ParticleReal fpzz, amrex::Array4< amrex::Real > const &Jx_arr, amrex::Array4< amrex::Real > const &Jy_arr, amrex::Array4< amrex::Real > const &Jz_arr, int max_crossings, amrex::Array4< amrex::Real > const &Sxx_arr, amrex::Array4< amrex::Real > const &Sxy_arr, amrex::Array4< amrex::Real > const &Sxz_arr, amrex::Array4< amrex::Real > const &Syx_arr, amrex::Array4< amrex::Real > const &Syy_arr, amrex::Array4< amrex::Real > const &Syz_arr, amrex::Array4< amrex::Real > const &Szx_arr, amrex::Array4< amrex::Real > const &Szy_arr, amrex::Array4< amrex::Real > const &Szz_arr, const amrex::Real dt, const amrex::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 lo)
 Kernel for the Villasenor deposition of J and S (mass matrices) for thread thread_num.
 
template<int depos_order, bool full_mass_matrices>
void doVillasenorJandSigmaDeposition (const amrex::ParticleReal *xp_n_data, const amrex::ParticleReal *yp_n_data, const amrex::ParticleReal *zp_n_data, const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *wp, const amrex::ParticleReal *uxp_n, const amrex::ParticleReal *uyp_n, const amrex::ParticleReal *uzp_n, const amrex::ParticleReal *uxp_nph, const amrex::ParticleReal *uyp_nph, const amrex::ParticleReal *uzp_nph, amrex::Array4< amrex::Real > const &Jx_arr, amrex::Array4< amrex::Real > const &Jy_arr, amrex::Array4< amrex::Real > const &Jz_arr, const int max_crossings, amrex::Array4< amrex::Real > const &Sxx_arr, amrex::Array4< amrex::Real > const &Sxy_arr, amrex::Array4< amrex::Real > const &Sxz_arr, amrex::Array4< amrex::Real > const &Syx_arr, amrex::Array4< amrex::Real > const &Syy_arr, amrex::Array4< amrex::Real > const &Syz_arr, amrex::Array4< amrex::Real > const &Szx_arr, amrex::Array4< amrex::Real > const &Szy_arr, amrex::Array4< amrex::Real > const &Szz_arr, const amrex::Array4< amrex::Real const > &Bx_arr, const amrex::Array4< amrex::Real const > &By_arr, const amrex::Array4< amrex::Real const > &Bz_arr, const amrex::IndexType Bx_type, const amrex::IndexType By_type, const amrex::IndexType Bz_type, const long np_to_deposit, const amrex::Real dt, const amrex::XDim3 &dinv, const amrex::XDim3 &xyzmin, const amrex::Dim3 lo, const amrex::Real qs, const amrex::Real ms)
 Villasenor and Buneman deposition of J and mass matrices for thread thread_num.
 

Function Documentation

◆ doDirectJandSigmaDeposition()

template<int depos_order>
void doDirectJandSigmaDeposition ( const GetParticlePosition< PIdx > & GetPosition,
const amrex::ParticleReal * wp,
const amrex::ParticleReal * uxp_n,
const amrex::ParticleReal * uyp_n,
const amrex::ParticleReal * uzp_n,
const amrex::ParticleReal * uxp_nph,
const amrex::ParticleReal * uyp_nph,
const amrex::ParticleReal * uzp_nph,
amrex::FArrayBox & jx_fab,
amrex::FArrayBox & jy_fab,
amrex::FArrayBox & jz_fab,
int Sxx_nComp,
int Syy_nComp,
int Szz_nComp,
amrex::Array4< amrex::Real > const & Sxx_arr,
amrex::Array4< amrex::Real > const & Sxy_arr,
amrex::Array4< amrex::Real > const & Sxz_arr,
amrex::Array4< amrex::Real > const & Syx_arr,
amrex::Array4< amrex::Real > const & Syy_arr,
amrex::Array4< amrex::Real > const & Syz_arr,
amrex::Array4< amrex::Real > const & Szx_arr,
amrex::Array4< amrex::Real > const & Szy_arr,
amrex::Array4< amrex::Real > const & Szz_arr,
const amrex::Array4< amrex::Real const > & Bx_arr,
const amrex::Array4< amrex::Real const > & By_arr,
const amrex::Array4< amrex::Real const > & Bz_arr,
const amrex::IndexType Bx_type,
const amrex::IndexType By_type,
const amrex::IndexType Bz_type,
const long np_to_deposit,
const amrex::Real dt,
const amrex::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 lo,
const amrex::Real qs,
const amrex::Real ms )

direct deposition of J and mass matrices for thread thread_num

Template Parameters
depos_orderdeposition order
Parameters
GetPositionA functor for returning the particle position.
wpPointer to array of particle weights.
uxp_n,uyp_n,uzp_nPointer to arrays of particle momentum at time n.
uxp_nph,uyp_nph,uzp_nphPointer to arrays of particle momentum at time n+1/2.
jx_fab,jy_fab,jz_fabFArrayBox of current density, either full array or tile.
Sxx_nCompnumber of Sxx components
Syy_nCompnumber of Syy components
Szz_nCompnumber of Szz components
Sxx_arr,Sxy_arr,Sxz_arrArray4 of mass matrices for Jx, either full array or tile.
Syx_arr,Syy_arr,Syz_arrArray4 of mass matrices for Jy, either full array or tile.
Szx_arr,Szy_arr,Szz_arrArray4 of mass matrices for Jz, either full array or tile.
Bx_arr,By_arr,Bz_arrArray4 of the magnetic field, either full array or tile.
Bx_type,By_type,Bz_typeIndexType of the magnetic field
np_to_depositNumber of particles for which current is deposited.
dtTime step for particle.
dinv3D cell size inverse.
xyzminPhysical lower bounds of domain.
loIndex lower bounds of domain.
qsSpecies charge.
msSpecies mass.

◆ doDirectJandSigmaDepositionKernel()

template<int depos_order>
AMREX_GPU_HOST_DEVICE AMREX_INLINE void doDirectJandSigmaDepositionKernel ( const amrex::ParticleReal xp,
const amrex::ParticleReal yp,
const amrex::ParticleReal zp,
const amrex::ParticleReal wqx,
const amrex::ParticleReal wqy,
const amrex::ParticleReal wqz,
const amrex::ParticleReal fpxx,
const amrex::ParticleReal fpxy,
const amrex::ParticleReal fpxz,
const amrex::ParticleReal fpyx,
const amrex::ParticleReal fpyy,
const amrex::ParticleReal fpyz,
const amrex::ParticleReal fpzx,
const amrex::ParticleReal fpzy,
const amrex::ParticleReal fpzz,
amrex::Array4< amrex::Real > const & jx_arr,
amrex::Array4< amrex::Real > const & jy_arr,
amrex::Array4< amrex::Real > const & jz_arr,
int Sxx_nComp,
int Syy_nComp,
int Szz_nComp,
amrex::Array4< amrex::Real > const & Sxx_arr,
amrex::Array4< amrex::Real > const & Sxy_arr,
amrex::Array4< amrex::Real > const & Sxz_arr,
amrex::Array4< amrex::Real > const & Syx_arr,
amrex::Array4< amrex::Real > const & Syy_arr,
amrex::Array4< amrex::Real > const & Syz_arr,
amrex::Array4< amrex::Real > const & Szx_arr,
amrex::Array4< amrex::Real > const & Szy_arr,
amrex::Array4< amrex::Real > const & Szz_arr,
const amrex::IntVect & jx_type,
const amrex::IntVect & jy_type,
const amrex::IntVect & jz_type,
const amrex::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 lo )

Kernel for the direct deposition of J and S (mass matrices) for thread thread_num.

Template Parameters
depos_orderdeposition order
Parameters
xp,yp,zpThe particle positions.
wqx,wqy,wqzThe particle velocity multiplied by the charge / volume
fpxx,fpxy,fpxzMass matrix kernels for Jx
fpyx,fpyy,fpyzMass matrix kernels for Jy
fpzx,fpzy,fpzzMass matrix kernels for Jz
jx_arr,jy_arr,jz_arrArray4 of current density, either full array or tile.
Sxx_nCompnumber of Sxx components
Syy_nCompnumber of Syy components
Szz_nCompnumber of Szz components
Sxx_arr,Sxy_arr,Sxz_arrArray4 of mass matrices for Jx, either full array or tile.
Syx_arr,Syy_arr,Syz_arrArray4 of mass matrices for Jy, either full array or tile.
Szx_arr,Szy_arr,Szz_arrArray4 of mass matrices for Jz, either full array or tile.
jx_type,jy_type,jz_typeThe j (and S) grid types along each direction, either NODE or CELL
dinv3D cell size inverse
xyzminThe lower bounds of the domain
loIndex lower bounds of domain.

defined(WARPX_DIM_1D_Z)

◆ doVillasenorJandSigmaDeposition()

template<int depos_order, bool full_mass_matrices>
void doVillasenorJandSigmaDeposition ( const amrex::ParticleReal * xp_n_data,
const amrex::ParticleReal * yp_n_data,
const amrex::ParticleReal * zp_n_data,
const GetParticlePosition< PIdx > & GetPosition,
const amrex::ParticleReal * wp,
const amrex::ParticleReal * uxp_n,
const amrex::ParticleReal * uyp_n,
const amrex::ParticleReal * uzp_n,
const amrex::ParticleReal * uxp_nph,
const amrex::ParticleReal * uyp_nph,
const amrex::ParticleReal * uzp_nph,
amrex::Array4< amrex::Real > const & Jx_arr,
amrex::Array4< amrex::Real > const & Jy_arr,
amrex::Array4< amrex::Real > const & Jz_arr,
const int max_crossings,
amrex::Array4< amrex::Real > const & Sxx_arr,
amrex::Array4< amrex::Real > const & Sxy_arr,
amrex::Array4< amrex::Real > const & Sxz_arr,
amrex::Array4< amrex::Real > const & Syx_arr,
amrex::Array4< amrex::Real > const & Syy_arr,
amrex::Array4< amrex::Real > const & Syz_arr,
amrex::Array4< amrex::Real > const & Szx_arr,
amrex::Array4< amrex::Real > const & Szy_arr,
amrex::Array4< amrex::Real > const & Szz_arr,
const amrex::Array4< amrex::Real const > & Bx_arr,
const amrex::Array4< amrex::Real const > & By_arr,
const amrex::Array4< amrex::Real const > & Bz_arr,
const amrex::IndexType Bx_type,
const amrex::IndexType By_type,
const amrex::IndexType Bz_type,
const long np_to_deposit,
const amrex::Real dt,
const amrex::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 lo,
const amrex::Real qs,
const amrex::Real ms )

Villasenor and Buneman deposition of J and mass matrices for thread thread_num.

Template Parameters
depos_orderDeposition order
full_mass_matricesWhether to deposit the full mass matrices (can only be true for depos_order = 2)
Parameters
xp_n_data,yp_n_data,zp_n_dataPointer to arrays of particle position at time level n.
GetPositionA functor for returning the particle position.
wpPointer to array of particle weights.
uxp_n,uyp_n,uzp_nPointer to arrays of particle momentum at time level n.
uxp_nph,uyp_nph,uzp_nphPointer to arrays of particle momentum at time level n + 1/2.
Jx_arr,Jy_arr,Jz_arrArray4 of the current density, either full array or tile.
max_crossingsMaximum number of particle cell crossings in each dir
Sxx_arr,Sxy_arr,Sxz_arrArray4 of mass matrices for Jx, either full array or tile.
Syx_arr,Syy_arr,Syz_arrArray4 of mass matrices for Jy, either full array or tile.
Szx_arr,Szy_arr,Szz_arrArray4 of mass matrices for Jz, either full array or tile.
Bx_arr,By_arr,Bz_arrArray4 of the magnetic field, either full array or tile.
Bx_type,By_type,Bz_typeIndexType of the magnetic field
np_to_depositNumber of particles for which current is deposited.
dtTime step for particle level
dinv3D cell size inverse
xyzminPhysical lower bounds of domain.
loIndex lower bounds of domain.
qsSpecies charge.
msSpecies mass.

◆ doVillasenorJandSigmaDepositionKernel()

template<int depos_order, bool full_mass_matrices>
AMREX_GPU_HOST_DEVICE AMREX_INLINE void doVillasenorJandSigmaDepositionKernel ( const amrex::ParticleReal xp_old,
const amrex::ParticleReal yp_old,
const amrex::ParticleReal zp_old,
const amrex::ParticleReal xp_new,
const amrex::ParticleReal yp_new,
const amrex::ParticleReal zp_new,
const amrex::ParticleReal wq_invvol,
const amrex::ParticleReal uxp_mid,
const amrex::ParticleReal uyp_mid,
const amrex::ParticleReal uzp_mid,
const amrex::ParticleReal gaminv,
const amrex::ParticleReal fpxx,
const amrex::ParticleReal fpxy,
const amrex::ParticleReal fpxz,
const amrex::ParticleReal fpyx,
const amrex::ParticleReal fpyy,
const amrex::ParticleReal fpyz,
const amrex::ParticleReal fpzx,
const amrex::ParticleReal fpzy,
const amrex::ParticleReal fpzz,
amrex::Array4< amrex::Real > const & Jx_arr,
amrex::Array4< amrex::Real > const & Jy_arr,
amrex::Array4< amrex::Real > const & Jz_arr,
int max_crossings,
amrex::Array4< amrex::Real > const & Sxx_arr,
amrex::Array4< amrex::Real > const & Sxy_arr,
amrex::Array4< amrex::Real > const & Sxz_arr,
amrex::Array4< amrex::Real > const & Syx_arr,
amrex::Array4< amrex::Real > const & Syy_arr,
amrex::Array4< amrex::Real > const & Syz_arr,
amrex::Array4< amrex::Real > const & Szx_arr,
amrex::Array4< amrex::Real > const & Szy_arr,
amrex::Array4< amrex::Real > const & Szz_arr,
const amrex::Real dt,
const amrex::XDim3 & dinv,
const amrex::XDim3 & xyzmin,
const amrex::Dim3 lo )

Kernel for the Villasenor deposition of J and S (mass matrices) for thread thread_num.

Template Parameters
depos_orderDeposition order
full_mass_matricesWhether to deposit the full mass matrices (can only be true for depos_order = 2)
Parameters
xp_old,yp_old,zp_oldOld particle positions (nominally at start of step)
xp_new,yp_new,zp_newNew particle positions (nominally at end of step)
wq_invvolParticle charge / volume
uxp_mid,uyp_mid,uzp_midParticle momentum at middle of step
gaminvOne over gamma for particle at middle of step
fpxx,fpxy,fpxzMass matrix kernels for Jx
fpyx,fpyy,fpyzMass matrix kernels for Jy
fpzx,fpzy,fpzzMass matrix kernels for Jz
Jx_arr,Jy_arr,Jz_arrArray4 of current density, either full array or tile
max_crossingsMaximum number of particle cell crossings in each dir
Sxx_arr,Sxy_arr,Sxz_arrArray4 of mass matrices for Jx, either full array or tile
Syx_arr,Syy_arr,Syz_arrArray4 of mass matrices for Jy, either full array or tile
Szx_arr,Szy_arr,Szz_arrArray4 of mass matrices for Jz, either full array or tile
dtTime step for particle level
dinv3D cell size inverse
xyzminPhysical lower bounds of domain
loIndex lower bounds of domain

◆ setMassMatricesKernels()

AMREX_GPU_HOST_DEVICE AMREX_INLINE void setMassMatricesKernels ( const amrex::ParticleReal qs,
const amrex::ParticleReal ms,
const amrex::ParticleReal dt,
const amrex::ParticleReal rhop,
const amrex::ParticleReal uxp,
const amrex::ParticleReal uyp,
const amrex::ParticleReal uzp,
const amrex::ParticleReal Bxp,
const amrex::ParticleReal Byp,
const amrex::ParticleReal Bzp,
amrex::ParticleReal & fpxx,
amrex::ParticleReal & fpxy,
amrex::ParticleReal & fpxz,
amrex::ParticleReal & fpyx,
amrex::ParticleReal & fpyy,
amrex::ParticleReal & fpyz,
amrex::ParticleReal & fpzx,
amrex::ParticleReal & fpzy,
amrex::ParticleReal & fpzz )

Set the mass matrices kernels for thread thread_num.

Parameters
qsSpecies charge
msSpecies mass
dtSimulation time step
rhopqs*wp*invvol*2.0/(gamma_n + gamma_np1)
uxp,uyp,uzpProper velocity of particle (time-centered)
Bxp,Byp,BzpMagnetic field vector components on particle
fpxx,fpxy,fpxzMass matrices kernels corresponding to dJx
fpyx,fpyy,fpyzMass matrices kernels corresponding to dJy
fpzx,fpzy,fpzzMass matrices kernels corresponding to dJz