Base class for data communications. More...
#include "Class_Data_LB_Interface.hpp"
Public Member Functions | |
void | assign (uint32_t stride, uint32_t length) |
size_t | fixedSize () const |
template<class Buffer > | |
void | gather (Buffer &buff, const uint32_t e) |
void | move (const uint32_t from, const uint32_t to) |
void | resize (uint32_t newSize) |
void | resizeGhost (uint32_t newSize) |
template<class Buffer > | |
void | scatter (Buffer &buff, const uint32_t e) |
void | shrink () |
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 for load balance.
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 for load balance 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.
An example of user derived class can be found,here,in test folder for the case of a double datum for each grid element.
Easily speaking, only the user knows his data and through the interface specialization he states the size of element data, how to write/read and move them in a communication buffer.
Definition at line 37 of file Class_Data_LB_Interface.hpp.
|
inline |
Its user specification extracts contiguous element from a data container. This method is used during the very first load balance where the grid from being serial becomes parallel. From the initial serial container, which is the same on every process, this method takes the data relatives to the process sub-domain, storing them in the same resized parallel local container.
[in] | stride | The location where the process has to start reading from |
[in] | length | The length of the data container the process has to read |
Definition at line 32 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification computes the same data size for every element in the grid.
Definition at line 10 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification writes the e element data to be communicated during the load balance in the buffer.
The user has not to care about the buffer but a char buffer is available in PABLO, Class_Comm_Buffer. This class has an important method, Class_Comm_Buffer::write. This method has to be used 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 | Template communication buffer |
[in] | e | The element local index |
Definition at line 21 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification moves the data from the "from" element to the "to" element
[in] | from | Element local index from. |
[in] | to | Element local index to. |
Definition at line 15 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification resizes the element data container to the newSize value.
[in] | newSize | The new size of the user data container |
Definition at line 37 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification resizes the ghost element data container to the newSize value.
[in] | newSize | The new size of the user ghost data container |
Definition at line 42 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification reads the e element data from the communication buffer and store them in the user data container.
The user has not to care about the buffer but a char buffer is available in PABLO, Class_Comm_Buffer. This class has an important method, Class_Comm_Buffer::read(). This method has to be used 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 | Template communication buffer |
[in] | e | The element local index |
Definition at line 27 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification reduces the capacity of the container to its size for those containers which has different values for capacity and size. If the user container has no capacity concept, nothing has to be done.
Definition at line 47 of file Class_Data_LB_Interface.tpp.
|
inline |
Its user specification computes the specific size of data for an element.
[in] | e | The element local index. |
Definition at line 5 of file Class_Data_LB_Interface.tpp.