aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/WarpXParticleContainer.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles/WarpXParticleContainer.H')
-rw-r--r--Source/Particles/WarpXParticleContainer.H65
1 files changed, 49 insertions, 16 deletions
diff --git a/Source/Particles/WarpXParticleContainer.H b/Source/Particles/WarpXParticleContainer.H
index abf065214..275554cd8 100644
--- a/Source/Particles/WarpXParticleContainer.H
+++ b/Source/Particles/WarpXParticleContainer.H
@@ -11,9 +11,9 @@ struct PIdx
enum { // Particle Attributes stored in amrex::ParticleContainer's struct of array
w = 0, // weight
ux, uy, uz, Ex, Ey, Ez, Bx, By, Bz,
-#ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS
- xold, yold, zold, uxold, uyold, uzold,
-#endif
+#ifdef WARPX_RZ
+ theta, // RZ needs all three position components
+#endif
nattribs
};
};
@@ -27,6 +27,22 @@ struct DiagIdx
};
};
+namespace ParticleStringNames
+{
+ const std::map<std::string, int> to_index = {
+ {"w", PIdx::w },
+ {"ux", PIdx::ux },
+ {"uy", PIdx::uy },
+ {"uz", PIdx::uz },
+ {"Ex", PIdx::Ex },
+ {"Ey", PIdx::Ey },
+ {"Ez", PIdx::Ez },
+ {"Bx", PIdx::Bx },
+ {"By", PIdx::By },
+ {"Bz", PIdx::Bz }
+ };
+}
+
class WarpXParIter
: public amrex::ParIter<0,0,PIdx::nattribs>
{
@@ -36,12 +52,12 @@ public:
WarpXParIter (ContainerType& pc, int level);
#if (AMREX_SPACEDIM == 2)
- void GetPosition (amrex::Cuda::DeviceVector<amrex::Real>& x,
- amrex::Cuda::DeviceVector<amrex::Real>& y,
- amrex::Cuda::DeviceVector<amrex::Real>& z) const;
- void SetPosition (const amrex::Cuda::DeviceVector<amrex::Real>& x,
- const amrex::Cuda::DeviceVector<amrex::Real>& y,
- const amrex::Cuda::DeviceVector<amrex::Real>& z);
+ void GetPosition (amrex::Cuda::ManagedDeviceVector<amrex::Real>& x,
+ amrex::Cuda::ManagedDeviceVector<amrex::Real>& y,
+ amrex::Cuda::ManagedDeviceVector<amrex::Real>& z) const;
+ void SetPosition (const amrex::Cuda::ManagedDeviceVector<amrex::Real>& x,
+ const amrex::Cuda::ManagedDeviceVector<amrex::Real>& y,
+ const amrex::Cuda::ManagedDeviceVector<amrex::Real>& z);
#endif
const std::array<RealVector, PIdx::nattribs>& GetAttribs () const {
@@ -185,11 +201,11 @@ public:
void AddOneParticle (int lev, int grid, int tile,
amrex::Real x, amrex::Real y, amrex::Real z,
- const std::array<amrex::Real,PIdx::nattribs>& attribs);
+ std::array<amrex::Real,PIdx::nattribs>& attribs);
void AddOneParticle (ParticleTileType& particle_tile,
amrex::Real x, amrex::Real y, amrex::Real z,
- const std::array<amrex::Real,PIdx::nattribs>& attribs);
+ std::array<amrex::Real,PIdx::nattribs>& attribs);
void ReadHeader (std::istream& is);
@@ -204,8 +220,25 @@ public:
// split along axes (0) or diagonals (1)
int split_type = 0;
+ using amrex::ParticleContainer<0, 0, PIdx::nattribs>::AddRealComp;
+ using amrex::ParticleContainer<0, 0, PIdx::nattribs>::AddIntComp;
+
+ void AddRealComp (const std::string& name, bool comm=true)
+ {
+ particle_comps[name] = NumRealComps();
+ AddRealComp(comm);
+ }
+
+ void AddIntComp (const std::string& name, bool comm=true)
+ {
+ particle_comps[name] = NumIntComps();
+ AddIntComp(comm);
+ }
+
protected:
+ std::map<std::string, int> particle_comps;
+
int species_id;
amrex::Real charge;
@@ -215,12 +248,12 @@ protected:
static int do_not_push;
- amrex::Vector<std::unique_ptr<amrex::FArrayBox> > local_rho;
- amrex::Vector<std::unique_ptr<amrex::FArrayBox> > local_jx;
- amrex::Vector<std::unique_ptr<amrex::FArrayBox> > local_jy;
- amrex::Vector<std::unique_ptr<amrex::FArrayBox> > local_jz;
+ amrex::Vector<amrex::FArrayBox> local_rho;
+ amrex::Vector<amrex::FArrayBox> local_jx;
+ amrex::Vector<amrex::FArrayBox> local_jy;
+ amrex::Vector<amrex::FArrayBox> local_jz;
- amrex::Vector<amrex::Cuda::DeviceVector<amrex::Real> > m_xp, m_yp, m_zp, m_giv;
+ amrex::Vector<amrex::Cuda::ManagedDeviceVector<amrex::Real> > m_xp, m_yp, m_zp, m_giv;
private:
virtual void particlePostLocate(ParticleType& p, const amrex::ParticleLocData& pld,