86 int write(
const int *data, std::size_t count)
override {
return send_buff->write(data, count); }
87 int write(
const long *data, std::size_t count)
override {
return send_buff->write(data, count); }
88 int write(
const unsigned long *data, std::size_t count)
override {
return send_buff->write(data, count); }
89 int write(
const double *data, std::size_t count)
override {
return send_buff->write(data, count); }
90 int write(
const char *data, std::size_t count)
override {
return send_buff->write(data, count); }
94 int read(
int *data, std::size_t count)
override {
return this->recv_buff->read(data, count); }
95 int read(
long *data, std::size_t count)
override {
return this->recv_buff->read(data, count); }
96 int read(
unsigned long *data, std::size_t count)
override {
return this->recv_buff->read(data, count); }
97 int read(
double *data, std::size_t count)
override {
return this->recv_buff->read(data, count); }
98 int read(
char *data, std::size_t count)
override {
return this->recv_buff->read(data, count); }
241 template<
class T >
void setToSendArry(T *emodel,
const IntArray &src,
int packUnpackType);
252 template<
class T >
void setToRecvArry(T *emodel,
const IntArray &src,
int packUnpackType);
264 return ( emodel->*packFunc )(* this);
281 return ( emodel->*packFunc )(src, *
this);
297 return ( emodel->*unpackFunc )(* this);
314 return ( emodel->*unpackFunc )(dest, *
this);
325 int initExchange(
int tag);
332 int initSend(
int tag);
339 int initReceive(
int tag);
341 int finishExchange();
347 int receiveCompleted();
348 int testCompletion();
349 int waitCompletion();
365 template<
class T >
int resizeSendBuff(T *emodel,
int packUnpackType);
375 template<
class T >
int resizeRecvBuff(T *emodel,
int packUnpackType);
378template<
class T >
void
379ProcessCommunicator :: setToSendArry(T *emodel,
const IntArray &src,
int packUnpackType)
388template<
class T >
void
389ProcessCommunicator :: setToRecvArry(T *emodel,
const IntArray &src,
int packUnpackType)
398template<
class T >
int
399ProcessCommunicator :: resizeSendBuff(T *emodel,
int packUnpackType)
410template<
class T >
int
411ProcessCommunicator :: resizeRecvBuff(T *emodel,
int packUnpackType)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
int givePackSizeOfBool(std::size_t count) override
int read(unsigned long *data, std::size_t count) override
Reads count unsigned long values into array pointed by data.
void resizeReceiveBuffer(std::size_t size)
int read(long *data, std::size_t count) override
Reads count long values into array pointed by data.
ProcessCommunicatorBuff(CommBuffType t)
Constructor, creates empty send and receive com buffs in MPI_COMM_WORLD.
CommunicationBuffer & giveRecvBuff()
int givePackSizeOfSizet(std::size_t count) override
int initExchange(int rank, int tag)
int write(const char *data, std::size_t count) override
Writes count char values from array pointed by data.
void init()
Initializes receiver buffers.
int givePackSizeOfDouble(std::size_t count) override
int read(int *data, std::size_t count) override
Reads count integer values into array pointed by data.
int givePackSizeOfLong(std::size_t count) override
int write(const unsigned long *data, std::size_t count) override
Writes count unsigned long values from array pointed by data.
void initSendBuff()
Initializes send buffer to empty state. All packed data are lost.
std::unique_ptr< CommunicationBuffer > recv_buff
Receive buffer.
int initReceive(int rank, int tag)
int initSend(int rank, int tag)
std::unique_ptr< CommunicationBuffer > send_buff
Send buffer.
int read(bool &data) override
Reads a bool value from data.
int read(double *data, std::size_t count) override
Reads count double values into array pointed by data.
CommunicationBuffer & giveSendBuff()
int write(bool data) override
Writes a bool value.
void initForUnpacking()
Initialize for Unpacking (data already received).
void resizeSendBuffer(std::size_t size)
void initForPacking()
Initialize for packing.
int givePackSizeOfInt(std::size_t count) override
int givePackSizeOfChar(std::size_t count) override
int write(const long *data, std::size_t count) override
Writes count long values from array pointed by data.
int read(char *data, std::size_t count) override
Reads count char values into array pointed by data.
void initRecvBuff()
Initializes send buffer to empty state. All packed data are lost.
int write(const int *data, std::size_t count) override
Writes count integer values from array pointed by data.
int write(const double *data, std::size_t count) override
Writes count double values from array pointed by data.
IntArray toReceive
Nodes to receive.
const IntArray & giveToRecvMap()
ProcessCommunicatorBuff * giveProcessCommunicatorBuff()
Returns communication buffer.
int unpackData(T *emodel, int(T ::*unpackFunc)(ProcessCommunicator &))
int packData(T *emodel, P *src, int(T ::*packFunc)(P *, ProcessCommunicator &))
int resizeRecvBuff(T *emodel, int packUnpackType)
IntArray toSend
Nodes to send.
ProcessCommunicatorBuff * pcBuffer
Communicator buffers representation.
CommunicatorMode mode
Mode.
ProcessCommunicator(ProcessCommunicatorBuff *b, int irank, CommunicatorMode m=CommMode_Static)
int unpackData(T *emodel, P *dest, int(T ::*unpackFunc)(P *, ProcessCommunicator &))
int rank
Associated partition (problem) number (rank).
const IntArray & giveToSendMap()
int packData(T *emodel, int(T ::*packFunc)(ProcessCommunicator &))
int resizeSendBuff(T *emodel, int packUnpackType)