Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
index_eo.cpp
Go to the documentation of this file.
1 
15 #include "index_eo.h"
16 
17 #include <assert.h>
18 
19 //====================================================================
20 void Index_eo::convertField(Field& field_eo, const Field& field_lex)
21 {
22  assert(field_eo.nin() == field_lex.nin());
23  assert(field_eo.nex() == field_lex.nex());
24  assert(Nvol == field_lex.nvol());
25  assert(Nvol == field_eo.nvol());
26 
27  int Nin = field_lex.nin();
28  int Nex = field_lex.nex();
29 
30  for (int t = 0; t < Nt; ++t) {
31  for (int z = 0; z < Nz; ++z) {
32  for (int y = 0; y < Ny; ++y) {
33  for (int x = 0; x < Nx; ++x) {
34  int x2 = x / 2;
35  int ieo = (x + y + z + t + m_node_eo) % 2;
36  for (int ex = 0; ex < Nex; ex++) {
37  for (int in = 0; in < Nin; in++) {
38  field_eo.set(in, site(x2, y, z, t, ieo), ex,
39  field_lex.cmp(in, m_index_lex.site(x, y, z, t), ex));
40  }
41  }
42  }
43  }
44  }
45  }
46 }
47 
48 
49 //====================================================================
50 void Index_eo::convertField(Field& field_eo, const Field& field_lex,
51  const int ieo)
52 {
53  assert(field_eo.nin() == field_lex.nin());
54  assert(field_eo.nex() == field_lex.nex());
55  assert(Nvol == field_lex.nvol());
56  assert(Nvol2 == field_eo.nvol());
57 
58  int Nin = field_lex.nin();
59  int Nex = field_lex.nex();
60 
61  for (int t = 0; t < Nt; ++t) {
62  for (int z = 0; z < Nz; ++z) {
63  for (int y = 0; y < Ny; ++y) {
64  for (int x2 = 0; x2 < Nx2; ++x2) {
65  int x = 2 * x2 + ((y + z + t + m_node_eo + ieo) % 2);
66  for (int ex = 0; ex < Nex; ex++) {
67  for (int in = 0; in < Nin; in++) {
68  field_eo.set(in, siteh(x2, y, z, t), ex,
69  field_lex.cmp(in, m_index_lex.site(x, y, z, t), ex));
70  }
71  }
72  }
73  }
74  }
75  }
76 }
77 
78 
79 //====================================================================
80 void Index_eo::reverseField(Field& field_lex, const Field& field_eo,
81  const int ieo)
82 {
83  assert(field_eo.nin() == field_lex.nin());
84  assert(field_eo.nex() == field_lex.nex());
85  assert(Nvol == field_lex.nvol());
86  assert(Nvol2 == field_eo.nvol());
87 
88  int Nin = field_lex.nin();
89  int Nex = field_lex.nex();
90 
91  for (int t = 0; t < Nt; ++t) {
92  for (int z = 0; z < Nz; ++z) {
93  for (int y = 0; y < Ny; ++y) {
94  for (int x2 = 0; x2 < Nx2; ++x2) {
95  int x = 2 * x2 + ((y + z + t + m_node_eo + ieo) % 2);
96  for (int ex = 0; ex < Nex; ex++) {
97  for (int in = 0; in < Nin; in++) {
98  field_lex.set(in, m_index_lex.site(x, y, z, t), ex,
99  field_eo.cmp(in, siteh(x2, y, z, t), ex));
100  }
101  }
102  }
103  }
104  }
105  }
106 }
107 
108 
109 //====================================================================
110 void Index_eo::reverseField(Field& field_lex, const Field& field_eo)
111 {
112  assert(field_eo.nin() == field_lex.nin());
113  assert(field_eo.nex() == field_lex.nex());
114  assert(Nvol == field_lex.nvol());
115  assert(Nvol == field_eo.nvol());
116 
117  int Nin = field_lex.nin();
118  int Nex = field_lex.nex();
119 
120  for (int t = 0; t < Nt; ++t) {
121  for (int z = 0; z < Nz; ++z) {
122  for (int y = 0; y < Ny; ++y) {
123  for (int x = 0; x < Nx; ++x) {
124  int x2 = x / 2;
125  int ieo = (x + y + z + t + m_node_eo) % 2;
126  for (int ex = 0; ex < Nex; ex++) {
127  for (int in = 0; in < Nin; in++) {
128  field_lex.set(in, m_index_lex.site(x, y, z, t), ex,
129  field_eo.cmp(in, site(x2, y, z, t, ieo), ex));
130  }
131  }
132  }
133  }
134  }
135  }
136 }
137 
138 
139 //====================================================================
140 void Index_eo::splitField(Field& field_e, Field& field_o,
141  const Field& field_eo)
142 {
143  int Nin = field_eo.nin();
144  int Nex = field_eo.nex();
145 
146  assert(field_e.nin() == Nin);
147  assert(field_e.nex() == Nex);
148 
149  assert(field_o.nin() == Nin);
150  assert(field_o.nex() == Nex);
151 
152  int Nvol2 = field_eo.nvol() / 2;
153 
154  for (int iex = 0; iex < Nex; ++iex) {
155  for (int ivol = 0; ivol < Nvol2; ++ivol) {
156  for (int iin = 0; iin < Nin; ++iin) {
157  field_e.set(iin, ivol, iex,
158  field_eo.cmp(iin, ivol, iex));
159  field_o.set(iin, ivol, iex,
160  field_eo.cmp(iin, ivol + Nvol2, iex));
161  }
162  }
163  }
164 }
165 
166 
167 //====================================================================
169  const Field& field_e, const Field& field_o)
170 {
171  int Nin = field_eo.nin();
172  int Nex = field_eo.nex();
173 
174  assert(field_e.nin() == Nin);
175  assert(field_e.nex() == Nex);
176 
177  assert(field_o.nin() == Nin);
178  assert(field_o.nex() == Nex);
179 
180  int Nvol2 = field_eo.nvol() / 2;
181 
182  for (int iex = 0; iex < Nex; ++iex) {
183  for (int ivol = 0; ivol < Nvol2; ++ivol) {
184  for (int iin = 0; iin < Nin; ++iin) {
185  field_eo.set(iin, ivol, iex,
186  field_e.cmp(iin, ivol, iex));
187  field_eo.set(iin, ivol + Nvol2, iex,
188  field_o.cmp(iin, ivol, iex));
189  }
190  }
191  }
192 }
193 
194 
195 //====================================================================
196 //============================================================END=====
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:164
int site(const int &x, const int &y, const int &z, const int &t) const
Definition: index_lex.h:53
int siteh(const int x2, const int y, const int z, const int t) const
Definition: index_eo.h:160
Container of Field-type object.
Definition: field.h:39
int nvol() const
Definition: field.h:116
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:132
int site(const int x2, const int y, const int z, const int t, const int ieo) const
Definition: index_eo.h:117
void convertField(Field &eo, const Field &lex)
Definition: index_eo.cpp:20
int nin() const
Definition: field.h:115
int Nt
Definition: index_eo.h:41
void mergeField(Field &eo, const Field &e, const Field &o)
Definition: index_eo.cpp:168
int Nvol2
Definition: index_eo.h:42
int m_node_eo
Definition: index_eo.h:47
int Nx2
Definition: index_eo.h:42
int nex() const
Definition: field.h:117
int Nx
Definition: index_eo.h:41
Index_lex m_index_lex
Definition: index_eo.h:46
void reverseField(Field &lex, const Field &eo)
Definition: index_eo.cpp:110
void splitField(Field &e, Field &o, const Field &eo)
Definition: index_eo.cpp:140
int Nz
Definition: index_eo.h:41
int Nvol
Definition: index_eo.h:41
int Ny
Definition: index_eo.h:41