WarpX
Loading...
Searching...
No Matches
ParticleBoundaryBuffer.H
Go to the documentation of this file.
1/* Copyright 2021 Andrew Myers
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7#ifndef WARPX_PARTICLEBOUNDARYBUFFER_H_
8#define WARPX_PARTICLEBOUNDARYBUFFER_H_
9
13#include "Utils/export.H"
14
16
17#include <vector>
18
19
23class WARPX_EXPORT ParticleBoundaryBuffer
24{
25public:
27
29
33 ParticleBoundaryBuffer& operator= ( const ParticleBoundaryBuffer & ) = delete;
34
39
40 int numSpecies() const { return static_cast<int>(getSpeciesNames().size()); }
41
42 const std::vector<std::string>& getSpeciesNames() const;
43
44 void gatherParticlesFromDomainBoundaries (MultiParticleContainer& mypc);
45 void gatherParticlesFromEmbeddedBoundaries (
47 );
48
49 void redistribute ();
50 void clearParticles ();
51 void clearParticles (int i);
52
53 void printNumParticles () const;
54
55 int getNumParticlesInContainer(const std::string& species_name, int boundary, bool local);
56
57 PinnedMemoryParticleContainer& getParticleBuffer(const std::string& species_name, int boundary);
58
59 PinnedMemoryParticleContainer* getParticleBufferPointer(const std::string& species_name, int boundary);
60
61 static constexpr int numBoundaries () {
62 return AMREX_SPACEDIM*2
63#ifdef AMREX_USE_EB
64 + 1
65#endif
66 ;
67 }
68
69 bool isDefinedForAnySpecies (int const ibuffer) {return (m_do_any_boundary[ibuffer] != 0);}
70
71 std::string boundaryName (int const ibuffer) {return m_boundary_names[ibuffer];}
72
73private:
74 // over boundary, then number of species
75 std::vector<std::vector<PinnedMemoryParticleContainer> > m_particle_containers;
76
77 // over boundary, then number of species
78 std::vector<std::vector<int> > m_do_boundary_buffer;
79
80 // over boundary
81 std::vector<int> m_do_any_boundary;
82 std::vector<std::string> m_boundary_names;
83
84 mutable std::vector<std::string> m_species_names;
85};
86
87#endif /*WARPX_PARTICLEBOUNDARYBUFFER_H_*/
amrex::ParticleContainerPureSoA< PIdx::nattribs, 0, amrex::PinnedArenaAllocator > PinnedMemoryParticleContainer
Definition PinnedMemoryParticleContainer.H:6
Definition MultiParticleContainer.H:68
std::string boundaryName(int const ibuffer)
Definition ParticleBoundaryBuffer.H:71
int numSpecies() const
Definition ParticleBoundaryBuffer.H:40
const std::vector< std::string > & getSpeciesNames() const
Definition ParticleBoundaryBuffer.cpp:355
ParticleBoundaryBuffer()
Definition ParticleBoundaryBuffer.cpp:222
~ParticleBoundaryBuffer()=default
std::vector< std::vector< PinnedMemoryParticleContainer > > m_particle_containers
Definition ParticleBoundaryBuffer.H:75
std::vector< std::string > m_species_names
Definition ParticleBoundaryBuffer.H:84
ParticleBoundaryBuffer(const ParticleBoundaryBuffer &)=delete
bool isDefinedForAnySpecies(int const ibuffer)
Definition ParticleBoundaryBuffer.H:69
ParticleBoundaryBuffer(ParticleBoundaryBuffer &&)=default
std::vector< int > m_do_any_boundary
Definition ParticleBoundaryBuffer.H:81
std::vector< std::vector< int > > m_do_boundary_buffer
Definition ParticleBoundaryBuffer.H:78
static constexpr int numBoundaries()
Definition ParticleBoundaryBuffer.H:61
std::vector< std::string > m_boundary_names
Definition ParticleBoundaryBuffer.H:82
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:200