QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
tmc_core.h
Go to the documentation of this file.
1 #define APPLY_CLOVER_TWIST(c, a, reg)\
2 \
3 /* change to chiral basis*/\
4 {\
5  spinorFloat a00_re = -reg##10_re - reg##30_re;\
6  spinorFloat a00_im = -reg##10_im - reg##30_im;\
7  spinorFloat a10_re = reg##00_re + reg##20_re;\
8  spinorFloat a10_im = reg##00_im + reg##20_im;\
9  spinorFloat a20_re = -reg##10_re + reg##30_re;\
10  spinorFloat a20_im = -reg##10_im + reg##30_im;\
11  spinorFloat a30_re = reg##00_re - reg##20_re;\
12  spinorFloat a30_im = reg##00_im - reg##20_im;\
13  \
14  reg##00_re = a00_re; reg##00_im = a00_im;\
15  reg##10_re = a10_re; reg##10_im = a10_im;\
16  reg##20_re = a20_re; reg##20_im = a20_im;\
17  reg##30_re = a30_re; reg##30_im = a30_im;\
18 }\
19 \
20 {\
21  spinorFloat a01_re = -reg##11_re - reg##31_re;\
22  spinorFloat a01_im = -reg##11_im - reg##31_im;\
23  spinorFloat a11_re = reg##01_re + reg##21_re;\
24  spinorFloat a11_im = reg##01_im + reg##21_im;\
25  spinorFloat a21_re = -reg##11_re + reg##31_re;\
26  spinorFloat a21_im = -reg##11_im + reg##31_im;\
27  spinorFloat a31_re = reg##01_re - reg##21_re;\
28  spinorFloat a31_im = reg##01_im - reg##21_im;\
29  \
30  reg##01_re = a01_re; reg##01_im = a01_im;\
31  reg##11_re = a11_re; reg##11_im = a11_im;\
32  reg##21_re = a21_re; reg##21_im = a21_im;\
33  reg##31_re = a31_re; reg##31_im = a31_im;\
34 }\
35 \
36 {\
37  spinorFloat a02_re = -reg##12_re - reg##32_re;\
38  spinorFloat a02_im = -reg##12_im - reg##32_im;\
39  spinorFloat a12_re = reg##02_re + reg##22_re;\
40  spinorFloat a12_im = reg##02_im + reg##22_im;\
41  spinorFloat a22_re = -reg##12_re + reg##32_re;\
42  spinorFloat a22_im = -reg##12_im + reg##32_im;\
43  spinorFloat a32_re = reg##02_re - reg##22_re;\
44  spinorFloat a32_im = reg##02_im - reg##22_im;\
45  \
46  reg##02_re = a02_re; reg##02_im = a02_im;\
47  reg##12_re = a12_re; reg##12_im = a12_im;\
48  reg##22_re = a22_re; reg##22_im = a22_im;\
49  reg##32_re = a32_re; reg##32_im = a32_im;\
50 }\
51 \
52 /* apply first chiral block*/\
53 {\
54  ASSN_CLOVER(TMCLOVERTEX, 0)\
55  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
56  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
57  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
58  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
59  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
60  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
61  \
62  a00_re += c##00_00_re * reg##00_re;\
63  a00_im += c##00_00_re * reg##00_im;\
64  a00_re += c##00_01_re * reg##01_re;\
65  a00_re -= c##00_01_im * reg##01_im;\
66  a00_im += c##00_01_re * reg##01_im;\
67  a00_im += c##00_01_im * reg##01_re;\
68  a00_re += c##00_02_re * reg##02_re;\
69  a00_re -= c##00_02_im * reg##02_im;\
70  a00_im += c##00_02_re * reg##02_im;\
71  a00_im += c##00_02_im * reg##02_re;\
72  a00_re += c##00_10_re * reg##10_re;\
73  a00_re -= c##00_10_im * reg##10_im;\
74  a00_im += c##00_10_re * reg##10_im;\
75  a00_im += c##00_10_im * reg##10_re;\
76  a00_re += c##00_11_re * reg##11_re;\
77  a00_re -= c##00_11_im * reg##11_im;\
78  a00_im += c##00_11_re * reg##11_im;\
79  a00_im += c##00_11_im * reg##11_re;\
80  a00_re += c##00_12_re * reg##12_re;\
81  a00_re -= c##00_12_im * reg##12_im;\
82  a00_im += c##00_12_re * reg##12_im;\
83  a00_im += c##00_12_im * reg##12_re;\
84  \
85  a01_re += c##01_00_re * reg##00_re;\
86  a01_re -= c##01_00_im * reg##00_im;\
87  a01_im += c##01_00_re * reg##00_im;\
88  a01_im += c##01_00_im * reg##00_re;\
89  a01_re += c##01_01_re * reg##01_re;\
90  a01_im += c##01_01_re * reg##01_im;\
91  a01_re += c##01_02_re * reg##02_re;\
92  a01_re -= c##01_02_im * reg##02_im;\
93  a01_im += c##01_02_re * reg##02_im;\
94  a01_im += c##01_02_im * reg##02_re;\
95  a01_re += c##01_10_re * reg##10_re;\
96  a01_re -= c##01_10_im * reg##10_im;\
97  a01_im += c##01_10_re * reg##10_im;\
98  a01_im += c##01_10_im * reg##10_re;\
99  a01_re += c##01_11_re * reg##11_re;\
100  a01_re -= c##01_11_im * reg##11_im;\
101  a01_im += c##01_11_re * reg##11_im;\
102  a01_im += c##01_11_im * reg##11_re;\
103  a01_re += c##01_12_re * reg##12_re;\
104  a01_re -= c##01_12_im * reg##12_im;\
105  a01_im += c##01_12_re * reg##12_im;\
106  a01_im += c##01_12_im * reg##12_re;\
107  \
108  a02_re += c##02_00_re * reg##00_re;\
109  a02_re -= c##02_00_im * reg##00_im;\
110  a02_im += c##02_00_re * reg##00_im;\
111  a02_im += c##02_00_im * reg##00_re;\
112  a02_re += c##02_01_re * reg##01_re;\
113  a02_re -= c##02_01_im * reg##01_im;\
114  a02_im += c##02_01_re * reg##01_im;\
115  a02_im += c##02_01_im * reg##01_re;\
116  a02_re += c##02_02_re * reg##02_re;\
117  a02_im += c##02_02_re * reg##02_im;\
118  a02_re += c##02_10_re * reg##10_re;\
119  a02_re -= c##02_10_im * reg##10_im;\
120  a02_im += c##02_10_re * reg##10_im;\
121  a02_im += c##02_10_im * reg##10_re;\
122  a02_re += c##02_11_re * reg##11_re;\
123  a02_re -= c##02_11_im * reg##11_im;\
124  a02_im += c##02_11_re * reg##11_im;\
125  a02_im += c##02_11_im * reg##11_re;\
126  a02_re += c##02_12_re * reg##12_re;\
127  a02_re -= c##02_12_im * reg##12_im;\
128  a02_im += c##02_12_re * reg##12_im;\
129  a02_im += c##02_12_im * reg##12_re;\
130  \
131  a10_re += c##10_00_re * reg##00_re;\
132  a10_re -= c##10_00_im * reg##00_im;\
133  a10_im += c##10_00_re * reg##00_im;\
134  a10_im += c##10_00_im * reg##00_re;\
135  a10_re += c##10_01_re * reg##01_re;\
136  a10_re -= c##10_01_im * reg##01_im;\
137  a10_im += c##10_01_re * reg##01_im;\
138  a10_im += c##10_01_im * reg##01_re;\
139  a10_re += c##10_02_re * reg##02_re;\
140  a10_re -= c##10_02_im * reg##02_im;\
141  a10_im += c##10_02_re * reg##02_im;\
142  a10_im += c##10_02_im * reg##02_re;\
143  a10_re += c##10_10_re * reg##10_re;\
144  a10_im += c##10_10_re * reg##10_im;\
145  a10_re += c##10_11_re * reg##11_re;\
146  a10_re -= c##10_11_im * reg##11_im;\
147  a10_im += c##10_11_re * reg##11_im;\
148  a10_im += c##10_11_im * reg##11_re;\
149  a10_re += c##10_12_re * reg##12_re;\
150  a10_re -= c##10_12_im * reg##12_im;\
151  a10_im += c##10_12_re * reg##12_im;\
152  a10_im += c##10_12_im * reg##12_re;\
153  \
154  a11_re += c##11_00_re * reg##00_re;\
155  a11_re -= c##11_00_im * reg##00_im;\
156  a11_im += c##11_00_re * reg##00_im;\
157  a11_im += c##11_00_im * reg##00_re;\
158  a11_re += c##11_01_re * reg##01_re;\
159  a11_re -= c##11_01_im * reg##01_im;\
160  a11_im += c##11_01_re * reg##01_im;\
161  a11_im += c##11_01_im * reg##01_re;\
162  a11_re += c##11_02_re * reg##02_re;\
163  a11_re -= c##11_02_im * reg##02_im;\
164  a11_im += c##11_02_re * reg##02_im;\
165  a11_im += c##11_02_im * reg##02_re;\
166  a11_re += c##11_10_re * reg##10_re;\
167  a11_re -= c##11_10_im * reg##10_im;\
168  a11_im += c##11_10_re * reg##10_im;\
169  a11_im += c##11_10_im * reg##10_re;\
170  a11_re += c##11_11_re * reg##11_re;\
171  a11_im += c##11_11_re * reg##11_im;\
172  a11_re += c##11_12_re * reg##12_re;\
173  a11_re -= c##11_12_im * reg##12_im;\
174  a11_im += c##11_12_re * reg##12_im;\
175  a11_im += c##11_12_im * reg##12_re;\
176  \
177  a12_re += c##12_00_re * reg##00_re;\
178  a12_re -= c##12_00_im * reg##00_im;\
179  a12_im += c##12_00_re * reg##00_im;\
180  a12_im += c##12_00_im * reg##00_re;\
181  a12_re += c##12_01_re * reg##01_re;\
182  a12_re -= c##12_01_im * reg##01_im;\
183  a12_im += c##12_01_re * reg##01_im;\
184  a12_im += c##12_01_im * reg##01_re;\
185  a12_re += c##12_02_re * reg##02_re;\
186  a12_re -= c##12_02_im * reg##02_im;\
187  a12_im += c##12_02_re * reg##02_im;\
188  a12_im += c##12_02_im * reg##02_re;\
189  a12_re += c##12_10_re * reg##10_re;\
190  a12_re -= c##12_10_im * reg##10_im;\
191  a12_im += c##12_10_re * reg##10_im;\
192  a12_im += c##12_10_im * reg##10_re;\
193  a12_re += c##12_11_re * reg##11_re;\
194  a12_re -= c##12_11_im * reg##11_im;\
195  a12_im += c##12_11_re * reg##11_im;\
196  a12_im += c##12_11_im * reg##11_re;\
197  a12_re += c##12_12_re * reg##12_re;\
198  a12_im += c##12_12_re * reg##12_im;\
199  \
200  /*apply i*(2*kappa*mu=a)*gamma5*/\
201  a00_re = a00_re - .5*a* reg##00_im; a00_im = a00_im + .5*a* reg##00_re;\
202  a01_re = a01_re - .5*a* reg##01_im; a01_im = a01_im + .5*a* reg##01_re;\
203  a02_re = a02_re - .5*a* reg##02_im; a02_im = a02_im + .5*a* reg##02_re;\
204  a10_re = a10_re - .5*a* reg##10_im; a10_im = a10_im + .5*a* reg##10_re;\
205  a11_re = a11_re - .5*a* reg##11_im; a11_im = a11_im + .5*a* reg##11_re;\
206  a12_re = a12_re - .5*a* reg##12_im; a12_im = a12_im + .5*a* reg##12_re;\
207  reg##00_re = a00_re; reg##00_im = a00_im;\
208  reg##01_re = a01_re; reg##01_im = a01_im;\
209  reg##02_re = a02_re; reg##02_im = a02_im;\
210  reg##10_re = a10_re; reg##10_im = a10_im;\
211  reg##11_re = a11_re; reg##11_im = a11_im;\
212  reg##12_re = a12_re; reg##12_im = a12_im;\
213  \
214 }\
215 \
216 /* apply second chiral block*/\
217 {\
218  ASSN_CLOVER(TMCLOVERTEX, 1)\
219  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
220  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
221  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
222  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
223  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
224  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
225  \
226  a20_re += c##20_20_re * reg##20_re;\
227  a20_im += c##20_20_re * reg##20_im;\
228  a20_re += c##20_21_re * reg##21_re;\
229  a20_re -= c##20_21_im * reg##21_im;\
230  a20_im += c##20_21_re * reg##21_im;\
231  a20_im += c##20_21_im * reg##21_re;\
232  a20_re += c##20_22_re * reg##22_re;\
233  a20_re -= c##20_22_im * reg##22_im;\
234  a20_im += c##20_22_re * reg##22_im;\
235  a20_im += c##20_22_im * reg##22_re;\
236  a20_re += c##20_30_re * reg##30_re;\
237  a20_re -= c##20_30_im * reg##30_im;\
238  a20_im += c##20_30_re * reg##30_im;\
239  a20_im += c##20_30_im * reg##30_re;\
240  a20_re += c##20_31_re * reg##31_re;\
241  a20_re -= c##20_31_im * reg##31_im;\
242  a20_im += c##20_31_re * reg##31_im;\
243  a20_im += c##20_31_im * reg##31_re;\
244  a20_re += c##20_32_re * reg##32_re;\
245  a20_re -= c##20_32_im * reg##32_im;\
246  a20_im += c##20_32_re * reg##32_im;\
247  a20_im += c##20_32_im * reg##32_re;\
248  \
249  a21_re += c##21_20_re * reg##20_re;\
250  a21_re -= c##21_20_im * reg##20_im;\
251  a21_im += c##21_20_re * reg##20_im;\
252  a21_im += c##21_20_im * reg##20_re;\
253  a21_re += c##21_21_re * reg##21_re;\
254  a21_im += c##21_21_re * reg##21_im;\
255  a21_re += c##21_22_re * reg##22_re;\
256  a21_re -= c##21_22_im * reg##22_im;\
257  a21_im += c##21_22_re * reg##22_im;\
258  a21_im += c##21_22_im * reg##22_re;\
259  a21_re += c##21_30_re * reg##30_re;\
260  a21_re -= c##21_30_im * reg##30_im;\
261  a21_im += c##21_30_re * reg##30_im;\
262  a21_im += c##21_30_im * reg##30_re;\
263  a21_re += c##21_31_re * reg##31_re;\
264  a21_re -= c##21_31_im * reg##31_im;\
265  a21_im += c##21_31_re * reg##31_im;\
266  a21_im += c##21_31_im * reg##31_re;\
267  a21_re += c##21_32_re * reg##32_re;\
268  a21_re -= c##21_32_im * reg##32_im;\
269  a21_im += c##21_32_re * reg##32_im;\
270  a21_im += c##21_32_im * reg##32_re;\
271  \
272  a22_re += c##22_20_re * reg##20_re;\
273  a22_re -= c##22_20_im * reg##20_im;\
274  a22_im += c##22_20_re * reg##20_im;\
275  a22_im += c##22_20_im * reg##20_re;\
276  a22_re += c##22_21_re * reg##21_re;\
277  a22_re -= c##22_21_im * reg##21_im;\
278  a22_im += c##22_21_re * reg##21_im;\
279  a22_im += c##22_21_im * reg##21_re;\
280  a22_re += c##22_22_re * reg##22_re;\
281  a22_im += c##22_22_re * reg##22_im;\
282  a22_re += c##22_30_re * reg##30_re;\
283  a22_re -= c##22_30_im * reg##30_im;\
284  a22_im += c##22_30_re * reg##30_im;\
285  a22_im += c##22_30_im * reg##30_re;\
286  a22_re += c##22_31_re * reg##31_re;\
287  a22_re -= c##22_31_im * reg##31_im;\
288  a22_im += c##22_31_re * reg##31_im;\
289  a22_im += c##22_31_im * reg##31_re;\
290  a22_re += c##22_32_re * reg##32_re;\
291  a22_re -= c##22_32_im * reg##32_im;\
292  a22_im += c##22_32_re * reg##32_im;\
293  a22_im += c##22_32_im * reg##32_re;\
294  \
295  a30_re += c##30_20_re * reg##20_re;\
296  a30_re -= c##30_20_im * reg##20_im;\
297  a30_im += c##30_20_re * reg##20_im;\
298  a30_im += c##30_20_im * reg##20_re;\
299  a30_re += c##30_21_re * reg##21_re;\
300  a30_re -= c##30_21_im * reg##21_im;\
301  a30_im += c##30_21_re * reg##21_im;\
302  a30_im += c##30_21_im * reg##21_re;\
303  a30_re += c##30_22_re * reg##22_re;\
304  a30_re -= c##30_22_im * reg##22_im;\
305  a30_im += c##30_22_re * reg##22_im;\
306  a30_im += c##30_22_im * reg##22_re;\
307  a30_re += c##30_30_re * reg##30_re;\
308  a30_im += c##30_30_re * reg##30_im;\
309  a30_re += c##30_31_re * reg##31_re;\
310  a30_re -= c##30_31_im * reg##31_im;\
311  a30_im += c##30_31_re * reg##31_im;\
312  a30_im += c##30_31_im * reg##31_re;\
313  a30_re += c##30_32_re * reg##32_re;\
314  a30_re -= c##30_32_im * reg##32_im;\
315  a30_im += c##30_32_re * reg##32_im;\
316  a30_im += c##30_32_im * reg##32_re;\
317  \
318  a31_re += c##31_20_re * reg##20_re;\
319  a31_re -= c##31_20_im * reg##20_im;\
320  a31_im += c##31_20_re * reg##20_im;\
321  a31_im += c##31_20_im * reg##20_re;\
322  a31_re += c##31_21_re * reg##21_re;\
323  a31_re -= c##31_21_im * reg##21_im;\
324  a31_im += c##31_21_re * reg##21_im;\
325  a31_im += c##31_21_im * reg##21_re;\
326  a31_re += c##31_22_re * reg##22_re;\
327  a31_re -= c##31_22_im * reg##22_im;\
328  a31_im += c##31_22_re * reg##22_im;\
329  a31_im += c##31_22_im * reg##22_re;\
330  a31_re += c##31_30_re * reg##30_re;\
331  a31_re -= c##31_30_im * reg##30_im;\
332  a31_im += c##31_30_re * reg##30_im;\
333  a31_im += c##31_30_im * reg##30_re;\
334  a31_re += c##31_31_re * reg##31_re;\
335  a31_im += c##31_31_re * reg##31_im;\
336  a31_re += c##31_32_re * reg##32_re;\
337  a31_re -= c##31_32_im * reg##32_im;\
338  a31_im += c##31_32_re * reg##32_im;\
339  a31_im += c##31_32_im * reg##32_re;\
340  \
341  a32_re += c##32_20_re * reg##20_re;\
342  a32_re -= c##32_20_im * reg##20_im;\
343  a32_im += c##32_20_re * reg##20_im;\
344  a32_im += c##32_20_im * reg##20_re;\
345  a32_re += c##32_21_re * reg##21_re;\
346  a32_re -= c##32_21_im * reg##21_im;\
347  a32_im += c##32_21_re * reg##21_im;\
348  a32_im += c##32_21_im * reg##21_re;\
349  a32_re += c##32_22_re * reg##22_re;\
350  a32_re -= c##32_22_im * reg##22_im;\
351  a32_im += c##32_22_re * reg##22_im;\
352  a32_im += c##32_22_im * reg##22_re;\
353  a32_re += c##32_30_re * reg##30_re;\
354  a32_re -= c##32_30_im * reg##30_im;\
355  a32_im += c##32_30_re * reg##30_im;\
356  a32_im += c##32_30_im * reg##30_re;\
357  a32_re += c##32_31_re * reg##31_re;\
358  a32_re -= c##32_31_im * reg##31_im;\
359  a32_im += c##32_31_re * reg##31_im;\
360  a32_im += c##32_31_im * reg##31_re;\
361  a32_re += c##32_32_re * reg##32_re;\
362  a32_im += c##32_32_re * reg##32_im;\
363  \
364  /*apply i*(2*kappa*mu=a)*gamma5*/\
365  a20_re = a20_re + .5*a* reg##20_im; a20_im = a20_im - .5*a* reg##20_re;\
366  a21_re = a21_re + .5*a* reg##21_im; a21_im = a21_im - .5*a* reg##21_re;\
367  a22_re = a22_re + .5*a* reg##22_im; a22_im = a22_im - .5*a* reg##22_re;\
368  a30_re = a30_re + .5*a* reg##30_im; a30_im = a30_im - .5*a* reg##30_re;\
369  a31_re = a31_re + .5*a* reg##31_im; a31_im = a31_im - .5*a* reg##31_re;\
370  a32_re = a32_re + .5*a* reg##32_im; a32_im = a32_im - .5*a* reg##32_re;\
371  reg##20_re = a20_re; reg##20_im = a20_im;\
372  reg##21_re = a21_re; reg##21_im = a21_im;\
373  reg##22_re = a22_re; reg##22_im = a22_im;\
374  reg##30_re = a30_re; reg##30_im = a30_im;\
375  reg##31_re = a31_re; reg##31_im = a31_im;\
376  reg##32_re = a32_re; reg##32_im = a32_im;\
377  \
378 }\
379 \
380 /* change back from chiral basis*/\
381 /* (note: required factor of 1/2 is included in clover term normalization)*/\
382 {\
383  spinorFloat a00_re = reg##10_re + reg##30_re;\
384  spinorFloat a00_im = reg##10_im + reg##30_im;\
385  spinorFloat a10_re = -reg##00_re - reg##20_re;\
386  spinorFloat a10_im = -reg##00_im - reg##20_im;\
387  spinorFloat a20_re = reg##10_re - reg##30_re;\
388  spinorFloat a20_im = reg##10_im - reg##30_im;\
389  spinorFloat a30_re = -reg##00_re + reg##20_re;\
390  spinorFloat a30_im = -reg##00_im + reg##20_im;\
391  \
392  reg##00_re = a00_re; reg##00_im = a00_im;\
393  reg##10_re = a10_re; reg##10_im = a10_im;\
394  reg##20_re = a20_re; reg##20_im = a20_im;\
395  reg##30_re = a30_re; reg##30_im = a30_im;\
396 }\
397 \
398 {\
399  spinorFloat a01_re = reg##11_re + reg##31_re;\
400  spinorFloat a01_im = reg##11_im + reg##31_im;\
401  spinorFloat a11_re = -reg##01_re - reg##21_re;\
402  spinorFloat a11_im = -reg##01_im - reg##21_im;\
403  spinorFloat a21_re = reg##11_re - reg##31_re;\
404  spinorFloat a21_im = reg##11_im - reg##31_im;\
405  spinorFloat a31_re = -reg##01_re + reg##21_re;\
406  spinorFloat a31_im = -reg##01_im + reg##21_im;\
407  \
408  reg##01_re = a01_re; reg##01_im = a01_im;\
409  reg##11_re = a11_re; reg##11_im = a11_im;\
410  reg##21_re = a21_re; reg##21_im = a21_im;\
411  reg##31_re = a31_re; reg##31_im = a31_im;\
412 }\
413 \
414 {\
415  spinorFloat a02_re = reg##12_re + reg##32_re;\
416  spinorFloat a02_im = reg##12_im + reg##32_im;\
417  spinorFloat a12_re = -reg##02_re - reg##22_re;\
418  spinorFloat a12_im = -reg##02_im - reg##22_im;\
419  spinorFloat a22_re = reg##12_re - reg##32_re;\
420  spinorFloat a22_im = reg##12_im - reg##32_im;\
421  spinorFloat a32_re = -reg##02_re + reg##22_re;\
422  spinorFloat a32_im = -reg##02_im + reg##22_im;\
423  \
424  reg##02_re = a02_re; reg##02_im = a02_im;\
425  reg##12_re = a12_re; reg##12_im = a12_im;\
426  reg##22_re = a22_re; reg##22_im = a22_im;\
427  reg##32_re = a32_re; reg##32_im = a32_im;\
428 }\
429 \
430 
431 
432 #define APPLY_CLOVER_TWIST_INV(c, cinv, a, reg)\
433 \
434 /* change to chiral basis*/\
435 {\
436  spinorFloat a00_re = -reg##10_re - reg##30_re;\
437  spinorFloat a00_im = -reg##10_im - reg##30_im;\
438  spinorFloat a10_re = reg##00_re + reg##20_re;\
439  spinorFloat a10_im = reg##00_im + reg##20_im;\
440  spinorFloat a20_re = -reg##10_re + reg##30_re;\
441  spinorFloat a20_im = -reg##10_im + reg##30_im;\
442  spinorFloat a30_re = reg##00_re - reg##20_re;\
443  spinorFloat a30_im = reg##00_im - reg##20_im;\
444  \
445  reg##00_re = a00_re; reg##00_im = a00_im;\
446  reg##10_re = a10_re; reg##10_im = a10_im;\
447  reg##20_re = a20_re; reg##20_im = a20_im;\
448  reg##30_re = a30_re; reg##30_im = a30_im;\
449 }\
450 \
451 {\
452  spinorFloat a01_re = -reg##11_re - reg##31_re;\
453  spinorFloat a01_im = -reg##11_im - reg##31_im;\
454  spinorFloat a11_re = reg##01_re + reg##21_re;\
455  spinorFloat a11_im = reg##01_im + reg##21_im;\
456  spinorFloat a21_re = -reg##11_re + reg##31_re;\
457  spinorFloat a21_im = -reg##11_im + reg##31_im;\
458  spinorFloat a31_re = reg##01_re - reg##21_re;\
459  spinorFloat a31_im = reg##01_im - reg##21_im;\
460  \
461  reg##01_re = a01_re; reg##01_im = a01_im;\
462  reg##11_re = a11_re; reg##11_im = a11_im;\
463  reg##21_re = a21_re; reg##21_im = a21_im;\
464  reg##31_re = a31_re; reg##31_im = a31_im;\
465 }\
466 \
467 {\
468  spinorFloat a02_re = -reg##12_re - reg##32_re;\
469  spinorFloat a02_im = -reg##12_im - reg##32_im;\
470  spinorFloat a12_re = reg##02_re + reg##22_re;\
471  spinorFloat a12_im = reg##02_im + reg##22_im;\
472  spinorFloat a22_re = -reg##12_re + reg##32_re;\
473  spinorFloat a22_im = -reg##12_im + reg##32_im;\
474  spinorFloat a32_re = reg##02_re - reg##22_re;\
475  spinorFloat a32_im = reg##02_im - reg##22_im;\
476  \
477  reg##02_re = a02_re; reg##02_im = a02_im;\
478  reg##12_re = a12_re; reg##12_im = a12_im;\
479  reg##22_re = a22_re; reg##22_im = a22_im;\
480  reg##32_re = a32_re; reg##32_im = a32_im;\
481 }\
482 \
483 /* apply first chiral block*/\
484 {\
485  ASSN_CLOVER(TMCLOVERTEX, 0)\
486  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
487  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
488  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
489  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
490  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
491  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
492  \
493  a00_re += c##00_00_re * reg##00_re;\
494  a00_im += c##00_00_re * reg##00_im;\
495  a00_re += c##00_01_re * reg##01_re;\
496  a00_re -= c##00_01_im * reg##01_im;\
497  a00_im += c##00_01_re * reg##01_im;\
498  a00_im += c##00_01_im * reg##01_re;\
499  a00_re += c##00_02_re * reg##02_re;\
500  a00_re -= c##00_02_im * reg##02_im;\
501  a00_im += c##00_02_re * reg##02_im;\
502  a00_im += c##00_02_im * reg##02_re;\
503  a00_re += c##00_10_re * reg##10_re;\
504  a00_re -= c##00_10_im * reg##10_im;\
505  a00_im += c##00_10_re * reg##10_im;\
506  a00_im += c##00_10_im * reg##10_re;\
507  a00_re += c##00_11_re * reg##11_re;\
508  a00_re -= c##00_11_im * reg##11_im;\
509  a00_im += c##00_11_re * reg##11_im;\
510  a00_im += c##00_11_im * reg##11_re;\
511  a00_re += c##00_12_re * reg##12_re;\
512  a00_re -= c##00_12_im * reg##12_im;\
513  a00_im += c##00_12_re * reg##12_im;\
514  a00_im += c##00_12_im * reg##12_re;\
515  \
516  a01_re += c##01_00_re * reg##00_re;\
517  a01_re -= c##01_00_im * reg##00_im;\
518  a01_im += c##01_00_re * reg##00_im;\
519  a01_im += c##01_00_im * reg##00_re;\
520  a01_re += c##01_01_re * reg##01_re;\
521  a01_im += c##01_01_re * reg##01_im;\
522  a01_re += c##01_02_re * reg##02_re;\
523  a01_re -= c##01_02_im * reg##02_im;\
524  a01_im += c##01_02_re * reg##02_im;\
525  a01_im += c##01_02_im * reg##02_re;\
526  a01_re += c##01_10_re * reg##10_re;\
527  a01_re -= c##01_10_im * reg##10_im;\
528  a01_im += c##01_10_re * reg##10_im;\
529  a01_im += c##01_10_im * reg##10_re;\
530  a01_re += c##01_11_re * reg##11_re;\
531  a01_re -= c##01_11_im * reg##11_im;\
532  a01_im += c##01_11_re * reg##11_im;\
533  a01_im += c##01_11_im * reg##11_re;\
534  a01_re += c##01_12_re * reg##12_re;\
535  a01_re -= c##01_12_im * reg##12_im;\
536  a01_im += c##01_12_re * reg##12_im;\
537  a01_im += c##01_12_im * reg##12_re;\
538  \
539  a02_re += c##02_00_re * reg##00_re;\
540  a02_re -= c##02_00_im * reg##00_im;\
541  a02_im += c##02_00_re * reg##00_im;\
542  a02_im += c##02_00_im * reg##00_re;\
543  a02_re += c##02_01_re * reg##01_re;\
544  a02_re -= c##02_01_im * reg##01_im;\
545  a02_im += c##02_01_re * reg##01_im;\
546  a02_im += c##02_01_im * reg##01_re;\
547  a02_re += c##02_02_re * reg##02_re;\
548  a02_im += c##02_02_re * reg##02_im;\
549  a02_re += c##02_10_re * reg##10_re;\
550  a02_re -= c##02_10_im * reg##10_im;\
551  a02_im += c##02_10_re * reg##10_im;\
552  a02_im += c##02_10_im * reg##10_re;\
553  a02_re += c##02_11_re * reg##11_re;\
554  a02_re -= c##02_11_im * reg##11_im;\
555  a02_im += c##02_11_re * reg##11_im;\
556  a02_im += c##02_11_im * reg##11_re;\
557  a02_re += c##02_12_re * reg##12_re;\
558  a02_re -= c##02_12_im * reg##12_im;\
559  a02_im += c##02_12_re * reg##12_im;\
560  a02_im += c##02_12_im * reg##12_re;\
561  \
562  a10_re += c##10_00_re * reg##00_re;\
563  a10_re -= c##10_00_im * reg##00_im;\
564  a10_im += c##10_00_re * reg##00_im;\
565  a10_im += c##10_00_im * reg##00_re;\
566  a10_re += c##10_01_re * reg##01_re;\
567  a10_re -= c##10_01_im * reg##01_im;\
568  a10_im += c##10_01_re * reg##01_im;\
569  a10_im += c##10_01_im * reg##01_re;\
570  a10_re += c##10_02_re * reg##02_re;\
571  a10_re -= c##10_02_im * reg##02_im;\
572  a10_im += c##10_02_re * reg##02_im;\
573  a10_im += c##10_02_im * reg##02_re;\
574  a10_re += c##10_10_re * reg##10_re;\
575  a10_im += c##10_10_re * reg##10_im;\
576  a10_re += c##10_11_re * reg##11_re;\
577  a10_re -= c##10_11_im * reg##11_im;\
578  a10_im += c##10_11_re * reg##11_im;\
579  a10_im += c##10_11_im * reg##11_re;\
580  a10_re += c##10_12_re * reg##12_re;\
581  a10_re -= c##10_12_im * reg##12_im;\
582  a10_im += c##10_12_re * reg##12_im;\
583  a10_im += c##10_12_im * reg##12_re;\
584  \
585  a11_re += c##11_00_re * reg##00_re;\
586  a11_re -= c##11_00_im * reg##00_im;\
587  a11_im += c##11_00_re * reg##00_im;\
588  a11_im += c##11_00_im * reg##00_re;\
589  a11_re += c##11_01_re * reg##01_re;\
590  a11_re -= c##11_01_im * reg##01_im;\
591  a11_im += c##11_01_re * reg##01_im;\
592  a11_im += c##11_01_im * reg##01_re;\
593  a11_re += c##11_02_re * reg##02_re;\
594  a11_re -= c##11_02_im * reg##02_im;\
595  a11_im += c##11_02_re * reg##02_im;\
596  a11_im += c##11_02_im * reg##02_re;\
597  a11_re += c##11_10_re * reg##10_re;\
598  a11_re -= c##11_10_im * reg##10_im;\
599  a11_im += c##11_10_re * reg##10_im;\
600  a11_im += c##11_10_im * reg##10_re;\
601  a11_re += c##11_11_re * reg##11_re;\
602  a11_im += c##11_11_re * reg##11_im;\
603  a11_re += c##11_12_re * reg##12_re;\
604  a11_re -= c##11_12_im * reg##12_im;\
605  a11_im += c##11_12_re * reg##12_im;\
606  a11_im += c##11_12_im * reg##12_re;\
607  \
608  a12_re += c##12_00_re * reg##00_re;\
609  a12_re -= c##12_00_im * reg##00_im;\
610  a12_im += c##12_00_re * reg##00_im;\
611  a12_im += c##12_00_im * reg##00_re;\
612  a12_re += c##12_01_re * reg##01_re;\
613  a12_re -= c##12_01_im * reg##01_im;\
614  a12_im += c##12_01_re * reg##01_im;\
615  a12_im += c##12_01_im * reg##01_re;\
616  a12_re += c##12_02_re * reg##02_re;\
617  a12_re -= c##12_02_im * reg##02_im;\
618  a12_im += c##12_02_re * reg##02_im;\
619  a12_im += c##12_02_im * reg##02_re;\
620  a12_re += c##12_10_re * reg##10_re;\
621  a12_re -= c##12_10_im * reg##10_im;\
622  a12_im += c##12_10_re * reg##10_im;\
623  a12_im += c##12_10_im * reg##10_re;\
624  a12_re += c##12_11_re * reg##11_re;\
625  a12_re -= c##12_11_im * reg##11_im;\
626  a12_im += c##12_11_re * reg##11_im;\
627  a12_im += c##12_11_im * reg##11_re;\
628  a12_re += c##12_12_re * reg##12_re;\
629  a12_im += c##12_12_re * reg##12_im;\
630  \
631  /*apply i*(2*kappa*mu=a)*gamma5*/\
632  a00_re = a00_re - .5*a* reg##00_im; a00_im = a00_im + .5*a* reg##00_re;\
633  a01_re = a01_re - .5*a* reg##01_im; a01_im = a01_im + .5*a* reg##01_re;\
634  a02_re = a02_re - .5*a* reg##02_im; a02_im = a02_im + .5*a* reg##02_re;\
635  a10_re = a10_re - .5*a* reg##10_im; a10_im = a10_im + .5*a* reg##10_re;\
636  a11_re = a11_re - .5*a* reg##11_im; a11_im = a11_im + .5*a* reg##11_re;\
637  a12_re = a12_re - .5*a* reg##12_im; a12_im = a12_im + .5*a* reg##12_re;\
638  reg##00_re = a00_re; reg##00_im = a00_im;\
639  reg##01_re = a01_re; reg##01_im = a01_im;\
640  reg##02_re = a02_re; reg##02_im = a02_im;\
641  reg##10_re = a10_re; reg##10_im = a10_im;\
642  reg##11_re = a11_re; reg##11_im = a11_im;\
643  reg##12_re = a12_re; reg##12_im = a12_im;\
644 }\
645 /*Apply inverse clover*/\
646 {\
647  ASSN_CLOVER(TM_INV_CLOVERTEX, 0)\
648  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
649  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
650  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
651  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
652  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
653  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
654  \
655  a00_re += cinv##00_00_re * reg##00_re;\
656  a00_im += cinv##00_00_re * reg##00_im;\
657  a00_re += cinv##00_01_re * reg##01_re;\
658  a00_re -= cinv##00_01_im * reg##01_im;\
659  a00_im += cinv##00_01_re * reg##01_im;\
660  a00_im += cinv##00_01_im * reg##01_re;\
661  a00_re += cinv##00_02_re * reg##02_re;\
662  a00_re -= cinv##00_02_im * reg##02_im;\
663  a00_im += cinv##00_02_re * reg##02_im;\
664  a00_im += cinv##00_02_im * reg##02_re;\
665  a00_re += cinv##00_10_re * reg##10_re;\
666  a00_re -= cinv##00_10_im * reg##10_im;\
667  a00_im += cinv##00_10_re * reg##10_im;\
668  a00_im += cinv##00_10_im * reg##10_re;\
669  a00_re += cinv##00_11_re * reg##11_re;\
670  a00_re -= cinv##00_11_im * reg##11_im;\
671  a00_im += cinv##00_11_re * reg##11_im;\
672  a00_im += cinv##00_11_im * reg##11_re;\
673  a00_re += cinv##00_12_re * reg##12_re;\
674  a00_re -= cinv##00_12_im * reg##12_im;\
675  a00_im += cinv##00_12_re * reg##12_im;\
676  a00_im += cinv##00_12_im * reg##12_re;\
677  \
678  a01_re += cinv##01_00_re * reg##00_re;\
679  a01_re -= cinv##01_00_im * reg##00_im;\
680  a01_im += cinv##01_00_re * reg##00_im;\
681  a01_im += cinv##01_00_im * reg##00_re;\
682  a01_re += cinv##01_01_re * reg##01_re;\
683  a01_im += cinv##01_01_re * reg##01_im;\
684  a01_re += cinv##01_02_re * reg##02_re;\
685  a01_re -= cinv##01_02_im * reg##02_im;\
686  a01_im += cinv##01_02_re * reg##02_im;\
687  a01_im += cinv##01_02_im * reg##02_re;\
688  a01_re += cinv##01_10_re * reg##10_re;\
689  a01_re -= cinv##01_10_im * reg##10_im;\
690  a01_im += cinv##01_10_re * reg##10_im;\
691  a01_im += cinv##01_10_im * reg##10_re;\
692  a01_re += cinv##01_11_re * reg##11_re;\
693  a01_re -= cinv##01_11_im * reg##11_im;\
694  a01_im += cinv##01_11_re * reg##11_im;\
695  a01_im += cinv##01_11_im * reg##11_re;\
696  a01_re += cinv##01_12_re * reg##12_re;\
697  a01_re -= cinv##01_12_im * reg##12_im;\
698  a01_im += cinv##01_12_re * reg##12_im;\
699  a01_im += cinv##01_12_im * reg##12_re;\
700  \
701  a02_re += cinv##02_00_re * reg##00_re;\
702  a02_re -= cinv##02_00_im * reg##00_im;\
703  a02_im += cinv##02_00_re * reg##00_im;\
704  a02_im += cinv##02_00_im * reg##00_re;\
705  a02_re += cinv##02_01_re * reg##01_re;\
706  a02_re -= cinv##02_01_im * reg##01_im;\
707  a02_im += cinv##02_01_re * reg##01_im;\
708  a02_im += cinv##02_01_im * reg##01_re;\
709  a02_re += cinv##02_02_re * reg##02_re;\
710  a02_im += cinv##02_02_re * reg##02_im;\
711  a02_re += cinv##02_10_re * reg##10_re;\
712  a02_re -= cinv##02_10_im * reg##10_im;\
713  a02_im += cinv##02_10_re * reg##10_im;\
714  a02_im += cinv##02_10_im * reg##10_re;\
715  a02_re += cinv##02_11_re * reg##11_re;\
716  a02_re -= cinv##02_11_im * reg##11_im;\
717  a02_im += cinv##02_11_re * reg##11_im;\
718  a02_im += cinv##02_11_im * reg##11_re;\
719  a02_re += cinv##02_12_re * reg##12_re;\
720  a02_re -= cinv##02_12_im * reg##12_im;\
721  a02_im += cinv##02_12_re * reg##12_im;\
722  a02_im += cinv##02_12_im * reg##12_re;\
723  \
724  a10_re += cinv##10_00_re * reg##00_re;\
725  a10_re -= cinv##10_00_im * reg##00_im;\
726  a10_im += cinv##10_00_re * reg##00_im;\
727  a10_im += cinv##10_00_im * reg##00_re;\
728  a10_re += cinv##10_01_re * reg##01_re;\
729  a10_re -= cinv##10_01_im * reg##01_im;\
730  a10_im += cinv##10_01_re * reg##01_im;\
731  a10_im += cinv##10_01_im * reg##01_re;\
732  a10_re += cinv##10_02_re * reg##02_re;\
733  a10_re -= cinv##10_02_im * reg##02_im;\
734  a10_im += cinv##10_02_re * reg##02_im;\
735  a10_im += cinv##10_02_im * reg##02_re;\
736  a10_re += cinv##10_10_re * reg##10_re;\
737  a10_im += cinv##10_10_re * reg##10_im;\
738  a10_re += cinv##10_11_re * reg##11_re;\
739  a10_re -= cinv##10_11_im * reg##11_im;\
740  a10_im += cinv##10_11_re * reg##11_im;\
741  a10_im += cinv##10_11_im * reg##11_re;\
742  a10_re += cinv##10_12_re * reg##12_re;\
743  a10_re -= cinv##10_12_im * reg##12_im;\
744  a10_im += cinv##10_12_re * reg##12_im;\
745  a10_im += cinv##10_12_im * reg##12_re;\
746  \
747  a11_re += cinv##11_00_re * reg##00_re;\
748  a11_re -= cinv##11_00_im * reg##00_im;\
749  a11_im += cinv##11_00_re * reg##00_im;\
750  a11_im += cinv##11_00_im * reg##00_re;\
751  a11_re += cinv##11_01_re * reg##01_re;\
752  a11_re -= cinv##11_01_im * reg##01_im;\
753  a11_im += cinv##11_01_re * reg##01_im;\
754  a11_im += cinv##11_01_im * reg##01_re;\
755  a11_re += cinv##11_02_re * reg##02_re;\
756  a11_re -= cinv##11_02_im * reg##02_im;\
757  a11_im += cinv##11_02_re * reg##02_im;\
758  a11_im += cinv##11_02_im * reg##02_re;\
759  a11_re += cinv##11_10_re * reg##10_re;\
760  a11_re -= cinv##11_10_im * reg##10_im;\
761  a11_im += cinv##11_10_re * reg##10_im;\
762  a11_im += cinv##11_10_im * reg##10_re;\
763  a11_re += cinv##11_11_re * reg##11_re;\
764  a11_im += cinv##11_11_re * reg##11_im;\
765  a11_re += cinv##11_12_re * reg##12_re;\
766  a11_re -= cinv##11_12_im * reg##12_im;\
767  a11_im += cinv##11_12_re * reg##12_im;\
768  a11_im += cinv##11_12_im * reg##12_re;\
769  \
770  a12_re += cinv##12_00_re * reg##00_re;\
771  a12_re -= cinv##12_00_im * reg##00_im;\
772  a12_im += cinv##12_00_re * reg##00_im;\
773  a12_im += cinv##12_00_im * reg##00_re;\
774  a12_re += cinv##12_01_re * reg##01_re;\
775  a12_re -= cinv##12_01_im * reg##01_im;\
776  a12_im += cinv##12_01_re * reg##01_im;\
777  a12_im += cinv##12_01_im * reg##01_re;\
778  a12_re += cinv##12_02_re * reg##02_re;\
779  a12_re -= cinv##12_02_im * reg##02_im;\
780  a12_im += cinv##12_02_re * reg##02_im;\
781  a12_im += cinv##12_02_im * reg##02_re;\
782  a12_re += cinv##12_10_re * reg##10_re;\
783  a12_re -= cinv##12_10_im * reg##10_im;\
784  a12_im += cinv##12_10_re * reg##10_im;\
785  a12_im += cinv##12_10_im * reg##10_re;\
786  a12_re += cinv##12_11_re * reg##11_re;\
787  a12_re -= cinv##12_11_im * reg##11_im;\
788  a12_im += cinv##12_11_re * reg##11_im;\
789  a12_im += cinv##12_11_im * reg##11_re;\
790  a12_re += cinv##12_12_re * reg##12_re;\
791  a12_im += cinv##12_12_re * reg##12_im;\
792  \
793  /*store the result*/\
794  reg##00_re = a00_re; reg##00_im = a00_im;\
795  reg##01_re = a01_re; reg##01_im = a01_im;\
796  reg##02_re = a02_re; reg##02_im = a02_im;\
797  reg##10_re = a10_re; reg##10_im = a10_im;\
798  reg##11_re = a11_re; reg##11_im = a11_im;\
799  reg##12_re = a12_re; reg##12_im = a12_im;\
800  \
801 }\
802 \
803 /* apply second chiral block*/\
804 {\
805  ASSN_CLOVER(TMCLOVERTEX, 1)\
806  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
807  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
808  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
809  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
810  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
811  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
812  \
813  a20_re += c##20_20_re * reg##20_re;\
814  a20_im += c##20_20_re * reg##20_im;\
815  a20_re += c##20_21_re * reg##21_re;\
816  a20_re -= c##20_21_im * reg##21_im;\
817  a20_im += c##20_21_re * reg##21_im;\
818  a20_im += c##20_21_im * reg##21_re;\
819  a20_re += c##20_22_re * reg##22_re;\
820  a20_re -= c##20_22_im * reg##22_im;\
821  a20_im += c##20_22_re * reg##22_im;\
822  a20_im += c##20_22_im * reg##22_re;\
823  a20_re += c##20_30_re * reg##30_re;\
824  a20_re -= c##20_30_im * reg##30_im;\
825  a20_im += c##20_30_re * reg##30_im;\
826  a20_im += c##20_30_im * reg##30_re;\
827  a20_re += c##20_31_re * reg##31_re;\
828  a20_re -= c##20_31_im * reg##31_im;\
829  a20_im += c##20_31_re * reg##31_im;\
830  a20_im += c##20_31_im * reg##31_re;\
831  a20_re += c##20_32_re * reg##32_re;\
832  a20_re -= c##20_32_im * reg##32_im;\
833  a20_im += c##20_32_re * reg##32_im;\
834  a20_im += c##20_32_im * reg##32_re;\
835  \
836  a21_re += c##21_20_re * reg##20_re;\
837  a21_re -= c##21_20_im * reg##20_im;\
838  a21_im += c##21_20_re * reg##20_im;\
839  a21_im += c##21_20_im * reg##20_re;\
840  a21_re += c##21_21_re * reg##21_re;\
841  a21_im += c##21_21_re * reg##21_im;\
842  a21_re += c##21_22_re * reg##22_re;\
843  a21_re -= c##21_22_im * reg##22_im;\
844  a21_im += c##21_22_re * reg##22_im;\
845  a21_im += c##21_22_im * reg##22_re;\
846  a21_re += c##21_30_re * reg##30_re;\
847  a21_re -= c##21_30_im * reg##30_im;\
848  a21_im += c##21_30_re * reg##30_im;\
849  a21_im += c##21_30_im * reg##30_re;\
850  a21_re += c##21_31_re * reg##31_re;\
851  a21_re -= c##21_31_im * reg##31_im;\
852  a21_im += c##21_31_re * reg##31_im;\
853  a21_im += c##21_31_im * reg##31_re;\
854  a21_re += c##21_32_re * reg##32_re;\
855  a21_re -= c##21_32_im * reg##32_im;\
856  a21_im += c##21_32_re * reg##32_im;\
857  a21_im += c##21_32_im * reg##32_re;\
858  \
859  a22_re += c##22_20_re * reg##20_re;\
860  a22_re -= c##22_20_im * reg##20_im;\
861  a22_im += c##22_20_re * reg##20_im;\
862  a22_im += c##22_20_im * reg##20_re;\
863  a22_re += c##22_21_re * reg##21_re;\
864  a22_re -= c##22_21_im * reg##21_im;\
865  a22_im += c##22_21_re * reg##21_im;\
866  a22_im += c##22_21_im * reg##21_re;\
867  a22_re += c##22_22_re * reg##22_re;\
868  a22_im += c##22_22_re * reg##22_im;\
869  a22_re += c##22_30_re * reg##30_re;\
870  a22_re -= c##22_30_im * reg##30_im;\
871  a22_im += c##22_30_re * reg##30_im;\
872  a22_im += c##22_30_im * reg##30_re;\
873  a22_re += c##22_31_re * reg##31_re;\
874  a22_re -= c##22_31_im * reg##31_im;\
875  a22_im += c##22_31_re * reg##31_im;\
876  a22_im += c##22_31_im * reg##31_re;\
877  a22_re += c##22_32_re * reg##32_re;\
878  a22_re -= c##22_32_im * reg##32_im;\
879  a22_im += c##22_32_re * reg##32_im;\
880  a22_im += c##22_32_im * reg##32_re;\
881  \
882  a30_re += c##30_20_re * reg##20_re;\
883  a30_re -= c##30_20_im * reg##20_im;\
884  a30_im += c##30_20_re * reg##20_im;\
885  a30_im += c##30_20_im * reg##20_re;\
886  a30_re += c##30_21_re * reg##21_re;\
887  a30_re -= c##30_21_im * reg##21_im;\
888  a30_im += c##30_21_re * reg##21_im;\
889  a30_im += c##30_21_im * reg##21_re;\
890  a30_re += c##30_22_re * reg##22_re;\
891  a30_re -= c##30_22_im * reg##22_im;\
892  a30_im += c##30_22_re * reg##22_im;\
893  a30_im += c##30_22_im * reg##22_re;\
894  a30_re += c##30_30_re * reg##30_re;\
895  a30_im += c##30_30_re * reg##30_im;\
896  a30_re += c##30_31_re * reg##31_re;\
897  a30_re -= c##30_31_im * reg##31_im;\
898  a30_im += c##30_31_re * reg##31_im;\
899  a30_im += c##30_31_im * reg##31_re;\
900  a30_re += c##30_32_re * reg##32_re;\
901  a30_re -= c##30_32_im * reg##32_im;\
902  a30_im += c##30_32_re * reg##32_im;\
903  a30_im += c##30_32_im * reg##32_re;\
904  \
905  a31_re += c##31_20_re * reg##20_re;\
906  a31_re -= c##31_20_im * reg##20_im;\
907  a31_im += c##31_20_re * reg##20_im;\
908  a31_im += c##31_20_im * reg##20_re;\
909  a31_re += c##31_21_re * reg##21_re;\
910  a31_re -= c##31_21_im * reg##21_im;\
911  a31_im += c##31_21_re * reg##21_im;\
912  a31_im += c##31_21_im * reg##21_re;\
913  a31_re += c##31_22_re * reg##22_re;\
914  a31_re -= c##31_22_im * reg##22_im;\
915  a31_im += c##31_22_re * reg##22_im;\
916  a31_im += c##31_22_im * reg##22_re;\
917  a31_re += c##31_30_re * reg##30_re;\
918  a31_re -= c##31_30_im * reg##30_im;\
919  a31_im += c##31_30_re * reg##30_im;\
920  a31_im += c##31_30_im * reg##30_re;\
921  a31_re += c##31_31_re * reg##31_re;\
922  a31_im += c##31_31_re * reg##31_im;\
923  a31_re += c##31_32_re * reg##32_re;\
924  a31_re -= c##31_32_im * reg##32_im;\
925  a31_im += c##31_32_re * reg##32_im;\
926  a31_im += c##31_32_im * reg##32_re;\
927  \
928  a32_re += c##32_20_re * reg##20_re;\
929  a32_re -= c##32_20_im * reg##20_im;\
930  a32_im += c##32_20_re * reg##20_im;\
931  a32_im += c##32_20_im * reg##20_re;\
932  a32_re += c##32_21_re * reg##21_re;\
933  a32_re -= c##32_21_im * reg##21_im;\
934  a32_im += c##32_21_re * reg##21_im;\
935  a32_im += c##32_21_im * reg##21_re;\
936  a32_re += c##32_22_re * reg##22_re;\
937  a32_re -= c##32_22_im * reg##22_im;\
938  a32_im += c##32_22_re * reg##22_im;\
939  a32_im += c##32_22_im * reg##22_re;\
940  a32_re += c##32_30_re * reg##30_re;\
941  a32_re -= c##32_30_im * reg##30_im;\
942  a32_im += c##32_30_re * reg##30_im;\
943  a32_im += c##32_30_im * reg##30_re;\
944  a32_re += c##32_31_re * reg##31_re;\
945  a32_re -= c##32_31_im * reg##31_im;\
946  a32_im += c##32_31_re * reg##31_im;\
947  a32_im += c##32_31_im * reg##31_re;\
948  a32_re += c##32_32_re * reg##32_re;\
949  a32_im += c##32_32_re * reg##32_im;\
950  \
951  /*apply i*(2*kappa*mu=a)*gamma5*/\
952  a20_re = a20_re + .5*a* reg##20_im; a20_im = a20_im - .5*a* reg##20_re;\
953  a21_re = a21_re + .5*a* reg##21_im; a21_im = a21_im - .5*a* reg##21_re;\
954  a22_re = a22_re + .5*a* reg##22_im; a22_im = a22_im - .5*a* reg##22_re;\
955  a30_re = a30_re + .5*a* reg##30_im; a30_im = a30_im - .5*a* reg##30_re;\
956  a31_re = a31_re + .5*a* reg##31_im; a31_im = a31_im - .5*a* reg##31_re;\
957  a32_re = a32_re + .5*a* reg##32_im; a32_im = a32_im - .5*a* reg##32_re;\
958  reg##20_re = a20_re; reg##20_im = a20_im;\
959  reg##21_re = a21_re; reg##21_im = a21_im;\
960  reg##22_re = a22_re; reg##22_im = a22_im;\
961  reg##30_re = a30_re; reg##30_im = a30_im;\
962  reg##31_re = a31_re; reg##31_im = a31_im;\
963  reg##32_re = a32_re; reg##32_im = a32_im;\
964 }\
965 /*Apply inverse clover*/\
966 {\
967  ASSN_CLOVER(TM_INV_CLOVERTEX, 1)\
968  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
969  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
970  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
971  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
972  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
973  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
974  \
975  a20_re += cinv##20_20_re * reg##20_re;\
976  a20_im += cinv##20_20_re * reg##20_im;\
977  a20_re += cinv##20_21_re * reg##21_re;\
978  a20_re -= cinv##20_21_im * reg##21_im;\
979  a20_im += cinv##20_21_re * reg##21_im;\
980  a20_im += cinv##20_21_im * reg##21_re;\
981  a20_re += cinv##20_22_re * reg##22_re;\
982  a20_re -= cinv##20_22_im * reg##22_im;\
983  a20_im += cinv##20_22_re * reg##22_im;\
984  a20_im += cinv##20_22_im * reg##22_re;\
985  a20_re += cinv##20_30_re * reg##30_re;\
986  a20_re -= cinv##20_30_im * reg##30_im;\
987  a20_im += cinv##20_30_re * reg##30_im;\
988  a20_im += cinv##20_30_im * reg##30_re;\
989  a20_re += cinv##20_31_re * reg##31_re;\
990  a20_re -= cinv##20_31_im * reg##31_im;\
991  a20_im += cinv##20_31_re * reg##31_im;\
992  a20_im += cinv##20_31_im * reg##31_re;\
993  a20_re += cinv##20_32_re * reg##32_re;\
994  a20_re -= cinv##20_32_im * reg##32_im;\
995  a20_im += cinv##20_32_re * reg##32_im;\
996  a20_im += cinv##20_32_im * reg##32_re;\
997  \
998  a21_re += cinv##21_20_re * reg##20_re;\
999  a21_re -= cinv##21_20_im * reg##20_im;\
1000  a21_im += cinv##21_20_re * reg##20_im;\
1001  a21_im += cinv##21_20_im * reg##20_re;\
1002  a21_re += cinv##21_21_re * reg##21_re;\
1003  a21_im += cinv##21_21_re * reg##21_im;\
1004  a21_re += cinv##21_22_re * reg##22_re;\
1005  a21_re -= cinv##21_22_im * reg##22_im;\
1006  a21_im += cinv##21_22_re * reg##22_im;\
1007  a21_im += cinv##21_22_im * reg##22_re;\
1008  a21_re += cinv##21_30_re * reg##30_re;\
1009  a21_re -= cinv##21_30_im * reg##30_im;\
1010  a21_im += cinv##21_30_re * reg##30_im;\
1011  a21_im += cinv##21_30_im * reg##30_re;\
1012  a21_re += cinv##21_31_re * reg##31_re;\
1013  a21_re -= cinv##21_31_im * reg##31_im;\
1014  a21_im += cinv##21_31_re * reg##31_im;\
1015  a21_im += cinv##21_31_im * reg##31_re;\
1016  a21_re += cinv##21_32_re * reg##32_re;\
1017  a21_re -= cinv##21_32_im * reg##32_im;\
1018  a21_im += cinv##21_32_re * reg##32_im;\
1019  a21_im += cinv##21_32_im * reg##32_re;\
1020  \
1021  a22_re += cinv##22_20_re * reg##20_re;\
1022  a22_re -= cinv##22_20_im * reg##20_im;\
1023  a22_im += cinv##22_20_re * reg##20_im;\
1024  a22_im += cinv##22_20_im * reg##20_re;\
1025  a22_re += cinv##22_21_re * reg##21_re;\
1026  a22_re -= cinv##22_21_im * reg##21_im;\
1027  a22_im += cinv##22_21_re * reg##21_im;\
1028  a22_im += cinv##22_21_im * reg##21_re;\
1029  a22_re += cinv##22_22_re * reg##22_re;\
1030  a22_im += cinv##22_22_re * reg##22_im;\
1031  a22_re += cinv##22_30_re * reg##30_re;\
1032  a22_re -= cinv##22_30_im * reg##30_im;\
1033  a22_im += cinv##22_30_re * reg##30_im;\
1034  a22_im += cinv##22_30_im * reg##30_re;\
1035  a22_re += cinv##22_31_re * reg##31_re;\
1036  a22_re -= cinv##22_31_im * reg##31_im;\
1037  a22_im += cinv##22_31_re * reg##31_im;\
1038  a22_im += cinv##22_31_im * reg##31_re;\
1039  a22_re += cinv##22_32_re * reg##32_re;\
1040  a22_re -= cinv##22_32_im * reg##32_im;\
1041  a22_im += cinv##22_32_re * reg##32_im;\
1042  a22_im += cinv##22_32_im * reg##32_re;\
1043  \
1044  a30_re += cinv##30_20_re * reg##20_re;\
1045  a30_re -= cinv##30_20_im * reg##20_im;\
1046  a30_im += cinv##30_20_re * reg##20_im;\
1047  a30_im += cinv##30_20_im * reg##20_re;\
1048  a30_re += cinv##30_21_re * reg##21_re;\
1049  a30_re -= cinv##30_21_im * reg##21_im;\
1050  a30_im += cinv##30_21_re * reg##21_im;\
1051  a30_im += cinv##30_21_im * reg##21_re;\
1052  a30_re += cinv##30_22_re * reg##22_re;\
1053  a30_re -= cinv##30_22_im * reg##22_im;\
1054  a30_im += cinv##30_22_re * reg##22_im;\
1055  a30_im += cinv##30_22_im * reg##22_re;\
1056  a30_re += cinv##30_30_re * reg##30_re;\
1057  a30_im += cinv##30_30_re * reg##30_im;\
1058  a30_re += cinv##30_31_re * reg##31_re;\
1059  a30_re -= cinv##30_31_im * reg##31_im;\
1060  a30_im += cinv##30_31_re * reg##31_im;\
1061  a30_im += cinv##30_31_im * reg##31_re;\
1062  a30_re += cinv##30_32_re * reg##32_re;\
1063  a30_re -= cinv##30_32_im * reg##32_im;\
1064  a30_im += cinv##30_32_re * reg##32_im;\
1065  a30_im += cinv##30_32_im * reg##32_re;\
1066  \
1067  a31_re += cinv##31_20_re * reg##20_re;\
1068  a31_re -= cinv##31_20_im * reg##20_im;\
1069  a31_im += cinv##31_20_re * reg##20_im;\
1070  a31_im += cinv##31_20_im * reg##20_re;\
1071  a31_re += cinv##31_21_re * reg##21_re;\
1072  a31_re -= cinv##31_21_im * reg##21_im;\
1073  a31_im += cinv##31_21_re * reg##21_im;\
1074  a31_im += cinv##31_21_im * reg##21_re;\
1075  a31_re += cinv##31_22_re * reg##22_re;\
1076  a31_re -= cinv##31_22_im * reg##22_im;\
1077  a31_im += cinv##31_22_re * reg##22_im;\
1078  a31_im += cinv##31_22_im * reg##22_re;\
1079  a31_re += cinv##31_30_re * reg##30_re;\
1080  a31_re -= cinv##31_30_im * reg##30_im;\
1081  a31_im += cinv##31_30_re * reg##30_im;\
1082  a31_im += cinv##31_30_im * reg##30_re;\
1083  a31_re += cinv##31_31_re * reg##31_re;\
1084  a31_im += cinv##31_31_re * reg##31_im;\
1085  a31_re += cinv##31_32_re * reg##32_re;\
1086  a31_re -= cinv##31_32_im * reg##32_im;\
1087  a31_im += cinv##31_32_re * reg##32_im;\
1088  a31_im += cinv##31_32_im * reg##32_re;\
1089  \
1090  a32_re += cinv##32_20_re * reg##20_re;\
1091  a32_re -= cinv##32_20_im * reg##20_im;\
1092  a32_im += cinv##32_20_re * reg##20_im;\
1093  a32_im += cinv##32_20_im * reg##20_re;\
1094  a32_re += cinv##32_21_re * reg##21_re;\
1095  a32_re -= cinv##32_21_im * reg##21_im;\
1096  a32_im += cinv##32_21_re * reg##21_im;\
1097  a32_im += cinv##32_21_im * reg##21_re;\
1098  a32_re += cinv##32_22_re * reg##22_re;\
1099  a32_re -= cinv##32_22_im * reg##22_im;\
1100  a32_im += cinv##32_22_re * reg##22_im;\
1101  a32_im += cinv##32_22_im * reg##22_re;\
1102  a32_re += cinv##32_30_re * reg##30_re;\
1103  a32_re -= cinv##32_30_im * reg##30_im;\
1104  a32_im += cinv##32_30_re * reg##30_im;\
1105  a32_im += cinv##32_30_im * reg##30_re;\
1106  a32_re += cinv##32_31_re * reg##31_re;\
1107  a32_re -= cinv##32_31_im * reg##31_im;\
1108  a32_im += cinv##32_31_re * reg##31_im;\
1109  a32_im += cinv##32_31_im * reg##31_re;\
1110  a32_re += cinv##32_32_re * reg##32_re;\
1111  a32_im += cinv##32_32_re * reg##32_im;\
1112  \
1113  /*store the result*/\
1114  reg##20_re = a20_re; reg##20_im = a20_im;\
1115  reg##21_re = a21_re; reg##21_im = a21_im;\
1116  reg##22_re = a22_re; reg##22_im = a22_im;\
1117  reg##30_re = a30_re; reg##30_im = a30_im;\
1118  reg##31_re = a31_re; reg##31_im = a31_im;\
1119  reg##32_re = a32_re; reg##32_im = a32_im;\
1120  \
1121 }\
1122 \
1123 /* change back from chiral basis*/\
1124 /* (note: required factor of 1/2 is included in clover term normalization)*/\
1125 {\
1126  spinorFloat a00_re = reg##10_re + reg##30_re;\
1127  spinorFloat a00_im = reg##10_im + reg##30_im;\
1128  spinorFloat a10_re = -reg##00_re - reg##20_re;\
1129  spinorFloat a10_im = -reg##00_im - reg##20_im;\
1130  spinorFloat a20_re = reg##10_re - reg##30_re;\
1131  spinorFloat a20_im = reg##10_im - reg##30_im;\
1132  spinorFloat a30_re = -reg##00_re + reg##20_re;\
1133  spinorFloat a30_im = -reg##00_im + reg##20_im;\
1134  \
1135  reg##00_re = a00_re*2.; reg##00_im = a00_im*2.;\
1136  reg##10_re = a10_re*2.; reg##10_im = a10_im*2.;\
1137  reg##20_re = a20_re*2.; reg##20_im = a20_im*2.;\
1138  reg##30_re = a30_re*2.; reg##30_im = a30_im*2.;\
1139 }\
1140 \
1141 {\
1142  spinorFloat a01_re = reg##11_re + reg##31_re;\
1143  spinorFloat a01_im = reg##11_im + reg##31_im;\
1144  spinorFloat a11_re = -reg##01_re - reg##21_re;\
1145  spinorFloat a11_im = -reg##01_im - reg##21_im;\
1146  spinorFloat a21_re = reg##11_re - reg##31_re;\
1147  spinorFloat a21_im = reg##11_im - reg##31_im;\
1148  spinorFloat a31_re = -reg##01_re + reg##21_re;\
1149  spinorFloat a31_im = -reg##01_im + reg##21_im;\
1150  \
1151  reg##01_re = a01_re*2.; reg##01_im = a01_im*2.;\
1152  reg##11_re = a11_re*2.; reg##11_im = a11_im*2.;\
1153  reg##21_re = a21_re*2.; reg##21_im = a21_im*2.;\
1154  reg##31_re = a31_re*2.; reg##31_im = a31_im*2.;\
1155 }\
1156 \
1157 {\
1158  spinorFloat a02_re = reg##12_re + reg##32_re;\
1159  spinorFloat a02_im = reg##12_im + reg##32_im;\
1160  spinorFloat a12_re = -reg##02_re - reg##22_re;\
1161  spinorFloat a12_im = -reg##02_im - reg##22_im;\
1162  spinorFloat a22_re = reg##12_re - reg##32_re;\
1163  spinorFloat a22_im = reg##12_im - reg##32_im;\
1164  spinorFloat a32_re = -reg##02_re + reg##22_re;\
1165  spinorFloat a32_im = -reg##02_im + reg##22_im;\
1166  \
1167  reg##02_re = a02_re*2.; reg##02_im = a02_im*2.;\
1168  reg##12_re = a12_re*2.; reg##12_im = a12_im*2.;\
1169  reg##22_re = a22_re*2.; reg##22_im = a22_im*2.;\
1170  reg##32_re = a32_re*2.; reg##32_im = a32_im*2.;\
1171 }\
1172 \
1173