ESyS-Particle
4.0.1
Main Page
Related Pages
Namespaces
Classes
Files
File List
Parallel
mpisgbuf.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 __MPISGBUF_H
14
#define __MPISGBUF_H
15
16
#include <mpi.h>
17
#include <string>
18
#include "Parallel/mpibuf.h"
19
28
class
AMPISGBufferRoot
29
{
30
protected
:
31
MPI_Comm
m_comm
;
32
int
m_rank
;
33
int
m_size
;
34
int
m_int_increment,
m_dbl_increment
;
35
MPI_Status m_status;
36
37
public
:
38
AMPISGBufferRoot
(MPI_Comm);
39
virtual
~
AMPISGBufferRoot
(){};
40
41
virtual
void
clear()=0;
42
virtual
void
gather()=0;
43
virtual
void
scatter()=0;
44
virtual
void
append(
int
,
int
)=0;
45
virtual
void
append(
double
,
int
)=0;
46
virtual
void
append(
const
char
*,
int
)=0;
47
virtual
void
append(
const
Vec3
&,
int
);
48
virtual
int
pop_int(
int
)=0;
49
virtual
double
pop_double(
int
)=0;
50
virtual
void
pop_doubles(
int
,
double
*,
int
)=0;
51
virtual
Vec3
pop_vector(
int
);
52
const
MPI_Status& status(){
return
m_status;};
53
};
54
63
class
AMPISGBufferLeaf
:
public
AMPIBuffer
64
{
65
protected
:
66
int
m_root
;
67
int
m_int_increment,
m_dbl_increment
;
68
69
public
:
70
AMPISGBufferLeaf
(MPI_Comm,
int
);
71
virtual
~
AMPISGBufferLeaf
(){};
72
73
virtual
void
clear()=0;
74
virtual
void
send()=0;
75
virtual
void
receive()=0;
76
virtual
void
append(
int
)=0;
77
virtual
void
append(
double
)=0;
78
virtual
int
pop_int()=0;
79
virtual
double
pop_double()=0;
80
virtual
void
pop_doubles(
double
*,
int
)=0;
81
virtual
std::string pop_string()=0;
82
const
MPI_Status& status(){
return
m_status;};
83
};
84
93
class
CMPISGBufferRoot
:
public
AMPISGBufferRoot
94
{
95
private
:
96
char
* m_buffer;
97
char
* m_dummy_buffer;
98
int
m_buffersize;
99
int
*m_position;
100
101
public
:
102
CMPISGBufferRoot
(MPI_Comm,
int
);
103
virtual
~
CMPISGBufferRoot
();
104
105
virtual
void
clear();
106
virtual
void
gather
();
107
virtual
void
scatter
();
108
virtual
void
append
(
int
,
int
);
109
virtual
void
append
(
double
,
int
);
110
virtual
void
append
(
const
char
*,
int
);
111
virtual
int
pop_int
(
int
);
112
virtual
double
pop_double
(
int
);
113
virtual
void
pop_doubles(
int
,
double
*,
int
);
114
};
115
124
class
CMPISGBufferLeaf
:
public
AMPISGBufferLeaf
125
{
126
private
:
127
char
* m_buffer;
128
int
m_buffersize;
129
int
m_position;
130
131
public
:
132
CMPISGBufferLeaf
(MPI_Comm,
int
,
int
);
133
virtual
~
CMPISGBufferLeaf
();
134
135
virtual
void
clear();
136
virtual
void
send
();
137
virtual
void
receive
();
138
virtual
void
append
(
int
);
139
virtual
void
append
(
double
);
140
virtual
void
append
(
const
char
*);
141
virtual
int
pop_int
();
142
virtual
double
pop_double
();
143
virtual
void
pop_doubles(
double
*,
int
);
144
virtual
std::string
pop_string
();
145
};
146
147
#endif // __MPISGBUF_H
Generated on Mon Jun 4 2012 22:48:27 for ESyS-Particle by
1.8.1