|
WarpX
|
#include "Particles/Deposition/SharedDepositionUtils.H"#include "ablastr/parallelization/KernelTimer.H"#include "Particles/Pusher/GetAndSetPosition.H"#include "Particles/ShapeFactors.H"#include "Utils/TextMsg.H"#include "Utils/WarpXAlgorithmSelection.H"#include "Utils/WarpXConst.H"#include "Utils/WarpX_Complex.H"#include "WarpX.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< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *ion_lev, amrex::FArrayBox &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, long np_to_depose, amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes, amrex::Real *cost, long load_balance_costs_update_algo) |
| Current Deposition for thread thread_num. More... | |
| template<int depos_order> | |
| void | doDepositionSharedShapeN (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *ion_lev, amrex::FArrayBox &jx_fab, amrex::FArrayBox &jy_fab, amrex::FArrayBox &jz_fab, long np_to_depose, const amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes, amrex::Real *cost, long load_balance_costs_update_algo, const amrex::DenseBins< WarpXParticleContainer::ParticleType > &a_bins, const amrex::Box &box, const amrex::Geometry &geom, const amrex::IntVect &a_tbox_max_size) |
| Current Deposition for thread thread_num using shared memory. More... | |
| template<int depos_order> | |
| void | doEsirkepovDepositionShapeN (const GetParticlePosition< PIdx > &GetPosition, const amrex::ParticleReal *const wp, const amrex::ParticleReal *const uxp, const amrex::ParticleReal *const uyp, const amrex::ParticleReal *const uzp, const int *ion_lev, const amrex::Array4< amrex::Real > &Jx_arr, const amrex::Array4< amrex::Real > &Jy_arr, const amrex::Array4< amrex::Real > &Jz_arr, long np_to_depose, amrex::Real dt, amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, std::array< amrex::Real, 3 > xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes, amrex::Real *const cost, long load_balance_costs_update_algo) |
| Esirkepov Current Deposition for thread thread_num. More... | |
| template<int depos_order> | |
| void | doVayDepositionShapeN (const GetParticlePosition< PIdx > &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 &Dx_fab, amrex::FArrayBox &Dy_fab, amrex::FArrayBox &Dz_fab, long np_to_depose, amrex::Real dt, amrex::Real relative_time, const std::array< amrex::Real, 3 > &dx, const std::array< amrex::Real, 3 > &xyzmin, amrex::Dim3 lo, amrex::Real q, int n_rz_azimuthal_modes, amrex::Real *cost, 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 Dx_fab, Dy_fab, Dz_fab. More... | |
| void doDepositionShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
| const amrex::ParticleReal *const | wp, | ||
| const amrex::ParticleReal *const | uxp, | ||
| const amrex::ParticleReal *const | uyp, | ||
| const amrex::ParticleReal *const | uzp, | ||
| const int * | ion_lev, | ||
| amrex::FArrayBox & | jx_fab, | ||
| amrex::FArrayBox & | jy_fab, | ||
| amrex::FArrayBox & | jz_fab, | ||
| long | np_to_depose, | ||
| amrex::Real | relative_time, | ||
| const std::array< amrex::Real, 3 > & | dx, | ||
| const std::array< amrex::Real, 3 > & | xyzmin, | ||
| amrex::Dim3 | lo, | ||
| amrex::Real | q, | ||
| int | n_rz_azimuthal_modes, | ||
| amrex::Real * | cost, | ||
| long | load_balance_costs_update_algo | ||
| ) |
Current Deposition for thread thread_num.
| depos_order | deposition order |
| GetPosition | A functor for returning the particle position. |
| wp | Pointer to array of particle weights. |
| uxp,uyp,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,jy_fab,jz_fab | FArrayBox of current density, either full array or tile. |
| np_to_depose | Number of particles for which current is deposited. |
| relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. 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_modes | Number of azimuthal modes when using RZ geometry. |
| cost | Pointer to (load balancing) cost corresponding to box where present particles deposit current. |
| load_balance_costs_update_algo | Selected method for updating load balance costs. |
| void doDepositionSharedShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
| const amrex::ParticleReal *const | wp, | ||
| const amrex::ParticleReal *const | uxp, | ||
| const amrex::ParticleReal *const | uyp, | ||
| const amrex::ParticleReal *const | uzp, | ||
| const int * | ion_lev, | ||
| amrex::FArrayBox & | jx_fab, | ||
| amrex::FArrayBox & | jy_fab, | ||
| amrex::FArrayBox & | jz_fab, | ||
| long | np_to_depose, | ||
| const amrex::Real | relative_time, | ||
| const std::array< amrex::Real, 3 > & | dx, | ||
| const std::array< amrex::Real, 3 > & | xyzmin, | ||
| amrex::Dim3 | lo, | ||
| amrex::Real | q, | ||
| int | n_rz_azimuthal_modes, | ||
| amrex::Real * | cost, | ||
| long | load_balance_costs_update_algo, | ||
| const amrex::DenseBins< WarpXParticleContainer::ParticleType > & | a_bins, | ||
| const amrex::Box & | box, | ||
| const amrex::Geometry & | geom, | ||
| const amrex::IntVect & | a_tbox_max_size | ||
| ) |
Current Deposition for thread thread_num using shared memory.
| depos_order | deposition order |
| GetPosition | A functor for returning the particle position. |
| wp | Pointer to array of particle weights. |
| uxp,uyp,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,jy_fab,jz_fab | FArrayBox 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 |
| relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. 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_modes | Number of azimuthal modes when using RZ geometry. |
| cost | Pointer to (load balancing) cost corresponding to box where present particles deposit current. |
| load_balance_costs_update_algo | Selected method for updating load balance costs. |
| void doEsirkepovDepositionShapeN | ( | const GetParticlePosition< PIdx > & | GetPosition, |
| const amrex::ParticleReal *const | wp, | ||
| const amrex::ParticleReal *const | uxp, | ||
| const amrex::ParticleReal *const | uyp, | ||
| const amrex::ParticleReal *const | uzp, | ||
| const int * | ion_lev, | ||
| const amrex::Array4< amrex::Real > & | Jx_arr, | ||
| const amrex::Array4< amrex::Real > & | Jy_arr, | ||
| const amrex::Array4< amrex::Real > & | Jz_arr, | ||
| long | np_to_depose, | ||
| amrex::Real | dt, | ||
| amrex::Real | relative_time, | ||
| const std::array< amrex::Real, 3 > & | dx, | ||
| std::array< amrex::Real, 3 > | xyzmin, | ||
| amrex::Dim3 | lo, | ||
| amrex::Real | q, | ||
| int | n_rz_azimuthal_modes, | ||
| amrex::Real *const | cost, | ||
| long | load_balance_costs_update_algo | ||
| ) |
Esirkepov Current Deposition for thread thread_num.
| depos_order | deposition order |
| GetPosition | A functor for returning the particle position. | |
| wp | Pointer to array of particle weights. | |
| uxp,uyp,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,Jy_arr,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 | |
| [in] | relative_time | Time at which to deposit J, relative to the time of the current positions of the particles. 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_modes | Number of azimuthal modes when using RZ geometry. | |
| cost | Pointer to (load balancing) cost corresponding to box where present particles deposit current. | |
| load_balance_costs_update_algo | Selected method for updating load balance costs. |
| void doVayDepositionShapeN | ( | const GetParticlePosition< PIdx > & | 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 & | Dx_fab, | ||
| amrex::FArrayBox & | Dy_fab, | ||
| amrex::FArrayBox & | Dz_fab, | ||
| long | np_to_depose, | ||
| amrex::Real | dt, | ||
| amrex::Real | relative_time, | ||
| const std::array< amrex::Real, 3 > & | dx, | ||
| const std::array< amrex::Real, 3 > & | xyzmin, | ||
| amrex::Dim3 | lo, | ||
| amrex::Real | q, | ||
| int | n_rz_azimuthal_modes, | ||
| amrex::Real * | cost, | ||
| 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 Dx_fab, Dy_fab, Dz_fab.
| depos_order | deposition order |
| [in] | GetPosition | Functor that returns the particle position |
| [in] | wp | Pointer to array of particle weights |
| [in] | uxp,uyp,uzp | Pointer to arrays of particle momentum along x |
| [in] | 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 null |
| [in,out] | Dx_fab,Dy_fab,Dz_fab | FArrayBox of Vay current density, either full array or tile |
| [in] | np_to_depose | Number of particles for which current is deposited |
| [in] | dt | Time step for particle level |
| [in] | relative_time | Time at which to deposit D, relative to the time of the current positions of the particles. When different than 0, the particle position will be temporarily modified to match the time of the deposition. |
| [in] | dx | 3D cell size |
| [in] | xyzmin | 3D lower bounds of physical domain |
| [in] | lo | Dimension-agnostic lower bounds of index domain |
| [in] | q | Species charge |
| [in] | n_rz_azimuthal_modes | Number of azimuthal modes in RZ geometry |
| [in,out] | cost | Pointer to (load balancing) cost corresponding to box where present particles deposit current |
| [in] | load_balance_costs_update_algo | Selected method for updating load balance costs |