ls1-MarDyn
ls1-MarDyn molecular dynamics code
HaloBufferNoOverlap.h
1/*
2 * HaloBufferNoOverlap.h
3 *
4 * Created on: Apr 23, 2016
5 * Author: obi
6 */
7
8#ifndef HALOBUFFERNOOVERHEAD_H_
9#define HALOBUFFERNOOVERHEAD_H_
10
11template <class T> class HaloBufferNoOverlap {
12public:
13 HaloBufferNoOverlap(int xHaloSize, int yHaloSize, int zHaloSize);
14 virtual ~~HaloBufferNoOverlap();
15 void initOverlap();
16 //void initNoOverlap(int xHaloSize, int yHaloSize, int zHaloSize);
17 T * getFrontBuffer(){
18 return _frontBuffer;
19 }
20 T * getBackBuffer(){
21 return _backBuffer;
22 }
23 T * getTopBuffer(){
24 return _topBuffer;
25 }
26 T * getBottomBuffer(){
27 return _bottomBuffer;
28 }
29 T * getLeftBuffer(){
30 return _leftBuffer;
31 }
32 T * getRightBuffer(){
33 return _rightBuffer;
34 }
35 int getXSize(){
36 return _xHaloSize;
37 }
38 int getYSize(){
39 return _yHaloSize;
40 }
41 int getZSize(){
42 return _zHaloSize;
43 }
44
45 void clear();
46private:
47 T* _leftBuffer, * _rightBuffer, * _topBuffer, * _bottomBuffer, * _frontBuffer, * _backBuffer; //arrays for MPI halo transfer (send)
48 int _xHaloSize,_yHaloSize,_zHaloSize;
49
50
51};
52
53#include <algorithm>
54
55
56template <class T>
57HaloBufferNoOverlap<T>::HaloBufferNoOverlap(int xHaloSize, int yHaloSize, int zHaloSize) {
58 _xHaloSize = xHaloSize;
59 _yHaloSize = yHaloSize;
60 _zHaloSize = zHaloSize;
61
62 _leftBuffer = new T[_xHaloSize];
63 _rightBuffer = new T[_xHaloSize];
64
65 _bottomBuffer = new T[_yHaloSize];
66 _topBuffer = new T[_yHaloSize];
67
68 _backBuffer = new T[_zHaloSize];
69 _frontBuffer = new T[_zHaloSize];
70}
71
72template <class T>
74 delete[] _leftBuffer;
75 delete[] _rightBuffer;
76 delete[] _bottomBuffer;
77 delete[] _topBuffer;
78 delete[] _backBuffer;
79 delete[] _frontBuffer;
80}
81
82template <class T>
84 std::fill(_leftBuffer, _leftBuffer + _xHaloSize , 0.0);
85 std::fill(_rightBuffer, _rightBuffer + _xHaloSize , 0.0);
86 std::fill(_frontBuffer, _frontBuffer + _zHaloSize, 0.0);
87 std::fill(_backBuffer, _backBuffer + _zHaloSize, 0.0);
88 std::fill(_topBuffer, _topBuffer + _yHaloSize, 0.0);
89 std::fill(_bottomBuffer, _bottomBuffer + _yHaloSize, 0.0);
90}
91#endif /* HALOBUFFER_H_ */
Definition: HaloBufferNoOverlap.h:11