/** * @file linked_cell_list.hpp * @author Julian Iseringhausen * @date Mon Nov 21 13:27:22 2011 * * @brief A linked cell list implementation. * */ #ifndef LINKED_CELL_LIST_HPP_ #define LINKED_CELL_LIST_HPP_ #include #include #include "base/index.hpp" #include "base/particle.hpp" #include "grid/is_grid.hpp" namespace VMG { namespace Particle { class LinkedCellList : public IsGrid< std::list > { public: typedef std::list::iterator iterator; typedef std::list::const_iterator const_iterator; typedef std::list::reverse_iterator reverse_iterator; typedef std::list::const_reverse_iterator const_reverse_iterator; LinkedCellList(const std::list& particles, const int& near_field_cells, const Grid& grid); void AddParticle(const Particle& particle); void AddParticleToComplete(const vmg_float* pos, const vmg_float& charge, const vmg_float& pot, const vmg_float* force, const int& rank, const int& index); void AddParticleToComplete(const Vector& pos, const vmg_float& charge, const vmg_float& pot, const Vector& force, const int& rank, const int& index); void AddParticleToComplete(const vmg_float* pos, const vmg_float& charge); std::list& NotMyParticles() {return not_my_particles;} const std::list& NotMyParticles() const {return not_my_particles;} const Index& NearFieldCells() const {return near_field_cells_;} private: std::list not_my_particles; Index near_field_cells_; }; } } #endif /* LINKED_CELL_LIST_HPP_ */