ESyS-Particle  2.3.4
mpibuf.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __MPIBUF_H
14 #define __MPIBUF_H
15 
16 //--- MPI includes ---
17 #include <mpi.h>
18 
19 //--- Project includes ---
20 #include "Foundation/vec3.h"
21 
22 // --- STL includes ---
23 #include <string>
24 
34 {
35  protected:
36  MPI_Comm m_comm;
37  MPI_Status m_status;
38 
39 public:
40  AMPIBuffer(MPI_Comm comm){m_comm=comm;};
41  virtual ~AMPIBuffer(){};
42 
43  virtual void clear()=0;
44  virtual void append(int)=0;
45  virtual void append(double)=0;
46  virtual void append(const char*)=0;
47  virtual void append(const Vec3 &) ;
48  virtual int pop_int()=0;
49  virtual double pop_double()=0;
50  virtual void pop_doubles(double*,int)=0;
51  virtual std::string pop_string()=0;
52  virtual Vec3 pop_vector() ;
53  const MPI_Status& status(){return m_status;};
54 };
55 
65 class AMPIBufferPP : public AMPIBuffer
66 {
67 public:
68  AMPIBufferPP(MPI_Comm comm);
69  virtual ~AMPIBufferPP(){};
70  virtual void sendTo(int,int)=0;
71  virtual void receiveFrom(int src=MPI_ANY_SOURCE,int tag=MPI_ANY_TAG)=0;
72 };
73 
85 class CMPIBuffer : public AMPIBufferPP
86 {
87  private:
88 
89  char* m_buffer;
91  int m_position;
93 
94 
95  public:
96  CMPIBuffer(MPI_Comm,int);
97  virtual ~CMPIBuffer();
98 
99  virtual void clear(){m_position=0;};
100  virtual void sendTo(int,int);
101  virtual void receiveFrom(int src=MPI_ANY_SOURCE,int tag=MPI_ANY_TAG);
102  virtual void append(int);
103  virtual void append(double);
104  virtual void append(const char*);
105  bool append_checked(int);
106  bool append_checked(double);
107  virtual int pop_int();
108  virtual double pop_double();
109  virtual void pop_doubles(double*,int);
110  virtual std::string pop_string();
111 };
112 
113 #endif //__MPIBUF_H
AMPIBuffer::pop_int
virtual int pop_int()=0
AMPIBufferPP::AMPIBufferPP
AMPIBufferPP(MPI_Comm comm)
Definition: mpibuf.cpp:16
CMPIBuffer::pop_int
virtual int pop_int()
Definition: mpibuf.cpp:156
CMPIBuffer::append_checked
bool append_checked(int)
Definition: mpibuf.cpp:119
CMPIBuffer::m_int_increment
int m_int_increment
Definition: mpibuf.h:92
AMPIBufferPP::receiveFrom
virtual void receiveFrom(int src=MPI_ANY_SOURCE, int tag=MPI_ANY_TAG)=0
AMPIBuffer::append
virtual void append(const char *)=0
CMPIBuffer::sendTo
virtual void sendTo(int, int)
Definition: mpibuf.cpp:62
esys::lsm::bpu::len
int len(const boost::python::object &pyOb)
Definition: Util.h:30
AMPIBuffer::pop_double
virtual double pop_double()=0
AMPIBuffer::m_comm
MPI_Comm m_comm
the MPI Communicator used for the send/recv operations
Definition: mpibuf.h:36
AMPIBuffer::m_status
MPI_Status m_status
Definition: mpibuf.h:37
CMPIBuffer::m_buffersize
int m_buffersize
the size of the buffer
Definition: mpibuf.h:90
CMPIBuffer::m_buffer
char * m_buffer
Definition: mpibuf.h:89
AMPIBuffer::pop_doubles
virtual void pop_doubles(double *, int)=0
AMPIBuffer
Abstract base class for MPI send/recv buffer.
Definition: mpibuf.h:34
CMPIBuffer::pop_double
virtual double pop_double()
Definition: mpibuf.cpp:170
CMPIBuffer::pop_string
virtual std::string pop_string()
Definition: mpibuf.cpp:194
CMPIBuffer
Constant size MPI send/recv buffer.
Definition: mpibuf.h:86
Vec3::X
VEC3_INLINE double & X()
Definition: vec3.h:119
AMPIBuffer::append
virtual void append(double)=0
Vec3::Z
VEC3_INLINE double & Z()
Definition: vec3.h:121
CMPIBuffer::clear
virtual void clear()
Definition: mpibuf.h:99
mpibuf.h
AMPIBuffer::status
const MPI_Status & status()
Definition: mpibuf.h:53
Vec3::Y
VEC3_INLINE double & Y()
Definition: vec3.h:120
CMPIBuffer::CMPIBuffer
CMPIBuffer(MPI_Comm, int)
Definition: mpibuf.cpp:40
AMPIBuffer::~AMPIBuffer
virtual ~AMPIBuffer()
Definition: mpibuf.h:41
Vec3
Definition: vec3.h:47
AMPIBuffer::pop_vector
virtual Vec3 pop_vector()
Definition: mpibuf.cpp:26
AMPIBufferPP::~AMPIBufferPP
virtual ~AMPIBufferPP()
Definition: mpibuf.h:69
AMPIBuffer::AMPIBuffer
AMPIBuffer(MPI_Comm comm)
Definition: mpibuf.h:40
vec3.h
CMPIBuffer::m_position
int m_position
the current end of the content
Definition: mpibuf.h:91
AMPIBufferPP::sendTo
virtual void sendTo(int, int)=0
AMPIBuffer::clear
virtual void clear()=0
CMPIBuffer::pop_doubles
virtual void pop_doubles(double *, int)
Definition: mpibuf.cpp:181
CMPIBuffer::receiveFrom
virtual void receiveFrom(int src=MPI_ANY_SOURCE, int tag=MPI_ANY_TAG)
Definition: mpibuf.cpp:75
CMPIBuffer::append
virtual void append(int)
Definition: mpibuf.cpp:86
AMPIBufferPP
Abstarct base class for Point-to-Point communication buffers.
Definition: mpibuf.h:66
CMPIBuffer::m_dbl_increment
int m_dbl_increment
the "packing size" of int/double
Definition: mpibuf.h:92
AMPIBuffer::pop_string
virtual std::string pop_string()=0
CMPIBuffer::~CMPIBuffer
virtual ~CMPIBuffer()
Definition: mpibuf.cpp:50
AMPIBuffer::append
virtual void append(int)=0