ESyS-Particle
4.0.1
Main Page
Related Pages
Namespaces
Classes
Files
File List
Parallel
mpibuf.h
1
2
// //
3
// Copyright (c) 2003-2011 by The University of Queensland //
4
// Earth Systems Science Computational Centre (ESSCC) //
5
// http://www.uq.edu.au/esscc //
6
// //
7
// Primary Business: Brisbane, Queensland, Australia //
8
// Licensed under the Open Software License version 3.0 //
9
// http://www.opensource.org/licenses/osl-3.0.php //
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
33
class
AMPIBuffer
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;
90
int
m_buffersize;
91
int
m_position;
92
int
m_int_increment,m_dbl_increment;
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
Generated on Sat Mar 22 2014 08:30:42 for ESyS-Particle by
1.8.1.2