template<unsigned int dim, typename T, typename Mem_type, typename transform = no_transform<dim,T>, typename base = openfpm::vector<size_t>>
class CellList< dim, T, Mem_type, transform, base >
Class for FAST cell list implementation.
This class implement the FAST cell list, fast but memory expensive. The memory allocation is (M * N_cell_max)*sizeof(ele) + M*8
- M = number of cells
- N_cell_max = maximum number of elements in a cell
- ele = element the structure is storing
- Note
- Because N_cell_max >= N/M then M * N_cell_max >= O(N)
- Warning
- Not not use for high asymmetric distribution
Example of a 2D Cell list 6x6 structure with padding 1 without shift, cell indicated with p are padding cell the origin of the cell or point (0,0) is marked with cell number 9
* +-----------------------+
* |p |p |p |p |p |p |p |p |
* +-----------------------+
* |p | | | | | | |p |
* +-----------------------+
* |p | | | | | | |p |
* +-----------------------+
* |p | | | | | | |p |
* +-----------------------+
* |p |9 | | | | | |p |
* +-----------------------+
* |p |p |p |p |p |p |p |p |
* +-----------------------+
*
- Template Parameters
-
dim | Dimensionality of the space |
T | type of the space float, double ... |
base | Base structure that store the information |
Declaration of a cell list
size_t div[dim] = {16,16,16};
CellS cl2(box,div);
Usage of cell list [CellS == CellList<3,double,FAST>]
CellS cl1(box,div);
for (size_t i = 0 ; i < dim ; i++)
{
offset[i].
get(i) += (1.0 / div[i]) / 8.0;
}
size_t id = 0;
while (g_it.isNext())
{
key = pmul(key,spacing) + offset[0] + box.getP1();
pos.add(key);
cl1.add(key,id);
++id;
key = pmul(key,spacing) + offset[1] + box.getP1();
pos.add(key);
cl1.add(key,id);
++id;
++g_it;
}
Remove one particle from each cell
while (g_it.isNext())
{
key = pmul(key,spacing) + offset[0] + box.getP1();
auto cell = cl1.getCell(key);
cl1.remove(cell,0);
++g_it;
}
Usage of the neighborhood iterator
key = pmul(key,spacing) + offset[0] + box.getP1();
auto NN = cl1.template getNNIterator<NO_CHECK>(cl1.getCell(key));
size_t total = 0;
while(NN.isNext())
{
total++;
++NN;
}
Definition at line 269 of file CellList.hpp.
|
const grid_sm< dim, void > & | getGrid () |
| Return the underlying grid information of the cell list. More...
|
|
void | Initialize (CellDecomposer_sm< dim, T, transform > &cd_sm, const Box< dim, T > &dom_box, const size_t pad=1, size_t slot=STARTING_NSLOT) |
|
void | Initialize (const Box< dim, T > &box, const size_t(&div)[dim], const size_t pad=1, size_t slot=STARTING_NSLOT) |
|
void | Initialize (const SpaceBox< dim, T > &box, const size_t(&div)[dim], const size_t pad=1, size_t slot=STARTING_NSLOT) |
|
| CellList () |
| Default Constructor.
|
|
| CellList (const CellList< dim, T, Mem_type, transform, base > &cell) |
| Copy constructor.
|
|
| CellList (CellList< dim, T, Mem_type, transform, base > &&cell) |
| Copy constructor.
|
|
| CellList (Box< dim, T > &box, const size_t(&div)[dim], Matrix< dim, T > mat, const size_t pad=1, size_t slot=STARTING_NSLOT) |
| Cell list constructor. More...
|
|
| CellList (Box< dim, T > &box, const size_t(&div)[dim], const size_t pad=1, size_t slot=STARTING_NSLOT) |
| Cell list constructor. More...
|
|
| CellList (SpaceBox< dim, T > &box, const size_t(&div)[dim], const size_t pad=1, size_t slot=STARTING_NSLOT) |
| Cell list constructor. More...
|
|
| CellList (CellDecomposer_sm< dim, T, transform > &cd_sm, const Box< dim, T > &box, const size_t pad=1, size_t slot=STARTING_NSLOT) |
| Cell list constructor from a cell decomposer. More...
|
|
| ~CellList () |
| Destructor. More...
|
|
CellList< dim, T, Mem_type,
transform, base > & | operator= (CellList< dim, T, Mem_type, transform, base > &&cell) |
| Constructor from a temporal object. More...
|
|
CellList< dim, T, Mem_type,
transform, base > & | operator= (const CellList< dim, T, Mem_type, transform, base > &cell) |
| Constructor from a temporal object. More...
|
|
ParticleIt_Cells< dim,
CellList< dim, T, Mem_fast
<>, transform, base > > | getDomainIterator (openfpm::vector< size_t > &dom_cells) |
| Get an iterator over particles following the cell structure. More...
|
|
void | addCell (size_t cell_id, typename base::value_type ele) |
| Add to the cell. More...
|
|
void | add (const T(&pos)[dim], typename base::value_type ele) |
| Add an element in the cell list. More...
|
|
void | add (const Point< dim, T > &pos, typename base::value_type ele) |
| Add an element in the cell list. More...
|
|
void | addDom (const T(&pos)[dim], typename base::value_type ele) |
| Add an element in the cell list forcing to be in the domain cells. More...
|
|
void | addDom (const Point< dim, T > &pos, typename base::value_type ele) |
| Add an element in the cell list forcing to be in the domain cells. More...
|
|
void | addPad (const T(&pos)[dim], typename base::value_type ele) |
| Add an element in the cell list forcing to be in the padding cells. More...
|
|
void | addPad (const Point< dim, T > &pos, typename base::value_type ele) |
| Add an element in the cell list forcing to be in the padding cells. More...
|
|
void | remove (size_t cell, size_t ele) |
| remove an element from the cell More...
|
|
size_t | getNelements (const size_t cell_id) const |
| Return the number of elements in the cell. More...
|
|
auto | get (size_t cell, size_t ele) -> decltype(this->Mem_type::get(cell, ele)) |
| Get an element in the cell. More...
|
|
auto | get (size_t cell, size_t ele) const -> decltype(this->Mem_type::get(cell, ele)) |
| Get an element in the cell. More...
|
|
void | swap (CellList< dim, T, Mem_type, transform, base > &cl) |
| Swap the memory. More...
|
|
CellIterator< CellList< dim, T,
Mem_type, transform, base > > | getCellIterator (size_t cell) |
| Get the Cell iterator. More...
|
|
template<unsigned int impl = NO_CHECK> |
CellNNIterator< dim, CellList
< dim, T, Mem_type, transform,
base >,(int) FULL, impl > | getNNIterator (size_t cell) |
| Get the Neighborhood iterator. More...
|
|
template<unsigned int impl = NO_CHECK> |
CellNNIteratorRadius< dim,
CellList< dim, T, Mem_type,
transform, base >, impl > | getNNIteratorRadius (size_t cell, T r_cut) |
| Get the symmetric Neighborhood iterator. More...
|
|
template<unsigned int impl> |
CellNNIteratorSym< dim,
CellList< dim, T, Mem_type,
transform, base >,(unsigned
int) SYM, impl > | getNNIteratorSym (size_t cell, size_t p, const openfpm::vector< Point< dim, T >> &v) |
| Get the symmetric Neighborhood iterator. More...
|
|
template<unsigned int impl> |
CellNNIteratorSymMP< dim,
CellList< dim, T, Mem_type,
transform, base >,(unsigned
int) SYM, impl > | getNNIteratorSymMP (size_t cell, size_t p, const openfpm::vector< Point< dim, T >> &v_p1, const openfpm::vector< Point< dim, T >> &v_p2) |
| Get the symmetric Neighborhood iterator. More...
|
|
const NNc_array< dim,(unsigned
int) openfpm::math::pow(3, dim)/2+1 > & | getNNc_sym () const |
| Get the symmetric neighborhood. More...
|
|
size_t | getPadding (size_t i) const |
| Return the number of padding cells of the Cell decomposer. More...
|
|
size_t(& | getPadding ())[dim] |
| Return the number of padding cells of the Cell decomposer as an array. More...
|
|
void | clear () |
| Clear the cell list. More...
|
|
const Mem_type::loc_index & | getStartId (typename Mem_type::loc_index cell_id) const |
| Return the starting point of the cell p. More...
|
|
const Mem_type::loc_index & | getStopId (typename Mem_type::loc_index cell_id) const |
| Return the end point of the cell p. More...
|
|
const Mem_type::loc_index & | get_lin (const typename Mem_type::loc_index *part_id) const |
| Return the neighborhood id. More...
|
|
size_t | get_gm () |
| return the ghost marker More...
|
|
void | set_gm (size_t g_m) |
| Set the ghost marker. More...
|
|
void | set_ndec (size_t n_dec) |
| Set the n_dec number. More...
|
|
size_t | get_ndec () const |
| Set the n_dec number. More...
|
|