QDP++
qdp_map.cc
Go to the documentation of this file.
1
7
8#include "qdp.h"
9#include "qdp_util.h"
10
11namespace QDP {
12
15
18{
20
21 // Virtual destructor - no cleanup needed
23
24 virtual multi1d<int> operator() (const multi1d<int>& coord, int sign, int dir) const
25 {
26 multi1d<int> lc = coord;
27
28 const multi1d<int>& nrow = Layout::lattSize();
29 lc[dir] = (coord[dir] + sgnum(sign) + 4*nrow[dir]) % nrow[dir];
30
31 return lc;
32 }
33
34 virtual int numArray() const {return Nd;}
35
36private:
37 int sgnum(int x) const {return (x > 0) ? 1 : -1;}
38};
39
40
43{
44 // Initialize the nearest neighbor map
46
47 shift.make(bbb);
48}
49
50
51//----------------------------------------------------------------------------
52// ArrayMap
53
54// This class is is used for binding the direction index of an ArrayMapFunc
55// so as to construct a MapFunc
57{
58 PackageArrayMapFunc(const ArrayMapFunc& mm, int dd): pmap(mm), dir(dd) {}
59
60 // Virtual Destructor - no cleanup needed
62 virtual multi1d<int> operator() (const multi1d<int>& coord, int isign) const
63 {
64 return pmap(coord, isign, dir);
65 }
66
67private:
68 const ArrayMapFunc& pmap;
69 const int dir;
70};
71
72
75{
76 // We are allowed to declare a mapsa, but not allocate one.
77 // There is an empty constructor for Map. Hence, the resize will
78 // actually allocate the space.
79 mapsa.resize(func.numArray());
80
81 // Loop over each direction making the Map
82 for(int dir=0; dir < func.numArray(); ++dir)
83 {
84 PackageArrayMapFunc my_local_map(func,dir);
85
86 mapsa[dir].make(my_local_map);
87 }
88}
89
90
91//----------------------------------------------------------------------------
92// BiDirectionalMap
93
94// This class is is used for binding the direction index of an BiDirectionalMapFunc
95// so as to construct a MapFunc
97{
98 PackageBiDirectionalMapFunc(const MapFunc& mm, int mmult): pmap(mm), mult(mmult) {}
99
100 // Virtual destructor -- no real cleanup needed
102 virtual multi1d<int> operator() (const multi1d<int>& coord, int isign) const
103 {
104 return pmap(coord, mult*isign);
105 }
106
107private:
108 const MapFunc& pmap;
109 const int mult;
110};
111
112
115{
116 // We are allowed to declare a bimaps, but not allocate one.
117 // There is an empty constructor for Map. Hence, the resize will
118 // actually allocate the space.
119 bimaps.resize(2);
120
121 // Construct maps for each sign
122 PackageBiDirectionalMapFunc my_neg_map(func,-1);
123 bimaps[0].make(my_neg_map);
124
125 PackageBiDirectionalMapFunc my_pos_map(func,+1);
126 bimaps[1].make(my_pos_map);
127}
128
129
130//----------------------------------------------------------------------------
131// ArrayBiDirectionalMap
132
133// This class is is used for binding the direction index of an ArrayBiDirectionalMapFunc
134// so as to construct a MapFunc
136{
137 PackageArrayBiDirectionalMapFunc(const ArrayMapFunc& mm, int mmult, int dd) :
138 pmap(mm), mult(mmult), dir(dd) {}
139
140 virtual multi1d<int> operator() (const multi1d<int>& coord, int isign) const
141 {
142 return pmap(coord, mult*isign, dir);
143 }
144
145private:
146 const ArrayMapFunc& pmap;
147 const int mult;
148 const int dir;
149};
150
151
154{
155 // We are allowed to declare a mapsa, but not allocate one.
156 // There is an empty constructor for Map. Hence, the resize will
157 // actually allocate the space.
158 bimapsa.resize(2,func.numArray());
159
160 // Loop over each direction making the Map
161 for(int dir=0; dir < func.numArray(); ++dir)
162 {
163 // Construct maps for each sign
164 PackageArrayBiDirectionalMapFunc my_neg_map(func,-1,dir);
165 bimapsa(0,dir).make(my_neg_map);
166
167 PackageArrayBiDirectionalMapFunc my_pos_map(func,+1,dir);
168 bimapsa(1,dir).make(my_pos_map);
169 }
170}
171
172
173//-----------------------------------------------------------------------------
174
175
176} // namespace QDP;
ArrayBiDirectional of general permutation map class for communications.
void make(const ArrayMapFunc &func)
Actual constructor from a function object.
Definition qdp_map.cc:153
ArrayMapFunc.
Definition qdp_map.h:45
virtual int numArray() const =0
Returns the array size - the number of directions which are to be used.
void make(const ArrayMapFunc &func)
Actual constructor from a function object.
Definition qdp_map.cc:74
void make(const MapFunc &func)
Actual constructor from a function object.
Definition qdp_map.cc:114
MapFunc.
Definition qdp_map.h:32
Container for a multi-dimensional 1D array.
Definition qdp_multi.h:25
ArrayBiDirectionalMap shift
Definition of shift function object.
Definition qdp_map.cc:14
const int Nd
Definition qdp_params.h:24
const multi1d< int > & lattSize()
Virtual grid (problem grid) lattice size.
Yet another random number generator.
void initDefaultMaps()
Initializer for maps.
Definition qdp_map.cc:42
Primary include file for QDP.
Function object used for constructing the default nearest neighbor map.
Definition qdp_map.cc:18
virtual multi1d< int > operator()(const multi1d< int > &coord, int sign, int dir) const
Maps a lattice coordinate under a map to a new lattice coordinate.
Definition qdp_map.cc:24
virtual ~NearestNeighborMapFunc()
Definition qdp_map.cc:22
virtual int numArray() const
Returns the array size - the number of directions which are to be used.
Definition qdp_map.cc:34
PackageArrayBiDirectionalMapFunc(const ArrayMapFunc &mm, int mmult, int dd)
Definition qdp_map.cc:137
virtual multi1d< int > operator()(const multi1d< int > &coord, int isign) const
Maps a lattice coordinate under a map to a new lattice coordinate.
Definition qdp_map.cc:140
virtual ~PackageArrayMapFunc()
Definition qdp_map.cc:61
virtual multi1d< int > operator()(const multi1d< int > &coord, int isign) const
Maps a lattice coordinate under a map to a new lattice coordinate.
Definition qdp_map.cc:62
PackageArrayMapFunc(const ArrayMapFunc &mm, int dd)
Definition qdp_map.cc:58
PackageBiDirectionalMapFunc(const MapFunc &mm, int mmult)
Definition qdp_map.cc:98
virtual multi1d< int > operator()(const multi1d< int > &coord, int isign) const
Maps a lattice coordinate under a map to a new lattice coordinate.
Definition qdp_map.cc:102