Base class for data communications. More...
#include <DataCommInterface.hpp>
Public Member Functions | |
size_t | fixedSize () const |
template<class Buffer > | |
void | gather (Buffer &buff, const uint32_t e) |
template<class Buffer > | |
void | scatter (Buffer &buff, const uint32_t e) |
size_t | size (const uint32_t e) const |
Base class for data communications.
This class is the base class used to implement the user interface to data communications.
The Curiously Recurrent Template Pattern is exploited to achieve the interface. By this way the interface is based on static polymorphism with no extra cost at runtime.
The user has to implement his communication classes by deriving them from this class. The mechanism implies that the derived class derives from a template base class and that the template parameter is the derived class itself, as follow
The user has to implement all the methods of the base class in his derived class. These user's methods will really do the job.
Easily speaking, only the user knows his data and through the interface specialization he states the size of element data, how to write/read them in a communication buffer. Any MPI compatible POD datum can be written and read in the communication buffer.
Definition at line 62 of file DataCommInterface.hpp.
|
protected |
Definition at line 28 of file DataCommInterface.tpp.
size_t bitpit::DataCommInterface< Impl >::fixedSize | ( | ) | const |
Its user specification computes the same data size for every element in the grid.
Definition at line 43 of file DataCommInterface.tpp.
void bitpit::DataCommInterface< Impl >::gather | ( | Buffer & | buff, |
const uint32_t | e ) |
Its user specification writes the e element data to be communicated during the load balance in the buffer.
The user has to use the buffer buff as an output binary stream. A stream operator (<<) is provided to allocate any single element datum in the communication buffer, as follow
where userdatum can be any MPI compatible POD variable associated to the e element. In case of a vector of double, called userdata, to store data,
[in] | buff | Output communication buffer |
[in] | e | The element local index |
Definition at line 66 of file DataCommInterface.tpp.
void bitpit::DataCommInterface< Impl >::scatter | ( | Buffer & | buff, |
const uint32_t | e ) |
Its user specification reads the e element data from the communication buffer and store them in the user data container.
The user has to use the buffer buff as an input binary stream. A stream operator (>>) is provided to read any single element datum from the communication buffer, as follow
where userdatum can be any MPI compatible POD variable associated to the e element. In case of a vector of double, called userdata, to store data,
[in] | buff | Input communication buffer |
[in] | e | The element local index |
Definition at line 89 of file DataCommInterface.tpp.
size_t bitpit::DataCommInterface< Impl >::size | ( | const uint32_t | e | ) | const |
Its user specification computes the specific size of data for an element.
[in] | e | Element local index. |
Definition at line 35 of file DataCommInterface.tpp.