ExaFMM 1
Fast-multipole Method for exascale systems
|
Handles all the communication of local essential trees. More...
#include <parallelfmm.h>
Public Member Functions | |
ParallelFMM () | |
Constructor. | |
~ParallelFMM () | |
Destructor. | |
void | setCommBodies (Cells &cells) |
Set bodies to communicate. | |
void | updateBodies (bool comm=true) |
Update bodies using the previous send count. | |
void | commBodies (Cells &cells) |
Communicate bodies in the local essential tree. | |
void | bodies2cells (Bodies &bodies, Cells &cells) |
Convert recvBodies to cells. | |
void | commCells (Bodies &bodies, Cells &cells) |
Communicate cells in the local essential tree. | |
void | eraseLocalTree (Cells &cells) |
Remove cells that belong to current process. | |
Private Member Functions | |
void | gatherBounds () |
< Hypercube communicators | |
void | getSendRank (Cells &cells) |
Get neighbor ranks to send to. | |
void | getSendCount (bool comm=true) |
Get size of data to send. | |
void | commBodiesAlltoall () |
Communicate cells by one-to-one MPI_Alltoallv. | |
void | getOtherDomain (vect &xmin, vect &xmax, int l) |
Get boundries of domains on other processes. | |
real | getDistance (C_iter C, vect xmin, vect xmax) |
Get disatnce to other domain. | |
void | getLET (C_iter C0, C_iter C, vect xmin, vect xmax) |
Determine which cells to send. | |
void | commCellsAlltoall (int l) |
Communicate cells by one-to-one MPI_Alltoallv. | |
void | commCellsScatter (int l) |
Communicate cells by scattering from leftover processes. | |
void | rbodies2twigs (Bodies &bodies, Cells &twigs) |
Turn recv bodies to twigs. | |
void | cells2twigs (Cells &cells, Cells &twigs, bool last) |
Turn cells to twigs. | |
void | send2twigs (Bodies &bodies, Cells &twigs, int offTwigs) |
Turn send buffer to twigs. | |
void | recv2twigs (Bodies &bodies, Cells &twigs) |
Turn recv buffer to twigs. | |
void | zipTwigs (Cells &twigs, Cells &cells, Cells &sticks, bool last) |
Zip two groups of twigs that overlap. | |
void | reindexBodies (Bodies &bodies, Cells &twigs, Cells &cells, Cells &sticks) |
Re-index bodies. | |
void | sticks2send (Cells &sticks, int &offTwigs) |
Turn sticks to send buffer. | |
void | checkNumCells (int l) |
Validate number of send cells. | |
void | checkSumMass (Cells &cells) |
Check total charge. | |
Private Attributes | |
std::vector< int > | sendBodyCnt |
Vector of body send counts. | |
std::vector< int > | sendBodyDsp |
Vector of body send displacements. | |
std::vector< int > | recvBodyCnt |
Vector of body recv counts. | |
std::vector< int > | recvBodyDsp |
Vector of body recv displacements. | |
std::vector< int > | sendBodyRanks |
Vector of ranks to send bodies to. | |
std::vector< int > | sendBodyCellCnt |
Vector of send counts for cells of bodies. | |
std::vector< C_iter > | sendBodyCells |
Vector of cell iterators for cells of bodies to send. | |
std::vector< int > | sendCellCnt |
Vector of cell send counts. | |
std::vector< int > | sendCellDsp |
Vector of cell send displacements. | |
std::vector< int > | recvCellCnt |
Vector of cell recv counts. | |
std::vector< int > | recvCellDsp |
Vector of cell recv displacements. | |
std::vector< vect > | xminAll |
Buffer for gathering XMIN. | |
std::vector< vect > | xmaxAll |
Buffer for gathering XMAX. | |
JBodies | sendBodies |
Send buffer for bodies. | |
JBodies | recvBodies |
Recv buffer for bodies. | |
JCells | sendCells |
Send buffer for cells. | |
JCells | recvCells |
Recv buffer for cells. |
Handles all the communication of local essential trees.
Definition at line 28 of file parallelfmm.h.
ParallelFMM< equation >::ParallelFMM | ( | ) | [inline] |
Constructor.
Definition at line 562 of file parallelfmm.h.
ParallelFMM< equation >::~ParallelFMM | ( | ) | [inline] |
Destructor.
Definition at line 564 of file parallelfmm.h.
void ParallelFMM< equation >::bodies2cells | ( | Bodies & | bodies, |
Cells & | cells | ||
) | [inline] |
Convert recvBodies to cells.
Definition at line 612 of file parallelfmm.h.
void ParallelFMM< equation >::cells2twigs | ( | Cells & | cells, |
Cells & | twigs, | ||
bool | last | ||
) | [inline, private] |
Turn cells to twigs.
Definition at line 401 of file parallelfmm.h.
void ParallelFMM< equation >::checkNumCells | ( | int | l | ) | [inline, private] |
Validate number of send cells.
Definition at line 525 of file parallelfmm.h.
void ParallelFMM< equation >::checkSumMass | ( | Cells & | cells | ) | [inline, private] |
Check total charge.
Definition at line 544 of file parallelfmm.h.
void ParallelFMM< equation >::commBodies | ( | Cells & | cells | ) | [inline] |
Communicate bodies in the local essential tree.
Definition at line 606 of file parallelfmm.h.
void ParallelFMM< equation >::commBodiesAlltoall | ( | ) | [inline, private] |
Communicate cells by one-to-one MPI_Alltoallv.
Definition at line 173 of file parallelfmm.h.
void ParallelFMM< equation >::commCells | ( | Bodies & | bodies, |
Cells & | cells | ||
) | [inline] |
Communicate cells in the local essential tree.
Definition at line 619 of file parallelfmm.h.
void ParallelFMM< equation >::commCellsAlltoall | ( | int | l | ) | [inline, private] |
Communicate cells by one-to-one MPI_Alltoallv.
Definition at line 333 of file parallelfmm.h.
void ParallelFMM< equation >::commCellsScatter | ( | int | l | ) | [inline, private] |
Communicate cells by scattering from leftover processes.
Definition at line 349 of file parallelfmm.h.
void ParallelFMM< equation >::eraseLocalTree | ( | Cells & | cells | ) | [inline] |
Remove cells that belong to current process.
Definition at line 740 of file parallelfmm.h.
void ParallelFMM< equation >::gatherBounds | ( | ) | [inline, private] |
< Hypercube communicators
Gather bounds of other domain
Definition at line 74 of file parallelfmm.h.
real ParallelFMM< equation >::getDistance | ( | C_iter | C, |
vect | xmin, | ||
vect | xmax | ||
) | [inline, private] |
Get disatnce to other domain.
Definition at line 277 of file parallelfmm.h.
void ParallelFMM< equation >::getLET | ( | C_iter | C0, |
C_iter | C, | ||
vect | xmin, | ||
vect | xmax | ||
) | [inline, private] |
Determine which cells to send.
Definition at line 290 of file parallelfmm.h.
void ParallelFMM< equation >::getOtherDomain | ( | vect & | xmin, |
vect & | xmax, | ||
int | l | ||
) | [inline, private] |
Get boundries of domains on other processes.
Definition at line 242 of file parallelfmm.h.
void ParallelFMM< equation >::getSendCount | ( | bool | comm = true | ) | [inline, private] |
Get size of data to send.
Definition at line 141 of file parallelfmm.h.
void ParallelFMM< equation >::getSendRank | ( | Cells & | cells | ) | [inline, private] |
Get neighbor ranks to send to.
Definition at line 93 of file parallelfmm.h.
void ParallelFMM< equation >::rbodies2twigs | ( | Bodies & | bodies, |
Cells & | twigs | ||
) | [inline, private] |
Turn recv bodies to twigs.
Definition at line 382 of file parallelfmm.h.
void ParallelFMM< equation >::recv2twigs | ( | Bodies & | bodies, |
Cells & | twigs | ||
) | [inline, private] |
Turn recv buffer to twigs.
Definition at line 428 of file parallelfmm.h.
void ParallelFMM< equation >::reindexBodies | ( | Bodies & | bodies, |
Cells & | twigs, | ||
Cells & | cells, | ||
Cells & | sticks | ||
) | [inline, private] |
Re-index bodies.
Definition at line 476 of file parallelfmm.h.
void ParallelFMM< equation >::send2twigs | ( | Bodies & | bodies, |
Cells & | twigs, | ||
int | offTwigs | ||
) | [inline, private] |
Turn send buffer to twigs.
Definition at line 414 of file parallelfmm.h.
void ParallelFMM< equation >::setCommBodies | ( | Cells & | cells | ) | [inline] |
Set bodies to communicate.
Definition at line 567 of file parallelfmm.h.
void ParallelFMM< equation >::sticks2send | ( | Cells & | sticks, |
int & | offTwigs | ||
) | [inline, private] |
Turn sticks to send buffer.
Definition at line 513 of file parallelfmm.h.
void ParallelFMM< equation >::updateBodies | ( | bool | comm = true | ) | [inline] |
Update bodies using the previous send count.
Definition at line 577 of file parallelfmm.h.
void ParallelFMM< equation >::zipTwigs | ( | Cells & | twigs, |
Cells & | cells, | ||
Cells & | sticks, | ||
bool | last | ||
) | [inline, private] |
Zip two groups of twigs that overlap.
Definition at line 441 of file parallelfmm.h.
JBodies ParallelFMM< equation >::recvBodies [private] |
Recv buffer for bodies.
Definition at line 45 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::recvBodyCnt [private] |
Vector of body recv counts.
Definition at line 32 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::recvBodyDsp [private] |
Vector of body recv displacements.
Definition at line 33 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::recvCellCnt [private] |
Vector of cell recv counts.
Definition at line 39 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::recvCellDsp [private] |
Vector of cell recv displacements.
Definition at line 40 of file parallelfmm.h.
JCells ParallelFMM< equation >::recvCells [private] |
Recv buffer for cells.
Definition at line 47 of file parallelfmm.h.
JBodies ParallelFMM< equation >::sendBodies [private] |
Send buffer for bodies.
Definition at line 44 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::sendBodyCellCnt [private] |
Vector of send counts for cells of bodies.
Definition at line 35 of file parallelfmm.h.
std::vector<C_iter> ParallelFMM< equation >::sendBodyCells [private] |
Vector of cell iterators for cells of bodies to send.
Definition at line 36 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::sendBodyCnt [private] |
Vector of body send counts.
Definition at line 30 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::sendBodyDsp [private] |
Vector of body send displacements.
Definition at line 31 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::sendBodyRanks [private] |
Vector of ranks to send bodies to.
Definition at line 34 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::sendCellCnt [private] |
Vector of cell send counts.
Definition at line 37 of file parallelfmm.h.
std::vector<int> ParallelFMM< equation >::sendCellDsp [private] |
Vector of cell send displacements.
Definition at line 38 of file parallelfmm.h.
JCells ParallelFMM< equation >::sendCells [private] |
Send buffer for cells.
Definition at line 46 of file parallelfmm.h.
std::vector<vect> ParallelFMM< equation >::xmaxAll [private] |
Buffer for gathering XMAX.
Definition at line 42 of file parallelfmm.h.
std::vector<vect> ParallelFMM< equation >::xminAll [private] |
Buffer for gathering XMIN.
Definition at line 41 of file parallelfmm.h.