QUDA  0.9.0
tmc_core.h
Go to the documentation of this file.
1 /* Some variables that will become handy later */
2 
3 #ifndef _VAR_INVERT_
4 #define _VAR_INVERT_
5 
6 #define tri5_re tri0_re
7 #define tri5_im tri0_im
8 #define tri9_re tri1_re
9 #define tri9_im tri1_im
10 #define tri13_re tri2_re
11 #define tri13_im tri2_im
12 #define tri14_re tri3_re
13 #define tri14_im tri3_im
14 #define tmp0 tri0_re
15 #define tmp1 tri0_im
16 #define tmp2 tri1_re
17 #define tmp3 tri1_im
18 #define tmp4 tri2_re
19 #define tmp5 tri2_im
20 #define v1_0_re tri3_re
21 #define v1_0_im tri3_im
22 #define v1_1_re tri4_re
23 #define v1_1_im tri4_im
24 #define v1_2_re tri6_re
25 #define v1_2_im tri6_im
26 #define v1_3_re tri7_re
27 #define v1_3_im tri7_im
28 #define v1_4_re tri8_re
29 #define v1_4_im tri8_im
30 #define v1_5_re tri10_re
31 #define v1_5_im tri10_im
32 #define sum_re tri11_re
33 #define sum_im tri11_im
34 
35 #endif
36 
37 #define CMPLX_MUL_RE(a,b)\
38 ((a##_re)*(b##_re) - (a##_im)*(b##_im))
39 
40 #define CMPLX_MUL_IM(a,b)\
41 ((a##_re)*(b##_im) + (a##_im)*(b##_re))
42 
43 #define CMPLX_MOD(a)\
44 ((a##_re)*(a##_re) + (a##_im)*(a##_im))
45 
46 
47 #define INVERT_CLOVER(c)\
48 \
49 /* Inverts the clover term, copy-paste from clover_invert.cu with minor modifications */ \
50 {\
51  /*Compute (T^2 + mu2) first, then invert (not optimized!):*/ \
52  spinorFloat d, tri0_re, tri0_im, tri1_re, tri1_im, tri2_re, tri2_im, tri3_re, tri3_im, tri4_re, tri4_im, tri6_re, tri6_im, tri7_re, tri7_im, tri8_re, tri8_im, tri10_re, tri10_im, tri11_re, tri11_im, tri12_re, tri12_im;\
53  \
54  tri0_re = (c##01_00_re)*(c##00_00_re) + (c##01_01_re)*(c##01_00_re) + CMPLX_MUL_RE(c##01_02, c##02_00) + CMPLX_MUL_RE(c##01_10, c##10_00) + CMPLX_MUL_RE(c##01_11, c##11_00) + CMPLX_MUL_RE(c##01_12, c##12_00); \
55  tri0_im = (c##01_00_im)*(c##00_00_re) + (c##01_01_re)*(c##01_00_im) + CMPLX_MUL_IM(c##01_02, c##02_00) + CMPLX_MUL_IM(c##01_10, c##10_00) + CMPLX_MUL_IM(c##01_11, c##11_00) + CMPLX_MUL_IM(c##01_12, c##12_00); \
56  \
57  tri1_re = (c##02_00_re)*(c##00_00_re) + (c##02_02_re)*(c##02_00_re) + CMPLX_MUL_RE(c##02_01, c##01_00) + CMPLX_MUL_RE(c##02_10, c##10_00) + CMPLX_MUL_RE(c##02_11, c##11_00) + CMPLX_MUL_RE(c##02_12, c##12_00); \
58  tri1_im = (c##02_00_im)*(c##00_00_re) + (c##02_02_re)*(c##02_00_im) + CMPLX_MUL_IM(c##02_01, c##01_00) + CMPLX_MUL_IM(c##02_10, c##10_00) + CMPLX_MUL_IM(c##02_11, c##11_00) + CMPLX_MUL_IM(c##02_12, c##12_00); \
59  \
60  tri3_re = (c##10_00_re)*(c##00_00_re) + (c##10_10_re)*(c##10_00_re) + CMPLX_MUL_RE(c##10_01, c##01_00) + CMPLX_MUL_RE(c##10_02, c##02_00) + CMPLX_MUL_RE(c##10_11, c##11_00) + CMPLX_MUL_RE(c##10_12, c##12_00); \
61  tri3_im = (c##10_00_im)*(c##00_00_re) + (c##10_10_re)*(c##10_00_im) + CMPLX_MUL_IM(c##10_01, c##01_00) + CMPLX_MUL_IM(c##10_02, c##02_00) + CMPLX_MUL_IM(c##10_11, c##11_00) + CMPLX_MUL_IM(c##10_12, c##12_00); \
62  \
63  tri6_re = (c##11_00_re)*(c##00_00_re) + (c##11_11_re)*(c##11_00_re) + CMPLX_MUL_RE(c##11_01, c##01_00) + CMPLX_MUL_RE(c##11_02, c##02_00) + CMPLX_MUL_RE(c##11_10, c##10_00) + CMPLX_MUL_RE(c##11_12, c##12_00); \
64  tri6_im = (c##11_00_im)*(c##00_00_re) + (c##11_11_re)*(c##11_00_im) + CMPLX_MUL_IM(c##11_01, c##01_00) + CMPLX_MUL_IM(c##11_02, c##02_00) + CMPLX_MUL_IM(c##11_10, c##10_00) + CMPLX_MUL_IM(c##11_12, c##12_00); \
65  \
66  tri10_re = (c##12_00_re)*(c##00_00_re) + (c##12_12_re)*(c##12_00_re) + CMPLX_MUL_RE(c##12_01, c##01_00) + CMPLX_MUL_RE(c##12_02, c##02_00) + CMPLX_MUL_RE(c##12_10, c##10_00) + CMPLX_MUL_RE(c##12_11, c##11_00);\
67  tri10_im = (c##12_00_im)*(c##00_00_re) + (c##12_12_re)*(c##12_00_im) + CMPLX_MUL_IM(c##12_01, c##01_00) + CMPLX_MUL_IM(c##12_02, c##02_00) + CMPLX_MUL_IM(c##12_10, c##10_00) + CMPLX_MUL_IM(c##12_11, c##11_00);\
68  \
69  d = a*a + 4.*((c##00_00_re)*(c##00_00_re) + CMPLX_MOD(c##01_00) + CMPLX_MOD(c##02_00) + CMPLX_MOD(c##10_00) + CMPLX_MOD(c##11_00) + CMPLX_MOD(c##12_00)); \
70  c##00_00_re = d; \
71  \
72  tri2_re = (c##02_01_re)*(c##01_01_re) + (c##02_02_re)*(c##02_01_re) + CMPLX_MUL_RE(c##02_00, c##00_01) + CMPLX_MUL_RE(c##02_10, c##10_01) + CMPLX_MUL_RE(c##02_11, c##11_01) + CMPLX_MUL_RE(c##02_12, c##12_01); \
73  tri2_im = (c##02_01_im)*(c##01_01_re) + (c##02_02_re)*(c##02_01_im) + CMPLX_MUL_IM(c##02_00, c##00_01) + CMPLX_MUL_IM(c##02_10, c##10_01) + CMPLX_MUL_IM(c##02_11, c##11_01) + CMPLX_MUL_IM(c##02_12, c##12_01); \
74  \
75  tri4_re = (c##10_01_re)*(c##01_01_re) + (c##10_10_re)*(c##10_01_re) + CMPLX_MUL_RE(c##10_00, c##00_01) + CMPLX_MUL_RE(c##10_02, c##02_01) + CMPLX_MUL_RE(c##10_11, c##11_01) + CMPLX_MUL_RE(c##10_12, c##12_01); \
76  tri4_im = (c##10_01_im)*(c##01_01_re) + (c##10_10_re)*(c##10_01_im) + CMPLX_MUL_IM(c##10_00, c##00_01) + CMPLX_MUL_IM(c##10_02, c##02_01) + CMPLX_MUL_IM(c##10_11, c##11_01) + CMPLX_MUL_IM(c##10_12, c##12_01); \
77  \
78  tri7_re = c##11_01_re*c##01_01_re + c##11_11_re*c##11_01_re + CMPLX_MUL_RE(c##11_00, c##00_01) + CMPLX_MUL_RE(c##11_02, c##02_01) + CMPLX_MUL_RE(c##11_10, c##10_01) + CMPLX_MUL_RE(c##11_12, c##12_01); \
79  tri7_im = c##11_01_im*c##01_01_re + c##11_11_re*c##11_01_im + CMPLX_MUL_IM(c##11_00, c##00_01) + CMPLX_MUL_IM(c##11_02, c##02_01) + CMPLX_MUL_IM(c##11_10, c##10_01) + CMPLX_MUL_IM(c##11_12, c##12_01); \
80  \
81  tri11_re = c##12_01_re*c##01_01_re + c##12_12_re*c##12_01_re + CMPLX_MUL_RE(c##12_00, c##00_01) + CMPLX_MUL_RE(c##12_02, c##02_01) + CMPLX_MUL_RE(c##12_10, c##10_01) + CMPLX_MUL_RE(c##12_11, c##11_01); \
82  tri11_im = c##12_01_im*c##01_01_re + c##12_12_re*c##12_01_im + CMPLX_MUL_IM(c##12_00, c##00_01) + CMPLX_MUL_IM(c##12_02, c##02_01) + CMPLX_MUL_IM(c##12_10, c##10_01) + CMPLX_MUL_IM(c##12_11, c##11_01); \
83  \
84  d = a*a + 4.*(c##01_01_re*c##01_01_re + CMPLX_MOD(c##00_01) + CMPLX_MOD(c##02_01) + CMPLX_MOD(c##10_01) + CMPLX_MOD(c##11_01) + CMPLX_MOD(c##12_01)); \
85  c##01_01_re = d; \
86  c##01_00_re = 4.*tri0_re; /* We freed tri0, so we can reuse it as tri5 to save memory */ \
87  c##01_00_im = 4.*tri0_im; \
88  \
89  tri5_re = c##10_02_re*c##02_02_re + c##10_10_re*c##10_02_re + CMPLX_MUL_RE(c##10_00, c##00_02) + CMPLX_MUL_RE(c##10_01, c##01_02) + CMPLX_MUL_RE(c##10_11, c##11_02) + CMPLX_MUL_RE(c##10_12, c##12_02); \
90  tri5_im = c##10_02_im*c##02_02_re + c##10_10_re*c##10_02_im + CMPLX_MUL_IM(c##10_00, c##00_02) + CMPLX_MUL_IM(c##10_01, c##01_02) + CMPLX_MUL_IM(c##10_11, c##11_02) + CMPLX_MUL_IM(c##10_12, c##12_02); \
91  \
92  tri8_re = c##11_02_re*c##02_02_re + c##11_11_re*c##11_02_re + CMPLX_MUL_RE(c##11_00, c##00_02) + CMPLX_MUL_RE(c##11_01, c##01_02) + CMPLX_MUL_RE(c##11_10, c##10_02) + CMPLX_MUL_RE(c##11_12, c##12_02); \
93  tri8_im = c##11_02_im*c##02_02_re + c##11_11_re*c##11_02_im + CMPLX_MUL_IM(c##11_00, c##00_02) + CMPLX_MUL_IM(c##11_01, c##01_02) + CMPLX_MUL_IM(c##11_10, c##10_02) + CMPLX_MUL_IM(c##11_12, c##12_02); \
94  \
95  tri12_re = c##12_02_re*c##02_02_re + c##12_12_re*c##12_02_re + CMPLX_MUL_RE(c##12_00, c##00_02) + CMPLX_MUL_RE(c##12_01, c##01_02) + CMPLX_MUL_RE(c##12_10, c##10_02) + CMPLX_MUL_RE(c##12_11, c##11_02); \
96  tri12_im = c##12_02_im*c##02_02_re + c##12_12_re*c##12_02_im + CMPLX_MUL_IM(c##12_00, c##00_02) + CMPLX_MUL_IM(c##12_01, c##01_02) + CMPLX_MUL_IM(c##12_10, c##10_02) + CMPLX_MUL_IM(c##12_11, c##11_02); \
97  \
98  d = a*a + 4.*(c##02_02_re*c##02_02_re + CMPLX_MOD(c##00_02) + CMPLX_MOD(c##01_02) + CMPLX_MOD(c##10_02) + CMPLX_MOD(c##11_02) + CMPLX_MOD(c##12_02)); \
99  c##02_02_re = d; \
100  c##02_00_re = 4.*tri1_re; /* We freed tri1, so we can reuse it as tri9 to save memory */ \
101  c##02_00_im = 4.*tri1_im; \
102  c##02_01_re = 4.*tri2_re; /* We freed tri2, so we can reuse it as tri13 to save memory */ \
103  c##02_01_im = 4.*tri2_im; \
104  \
105  tri9_re = c##11_10_re*c##10_10_re + c##11_11_re*c##11_10_re + CMPLX_MUL_RE(c##11_00, c##00_10) + CMPLX_MUL_RE(c##11_01, c##01_10) + CMPLX_MUL_RE(c##11_02, c##02_10) + CMPLX_MUL_RE(c##11_12, c##12_10); \
106  tri9_im = c##11_10_im*c##10_10_re + c##11_11_re*c##11_10_im + CMPLX_MUL_IM(c##11_00, c##00_10) + CMPLX_MUL_IM(c##11_01, c##01_10) + CMPLX_MUL_IM(c##11_02, c##02_10) + CMPLX_MUL_IM(c##11_12, c##12_10); \
107  \
108  tri13_re = c##12_10_re*c##10_10_re + c##12_12_re*c##12_10_re + CMPLX_MUL_RE(c##12_00, c##00_10) + CMPLX_MUL_RE(c##12_01, c##01_10) + CMPLX_MUL_RE(c##12_02, c##02_10) + CMPLX_MUL_RE(c##12_11, c##11_10); \
109  tri13_im = c##12_10_im*c##10_10_re + c##12_12_re*c##12_10_im + CMPLX_MUL_IM(c##12_00, c##00_10) + CMPLX_MUL_IM(c##12_01, c##01_10) + CMPLX_MUL_IM(c##12_02, c##02_10) + CMPLX_MUL_IM(c##12_11, c##11_10); \
110  \
111  d = a*a + 4.*(c##10_10_re*c##10_10_re + CMPLX_MOD(c##00_10) + CMPLX_MOD(c##01_10) + CMPLX_MOD(c##02_10) + CMPLX_MOD(c##11_10) + CMPLX_MOD(c##12_10)); \
112  c##10_10_re = d; \
113  c##10_00_re = 4.*tri3_re; /* We freed tri3, so we can reuse it as tri14 to save memory */ \
114  c##10_00_im = 4.*tri3_im; \
115  \
116  tri14_re = c##12_11_re*c##11_11_re + c##12_12_re*c##12_11_re + CMPLX_MUL_RE(c##12_00, c##00_11) + CMPLX_MUL_RE(c##12_01, c##01_11) + CMPLX_MUL_RE(c##12_02, c##02_11) + CMPLX_MUL_RE(c##12_10, c##10_11); \
117  tri14_im = c##12_11_im*c##11_11_re + c##12_12_re*c##12_11_im + CMPLX_MUL_IM(c##12_00, c##00_11) + CMPLX_MUL_IM(c##12_01, c##01_11) + CMPLX_MUL_IM(c##12_02, c##02_11) + CMPLX_MUL_IM(c##12_10, c##10_11); \
118  d = a*a + 4.*(c##11_11_re*c##11_11_re + CMPLX_MOD(c##00_11) + CMPLX_MOD(c##01_11) + CMPLX_MOD(c##02_11) + CMPLX_MOD(c##10_11) + CMPLX_MOD(c##12_11)); \
119  c##11_11_re = d; \
120  d = a*a + 4.*(c##12_12_re*c##12_12_re + CMPLX_MOD(c##00_12) + CMPLX_MOD(c##01_12) + CMPLX_MOD(c##02_12) + CMPLX_MOD(c##10_12) + CMPLX_MOD(c##11_12)); \
121  c##12_12_re = d; \
122  c##12_11_re = 4.*tri14_re; \
123  c##12_11_im = 4.*tri14_im; \
124  c##12_10_re = 4.*tri13_re; \
125  c##12_10_im = 4.*tri13_im; \
126  c##12_02_re = 4.*tri12_re; \
127  c##12_02_im = 4.*tri12_im; \
128  c##12_01_re = 4.*tri11_re; \
129  c##12_01_im = 4.*tri11_im; \
130  c##12_00_re = 4.*tri10_re; \
131  c##12_00_im = 4.*tri10_im; \
132  c##11_10_re = 4.*tri9_re; \
133  c##11_10_im = 4.*tri9_im; \
134  c##11_02_re = 4.*tri8_re; \
135  c##11_02_im = 4.*tri8_im; \
136  c##11_01_re = 4.*tri7_re; \
137  c##11_01_im = 4.*tri7_im; \
138  c##11_00_re = 4.*tri6_re; \
139  c##11_00_im = 4.*tri6_im; \
140  c##10_02_re = 4.*tri5_re; \
141  c##10_02_im = 4.*tri5_im; \
142  c##10_01_re = 4.*tri4_re; \
143  c##10_01_im = 4.*tri4_im; \
144  \
145  /* INVERSION STARTS */ \
146  \
147  /* j = 0 */ \
148  \
149  c##00_00_re = sqrt(c##00_00_re); \
150  tmp0 = 1. / c##00_00_re; \
151  c##01_00_re *= tmp0; \
152  c##01_00_im *= tmp0; \
153  c##02_00_re *= tmp0; \
154  c##02_00_im *= tmp0; \
155  c##10_00_re *= tmp0; \
156  c##10_00_im *= tmp0; \
157  c##11_00_re *= tmp0; \
158  c##11_00_im *= tmp0; \
159  c##12_00_re *= tmp0; \
160  c##12_00_im *= tmp0; \
161  \
162  /* k = 1 kj = 0 */ \
163  c##01_01_re -= CMPLX_MOD(c##01_00); \
164  \
165  /* l = 2...5 kj = 0 lj = 1,3,6,10 lk = 2,4,7,11*/ \
166  c##02_01_re -= CMPLX_MUL_RE(c##02_00, c##00_01); \
167  c##02_01_im -= CMPLX_MUL_IM(c##02_00, c##00_01); \
168  c##10_01_re -= CMPLX_MUL_RE(c##10_00, c##00_01); \
169  c##10_01_im -= CMPLX_MUL_IM(c##10_00, c##00_01); \
170  c##11_01_re -= CMPLX_MUL_RE(c##11_00, c##00_01); \
171  c##11_01_im -= CMPLX_MUL_IM(c##11_00, c##00_01); \
172  c##12_01_re -= CMPLX_MUL_RE(c##12_00, c##00_01); \
173  c##12_01_im -= CMPLX_MUL_IM(c##12_00, c##00_01); \
174  \
175  /* k = 2 kj = 1 */ \
176  c##02_02_re -= CMPLX_MOD(c##02_00); \
177  \
178  /* l = 3...5 kj = 1 lj = 3,6,10 lk = 5,8,12*/ \
179  c##10_02_re -= CMPLX_MUL_RE(c##10_00, c##00_02); \
180  c##10_02_im -= CMPLX_MUL_IM(c##10_00, c##00_02); \
181  c##11_02_re -= CMPLX_MUL_RE(c##11_00, c##00_02); \
182  c##11_02_im -= CMPLX_MUL_IM(c##11_00, c##00_02); \
183  c##12_02_re -= CMPLX_MUL_RE(c##12_00, c##00_02); \
184  c##12_02_im -= CMPLX_MUL_IM(c##12_00, c##00_02); \
185  \
186  /* k = 3 kj = 3 */ \
187  c##10_10_re -= CMPLX_MOD(c##10_00); \
188  \
189  /* l = 4 kj = 3 lj = 6,10 lk = 9,13*/ \
190  c##11_10_re -= CMPLX_MUL_RE(c##11_00, c##00_10); \
191  c##11_10_im -= CMPLX_MUL_IM(c##11_00, c##00_10); \
192  c##12_10_re -= CMPLX_MUL_RE(c##12_00, c##00_10); \
193  c##12_10_im -= CMPLX_MUL_IM(c##12_00, c##00_10); \
194  \
195  /* k = 4 kj = 6 */ \
196  c##11_11_re -= CMPLX_MOD(c##11_00); \
197  \
198  /* l = 5 kj = 6 lj = 10 lk = 14*/ \
199  c##12_11_re -= CMPLX_MUL_RE(c##12_00, c##00_11); \
200  c##12_11_im -= CMPLX_MUL_IM(c##12_00, c##00_11); \
201  \
202  /* k = 5 kj = 10 */ \
203  c##12_12_re -= CMPLX_MOD(c##12_00); \
204  \
205  /* j = 1 */ \
206  \
207  c##01_01_re = sqrt(c##01_01_re); \
208  tmp1 = 1. / c##01_01_re; \
209  c##02_01_re *= tmp1; \
210  c##02_01_im *= tmp1; \
211  c##10_01_re *= tmp1; \
212  c##10_01_im *= tmp1; \
213  c##11_01_re *= tmp1; \
214  c##11_01_im *= tmp1; \
215  c##12_01_re *= tmp1; \
216  c##12_01_im *= tmp1; \
217  \
218  /* k = 2 kj = 2 */ \
219  c##02_02_re -= CMPLX_MOD(c##02_01); \
220  \
221  /* l = 3...5 kj = 2 lj = 4,7,11 lk = 5,8,12*/ \
222  c##10_02_re -= CMPLX_MUL_RE(c##10_01, c##01_02); \
223  c##10_02_im -= CMPLX_MUL_IM(c##10_01, c##01_02); \
224  c##11_02_re -= CMPLX_MUL_RE(c##11_01, c##01_02); \
225  c##11_02_im -= CMPLX_MUL_IM(c##11_01, c##01_02); \
226  c##12_02_re -= CMPLX_MUL_RE(c##12_01, c##01_02); \
227  c##12_02_im -= CMPLX_MUL_IM(c##12_01, c##01_02); \
228  \
229  /* k = 3 kj = 4 */ \
230  c##10_10_re -= CMPLX_MOD(c##10_01); \
231  \
232  /* l = 4 kj = 4 lj = 7,11 lk = 9,13*/ \
233  c##11_10_re -= CMPLX_MUL_RE(c##11_01, c##01_10); \
234  c##11_10_im -= CMPLX_MUL_IM(c##11_01, c##01_10); \
235  c##12_10_re -= CMPLX_MUL_RE(c##12_01, c##01_10); \
236  c##12_10_im -= CMPLX_MUL_IM(c##12_01, c##01_10); \
237  \
238  /* k = 4 kj = 7 */ \
239  c##11_11_re -= CMPLX_MOD(c##11_01); \
240  \
241  /* l = 5 kj = 7 lj = 11 lk = 14*/ \
242  c##12_11_re -= CMPLX_MUL_RE(c##12_01, c##01_11); \
243  c##12_11_im -= CMPLX_MUL_IM(c##12_01, c##01_11); \
244  \
245  /* k = 5 kj = 11 */ \
246  c##12_12_re -= CMPLX_MOD(c##12_01); \
247  \
248  /* j = 2 */ \
249  \
250  c##02_02_re = sqrt(c##02_02_re); \
251  tmp2 = 1. / c##02_02_re; \
252  c##10_02_re *= tmp2; \
253  c##10_02_im *= tmp2; \
254  c##11_02_re *= tmp2; \
255  c##11_02_im *= tmp2; \
256  c##12_02_re *= tmp2; \
257  c##12_02_im *= tmp2; \
258  \
259  /* k = 3 kj = 5 */ \
260  c##10_10_re -= CMPLX_MOD(c##10_02); \
261  \
262  /* l = 4 kj = 5 lj = 8,12 lk = 9,13*/ \
263  c##11_10_re -= CMPLX_MUL_RE(c##11_02, c##02_10); \
264  c##11_10_im -= CMPLX_MUL_IM(c##11_02, c##02_10); \
265  c##12_10_re -= CMPLX_MUL_RE(c##12_02, c##02_10); \
266  c##12_10_im -= CMPLX_MUL_IM(c##12_02, c##02_10); \
267  \
268  /* k = 4 kj = 8 */ \
269  c##11_11_re -= CMPLX_MOD(c##11_02); \
270  \
271  /* l = 5 kj = 8 lj = 12 lk = 14*/ \
272  c##12_11_re -= CMPLX_MUL_RE(c##12_02, c##02_11); \
273  c##12_11_im -= CMPLX_MUL_IM(c##12_02, c##02_11); \
274  \
275  /* k = 5 kj = 12 */ \
276  c##12_12_re -= CMPLX_MOD(c##12_02); \
277  \
278  /* j = 3 */ \
279  \
280  c##10_10_re = sqrt(c##10_10_re); \
281  tmp3 = 1. / c##10_10_re; \
282  c##11_10_re *= tmp3; \
283  c##11_10_im *= tmp3; \
284  c##12_10_re *= tmp3; \
285  c##12_10_im *= tmp3; \
286  \
287  /* k = 4 kj = 9 */ \
288  c##11_11_re -= CMPLX_MOD(c##11_10); \
289  \
290  /* l = 5 kj = 9 lj = 13 lk = 14*/ \
291  c##12_11_re -= CMPLX_MUL_RE(c##12_10, c##10_11); \
292  c##12_11_im -= CMPLX_MUL_IM(c##12_10, c##10_11); \
293  \
294  /* k = 5 kj = 13 */ \
295  c##12_12_re -= CMPLX_MOD(c##12_10); \
296  \
297  /* j = 4 */ \
298  \
299  c##11_11_re = sqrt(c##11_11_re); \
300  tmp4 = 1. / c##11_11_re; \
301  c##12_11_re *= tmp4; \
302  c##12_11_im *= tmp4; \
303  \
304  /* k = 5 kj = 14 */ \
305  c##12_12_re -= CMPLX_MOD(c##12_11); \
306  \
307  /* j = 5 */ \
308  \
309  c##12_12_re = sqrt(c##12_12_re); \
310  tmp5 = 1. / c##12_12_re; \
311  \
312  /* NO INFO YET ON TR(LOG A) FOR TM-CLOVER */ \
313  /* Accumulate trlogA */ \
314  /* for (int j=0;j<6;j++) trlogA += (double)2.0*log((double)(diag[j])); */ \
315  \
316  /* Forwards substitute */ \
317  \
318  /* k = 0 */ \
319  v1_0_re = tmp0; \
320  v1_0_im = 0.; \
321  \
322  /* l = 1 */ \
323  sum_re = 0.; \
324  sum_im = 0.; \
325  /* j = 0 */ \
326  sum_re -= c##01_00_re*v1_0_re; \
327  sum_im -= c##01_00_im*v1_0_re; \
328  \
329  v1_1_re = sum_re*tmp1; \
330  v1_1_im = sum_im*tmp1; \
331  \
332  /* l = 2 */ \
333  sum_re = 0.; \
334  sum_im = 0.; \
335  /* j = 0..1 */ \
336  sum_re -= CMPLX_MUL_RE(c##02_00, v1_0); \
337  sum_im -= CMPLX_MUL_IM(c##02_00, v1_0); \
338  sum_re -= CMPLX_MUL_RE(c##02_01, v1_1); \
339  sum_im -= CMPLX_MUL_IM(c##02_01, v1_1); \
340  \
341  v1_2_re = sum_re*tmp2; \
342  v1_2_im = sum_im*tmp2; \
343  \
344  /* l = 3 */ \
345  sum_re = 0.; \
346  sum_im = 0.; \
347  /* j = 0..2 */ \
348  sum_re -= CMPLX_MUL_RE(c##10_00, v1_0); \
349  sum_im -= CMPLX_MUL_IM(c##10_00, v1_0); \
350  sum_re -= CMPLX_MUL_RE(c##10_01, v1_1); \
351  sum_im -= CMPLX_MUL_IM(c##10_01, v1_1); \
352  sum_re -= CMPLX_MUL_RE(c##10_02, v1_2); \
353  sum_im -= CMPLX_MUL_IM(c##10_02, v1_2); \
354  \
355  v1_3_re = sum_re*tmp3; \
356  v1_3_im = sum_im*tmp3; \
357  \
358  /* l = 4 */ \
359  sum_re = 0.; \
360  sum_im = 0.; \
361  /* j = 0..3 */ \
362  sum_re -= CMPLX_MUL_RE(c##11_00, v1_0); \
363  sum_im -= CMPLX_MUL_IM(c##11_00, v1_0); \
364  sum_re -= CMPLX_MUL_RE(c##11_01, v1_1); \
365  sum_im -= CMPLX_MUL_IM(c##11_01, v1_1); \
366  sum_re -= CMPLX_MUL_RE(c##11_02, v1_2); \
367  sum_im -= CMPLX_MUL_IM(c##11_02, v1_2); \
368  sum_re -= CMPLX_MUL_RE(c##11_10, v1_3); \
369  sum_im -= CMPLX_MUL_IM(c##11_10, v1_3); \
370  \
371  v1_4_re = sum_re*tmp4; \
372  v1_4_im = sum_im*tmp4; \
373  \
374  /* l = 5 */ \
375  sum_re = 0.; \
376  sum_im = 0.; \
377  /* j = 0..4 */ \
378  sum_re -= CMPLX_MUL_RE(c##12_00, v1_0); \
379  sum_im -= CMPLX_MUL_IM(c##12_00, v1_0); \
380  sum_re -= CMPLX_MUL_RE(c##12_01, v1_1); \
381  sum_im -= CMPLX_MUL_IM(c##12_01, v1_1); \
382  sum_re -= CMPLX_MUL_RE(c##12_02, v1_2); \
383  sum_im -= CMPLX_MUL_IM(c##12_02, v1_2); \
384  sum_re -= CMPLX_MUL_RE(c##12_10, v1_3); \
385  sum_im -= CMPLX_MUL_IM(c##12_10, v1_3); \
386  sum_re -= CMPLX_MUL_RE(c##12_11, v1_4); \
387  sum_im -= CMPLX_MUL_IM(c##12_11, v1_4); \
388  \
389  v1_5_re = sum_re*tmp5*tmp5; \
390  v1_5_im = sum_im*tmp5*tmp5; \
391  \
392  /* Backwards substitute */ \
393  \
394  /* l = 4 */ \
395  sum_re = v1_4_re; \
396  sum_im = v1_4_im; \
397  /* j = 5 */ \
398  sum_re -= CMPLX_MUL_RE(c##11_12, v1_5); \
399  sum_im -= CMPLX_MUL_IM(c##11_12, v1_5); \
400  \
401  v1_4_re = sum_re*tmp4; \
402  v1_4_im = sum_im*tmp4; \
403  \
404  /* l = 3 */ \
405  sum_re = v1_3_re; \
406  sum_im = v1_3_im; \
407  /* j = 4..5 */ \
408  sum_re -= CMPLX_MUL_RE(c##10_11, v1_4); \
409  sum_im -= CMPLX_MUL_IM(c##10_11, v1_4); \
410  sum_re -= CMPLX_MUL_RE(c##10_12, v1_5); \
411  sum_im -= CMPLX_MUL_IM(c##10_12, v1_5); \
412  \
413  v1_3_re = sum_re*tmp3; \
414  v1_3_im = sum_im*tmp3; \
415  \
416  /* l = 2 */ \
417  sum_re = v1_2_re; \
418  sum_im = v1_2_im; \
419  /* j = 3..5 */ \
420  sum_re -= CMPLX_MUL_RE(c##02_10, v1_3); \
421  sum_im -= CMPLX_MUL_IM(c##02_10, v1_3); \
422  sum_re -= CMPLX_MUL_RE(c##02_11, v1_4); \
423  sum_im -= CMPLX_MUL_IM(c##02_11, v1_4); \
424  sum_re -= CMPLX_MUL_RE(c##02_12, v1_5); \
425  sum_im -= CMPLX_MUL_IM(c##02_12, v1_5); \
426  \
427  v1_2_re = sum_re*tmp2; \
428  v1_2_im = sum_im*tmp2; \
429  \
430  /* l = 1 */ \
431  sum_re = v1_1_re; \
432  sum_im = v1_1_im; \
433  /* j = 2..5 */ \
434  sum_re -= CMPLX_MUL_RE(c##01_02, v1_2); \
435  sum_im -= CMPLX_MUL_IM(c##01_02, v1_2); \
436  sum_re -= CMPLX_MUL_RE(c##01_10, v1_3); \
437  sum_im -= CMPLX_MUL_IM(c##01_10, v1_3); \
438  sum_re -= CMPLX_MUL_RE(c##01_11, v1_4); \
439  sum_im -= CMPLX_MUL_IM(c##01_11, v1_4); \
440  sum_re -= CMPLX_MUL_RE(c##01_12, v1_5); \
441  sum_im -= CMPLX_MUL_IM(c##01_12, v1_5); \
442  \
443  v1_1_re = sum_re*tmp1; \
444  v1_1_im = sum_im*tmp1; \
445  \
446  /* l = 0 */ \
447  sum_re = v1_0_re; \
448  sum_im = v1_0_im; \
449  /* j = 1..5 */ \
450  sum_re -= CMPLX_MUL_RE(c##00_01, v1_1); \
451  sum_im -= CMPLX_MUL_IM(c##00_01, v1_1); \
452  sum_re -= CMPLX_MUL_RE(c##00_02, v1_2); \
453  sum_im -= CMPLX_MUL_IM(c##00_02, v1_2); \
454  sum_re -= CMPLX_MUL_RE(c##00_10, v1_3); \
455  sum_im -= CMPLX_MUL_IM(c##00_10, v1_3); \
456  sum_re -= CMPLX_MUL_RE(c##00_11, v1_4); \
457  sum_im -= CMPLX_MUL_IM(c##00_11, v1_4); \
458  sum_re -= CMPLX_MUL_RE(c##00_12, v1_5); \
459  sum_im -= CMPLX_MUL_IM(c##00_12, v1_5); \
460  \
461  v1_0_re = sum_re*tmp0; \
462  v1_0_im = sum_im*tmp0; \
463  \
464  c##00_00_re = .5*v1_0_re; \
465  c##01_00_re = .5*v1_1_re; \
466  c##01_00_im = .5*v1_1_im; \
467  c##02_00_re = .5*v1_2_re; \
468  c##02_00_im = .5*v1_2_im; \
469  c##10_00_re = .5*v1_3_re; \
470  c##10_00_im = .5*v1_3_im; \
471  c##11_00_re = .5*v1_4_re; \
472  c##11_00_im = .5*v1_4_im; \
473  c##12_00_re = .5*v1_5_re; \
474  c##12_00_im = .5*v1_5_im; \
475  \
476  \
477  /* k = 1 */ \
478  v1_0_re = 0.; \
479  v1_0_im = 0.; \
480  v1_1_re = tmp1; \
481  v1_1_im = 0.; \
482  \
483  /* l = 2 */ \
484  sum_re = 0.; \
485  sum_im = 0.; \
486  /* j = 1 */ \
487  sum_re -= c##02_01_re*v1_1_re; \
488  sum_im -= c##02_01_im*v1_1_re; \
489  \
490  v1_2_re = sum_re*tmp2; \
491  v1_2_im = sum_im*tmp2; \
492  \
493  /* l = 3 */ \
494  sum_re = 0.; \
495  sum_im = 0.; \
496  /* j = 1..2 */ \
497  sum_re -= CMPLX_MUL_RE(c##10_01, v1_1); \
498  sum_im -= CMPLX_MUL_IM(c##10_01, v1_1); \
499  sum_re -= CMPLX_MUL_RE(c##10_02, v1_2); \
500  sum_im -= CMPLX_MUL_IM(c##10_02, v1_2); \
501  \
502  v1_3_re = sum_re*tmp3; \
503  v1_3_im = sum_im*tmp3; \
504  \
505  /* l = 4 */ \
506  sum_re = 0.; \
507  sum_im = 0.; \
508  /* j = 1..3 */ \
509  sum_re -= CMPLX_MUL_RE(c##11_01, v1_1); \
510  sum_im -= CMPLX_MUL_IM(c##11_01, v1_1); \
511  sum_re -= CMPLX_MUL_RE(c##11_02, v1_2); \
512  sum_im -= CMPLX_MUL_IM(c##11_02, v1_2); \
513  sum_re -= CMPLX_MUL_RE(c##11_10, v1_3); \
514  sum_im -= CMPLX_MUL_IM(c##11_10, v1_3); \
515  \
516  v1_4_re = sum_re*tmp4; \
517  v1_4_im = sum_im*tmp4; \
518  \
519  /* l = 5 */ \
520  sum_re = 0.; \
521  sum_im = 0.; \
522  /* j = 1..4 */ \
523  sum_re -= CMPLX_MUL_RE(c##12_01, v1_1); \
524  sum_im -= CMPLX_MUL_IM(c##12_01, v1_1); \
525  sum_re -= CMPLX_MUL_RE(c##12_02, v1_2); \
526  sum_im -= CMPLX_MUL_IM(c##12_02, v1_2); \
527  sum_re -= CMPLX_MUL_RE(c##12_10, v1_3); \
528  sum_im -= CMPLX_MUL_IM(c##12_10, v1_3); \
529  sum_re -= CMPLX_MUL_RE(c##12_11, v1_4); \
530  sum_im -= CMPLX_MUL_IM(c##12_11, v1_4); \
531  \
532  v1_5_re = sum_re*tmp5*tmp5; \
533  v1_5_im = sum_im*tmp5*tmp5; \
534  \
535  /* Backwards substitute */ \
536  \
537  /* l = 4 */ \
538  sum_re = v1_4_re; \
539  sum_im = v1_4_im; \
540  /* j = 5 */ \
541  sum_re -= CMPLX_MUL_RE(c##11_12, v1_5); \
542  sum_im -= CMPLX_MUL_IM(c##11_12, v1_5); \
543  \
544  v1_4_re = sum_re*tmp4; \
545  v1_4_im = sum_im*tmp4; \
546  \
547  /* l = 3 */ \
548  sum_re = v1_3_re; \
549  sum_im = v1_3_im; \
550  /* j = 4..5 */ \
551  sum_re -= CMPLX_MUL_RE(c##10_11, v1_4); \
552  sum_im -= CMPLX_MUL_IM(c##10_11, v1_4); \
553  sum_re -= CMPLX_MUL_RE(c##10_12, v1_5); \
554  sum_im -= CMPLX_MUL_IM(c##10_12, v1_5); \
555  \
556  v1_3_re = sum_re*tmp3; \
557  v1_3_im = sum_im*tmp3; \
558  \
559  /* l = 2 */ \
560  sum_re = v1_2_re; \
561  sum_im = v1_2_im; \
562  /* j = 3..5 */ \
563  sum_re -= CMPLX_MUL_RE(c##02_10, v1_3); \
564  sum_im -= CMPLX_MUL_IM(c##02_10, v1_3); \
565  sum_re -= CMPLX_MUL_RE(c##02_11, v1_4); \
566  sum_im -= CMPLX_MUL_IM(c##02_11, v1_4); \
567  sum_re -= CMPLX_MUL_RE(c##02_12, v1_5); \
568  sum_im -= CMPLX_MUL_IM(c##02_12, v1_5); \
569  \
570  v1_2_re = sum_re*tmp2; \
571  v1_2_im = sum_im*tmp2; \
572  \
573  /* l = 1 */ \
574  sum_re = v1_1_re; \
575  sum_im = v1_1_im; \
576  /* j = 2..5 */ \
577  sum_re -= CMPLX_MUL_RE(c##01_02, v1_2); \
578  sum_im -= CMPLX_MUL_IM(c##01_02, v1_2); \
579  sum_re -= CMPLX_MUL_RE(c##01_10, v1_3); \
580  sum_im -= CMPLX_MUL_IM(c##01_10, v1_3); \
581  sum_re -= CMPLX_MUL_RE(c##01_11, v1_4); \
582  sum_im -= CMPLX_MUL_IM(c##01_11, v1_4); \
583  sum_re -= CMPLX_MUL_RE(c##01_12, v1_5); \
584  sum_im -= CMPLX_MUL_IM(c##01_12, v1_5); \
585  \
586  v1_1_re = sum_re*tmp1; \
587  v1_1_im = sum_im*tmp1; \
588  \
589  c##01_01_re = .5*v1_1_re; \
590  c##02_01_re = .5*v1_2_re; \
591  c##02_01_im = .5*v1_2_im; \
592  c##10_01_re = .5*v1_3_re; \
593  c##10_01_im = .5*v1_3_im; \
594  c##11_01_re = .5*v1_4_re; \
595  c##11_01_im = .5*v1_4_im; \
596  c##12_01_re = .5*v1_5_re; \
597  c##12_01_im = .5*v1_5_im; \
598  \
599  \
600  /* k = 2 */ \
601  v1_0_re = 0.; \
602  v1_0_im = 0.; \
603  v1_1_re = 0.; \
604  v1_1_im = 0.; \
605  v1_2_re = tmp2; \
606  v1_2_im = 0.; \
607  \
608  /* l = 3 */ \
609  sum_re = 0.; \
610  sum_im = 0.; \
611  /* j = 2 */ \
612  sum_re -= c##10_02_re*v1_2_re; \
613  sum_im -= c##10_02_im*v1_2_re; \
614  \
615  v1_3_re = sum_re*tmp3; \
616  v1_3_im = sum_im*tmp3; \
617  \
618  /* l = 4 */ \
619  sum_re = 0.; \
620  sum_im = 0.; \
621  /* j = 2..3 */ \
622  sum_re -= CMPLX_MUL_RE(c##11_02, v1_2); \
623  sum_im -= CMPLX_MUL_IM(c##11_02, v1_2); \
624  sum_re -= CMPLX_MUL_RE(c##11_10, v1_3); \
625  sum_im -= CMPLX_MUL_IM(c##11_10, v1_3); \
626  \
627  v1_4_re = sum_re*tmp4; \
628  v1_4_im = sum_im*tmp4; \
629  \
630  /* l = 5 */ \
631  sum_re = 0.; \
632  sum_im = 0.; \
633  /* j = 2..4 */ \
634  sum_re -= CMPLX_MUL_RE(c##12_02, v1_2); \
635  sum_im -= CMPLX_MUL_IM(c##12_02, v1_2); \
636  sum_re -= CMPLX_MUL_RE(c##12_10, v1_3); \
637  sum_im -= CMPLX_MUL_IM(c##12_10, v1_3); \
638  sum_re -= CMPLX_MUL_RE(c##12_11, v1_4); \
639  sum_im -= CMPLX_MUL_IM(c##12_11, v1_4); \
640  \
641  v1_5_re = sum_re*tmp5*tmp5; \
642  v1_5_im = sum_im*tmp5*tmp5; \
643  \
644  /* Backwards substitute */ \
645  \
646  /* l = 4 */ \
647  sum_re = v1_4_re; \
648  sum_im = v1_4_im; \
649  /* j = 5 */ \
650  sum_re -= CMPLX_MUL_RE(c##11_12, v1_5); \
651  sum_im -= CMPLX_MUL_IM(c##11_12, v1_5); \
652  \
653  v1_4_re = sum_re*tmp4; \
654  v1_4_im = sum_im*tmp4; \
655  \
656  /* l = 3 */ \
657  sum_re = v1_3_re; \
658  sum_im = v1_3_im; \
659  /* j = 4..5 */ \
660  sum_re -= CMPLX_MUL_RE(c##10_11, v1_4); \
661  sum_im -= CMPLX_MUL_IM(c##10_11, v1_4); \
662  sum_re -= CMPLX_MUL_RE(c##10_12, v1_5); \
663  sum_im -= CMPLX_MUL_IM(c##10_12, v1_5); \
664  \
665  v1_3_re = sum_re*tmp3; \
666  v1_3_im = sum_im*tmp3; \
667  \
668  /* l = 2 */ \
669  sum_re = v1_2_re; \
670  sum_im = v1_2_im; \
671  /* j = 3..5 */ \
672  sum_re -= CMPLX_MUL_RE(c##02_10, v1_3); /*AQUI PODEMOS OPTIMIZAR LA PARTE IMAGINARIA*/ \
673  sum_im -= CMPLX_MUL_IM(c##02_10, v1_3); \
674  sum_re -= CMPLX_MUL_RE(c##02_11, v1_4); \
675  sum_im -= CMPLX_MUL_IM(c##02_11, v1_4); \
676  sum_re -= CMPLX_MUL_RE(c##02_12, v1_5); \
677  sum_im -= CMPLX_MUL_IM(c##02_12, v1_5); \
678  \
679  v1_2_re = sum_re*tmp2; \
680  v1_2_im = sum_im*tmp2; \
681  \
682  c##02_02_re = .5*v1_2_re; \
683  c##10_02_re = .5*v1_3_re; \
684  c##10_02_im = .5*v1_3_im; \
685  c##11_02_re = .5*v1_4_re; \
686  c##11_02_im = .5*v1_4_im; \
687  c##12_02_re = .5*v1_5_re; \
688  c##12_02_im = .5*v1_5_im; \
689  \
690  \
691  /* k = 3 */ \
692  v1_0_re = 0.; \
693  v1_0_im = 0.; \
694  v1_1_re = 0.; \
695  v1_1_im = 0.; \
696  v1_2_re = 0.; \
697  v1_2_im = 0.; \
698  v1_3_re = tmp3; \
699  v1_3_im = 0.; \
700  \
701  /* l = 4 */ \
702  sum_re = 0.; \
703  sum_im = 0.; \
704  /* j = 3 */ \
705  sum_re -= c##11_10_re*v1_3_re; \
706  sum_im -= c##11_10_im*v1_3_re; \
707  \
708  v1_4_re = sum_re*tmp4; \
709  v1_4_im = sum_im*tmp4; \
710  \
711  /* l = 5 */ \
712  sum_re = 0.; \
713  sum_im = 0.; \
714  /* j = 3..4 */ \
715  sum_re -= CMPLX_MUL_RE(c##12_10, v1_3); \
716  sum_im -= CMPLX_MUL_IM(c##12_10, v1_3); \
717  sum_re -= CMPLX_MUL_RE(c##12_11, v1_4); \
718  sum_im -= CMPLX_MUL_IM(c##12_11, v1_4); \
719  \
720  v1_5_re = sum_re*tmp5*tmp5; \
721  v1_5_im = sum_im*tmp5*tmp5; \
722  \
723  /* Backwards substitute */ \
724  \
725  /* l = 4 */ \
726  sum_re = v1_4_re; \
727  sum_im = v1_4_im; \
728  /* j = 5 */ \
729  sum_re -= CMPLX_MUL_RE(c##11_12, v1_5); \
730  sum_im -= CMPLX_MUL_IM(c##11_12, v1_5); \
731  \
732  v1_4_re = sum_re*tmp4; \
733  v1_4_im = sum_im*tmp4; \
734  \
735  /* l = 3 */ \
736  sum_re = v1_3_re; \
737  sum_im = v1_3_im; \
738  /* j = 4..5 */ \
739  sum_re -= CMPLX_MUL_RE(c##10_11, v1_4); /*AQUI PODEMOS OPTIMIZAR LA PARTE IMAGINARIA*/ \
740  sum_im -= CMPLX_MUL_IM(c##10_11, v1_4); \
741  sum_re -= CMPLX_MUL_RE(c##10_12, v1_5); \
742  sum_im -= CMPLX_MUL_IM(c##10_12, v1_5); \
743  \
744  v1_3_re = sum_re*tmp3; \
745  v1_3_im = sum_im*tmp3; \
746  \
747  c##10_10_re = .5*v1_3_re; \
748  c##11_10_re = .5*v1_4_re; \
749  c##11_10_im = .5*v1_4_im; \
750  c##12_10_re = .5*v1_5_re; \
751  c##12_10_im = .5*v1_5_im; \
752  \
753  \
754  /* k = 4 */ \
755  v1_0_re = 0.; \
756  v1_0_im = 0.; \
757  v1_1_re = 0.; \
758  v1_1_im = 0.; \
759  v1_2_re = 0.; \
760  v1_2_im = 0.; \
761  v1_3_re = 0.; \
762  v1_3_im = 0.; \
763  v1_4_re = tmp4; \
764  v1_4_im = 0.; \
765  \
766  /* l = 5 */ \
767  sum_re = 0.; \
768  sum_im = 0.; \
769  /* j = 4 */ \
770  sum_re -= c##12_11_re*v1_4_re; \
771  sum_im -= c##12_11_im*v1_4_re; \
772  \
773  v1_5_re = sum_re*tmp5*tmp5; \
774  v1_5_im = sum_im*tmp5*tmp5; \
775  \
776  /* Backwards substitute */ \
777  \
778  /* l = 4 */ \
779  sum_re = v1_4_re; \
780  sum_im = v1_4_im; \
781  /* j = 5 */ \
782  sum_re -= CMPLX_MUL_RE(c##11_12, v1_5); \
783  sum_im -= CMPLX_MUL_IM(c##11_12, v1_5); \
784  \
785  v1_4_re = sum_re*tmp4; /*AQUI PODEMOS OPTIMIZAR LA PARTE IMAGINARIA*/ \
786  v1_4_im = sum_im*tmp4; \
787  \
788  c##11_11_re = .5*v1_4_re; \
789  c##12_11_re = .5*v1_5_re; \
790  c##12_11_im = .5*v1_5_im; \
791  \
792  \
793  /* k = 5 */ \
794  c##12_12_re = .5*tmp5*tmp5; \
795  \
796  \
797 }\
798 
799 
800 /* Cleanup */
801 /*
802 #undef tri14_re
803 #undef tri14_im
804 #undef tri13_re
805 #undef tri13_im
806 #undef tri9_re
807 #undef tri9_im
808 #undef tri5_re
809 #undef tri5_im
810 #undef tmp0
811 #undef tmp1
812 #undef tmp2
813 #undef tmp3
814 #undef tmp4
815 #undef tmp5
816 #undef v1_0_re
817 #undef v1_0_im
818 #undef v1_1_re
819 #undef v1_1_im
820 #undef v1_2_re
821 #undef v1_2_im
822 #undef v1_3_re
823 #undef v1_3_im
824 #undef v1_4_re
825 #undef v1_4_im
826 #undef v1_5_re
827 #undef v1_5_im
828 #undef sum_re
829 #undef sum_im
830 */
831 
832 #define APPLY_CLOVER_TWIST(c, a, reg)\
833 \
834 /* change to chiral basis*/\
835 {\
836  spinorFloat a00_re = -reg##10_re - reg##30_re;\
837  spinorFloat a00_im = -reg##10_im - reg##30_im;\
838  spinorFloat a10_re = reg##00_re + reg##20_re;\
839  spinorFloat a10_im = reg##00_im + reg##20_im;\
840  spinorFloat a20_re = -reg##10_re + reg##30_re;\
841  spinorFloat a20_im = -reg##10_im + reg##30_im;\
842  spinorFloat a30_re = reg##00_re - reg##20_re;\
843  spinorFloat a30_im = reg##00_im - reg##20_im;\
844  \
845  reg##00_re = a00_re; reg##00_im = a00_im;\
846  reg##10_re = a10_re; reg##10_im = a10_im;\
847  reg##20_re = a20_re; reg##20_im = a20_im;\
848  reg##30_re = a30_re; reg##30_im = a30_im;\
849 }\
850 \
851 {\
852  spinorFloat a01_re = -reg##11_re - reg##31_re;\
853  spinorFloat a01_im = -reg##11_im - reg##31_im;\
854  spinorFloat a11_re = reg##01_re + reg##21_re;\
855  spinorFloat a11_im = reg##01_im + reg##21_im;\
856  spinorFloat a21_re = -reg##11_re + reg##31_re;\
857  spinorFloat a21_im = -reg##11_im + reg##31_im;\
858  spinorFloat a31_re = reg##01_re - reg##21_re;\
859  spinorFloat a31_im = reg##01_im - reg##21_im;\
860  \
861  reg##01_re = a01_re; reg##01_im = a01_im;\
862  reg##11_re = a11_re; reg##11_im = a11_im;\
863  reg##21_re = a21_re; reg##21_im = a21_im;\
864  reg##31_re = a31_re; reg##31_im = a31_im;\
865 }\
866 \
867 {\
868  spinorFloat a02_re = -reg##12_re - reg##32_re;\
869  spinorFloat a02_im = -reg##12_im - reg##32_im;\
870  spinorFloat a12_re = reg##02_re + reg##22_re;\
871  spinorFloat a12_im = reg##02_im + reg##22_im;\
872  spinorFloat a22_re = -reg##12_re + reg##32_re;\
873  spinorFloat a22_im = -reg##12_im + reg##32_im;\
874  spinorFloat a32_re = reg##02_re - reg##22_re;\
875  spinorFloat a32_im = reg##02_im - reg##22_im;\
876  \
877  reg##02_re = a02_re; reg##02_im = a02_im;\
878  reg##12_re = a12_re; reg##12_im = a12_im;\
879  reg##22_re = a22_re; reg##22_im = a22_im;\
880  reg##32_re = a32_re; reg##32_im = a32_im;\
881 }\
882 \
883 /* apply first chiral block*/\
884 {\
885  ASSN_CLOVER(TMCLOVERTEX, 0)\
886  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
887  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
888  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
889  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
890  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
891  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
892  \
893  a00_re += c##00_00_re * reg##00_re;\
894  a00_im += c##00_00_re * reg##00_im;\
895  a00_re += c##00_01_re * reg##01_re;\
896  a00_re -= c##00_01_im * reg##01_im;\
897  a00_im += c##00_01_re * reg##01_im;\
898  a00_im += c##00_01_im * reg##01_re;\
899  a00_re += c##00_02_re * reg##02_re;\
900  a00_re -= c##00_02_im * reg##02_im;\
901  a00_im += c##00_02_re * reg##02_im;\
902  a00_im += c##00_02_im * reg##02_re;\
903  a00_re += c##00_10_re * reg##10_re;\
904  a00_re -= c##00_10_im * reg##10_im;\
905  a00_im += c##00_10_re * reg##10_im;\
906  a00_im += c##00_10_im * reg##10_re;\
907  a00_re += c##00_11_re * reg##11_re;\
908  a00_re -= c##00_11_im * reg##11_im;\
909  a00_im += c##00_11_re * reg##11_im;\
910  a00_im += c##00_11_im * reg##11_re;\
911  a00_re += c##00_12_re * reg##12_re;\
912  a00_re -= c##00_12_im * reg##12_im;\
913  a00_im += c##00_12_re * reg##12_im;\
914  a00_im += c##00_12_im * reg##12_re;\
915  \
916  a01_re += c##01_00_re * reg##00_re;\
917  a01_re -= c##01_00_im * reg##00_im;\
918  a01_im += c##01_00_re * reg##00_im;\
919  a01_im += c##01_00_im * reg##00_re;\
920  a01_re += c##01_01_re * reg##01_re;\
921  a01_im += c##01_01_re * reg##01_im;\
922  a01_re += c##01_02_re * reg##02_re;\
923  a01_re -= c##01_02_im * reg##02_im;\
924  a01_im += c##01_02_re * reg##02_im;\
925  a01_im += c##01_02_im * reg##02_re;\
926  a01_re += c##01_10_re * reg##10_re;\
927  a01_re -= c##01_10_im * reg##10_im;\
928  a01_im += c##01_10_re * reg##10_im;\
929  a01_im += c##01_10_im * reg##10_re;\
930  a01_re += c##01_11_re * reg##11_re;\
931  a01_re -= c##01_11_im * reg##11_im;\
932  a01_im += c##01_11_re * reg##11_im;\
933  a01_im += c##01_11_im * reg##11_re;\
934  a01_re += c##01_12_re * reg##12_re;\
935  a01_re -= c##01_12_im * reg##12_im;\
936  a01_im += c##01_12_re * reg##12_im;\
937  a01_im += c##01_12_im * reg##12_re;\
938  \
939  a02_re += c##02_00_re * reg##00_re;\
940  a02_re -= c##02_00_im * reg##00_im;\
941  a02_im += c##02_00_re * reg##00_im;\
942  a02_im += c##02_00_im * reg##00_re;\
943  a02_re += c##02_01_re * reg##01_re;\
944  a02_re -= c##02_01_im * reg##01_im;\
945  a02_im += c##02_01_re * reg##01_im;\
946  a02_im += c##02_01_im * reg##01_re;\
947  a02_re += c##02_02_re * reg##02_re;\
948  a02_im += c##02_02_re * reg##02_im;\
949  a02_re += c##02_10_re * reg##10_re;\
950  a02_re -= c##02_10_im * reg##10_im;\
951  a02_im += c##02_10_re * reg##10_im;\
952  a02_im += c##02_10_im * reg##10_re;\
953  a02_re += c##02_11_re * reg##11_re;\
954  a02_re -= c##02_11_im * reg##11_im;\
955  a02_im += c##02_11_re * reg##11_im;\
956  a02_im += c##02_11_im * reg##11_re;\
957  a02_re += c##02_12_re * reg##12_re;\
958  a02_re -= c##02_12_im * reg##12_im;\
959  a02_im += c##02_12_re * reg##12_im;\
960  a02_im += c##02_12_im * reg##12_re;\
961  \
962  a10_re += c##10_00_re * reg##00_re;\
963  a10_re -= c##10_00_im * reg##00_im;\
964  a10_im += c##10_00_re * reg##00_im;\
965  a10_im += c##10_00_im * reg##00_re;\
966  a10_re += c##10_01_re * reg##01_re;\
967  a10_re -= c##10_01_im * reg##01_im;\
968  a10_im += c##10_01_re * reg##01_im;\
969  a10_im += c##10_01_im * reg##01_re;\
970  a10_re += c##10_02_re * reg##02_re;\
971  a10_re -= c##10_02_im * reg##02_im;\
972  a10_im += c##10_02_re * reg##02_im;\
973  a10_im += c##10_02_im * reg##02_re;\
974  a10_re += c##10_10_re * reg##10_re;\
975  a10_im += c##10_10_re * reg##10_im;\
976  a10_re += c##10_11_re * reg##11_re;\
977  a10_re -= c##10_11_im * reg##11_im;\
978  a10_im += c##10_11_re * reg##11_im;\
979  a10_im += c##10_11_im * reg##11_re;\
980  a10_re += c##10_12_re * reg##12_re;\
981  a10_re -= c##10_12_im * reg##12_im;\
982  a10_im += c##10_12_re * reg##12_im;\
983  a10_im += c##10_12_im * reg##12_re;\
984  \
985  a11_re += c##11_00_re * reg##00_re;\
986  a11_re -= c##11_00_im * reg##00_im;\
987  a11_im += c##11_00_re * reg##00_im;\
988  a11_im += c##11_00_im * reg##00_re;\
989  a11_re += c##11_01_re * reg##01_re;\
990  a11_re -= c##11_01_im * reg##01_im;\
991  a11_im += c##11_01_re * reg##01_im;\
992  a11_im += c##11_01_im * reg##01_re;\
993  a11_re += c##11_02_re * reg##02_re;\
994  a11_re -= c##11_02_im * reg##02_im;\
995  a11_im += c##11_02_re * reg##02_im;\
996  a11_im += c##11_02_im * reg##02_re;\
997  a11_re += c##11_10_re * reg##10_re;\
998  a11_re -= c##11_10_im * reg##10_im;\
999  a11_im += c##11_10_re * reg##10_im;\
1000  a11_im += c##11_10_im * reg##10_re;\
1001  a11_re += c##11_11_re * reg##11_re;\
1002  a11_im += c##11_11_re * reg##11_im;\
1003  a11_re += c##11_12_re * reg##12_re;\
1004  a11_re -= c##11_12_im * reg##12_im;\
1005  a11_im += c##11_12_re * reg##12_im;\
1006  a11_im += c##11_12_im * reg##12_re;\
1007  \
1008  a12_re += c##12_00_re * reg##00_re;\
1009  a12_re -= c##12_00_im * reg##00_im;\
1010  a12_im += c##12_00_re * reg##00_im;\
1011  a12_im += c##12_00_im * reg##00_re;\
1012  a12_re += c##12_01_re * reg##01_re;\
1013  a12_re -= c##12_01_im * reg##01_im;\
1014  a12_im += c##12_01_re * reg##01_im;\
1015  a12_im += c##12_01_im * reg##01_re;\
1016  a12_re += c##12_02_re * reg##02_re;\
1017  a12_re -= c##12_02_im * reg##02_im;\
1018  a12_im += c##12_02_re * reg##02_im;\
1019  a12_im += c##12_02_im * reg##02_re;\
1020  a12_re += c##12_10_re * reg##10_re;\
1021  a12_re -= c##12_10_im * reg##10_im;\
1022  a12_im += c##12_10_re * reg##10_im;\
1023  a12_im += c##12_10_im * reg##10_re;\
1024  a12_re += c##12_11_re * reg##11_re;\
1025  a12_re -= c##12_11_im * reg##11_im;\
1026  a12_im += c##12_11_re * reg##11_im;\
1027  a12_im += c##12_11_im * reg##11_re;\
1028  a12_re += c##12_12_re * reg##12_re;\
1029  a12_im += c##12_12_re * reg##12_im;\
1030  \
1031  /*apply i*(2*kappa*mu=a)*gamma5*/\
1032  a00_re = a00_re - .5*a* reg##00_im; a00_im = a00_im + .5*a* reg##00_re;\
1033  a01_re = a01_re - .5*a* reg##01_im; a01_im = a01_im + .5*a* reg##01_re;\
1034  a02_re = a02_re - .5*a* reg##02_im; a02_im = a02_im + .5*a* reg##02_re;\
1035  a10_re = a10_re - .5*a* reg##10_im; a10_im = a10_im + .5*a* reg##10_re;\
1036  a11_re = a11_re - .5*a* reg##11_im; a11_im = a11_im + .5*a* reg##11_re;\
1037  a12_re = a12_re - .5*a* reg##12_im; a12_im = a12_im + .5*a* reg##12_re;\
1038  reg##00_re = a00_re; reg##00_im = a00_im;\
1039  reg##01_re = a01_re; reg##01_im = a01_im;\
1040  reg##02_re = a02_re; reg##02_im = a02_im;\
1041  reg##10_re = a10_re; reg##10_im = a10_im;\
1042  reg##11_re = a11_re; reg##11_im = a11_im;\
1043  reg##12_re = a12_re; reg##12_im = a12_im;\
1044  \
1045 }\
1046 \
1047 /* apply second chiral block*/\
1048 {\
1049  ASSN_CLOVER(TMCLOVERTEX, 1)\
1050  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
1051  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
1052  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
1053  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
1054  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
1055  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
1056  \
1057  a20_re += c##20_20_re * reg##20_re;\
1058  a20_im += c##20_20_re * reg##20_im;\
1059  a20_re += c##20_21_re * reg##21_re;\
1060  a20_re -= c##20_21_im * reg##21_im;\
1061  a20_im += c##20_21_re * reg##21_im;\
1062  a20_im += c##20_21_im * reg##21_re;\
1063  a20_re += c##20_22_re * reg##22_re;\
1064  a20_re -= c##20_22_im * reg##22_im;\
1065  a20_im += c##20_22_re * reg##22_im;\
1066  a20_im += c##20_22_im * reg##22_re;\
1067  a20_re += c##20_30_re * reg##30_re;\
1068  a20_re -= c##20_30_im * reg##30_im;\
1069  a20_im += c##20_30_re * reg##30_im;\
1070  a20_im += c##20_30_im * reg##30_re;\
1071  a20_re += c##20_31_re * reg##31_re;\
1072  a20_re -= c##20_31_im * reg##31_im;\
1073  a20_im += c##20_31_re * reg##31_im;\
1074  a20_im += c##20_31_im * reg##31_re;\
1075  a20_re += c##20_32_re * reg##32_re;\
1076  a20_re -= c##20_32_im * reg##32_im;\
1077  a20_im += c##20_32_re * reg##32_im;\
1078  a20_im += c##20_32_im * reg##32_re;\
1079  \
1080  a21_re += c##21_20_re * reg##20_re;\
1081  a21_re -= c##21_20_im * reg##20_im;\
1082  a21_im += c##21_20_re * reg##20_im;\
1083  a21_im += c##21_20_im * reg##20_re;\
1084  a21_re += c##21_21_re * reg##21_re;\
1085  a21_im += c##21_21_re * reg##21_im;\
1086  a21_re += c##21_22_re * reg##22_re;\
1087  a21_re -= c##21_22_im * reg##22_im;\
1088  a21_im += c##21_22_re * reg##22_im;\
1089  a21_im += c##21_22_im * reg##22_re;\
1090  a21_re += c##21_30_re * reg##30_re;\
1091  a21_re -= c##21_30_im * reg##30_im;\
1092  a21_im += c##21_30_re * reg##30_im;\
1093  a21_im += c##21_30_im * reg##30_re;\
1094  a21_re += c##21_31_re * reg##31_re;\
1095  a21_re -= c##21_31_im * reg##31_im;\
1096  a21_im += c##21_31_re * reg##31_im;\
1097  a21_im += c##21_31_im * reg##31_re;\
1098  a21_re += c##21_32_re * reg##32_re;\
1099  a21_re -= c##21_32_im * reg##32_im;\
1100  a21_im += c##21_32_re * reg##32_im;\
1101  a21_im += c##21_32_im * reg##32_re;\
1102  \
1103  a22_re += c##22_20_re * reg##20_re;\
1104  a22_re -= c##22_20_im * reg##20_im;\
1105  a22_im += c##22_20_re * reg##20_im;\
1106  a22_im += c##22_20_im * reg##20_re;\
1107  a22_re += c##22_21_re * reg##21_re;\
1108  a22_re -= c##22_21_im * reg##21_im;\
1109  a22_im += c##22_21_re * reg##21_im;\
1110  a22_im += c##22_21_im * reg##21_re;\
1111  a22_re += c##22_22_re * reg##22_re;\
1112  a22_im += c##22_22_re * reg##22_im;\
1113  a22_re += c##22_30_re * reg##30_re;\
1114  a22_re -= c##22_30_im * reg##30_im;\
1115  a22_im += c##22_30_re * reg##30_im;\
1116  a22_im += c##22_30_im * reg##30_re;\
1117  a22_re += c##22_31_re * reg##31_re;\
1118  a22_re -= c##22_31_im * reg##31_im;\
1119  a22_im += c##22_31_re * reg##31_im;\
1120  a22_im += c##22_31_im * reg##31_re;\
1121  a22_re += c##22_32_re * reg##32_re;\
1122  a22_re -= c##22_32_im * reg##32_im;\
1123  a22_im += c##22_32_re * reg##32_im;\
1124  a22_im += c##22_32_im * reg##32_re;\
1125  \
1126  a30_re += c##30_20_re * reg##20_re;\
1127  a30_re -= c##30_20_im * reg##20_im;\
1128  a30_im += c##30_20_re * reg##20_im;\
1129  a30_im += c##30_20_im * reg##20_re;\
1130  a30_re += c##30_21_re * reg##21_re;\
1131  a30_re -= c##30_21_im * reg##21_im;\
1132  a30_im += c##30_21_re * reg##21_im;\
1133  a30_im += c##30_21_im * reg##21_re;\
1134  a30_re += c##30_22_re * reg##22_re;\
1135  a30_re -= c##30_22_im * reg##22_im;\
1136  a30_im += c##30_22_re * reg##22_im;\
1137  a30_im += c##30_22_im * reg##22_re;\
1138  a30_re += c##30_30_re * reg##30_re;\
1139  a30_im += c##30_30_re * reg##30_im;\
1140  a30_re += c##30_31_re * reg##31_re;\
1141  a30_re -= c##30_31_im * reg##31_im;\
1142  a30_im += c##30_31_re * reg##31_im;\
1143  a30_im += c##30_31_im * reg##31_re;\
1144  a30_re += c##30_32_re * reg##32_re;\
1145  a30_re -= c##30_32_im * reg##32_im;\
1146  a30_im += c##30_32_re * reg##32_im;\
1147  a30_im += c##30_32_im * reg##32_re;\
1148  \
1149  a31_re += c##31_20_re * reg##20_re;\
1150  a31_re -= c##31_20_im * reg##20_im;\
1151  a31_im += c##31_20_re * reg##20_im;\
1152  a31_im += c##31_20_im * reg##20_re;\
1153  a31_re += c##31_21_re * reg##21_re;\
1154  a31_re -= c##31_21_im * reg##21_im;\
1155  a31_im += c##31_21_re * reg##21_im;\
1156  a31_im += c##31_21_im * reg##21_re;\
1157  a31_re += c##31_22_re * reg##22_re;\
1158  a31_re -= c##31_22_im * reg##22_im;\
1159  a31_im += c##31_22_re * reg##22_im;\
1160  a31_im += c##31_22_im * reg##22_re;\
1161  a31_re += c##31_30_re * reg##30_re;\
1162  a31_re -= c##31_30_im * reg##30_im;\
1163  a31_im += c##31_30_re * reg##30_im;\
1164  a31_im += c##31_30_im * reg##30_re;\
1165  a31_re += c##31_31_re * reg##31_re;\
1166  a31_im += c##31_31_re * reg##31_im;\
1167  a31_re += c##31_32_re * reg##32_re;\
1168  a31_re -= c##31_32_im * reg##32_im;\
1169  a31_im += c##31_32_re * reg##32_im;\
1170  a31_im += c##31_32_im * reg##32_re;\
1171  \
1172  a32_re += c##32_20_re * reg##20_re;\
1173  a32_re -= c##32_20_im * reg##20_im;\
1174  a32_im += c##32_20_re * reg##20_im;\
1175  a32_im += c##32_20_im * reg##20_re;\
1176  a32_re += c##32_21_re * reg##21_re;\
1177  a32_re -= c##32_21_im * reg##21_im;\
1178  a32_im += c##32_21_re * reg##21_im;\
1179  a32_im += c##32_21_im * reg##21_re;\
1180  a32_re += c##32_22_re * reg##22_re;\
1181  a32_re -= c##32_22_im * reg##22_im;\
1182  a32_im += c##32_22_re * reg##22_im;\
1183  a32_im += c##32_22_im * reg##22_re;\
1184  a32_re += c##32_30_re * reg##30_re;\
1185  a32_re -= c##32_30_im * reg##30_im;\
1186  a32_im += c##32_30_re * reg##30_im;\
1187  a32_im += c##32_30_im * reg##30_re;\
1188  a32_re += c##32_31_re * reg##31_re;\
1189  a32_re -= c##32_31_im * reg##31_im;\
1190  a32_im += c##32_31_re * reg##31_im;\
1191  a32_im += c##32_31_im * reg##31_re;\
1192  a32_re += c##32_32_re * reg##32_re;\
1193  a32_im += c##32_32_re * reg##32_im;\
1194  \
1195  /*apply i*(2*kappa*mu=a)*gamma5*/\
1196  a20_re = a20_re + .5*a* reg##20_im; a20_im = a20_im - .5*a* reg##20_re;\
1197  a21_re = a21_re + .5*a* reg##21_im; a21_im = a21_im - .5*a* reg##21_re;\
1198  a22_re = a22_re + .5*a* reg##22_im; a22_im = a22_im - .5*a* reg##22_re;\
1199  a30_re = a30_re + .5*a* reg##30_im; a30_im = a30_im - .5*a* reg##30_re;\
1200  a31_re = a31_re + .5*a* reg##31_im; a31_im = a31_im - .5*a* reg##31_re;\
1201  a32_re = a32_re + .5*a* reg##32_im; a32_im = a32_im - .5*a* reg##32_re;\
1202  reg##20_re = a20_re; reg##20_im = a20_im;\
1203  reg##21_re = a21_re; reg##21_im = a21_im;\
1204  reg##22_re = a22_re; reg##22_im = a22_im;\
1205  reg##30_re = a30_re; reg##30_im = a30_im;\
1206  reg##31_re = a31_re; reg##31_im = a31_im;\
1207  reg##32_re = a32_re; reg##32_im = a32_im;\
1208  \
1209 }\
1210 \
1211 /* change back from chiral basis*/\
1212 /* (note: required factor of 1/2 is included in clover term normalization)*/\
1213 {\
1214  spinorFloat a00_re = reg##10_re + reg##30_re;\
1215  spinorFloat a00_im = reg##10_im + reg##30_im;\
1216  spinorFloat a10_re = -reg##00_re - reg##20_re;\
1217  spinorFloat a10_im = -reg##00_im - reg##20_im;\
1218  spinorFloat a20_re = reg##10_re - reg##30_re;\
1219  spinorFloat a20_im = reg##10_im - reg##30_im;\
1220  spinorFloat a30_re = -reg##00_re + reg##20_re;\
1221  spinorFloat a30_im = -reg##00_im + reg##20_im;\
1222  \
1223  reg##00_re = a00_re; reg##00_im = a00_im;\
1224  reg##10_re = a10_re; reg##10_im = a10_im;\
1225  reg##20_re = a20_re; reg##20_im = a20_im;\
1226  reg##30_re = a30_re; reg##30_im = a30_im;\
1227 }\
1228 \
1229 {\
1230  spinorFloat a01_re = reg##11_re + reg##31_re;\
1231  spinorFloat a01_im = reg##11_im + reg##31_im;\
1232  spinorFloat a11_re = -reg##01_re - reg##21_re;\
1233  spinorFloat a11_im = -reg##01_im - reg##21_im;\
1234  spinorFloat a21_re = reg##11_re - reg##31_re;\
1235  spinorFloat a21_im = reg##11_im - reg##31_im;\
1236  spinorFloat a31_re = -reg##01_re + reg##21_re;\
1237  spinorFloat a31_im = -reg##01_im + reg##21_im;\
1238  \
1239  reg##01_re = a01_re; reg##01_im = a01_im;\
1240  reg##11_re = a11_re; reg##11_im = a11_im;\
1241  reg##21_re = a21_re; reg##21_im = a21_im;\
1242  reg##31_re = a31_re; reg##31_im = a31_im;\
1243 }\
1244 \
1245 {\
1246  spinorFloat a02_re = reg##12_re + reg##32_re;\
1247  spinorFloat a02_im = reg##12_im + reg##32_im;\
1248  spinorFloat a12_re = -reg##02_re - reg##22_re;\
1249  spinorFloat a12_im = -reg##02_im - reg##22_im;\
1250  spinorFloat a22_re = reg##12_re - reg##32_re;\
1251  spinorFloat a22_im = reg##12_im - reg##32_im;\
1252  spinorFloat a32_re = -reg##02_re + reg##22_re;\
1253  spinorFloat a32_im = -reg##02_im + reg##22_im;\
1254  \
1255  reg##02_re = a02_re; reg##02_im = a02_im;\
1256  reg##12_re = a12_re; reg##12_im = a12_im;\
1257  reg##22_re = a22_re; reg##22_im = a22_im;\
1258  reg##32_re = a32_re; reg##32_im = a32_im;\
1259 }\
1260 \
1261 
1262 #define APPLY_CLOVER_TWIST_INV(c, cinv, a, reg)\
1263 \
1264 /* change to chiral basis*/\
1265 {\
1266  spinorFloat a00_re = -reg##10_re - reg##30_re;\
1267  spinorFloat a00_im = -reg##10_im - reg##30_im;\
1268  spinorFloat a10_re = reg##00_re + reg##20_re;\
1269  spinorFloat a10_im = reg##00_im + reg##20_im;\
1270  spinorFloat a20_re = -reg##10_re + reg##30_re;\
1271  spinorFloat a20_im = -reg##10_im + reg##30_im;\
1272  spinorFloat a30_re = reg##00_re - reg##20_re;\
1273  spinorFloat a30_im = reg##00_im - reg##20_im;\
1274  \
1275  reg##00_re = a00_re; reg##00_im = a00_im;\
1276  reg##10_re = a10_re; reg##10_im = a10_im;\
1277  reg##20_re = a20_re; reg##20_im = a20_im;\
1278  reg##30_re = a30_re; reg##30_im = a30_im;\
1279 }\
1280 \
1281 {\
1282  spinorFloat a01_re = -reg##11_re - reg##31_re;\
1283  spinorFloat a01_im = -reg##11_im - reg##31_im;\
1284  spinorFloat a11_re = reg##01_re + reg##21_re;\
1285  spinorFloat a11_im = reg##01_im + reg##21_im;\
1286  spinorFloat a21_re = -reg##11_re + reg##31_re;\
1287  spinorFloat a21_im = -reg##11_im + reg##31_im;\
1288  spinorFloat a31_re = reg##01_re - reg##21_re;\
1289  spinorFloat a31_im = reg##01_im - reg##21_im;\
1290  \
1291  reg##01_re = a01_re; reg##01_im = a01_im;\
1292  reg##11_re = a11_re; reg##11_im = a11_im;\
1293  reg##21_re = a21_re; reg##21_im = a21_im;\
1294  reg##31_re = a31_re; reg##31_im = a31_im;\
1295 }\
1296 \
1297 {\
1298  spinorFloat a02_re = -reg##12_re - reg##32_re;\
1299  spinorFloat a02_im = -reg##12_im - reg##32_im;\
1300  spinorFloat a12_re = reg##02_re + reg##22_re;\
1301  spinorFloat a12_im = reg##02_im + reg##22_im;\
1302  spinorFloat a22_re = -reg##12_re + reg##32_re;\
1303  spinorFloat a22_im = -reg##12_im + reg##32_im;\
1304  spinorFloat a32_re = reg##02_re - reg##22_re;\
1305  spinorFloat a32_im = reg##02_im - reg##22_im;\
1306  \
1307  reg##02_re = a02_re; reg##02_im = a02_im;\
1308  reg##12_re = a12_re; reg##12_im = a12_im;\
1309  reg##22_re = a22_re; reg##22_im = a22_im;\
1310  reg##32_re = a32_re; reg##32_im = a32_im;\
1311 }\
1312 \
1313 /* apply first chiral block*/\
1314 {\
1315  ASSN_CLOVER(TMCLOVERTEX, 0)\
1316  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
1317  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
1318  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
1319  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
1320  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
1321  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
1322  \
1323  a00_re += c##00_00_re * reg##00_re;\
1324  a00_im += c##00_00_re * reg##00_im;\
1325  a00_re += c##00_01_re * reg##01_re;\
1326  a00_re -= c##00_01_im * reg##01_im;\
1327  a00_im += c##00_01_re * reg##01_im;\
1328  a00_im += c##00_01_im * reg##01_re;\
1329  a00_re += c##00_02_re * reg##02_re;\
1330  a00_re -= c##00_02_im * reg##02_im;\
1331  a00_im += c##00_02_re * reg##02_im;\
1332  a00_im += c##00_02_im * reg##02_re;\
1333  a00_re += c##00_10_re * reg##10_re;\
1334  a00_re -= c##00_10_im * reg##10_im;\
1335  a00_im += c##00_10_re * reg##10_im;\
1336  a00_im += c##00_10_im * reg##10_re;\
1337  a00_re += c##00_11_re * reg##11_re;\
1338  a00_re -= c##00_11_im * reg##11_im;\
1339  a00_im += c##00_11_re * reg##11_im;\
1340  a00_im += c##00_11_im * reg##11_re;\
1341  a00_re += c##00_12_re * reg##12_re;\
1342  a00_re -= c##00_12_im * reg##12_im;\
1343  a00_im += c##00_12_re * reg##12_im;\
1344  a00_im += c##00_12_im * reg##12_re;\
1345  \
1346  a01_re += c##01_00_re * reg##00_re;\
1347  a01_re -= c##01_00_im * reg##00_im;\
1348  a01_im += c##01_00_re * reg##00_im;\
1349  a01_im += c##01_00_im * reg##00_re;\
1350  a01_re += c##01_01_re * reg##01_re;\
1351  a01_im += c##01_01_re * reg##01_im;\
1352  a01_re += c##01_02_re * reg##02_re;\
1353  a01_re -= c##01_02_im * reg##02_im;\
1354  a01_im += c##01_02_re * reg##02_im;\
1355  a01_im += c##01_02_im * reg##02_re;\
1356  a01_re += c##01_10_re * reg##10_re;\
1357  a01_re -= c##01_10_im * reg##10_im;\
1358  a01_im += c##01_10_re * reg##10_im;\
1359  a01_im += c##01_10_im * reg##10_re;\
1360  a01_re += c##01_11_re * reg##11_re;\
1361  a01_re -= c##01_11_im * reg##11_im;\
1362  a01_im += c##01_11_re * reg##11_im;\
1363  a01_im += c##01_11_im * reg##11_re;\
1364  a01_re += c##01_12_re * reg##12_re;\
1365  a01_re -= c##01_12_im * reg##12_im;\
1366  a01_im += c##01_12_re * reg##12_im;\
1367  a01_im += c##01_12_im * reg##12_re;\
1368  \
1369  a02_re += c##02_00_re * reg##00_re;\
1370  a02_re -= c##02_00_im * reg##00_im;\
1371  a02_im += c##02_00_re * reg##00_im;\
1372  a02_im += c##02_00_im * reg##00_re;\
1373  a02_re += c##02_01_re * reg##01_re;\
1374  a02_re -= c##02_01_im * reg##01_im;\
1375  a02_im += c##02_01_re * reg##01_im;\
1376  a02_im += c##02_01_im * reg##01_re;\
1377  a02_re += c##02_02_re * reg##02_re;\
1378  a02_im += c##02_02_re * reg##02_im;\
1379  a02_re += c##02_10_re * reg##10_re;\
1380  a02_re -= c##02_10_im * reg##10_im;\
1381  a02_im += c##02_10_re * reg##10_im;\
1382  a02_im += c##02_10_im * reg##10_re;\
1383  a02_re += c##02_11_re * reg##11_re;\
1384  a02_re -= c##02_11_im * reg##11_im;\
1385  a02_im += c##02_11_re * reg##11_im;\
1386  a02_im += c##02_11_im * reg##11_re;\
1387  a02_re += c##02_12_re * reg##12_re;\
1388  a02_re -= c##02_12_im * reg##12_im;\
1389  a02_im += c##02_12_re * reg##12_im;\
1390  a02_im += c##02_12_im * reg##12_re;\
1391  \
1392  a10_re += c##10_00_re * reg##00_re;\
1393  a10_re -= c##10_00_im * reg##00_im;\
1394  a10_im += c##10_00_re * reg##00_im;\
1395  a10_im += c##10_00_im * reg##00_re;\
1396  a10_re += c##10_01_re * reg##01_re;\
1397  a10_re -= c##10_01_im * reg##01_im;\
1398  a10_im += c##10_01_re * reg##01_im;\
1399  a10_im += c##10_01_im * reg##01_re;\
1400  a10_re += c##10_02_re * reg##02_re;\
1401  a10_re -= c##10_02_im * reg##02_im;\
1402  a10_im += c##10_02_re * reg##02_im;\
1403  a10_im += c##10_02_im * reg##02_re;\
1404  a10_re += c##10_10_re * reg##10_re;\
1405  a10_im += c##10_10_re * reg##10_im;\
1406  a10_re += c##10_11_re * reg##11_re;\
1407  a10_re -= c##10_11_im * reg##11_im;\
1408  a10_im += c##10_11_re * reg##11_im;\
1409  a10_im += c##10_11_im * reg##11_re;\
1410  a10_re += c##10_12_re * reg##12_re;\
1411  a10_re -= c##10_12_im * reg##12_im;\
1412  a10_im += c##10_12_re * reg##12_im;\
1413  a10_im += c##10_12_im * reg##12_re;\
1414  \
1415  a11_re += c##11_00_re * reg##00_re;\
1416  a11_re -= c##11_00_im * reg##00_im;\
1417  a11_im += c##11_00_re * reg##00_im;\
1418  a11_im += c##11_00_im * reg##00_re;\
1419  a11_re += c##11_01_re * reg##01_re;\
1420  a11_re -= c##11_01_im * reg##01_im;\
1421  a11_im += c##11_01_re * reg##01_im;\
1422  a11_im += c##11_01_im * reg##01_re;\
1423  a11_re += c##11_02_re * reg##02_re;\
1424  a11_re -= c##11_02_im * reg##02_im;\
1425  a11_im += c##11_02_re * reg##02_im;\
1426  a11_im += c##11_02_im * reg##02_re;\
1427  a11_re += c##11_10_re * reg##10_re;\
1428  a11_re -= c##11_10_im * reg##10_im;\
1429  a11_im += c##11_10_re * reg##10_im;\
1430  a11_im += c##11_10_im * reg##10_re;\
1431  a11_re += c##11_11_re * reg##11_re;\
1432  a11_im += c##11_11_re * reg##11_im;\
1433  a11_re += c##11_12_re * reg##12_re;\
1434  a11_re -= c##11_12_im * reg##12_im;\
1435  a11_im += c##11_12_re * reg##12_im;\
1436  a11_im += c##11_12_im * reg##12_re;\
1437  \
1438  a12_re += c##12_00_re * reg##00_re;\
1439  a12_re -= c##12_00_im * reg##00_im;\
1440  a12_im += c##12_00_re * reg##00_im;\
1441  a12_im += c##12_00_im * reg##00_re;\
1442  a12_re += c##12_01_re * reg##01_re;\
1443  a12_re -= c##12_01_im * reg##01_im;\
1444  a12_im += c##12_01_re * reg##01_im;\
1445  a12_im += c##12_01_im * reg##01_re;\
1446  a12_re += c##12_02_re * reg##02_re;\
1447  a12_re -= c##12_02_im * reg##02_im;\
1448  a12_im += c##12_02_re * reg##02_im;\
1449  a12_im += c##12_02_im * reg##02_re;\
1450  a12_re += c##12_10_re * reg##10_re;\
1451  a12_re -= c##12_10_im * reg##10_im;\
1452  a12_im += c##12_10_re * reg##10_im;\
1453  a12_im += c##12_10_im * reg##10_re;\
1454  a12_re += c##12_11_re * reg##11_re;\
1455  a12_re -= c##12_11_im * reg##11_im;\
1456  a12_im += c##12_11_re * reg##11_im;\
1457  a12_im += c##12_11_im * reg##11_re;\
1458  a12_re += c##12_12_re * reg##12_re;\
1459  a12_im += c##12_12_re * reg##12_im;\
1460  \
1461  /*apply i*(2*kappa*mu=a)*gamma5*/\
1462  a00_re = a00_re - .5*a* reg##00_im; a00_im = a00_im + .5*a* reg##00_re;\
1463  a01_re = a01_re - .5*a* reg##01_im; a01_im = a01_im + .5*a* reg##01_re;\
1464  a02_re = a02_re - .5*a* reg##02_im; a02_im = a02_im + .5*a* reg##02_re;\
1465  a10_re = a10_re - .5*a* reg##10_im; a10_im = a10_im + .5*a* reg##10_re;\
1466  a11_re = a11_re - .5*a* reg##11_im; a11_im = a11_im + .5*a* reg##11_re;\
1467  a12_re = a12_re - .5*a* reg##12_im; a12_im = a12_im + .5*a* reg##12_re;\
1468  reg##00_re = a00_re; reg##00_im = a00_im;\
1469  reg##01_re = a01_re; reg##01_im = a01_im;\
1470  reg##02_re = a02_re; reg##02_im = a02_im;\
1471  reg##10_re = a10_re; reg##10_im = a10_im;\
1472  reg##11_re = a11_re; reg##11_im = a11_im;\
1473  reg##12_re = a12_re; reg##12_im = a12_im;\
1474 }\
1475 /*Apply inverse clover*/\
1476 {\
1477  ASSN_CLOVER(TM_INV_CLOVERTEX, 0) \
1478  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
1479  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
1480  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
1481  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
1482  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
1483  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
1484  \
1485  a00_re += cinv##00_00_re * reg##00_re;\
1486  a00_im += cinv##00_00_re * reg##00_im;\
1487  a00_re += cinv##00_01_re * reg##01_re;\
1488  a00_re -= cinv##00_01_im * reg##01_im;\
1489  a00_im += cinv##00_01_re * reg##01_im;\
1490  a00_im += cinv##00_01_im * reg##01_re;\
1491  a00_re += cinv##00_02_re * reg##02_re;\
1492  a00_re -= cinv##00_02_im * reg##02_im;\
1493  a00_im += cinv##00_02_re * reg##02_im;\
1494  a00_im += cinv##00_02_im * reg##02_re;\
1495  a00_re += cinv##00_10_re * reg##10_re;\
1496  a00_re -= cinv##00_10_im * reg##10_im;\
1497  a00_im += cinv##00_10_re * reg##10_im;\
1498  a00_im += cinv##00_10_im * reg##10_re;\
1499  a00_re += cinv##00_11_re * reg##11_re;\
1500  a00_re -= cinv##00_11_im * reg##11_im;\
1501  a00_im += cinv##00_11_re * reg##11_im;\
1502  a00_im += cinv##00_11_im * reg##11_re;\
1503  a00_re += cinv##00_12_re * reg##12_re;\
1504  a00_re -= cinv##00_12_im * reg##12_im;\
1505  a00_im += cinv##00_12_re * reg##12_im;\
1506  a00_im += cinv##00_12_im * reg##12_re;\
1507  \
1508  a01_re += cinv##01_00_re * reg##00_re;\
1509  a01_re -= cinv##01_00_im * reg##00_im;\
1510  a01_im += cinv##01_00_re * reg##00_im;\
1511  a01_im += cinv##01_00_im * reg##00_re;\
1512  a01_re += cinv##01_01_re * reg##01_re;\
1513  a01_im += cinv##01_01_re * reg##01_im;\
1514  a01_re += cinv##01_02_re * reg##02_re;\
1515  a01_re -= cinv##01_02_im * reg##02_im;\
1516  a01_im += cinv##01_02_re * reg##02_im;\
1517  a01_im += cinv##01_02_im * reg##02_re;\
1518  a01_re += cinv##01_10_re * reg##10_re;\
1519  a01_re -= cinv##01_10_im * reg##10_im;\
1520  a01_im += cinv##01_10_re * reg##10_im;\
1521  a01_im += cinv##01_10_im * reg##10_re;\
1522  a01_re += cinv##01_11_re * reg##11_re;\
1523  a01_re -= cinv##01_11_im * reg##11_im;\
1524  a01_im += cinv##01_11_re * reg##11_im;\
1525  a01_im += cinv##01_11_im * reg##11_re;\
1526  a01_re += cinv##01_12_re * reg##12_re;\
1527  a01_re -= cinv##01_12_im * reg##12_im;\
1528  a01_im += cinv##01_12_re * reg##12_im;\
1529  a01_im += cinv##01_12_im * reg##12_re;\
1530  \
1531  a02_re += cinv##02_00_re * reg##00_re;\
1532  a02_re -= cinv##02_00_im * reg##00_im;\
1533  a02_im += cinv##02_00_re * reg##00_im;\
1534  a02_im += cinv##02_00_im * reg##00_re;\
1535  a02_re += cinv##02_01_re * reg##01_re;\
1536  a02_re -= cinv##02_01_im * reg##01_im;\
1537  a02_im += cinv##02_01_re * reg##01_im;\
1538  a02_im += cinv##02_01_im * reg##01_re;\
1539  a02_re += cinv##02_02_re * reg##02_re;\
1540  a02_im += cinv##02_02_re * reg##02_im;\
1541  a02_re += cinv##02_10_re * reg##10_re;\
1542  a02_re -= cinv##02_10_im * reg##10_im;\
1543  a02_im += cinv##02_10_re * reg##10_im;\
1544  a02_im += cinv##02_10_im * reg##10_re;\
1545  a02_re += cinv##02_11_re * reg##11_re;\
1546  a02_re -= cinv##02_11_im * reg##11_im;\
1547  a02_im += cinv##02_11_re * reg##11_im;\
1548  a02_im += cinv##02_11_im * reg##11_re;\
1549  a02_re += cinv##02_12_re * reg##12_re;\
1550  a02_re -= cinv##02_12_im * reg##12_im;\
1551  a02_im += cinv##02_12_re * reg##12_im;\
1552  a02_im += cinv##02_12_im * reg##12_re;\
1553  \
1554  a10_re += cinv##10_00_re * reg##00_re;\
1555  a10_re -= cinv##10_00_im * reg##00_im;\
1556  a10_im += cinv##10_00_re * reg##00_im;\
1557  a10_im += cinv##10_00_im * reg##00_re;\
1558  a10_re += cinv##10_01_re * reg##01_re;\
1559  a10_re -= cinv##10_01_im * reg##01_im;\
1560  a10_im += cinv##10_01_re * reg##01_im;\
1561  a10_im += cinv##10_01_im * reg##01_re;\
1562  a10_re += cinv##10_02_re * reg##02_re;\
1563  a10_re -= cinv##10_02_im * reg##02_im;\
1564  a10_im += cinv##10_02_re * reg##02_im;\
1565  a10_im += cinv##10_02_im * reg##02_re;\
1566  a10_re += cinv##10_10_re * reg##10_re;\
1567  a10_im += cinv##10_10_re * reg##10_im;\
1568  a10_re += cinv##10_11_re * reg##11_re;\
1569  a10_re -= cinv##10_11_im * reg##11_im;\
1570  a10_im += cinv##10_11_re * reg##11_im;\
1571  a10_im += cinv##10_11_im * reg##11_re;\
1572  a10_re += cinv##10_12_re * reg##12_re;\
1573  a10_re -= cinv##10_12_im * reg##12_im;\
1574  a10_im += cinv##10_12_re * reg##12_im;\
1575  a10_im += cinv##10_12_im * reg##12_re;\
1576  \
1577  a11_re += cinv##11_00_re * reg##00_re;\
1578  a11_re -= cinv##11_00_im * reg##00_im;\
1579  a11_im += cinv##11_00_re * reg##00_im;\
1580  a11_im += cinv##11_00_im * reg##00_re;\
1581  a11_re += cinv##11_01_re * reg##01_re;\
1582  a11_re -= cinv##11_01_im * reg##01_im;\
1583  a11_im += cinv##11_01_re * reg##01_im;\
1584  a11_im += cinv##11_01_im * reg##01_re;\
1585  a11_re += cinv##11_02_re * reg##02_re;\
1586  a11_re -= cinv##11_02_im * reg##02_im;\
1587  a11_im += cinv##11_02_re * reg##02_im;\
1588  a11_im += cinv##11_02_im * reg##02_re;\
1589  a11_re += cinv##11_10_re * reg##10_re;\
1590  a11_re -= cinv##11_10_im * reg##10_im;\
1591  a11_im += cinv##11_10_re * reg##10_im;\
1592  a11_im += cinv##11_10_im * reg##10_re;\
1593  a11_re += cinv##11_11_re * reg##11_re;\
1594  a11_im += cinv##11_11_re * reg##11_im;\
1595  a11_re += cinv##11_12_re * reg##12_re;\
1596  a11_re -= cinv##11_12_im * reg##12_im;\
1597  a11_im += cinv##11_12_re * reg##12_im;\
1598  a11_im += cinv##11_12_im * reg##12_re;\
1599  \
1600  a12_re += cinv##12_00_re * reg##00_re;\
1601  a12_re -= cinv##12_00_im * reg##00_im;\
1602  a12_im += cinv##12_00_re * reg##00_im;\
1603  a12_im += cinv##12_00_im * reg##00_re;\
1604  a12_re += cinv##12_01_re * reg##01_re;\
1605  a12_re -= cinv##12_01_im * reg##01_im;\
1606  a12_im += cinv##12_01_re * reg##01_im;\
1607  a12_im += cinv##12_01_im * reg##01_re;\
1608  a12_re += cinv##12_02_re * reg##02_re;\
1609  a12_re -= cinv##12_02_im * reg##02_im;\
1610  a12_im += cinv##12_02_re * reg##02_im;\
1611  a12_im += cinv##12_02_im * reg##02_re;\
1612  a12_re += cinv##12_10_re * reg##10_re;\
1613  a12_re -= cinv##12_10_im * reg##10_im;\
1614  a12_im += cinv##12_10_re * reg##10_im;\
1615  a12_im += cinv##12_10_im * reg##10_re;\
1616  a12_re += cinv##12_11_re * reg##11_re;\
1617  a12_re -= cinv##12_11_im * reg##11_im;\
1618  a12_im += cinv##12_11_re * reg##11_im;\
1619  a12_im += cinv##12_11_im * reg##11_re;\
1620  a12_re += cinv##12_12_re * reg##12_re;\
1621  a12_im += cinv##12_12_re * reg##12_im;\
1622  \
1623  /*store the result*/\
1624  reg##00_re = a00_re; reg##00_im = a00_im;\
1625  reg##01_re = a01_re; reg##01_im = a01_im;\
1626  reg##02_re = a02_re; reg##02_im = a02_im;\
1627  reg##10_re = a10_re; reg##10_im = a10_im;\
1628  reg##11_re = a11_re; reg##11_im = a11_im;\
1629  reg##12_re = a12_re; reg##12_im = a12_im;\
1630  \
1631 }\
1632 \
1633 /* apply second chiral block*/\
1634 {\
1635  ASSN_CLOVER(TMCLOVERTEX, 1)\
1636  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
1637  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
1638  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
1639  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
1640  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
1641  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
1642  \
1643  a20_re += c##20_20_re * reg##20_re;\
1644  a20_im += c##20_20_re * reg##20_im;\
1645  a20_re += c##20_21_re * reg##21_re;\
1646  a20_re -= c##20_21_im * reg##21_im;\
1647  a20_im += c##20_21_re * reg##21_im;\
1648  a20_im += c##20_21_im * reg##21_re;\
1649  a20_re += c##20_22_re * reg##22_re;\
1650  a20_re -= c##20_22_im * reg##22_im;\
1651  a20_im += c##20_22_re * reg##22_im;\
1652  a20_im += c##20_22_im * reg##22_re;\
1653  a20_re += c##20_30_re * reg##30_re;\
1654  a20_re -= c##20_30_im * reg##30_im;\
1655  a20_im += c##20_30_re * reg##30_im;\
1656  a20_im += c##20_30_im * reg##30_re;\
1657  a20_re += c##20_31_re * reg##31_re;\
1658  a20_re -= c##20_31_im * reg##31_im;\
1659  a20_im += c##20_31_re * reg##31_im;\
1660  a20_im += c##20_31_im * reg##31_re;\
1661  a20_re += c##20_32_re * reg##32_re;\
1662  a20_re -= c##20_32_im * reg##32_im;\
1663  a20_im += c##20_32_re * reg##32_im;\
1664  a20_im += c##20_32_im * reg##32_re;\
1665  \
1666  a21_re += c##21_20_re * reg##20_re;\
1667  a21_re -= c##21_20_im * reg##20_im;\
1668  a21_im += c##21_20_re * reg##20_im;\
1669  a21_im += c##21_20_im * reg##20_re;\
1670  a21_re += c##21_21_re * reg##21_re;\
1671  a21_im += c##21_21_re * reg##21_im;\
1672  a21_re += c##21_22_re * reg##22_re;\
1673  a21_re -= c##21_22_im * reg##22_im;\
1674  a21_im += c##21_22_re * reg##22_im;\
1675  a21_im += c##21_22_im * reg##22_re;\
1676  a21_re += c##21_30_re * reg##30_re;\
1677  a21_re -= c##21_30_im * reg##30_im;\
1678  a21_im += c##21_30_re * reg##30_im;\
1679  a21_im += c##21_30_im * reg##30_re;\
1680  a21_re += c##21_31_re * reg##31_re;\
1681  a21_re -= c##21_31_im * reg##31_im;\
1682  a21_im += c##21_31_re * reg##31_im;\
1683  a21_im += c##21_31_im * reg##31_re;\
1684  a21_re += c##21_32_re * reg##32_re;\
1685  a21_re -= c##21_32_im * reg##32_im;\
1686  a21_im += c##21_32_re * reg##32_im;\
1687  a21_im += c##21_32_im * reg##32_re;\
1688  \
1689  a22_re += c##22_20_re * reg##20_re;\
1690  a22_re -= c##22_20_im * reg##20_im;\
1691  a22_im += c##22_20_re * reg##20_im;\
1692  a22_im += c##22_20_im * reg##20_re;\
1693  a22_re += c##22_21_re * reg##21_re;\
1694  a22_re -= c##22_21_im * reg##21_im;\
1695  a22_im += c##22_21_re * reg##21_im;\
1696  a22_im += c##22_21_im * reg##21_re;\
1697  a22_re += c##22_22_re * reg##22_re;\
1698  a22_im += c##22_22_re * reg##22_im;\
1699  a22_re += c##22_30_re * reg##30_re;\
1700  a22_re -= c##22_30_im * reg##30_im;\
1701  a22_im += c##22_30_re * reg##30_im;\
1702  a22_im += c##22_30_im * reg##30_re;\
1703  a22_re += c##22_31_re * reg##31_re;\
1704  a22_re -= c##22_31_im * reg##31_im;\
1705  a22_im += c##22_31_re * reg##31_im;\
1706  a22_im += c##22_31_im * reg##31_re;\
1707  a22_re += c##22_32_re * reg##32_re;\
1708  a22_re -= c##22_32_im * reg##32_im;\
1709  a22_im += c##22_32_re * reg##32_im;\
1710  a22_im += c##22_32_im * reg##32_re;\
1711  \
1712  a30_re += c##30_20_re * reg##20_re;\
1713  a30_re -= c##30_20_im * reg##20_im;\
1714  a30_im += c##30_20_re * reg##20_im;\
1715  a30_im += c##30_20_im * reg##20_re;\
1716  a30_re += c##30_21_re * reg##21_re;\
1717  a30_re -= c##30_21_im * reg##21_im;\
1718  a30_im += c##30_21_re * reg##21_im;\
1719  a30_im += c##30_21_im * reg##21_re;\
1720  a30_re += c##30_22_re * reg##22_re;\
1721  a30_re -= c##30_22_im * reg##22_im;\
1722  a30_im += c##30_22_re * reg##22_im;\
1723  a30_im += c##30_22_im * reg##22_re;\
1724  a30_re += c##30_30_re * reg##30_re;\
1725  a30_im += c##30_30_re * reg##30_im;\
1726  a30_re += c##30_31_re * reg##31_re;\
1727  a30_re -= c##30_31_im * reg##31_im;\
1728  a30_im += c##30_31_re * reg##31_im;\
1729  a30_im += c##30_31_im * reg##31_re;\
1730  a30_re += c##30_32_re * reg##32_re;\
1731  a30_re -= c##30_32_im * reg##32_im;\
1732  a30_im += c##30_32_re * reg##32_im;\
1733  a30_im += c##30_32_im * reg##32_re;\
1734  \
1735  a31_re += c##31_20_re * reg##20_re;\
1736  a31_re -= c##31_20_im * reg##20_im;\
1737  a31_im += c##31_20_re * reg##20_im;\
1738  a31_im += c##31_20_im * reg##20_re;\
1739  a31_re += c##31_21_re * reg##21_re;\
1740  a31_re -= c##31_21_im * reg##21_im;\
1741  a31_im += c##31_21_re * reg##21_im;\
1742  a31_im += c##31_21_im * reg##21_re;\
1743  a31_re += c##31_22_re * reg##22_re;\
1744  a31_re -= c##31_22_im * reg##22_im;\
1745  a31_im += c##31_22_re * reg##22_im;\
1746  a31_im += c##31_22_im * reg##22_re;\
1747  a31_re += c##31_30_re * reg##30_re;\
1748  a31_re -= c##31_30_im * reg##30_im;\
1749  a31_im += c##31_30_re * reg##30_im;\
1750  a31_im += c##31_30_im * reg##30_re;\
1751  a31_re += c##31_31_re * reg##31_re;\
1752  a31_im += c##31_31_re * reg##31_im;\
1753  a31_re += c##31_32_re * reg##32_re;\
1754  a31_re -= c##31_32_im * reg##32_im;\
1755  a31_im += c##31_32_re * reg##32_im;\
1756  a31_im += c##31_32_im * reg##32_re;\
1757  \
1758  a32_re += c##32_20_re * reg##20_re;\
1759  a32_re -= c##32_20_im * reg##20_im;\
1760  a32_im += c##32_20_re * reg##20_im;\
1761  a32_im += c##32_20_im * reg##20_re;\
1762  a32_re += c##32_21_re * reg##21_re;\
1763  a32_re -= c##32_21_im * reg##21_im;\
1764  a32_im += c##32_21_re * reg##21_im;\
1765  a32_im += c##32_21_im * reg##21_re;\
1766  a32_re += c##32_22_re * reg##22_re;\
1767  a32_re -= c##32_22_im * reg##22_im;\
1768  a32_im += c##32_22_re * reg##22_im;\
1769  a32_im += c##32_22_im * reg##22_re;\
1770  a32_re += c##32_30_re * reg##30_re;\
1771  a32_re -= c##32_30_im * reg##30_im;\
1772  a32_im += c##32_30_re * reg##30_im;\
1773  a32_im += c##32_30_im * reg##30_re;\
1774  a32_re += c##32_31_re * reg##31_re;\
1775  a32_re -= c##32_31_im * reg##31_im;\
1776  a32_im += c##32_31_re * reg##31_im;\
1777  a32_im += c##32_31_im * reg##31_re;\
1778  a32_re += c##32_32_re * reg##32_re;\
1779  a32_im += c##32_32_re * reg##32_im;\
1780  \
1781  /*apply i*(2*kappa*mu=a)*gamma5*/\
1782  a20_re = a20_re + .5*a* reg##20_im; a20_im = a20_im - .5*a* reg##20_re;\
1783  a21_re = a21_re + .5*a* reg##21_im; a21_im = a21_im - .5*a* reg##21_re;\
1784  a22_re = a22_re + .5*a* reg##22_im; a22_im = a22_im - .5*a* reg##22_re;\
1785  a30_re = a30_re + .5*a* reg##30_im; a30_im = a30_im - .5*a* reg##30_re;\
1786  a31_re = a31_re + .5*a* reg##31_im; a31_im = a31_im - .5*a* reg##31_re;\
1787  a32_re = a32_re + .5*a* reg##32_im; a32_im = a32_im - .5*a* reg##32_re;\
1788  reg##20_re = a20_re; reg##20_im = a20_im;\
1789  reg##21_re = a21_re; reg##21_im = a21_im;\
1790  reg##22_re = a22_re; reg##22_im = a22_im;\
1791  reg##30_re = a30_re; reg##30_im = a30_im;\
1792  reg##31_re = a31_re; reg##31_im = a31_im;\
1793  reg##32_re = a32_re; reg##32_im = a32_im;\
1794 }\
1795 /*Apply inverse clover*/\
1796 {\
1797  ASSN_CLOVER(TM_INV_CLOVERTEX, 1) \
1798  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
1799  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
1800  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
1801  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
1802  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
1803  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
1804  \
1805  a20_re += cinv##20_20_re * reg##20_re;\
1806  a20_im += cinv##20_20_re * reg##20_im;\
1807  a20_re += cinv##20_21_re * reg##21_re;\
1808  a20_re -= cinv##20_21_im * reg##21_im;\
1809  a20_im += cinv##20_21_re * reg##21_im;\
1810  a20_im += cinv##20_21_im * reg##21_re;\
1811  a20_re += cinv##20_22_re * reg##22_re;\
1812  a20_re -= cinv##20_22_im * reg##22_im;\
1813  a20_im += cinv##20_22_re * reg##22_im;\
1814  a20_im += cinv##20_22_im * reg##22_re;\
1815  a20_re += cinv##20_30_re * reg##30_re;\
1816  a20_re -= cinv##20_30_im * reg##30_im;\
1817  a20_im += cinv##20_30_re * reg##30_im;\
1818  a20_im += cinv##20_30_im * reg##30_re;\
1819  a20_re += cinv##20_31_re * reg##31_re;\
1820  a20_re -= cinv##20_31_im * reg##31_im;\
1821  a20_im += cinv##20_31_re * reg##31_im;\
1822  a20_im += cinv##20_31_im * reg##31_re;\
1823  a20_re += cinv##20_32_re * reg##32_re;\
1824  a20_re -= cinv##20_32_im * reg##32_im;\
1825  a20_im += cinv##20_32_re * reg##32_im;\
1826  a20_im += cinv##20_32_im * reg##32_re;\
1827  \
1828  a21_re += cinv##21_20_re * reg##20_re;\
1829  a21_re -= cinv##21_20_im * reg##20_im;\
1830  a21_im += cinv##21_20_re * reg##20_im;\
1831  a21_im += cinv##21_20_im * reg##20_re;\
1832  a21_re += cinv##21_21_re * reg##21_re;\
1833  a21_im += cinv##21_21_re * reg##21_im;\
1834  a21_re += cinv##21_22_re * reg##22_re;\
1835  a21_re -= cinv##21_22_im * reg##22_im;\
1836  a21_im += cinv##21_22_re * reg##22_im;\
1837  a21_im += cinv##21_22_im * reg##22_re;\
1838  a21_re += cinv##21_30_re * reg##30_re;\
1839  a21_re -= cinv##21_30_im * reg##30_im;\
1840  a21_im += cinv##21_30_re * reg##30_im;\
1841  a21_im += cinv##21_30_im * reg##30_re;\
1842  a21_re += cinv##21_31_re * reg##31_re;\
1843  a21_re -= cinv##21_31_im * reg##31_im;\
1844  a21_im += cinv##21_31_re * reg##31_im;\
1845  a21_im += cinv##21_31_im * reg##31_re;\
1846  a21_re += cinv##21_32_re * reg##32_re;\
1847  a21_re -= cinv##21_32_im * reg##32_im;\
1848  a21_im += cinv##21_32_re * reg##32_im;\
1849  a21_im += cinv##21_32_im * reg##32_re;\
1850  \
1851  a22_re += cinv##22_20_re * reg##20_re;\
1852  a22_re -= cinv##22_20_im * reg##20_im;\
1853  a22_im += cinv##22_20_re * reg##20_im;\
1854  a22_im += cinv##22_20_im * reg##20_re;\
1855  a22_re += cinv##22_21_re * reg##21_re;\
1856  a22_re -= cinv##22_21_im * reg##21_im;\
1857  a22_im += cinv##22_21_re * reg##21_im;\
1858  a22_im += cinv##22_21_im * reg##21_re;\
1859  a22_re += cinv##22_22_re * reg##22_re;\
1860  a22_im += cinv##22_22_re * reg##22_im;\
1861  a22_re += cinv##22_30_re * reg##30_re;\
1862  a22_re -= cinv##22_30_im * reg##30_im;\
1863  a22_im += cinv##22_30_re * reg##30_im;\
1864  a22_im += cinv##22_30_im * reg##30_re;\
1865  a22_re += cinv##22_31_re * reg##31_re;\
1866  a22_re -= cinv##22_31_im * reg##31_im;\
1867  a22_im += cinv##22_31_re * reg##31_im;\
1868  a22_im += cinv##22_31_im * reg##31_re;\
1869  a22_re += cinv##22_32_re * reg##32_re;\
1870  a22_re -= cinv##22_32_im * reg##32_im;\
1871  a22_im += cinv##22_32_re * reg##32_im;\
1872  a22_im += cinv##22_32_im * reg##32_re;\
1873  \
1874  a30_re += cinv##30_20_re * reg##20_re;\
1875  a30_re -= cinv##30_20_im * reg##20_im;\
1876  a30_im += cinv##30_20_re * reg##20_im;\
1877  a30_im += cinv##30_20_im * reg##20_re;\
1878  a30_re += cinv##30_21_re * reg##21_re;\
1879  a30_re -= cinv##30_21_im * reg##21_im;\
1880  a30_im += cinv##30_21_re * reg##21_im;\
1881  a30_im += cinv##30_21_im * reg##21_re;\
1882  a30_re += cinv##30_22_re * reg##22_re;\
1883  a30_re -= cinv##30_22_im * reg##22_im;\
1884  a30_im += cinv##30_22_re * reg##22_im;\
1885  a30_im += cinv##30_22_im * reg##22_re;\
1886  a30_re += cinv##30_30_re * reg##30_re;\
1887  a30_im += cinv##30_30_re * reg##30_im;\
1888  a30_re += cinv##30_31_re * reg##31_re;\
1889  a30_re -= cinv##30_31_im * reg##31_im;\
1890  a30_im += cinv##30_31_re * reg##31_im;\
1891  a30_im += cinv##30_31_im * reg##31_re;\
1892  a30_re += cinv##30_32_re * reg##32_re;\
1893  a30_re -= cinv##30_32_im * reg##32_im;\
1894  a30_im += cinv##30_32_re * reg##32_im;\
1895  a30_im += cinv##30_32_im * reg##32_re;\
1896  \
1897  a31_re += cinv##31_20_re * reg##20_re;\
1898  a31_re -= cinv##31_20_im * reg##20_im;\
1899  a31_im += cinv##31_20_re * reg##20_im;\
1900  a31_im += cinv##31_20_im * reg##20_re;\
1901  a31_re += cinv##31_21_re * reg##21_re;\
1902  a31_re -= cinv##31_21_im * reg##21_im;\
1903  a31_im += cinv##31_21_re * reg##21_im;\
1904  a31_im += cinv##31_21_im * reg##21_re;\
1905  a31_re += cinv##31_22_re * reg##22_re;\
1906  a31_re -= cinv##31_22_im * reg##22_im;\
1907  a31_im += cinv##31_22_re * reg##22_im;\
1908  a31_im += cinv##31_22_im * reg##22_re;\
1909  a31_re += cinv##31_30_re * reg##30_re;\
1910  a31_re -= cinv##31_30_im * reg##30_im;\
1911  a31_im += cinv##31_30_re * reg##30_im;\
1912  a31_im += cinv##31_30_im * reg##30_re;\
1913  a31_re += cinv##31_31_re * reg##31_re;\
1914  a31_im += cinv##31_31_re * reg##31_im;\
1915  a31_re += cinv##31_32_re * reg##32_re;\
1916  a31_re -= cinv##31_32_im * reg##32_im;\
1917  a31_im += cinv##31_32_re * reg##32_im;\
1918  a31_im += cinv##31_32_im * reg##32_re;\
1919  \
1920  a32_re += cinv##32_20_re * reg##20_re;\
1921  a32_re -= cinv##32_20_im * reg##20_im;\
1922  a32_im += cinv##32_20_re * reg##20_im;\
1923  a32_im += cinv##32_20_im * reg##20_re;\
1924  a32_re += cinv##32_21_re * reg##21_re;\
1925  a32_re -= cinv##32_21_im * reg##21_im;\
1926  a32_im += cinv##32_21_re * reg##21_im;\
1927  a32_im += cinv##32_21_im * reg##21_re;\
1928  a32_re += cinv##32_22_re * reg##22_re;\
1929  a32_re -= cinv##32_22_im * reg##22_im;\
1930  a32_im += cinv##32_22_re * reg##22_im;\
1931  a32_im += cinv##32_22_im * reg##22_re;\
1932  a32_re += cinv##32_30_re * reg##30_re;\
1933  a32_re -= cinv##32_30_im * reg##30_im;\
1934  a32_im += cinv##32_30_re * reg##30_im;\
1935  a32_im += cinv##32_30_im * reg##30_re;\
1936  a32_re += cinv##32_31_re * reg##31_re;\
1937  a32_re -= cinv##32_31_im * reg##31_im;\
1938  a32_im += cinv##32_31_re * reg##31_im;\
1939  a32_im += cinv##32_31_im * reg##31_re;\
1940  a32_re += cinv##32_32_re * reg##32_re;\
1941  a32_im += cinv##32_32_re * reg##32_im;\
1942  \
1943  /*store the result*/\
1944  reg##20_re = a20_re; reg##20_im = a20_im;\
1945  reg##21_re = a21_re; reg##21_im = a21_im;\
1946  reg##22_re = a22_re; reg##22_im = a22_im;\
1947  reg##30_re = a30_re; reg##30_im = a30_im;\
1948  reg##31_re = a31_re; reg##31_im = a31_im;\
1949  reg##32_re = a32_re; reg##32_im = a32_im;\
1950  \
1951 }\
1952 \
1953 /* change back from chiral basis*/\
1954 /* (note: required factor of 1/2 is included in clover term normalization)*/\
1955 {\
1956  spinorFloat a00_re = reg##10_re + reg##30_re;\
1957  spinorFloat a00_im = reg##10_im + reg##30_im;\
1958  spinorFloat a10_re = -reg##00_re - reg##20_re;\
1959  spinorFloat a10_im = -reg##00_im - reg##20_im;\
1960  spinorFloat a20_re = reg##10_re - reg##30_re;\
1961  spinorFloat a20_im = reg##10_im - reg##30_im;\
1962  spinorFloat a30_re = -reg##00_re + reg##20_re;\
1963  spinorFloat a30_im = -reg##00_im + reg##20_im;\
1964  \
1965  reg##00_re = a00_re*2.; reg##00_im = a00_im*2.;\
1966  reg##10_re = a10_re*2.; reg##10_im = a10_im*2.;\
1967  reg##20_re = a20_re*2.; reg##20_im = a20_im*2.;\
1968  reg##30_re = a30_re*2.; reg##30_im = a30_im*2.;\
1969 }\
1970 \
1971 {\
1972  spinorFloat a01_re = reg##11_re + reg##31_re;\
1973  spinorFloat a01_im = reg##11_im + reg##31_im;\
1974  spinorFloat a11_re = -reg##01_re - reg##21_re;\
1975  spinorFloat a11_im = -reg##01_im - reg##21_im;\
1976  spinorFloat a21_re = reg##11_re - reg##31_re;\
1977  spinorFloat a21_im = reg##11_im - reg##31_im;\
1978  spinorFloat a31_re = -reg##01_re + reg##21_re;\
1979  spinorFloat a31_im = -reg##01_im + reg##21_im;\
1980  \
1981  reg##01_re = a01_re*2.; reg##01_im = a01_im*2.;\
1982  reg##11_re = a11_re*2.; reg##11_im = a11_im*2.;\
1983  reg##21_re = a21_re*2.; reg##21_im = a21_im*2.;\
1984  reg##31_re = a31_re*2.; reg##31_im = a31_im*2.;\
1985 }\
1986 \
1987 {\
1988  spinorFloat a02_re = reg##12_re + reg##32_re;\
1989  spinorFloat a02_im = reg##12_im + reg##32_im;\
1990  spinorFloat a12_re = -reg##02_re - reg##22_re;\
1991  spinorFloat a12_im = -reg##02_im - reg##22_im;\
1992  spinorFloat a22_re = reg##12_re - reg##32_re;\
1993  spinorFloat a22_im = reg##12_im - reg##32_im;\
1994  spinorFloat a32_re = -reg##02_re + reg##22_re;\
1995  spinorFloat a32_im = -reg##02_im + reg##22_im;\
1996  \
1997  reg##02_re = a02_re*2.; reg##02_im = a02_im*2.;\
1998  reg##12_re = a12_re*2.; reg##12_im = a12_im*2.;\
1999  reg##22_re = a22_re*2.; reg##22_im = a22_im*2.;\
2000  reg##32_re = a32_re*2.; reg##32_im = a32_im*2.;\
2001 }\
2002 
2003 
2004 #define APPLY_CLOVER_TWIST_DYN_INV(c, a, reg)\
2005 \
2006 /* change to chiral basis*/\
2007 {\
2008  spinorFloat a00_re = -reg##10_re - reg##30_re;\
2009  spinorFloat a00_im = -reg##10_im - reg##30_im;\
2010  spinorFloat a10_re = reg##00_re + reg##20_re;\
2011  spinorFloat a10_im = reg##00_im + reg##20_im;\
2012  spinorFloat a20_re = -reg##10_re + reg##30_re;\
2013  spinorFloat a20_im = -reg##10_im + reg##30_im;\
2014  spinorFloat a30_re = reg##00_re - reg##20_re;\
2015  spinorFloat a30_im = reg##00_im - reg##20_im;\
2016  \
2017  reg##00_re = a00_re; reg##00_im = a00_im;\
2018  reg##10_re = a10_re; reg##10_im = a10_im;\
2019  reg##20_re = a20_re; reg##20_im = a20_im;\
2020  reg##30_re = a30_re; reg##30_im = a30_im;\
2021 }\
2022 \
2023 {\
2024  spinorFloat a01_re = -reg##11_re - reg##31_re;\
2025  spinorFloat a01_im = -reg##11_im - reg##31_im;\
2026  spinorFloat a11_re = reg##01_re + reg##21_re;\
2027  spinorFloat a11_im = reg##01_im + reg##21_im;\
2028  spinorFloat a21_re = -reg##11_re + reg##31_re;\
2029  spinorFloat a21_im = -reg##11_im + reg##31_im;\
2030  spinorFloat a31_re = reg##01_re - reg##21_re;\
2031  spinorFloat a31_im = reg##01_im - reg##21_im;\
2032  \
2033  reg##01_re = a01_re; reg##01_im = a01_im;\
2034  reg##11_re = a11_re; reg##11_im = a11_im;\
2035  reg##21_re = a21_re; reg##21_im = a21_im;\
2036  reg##31_re = a31_re; reg##31_im = a31_im;\
2037 }\
2038 \
2039 {\
2040  spinorFloat a02_re = -reg##12_re - reg##32_re;\
2041  spinorFloat a02_im = -reg##12_im - reg##32_im;\
2042  spinorFloat a12_re = reg##02_re + reg##22_re;\
2043  spinorFloat a12_im = reg##02_im + reg##22_im;\
2044  spinorFloat a22_re = -reg##12_re + reg##32_re;\
2045  spinorFloat a22_im = -reg##12_im + reg##32_im;\
2046  spinorFloat a32_re = reg##02_re - reg##22_re;\
2047  spinorFloat a32_im = reg##02_im - reg##22_im;\
2048  \
2049  reg##02_re = a02_re; reg##02_im = a02_im;\
2050  reg##12_re = a12_re; reg##12_im = a12_im;\
2051  reg##22_re = a22_re; reg##22_im = a22_im;\
2052  reg##32_re = a32_re; reg##32_im = a32_im;\
2053 }\
2054 \
2055 /* apply first chiral block*/\
2056 {\
2057  ASSN_CLOVER(TMCLOVERTEX, 0)\
2058  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
2059  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
2060  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
2061  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
2062  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
2063  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
2064  \
2065  a00_re += c##00_00_re * reg##00_re;\
2066  a00_im += c##00_00_re * reg##00_im;\
2067  a00_re += c##00_01_re * reg##01_re;\
2068  a00_re -= c##00_01_im * reg##01_im;\
2069  a00_im += c##00_01_re * reg##01_im;\
2070  a00_im += c##00_01_im * reg##01_re;\
2071  a00_re += c##00_02_re * reg##02_re;\
2072  a00_re -= c##00_02_im * reg##02_im;\
2073  a00_im += c##00_02_re * reg##02_im;\
2074  a00_im += c##00_02_im * reg##02_re;\
2075  a00_re += c##00_10_re * reg##10_re;\
2076  a00_re -= c##00_10_im * reg##10_im;\
2077  a00_im += c##00_10_re * reg##10_im;\
2078  a00_im += c##00_10_im * reg##10_re;\
2079  a00_re += c##00_11_re * reg##11_re;\
2080  a00_re -= c##00_11_im * reg##11_im;\
2081  a00_im += c##00_11_re * reg##11_im;\
2082  a00_im += c##00_11_im * reg##11_re;\
2083  a00_re += c##00_12_re * reg##12_re;\
2084  a00_re -= c##00_12_im * reg##12_im;\
2085  a00_im += c##00_12_re * reg##12_im;\
2086  a00_im += c##00_12_im * reg##12_re;\
2087  \
2088  a01_re += c##01_00_re * reg##00_re;\
2089  a01_re -= c##01_00_im * reg##00_im;\
2090  a01_im += c##01_00_re * reg##00_im;\
2091  a01_im += c##01_00_im * reg##00_re;\
2092  a01_re += c##01_01_re * reg##01_re;\
2093  a01_im += c##01_01_re * reg##01_im;\
2094  a01_re += c##01_02_re * reg##02_re;\
2095  a01_re -= c##01_02_im * reg##02_im;\
2096  a01_im += c##01_02_re * reg##02_im;\
2097  a01_im += c##01_02_im * reg##02_re;\
2098  a01_re += c##01_10_re * reg##10_re;\
2099  a01_re -= c##01_10_im * reg##10_im;\
2100  a01_im += c##01_10_re * reg##10_im;\
2101  a01_im += c##01_10_im * reg##10_re;\
2102  a01_re += c##01_11_re * reg##11_re;\
2103  a01_re -= c##01_11_im * reg##11_im;\
2104  a01_im += c##01_11_re * reg##11_im;\
2105  a01_im += c##01_11_im * reg##11_re;\
2106  a01_re += c##01_12_re * reg##12_re;\
2107  a01_re -= c##01_12_im * reg##12_im;\
2108  a01_im += c##01_12_re * reg##12_im;\
2109  a01_im += c##01_12_im * reg##12_re;\
2110  \
2111  a02_re += c##02_00_re * reg##00_re;\
2112  a02_re -= c##02_00_im * reg##00_im;\
2113  a02_im += c##02_00_re * reg##00_im;\
2114  a02_im += c##02_00_im * reg##00_re;\
2115  a02_re += c##02_01_re * reg##01_re;\
2116  a02_re -= c##02_01_im * reg##01_im;\
2117  a02_im += c##02_01_re * reg##01_im;\
2118  a02_im += c##02_01_im * reg##01_re;\
2119  a02_re += c##02_02_re * reg##02_re;\
2120  a02_im += c##02_02_re * reg##02_im;\
2121  a02_re += c##02_10_re * reg##10_re;\
2122  a02_re -= c##02_10_im * reg##10_im;\
2123  a02_im += c##02_10_re * reg##10_im;\
2124  a02_im += c##02_10_im * reg##10_re;\
2125  a02_re += c##02_11_re * reg##11_re;\
2126  a02_re -= c##02_11_im * reg##11_im;\
2127  a02_im += c##02_11_re * reg##11_im;\
2128  a02_im += c##02_11_im * reg##11_re;\
2129  a02_re += c##02_12_re * reg##12_re;\
2130  a02_re -= c##02_12_im * reg##12_im;\
2131  a02_im += c##02_12_re * reg##12_im;\
2132  a02_im += c##02_12_im * reg##12_re;\
2133  \
2134  a10_re += c##10_00_re * reg##00_re;\
2135  a10_re -= c##10_00_im * reg##00_im;\
2136  a10_im += c##10_00_re * reg##00_im;\
2137  a10_im += c##10_00_im * reg##00_re;\
2138  a10_re += c##10_01_re * reg##01_re;\
2139  a10_re -= c##10_01_im * reg##01_im;\
2140  a10_im += c##10_01_re * reg##01_im;\
2141  a10_im += c##10_01_im * reg##01_re;\
2142  a10_re += c##10_02_re * reg##02_re;\
2143  a10_re -= c##10_02_im * reg##02_im;\
2144  a10_im += c##10_02_re * reg##02_im;\
2145  a10_im += c##10_02_im * reg##02_re;\
2146  a10_re += c##10_10_re * reg##10_re;\
2147  a10_im += c##10_10_re * reg##10_im;\
2148  a10_re += c##10_11_re * reg##11_re;\
2149  a10_re -= c##10_11_im * reg##11_im;\
2150  a10_im += c##10_11_re * reg##11_im;\
2151  a10_im += c##10_11_im * reg##11_re;\
2152  a10_re += c##10_12_re * reg##12_re;\
2153  a10_re -= c##10_12_im * reg##12_im;\
2154  a10_im += c##10_12_re * reg##12_im;\
2155  a10_im += c##10_12_im * reg##12_re;\
2156  \
2157  a11_re += c##11_00_re * reg##00_re;\
2158  a11_re -= c##11_00_im * reg##00_im;\
2159  a11_im += c##11_00_re * reg##00_im;\
2160  a11_im += c##11_00_im * reg##00_re;\
2161  a11_re += c##11_01_re * reg##01_re;\
2162  a11_re -= c##11_01_im * reg##01_im;\
2163  a11_im += c##11_01_re * reg##01_im;\
2164  a11_im += c##11_01_im * reg##01_re;\
2165  a11_re += c##11_02_re * reg##02_re;\
2166  a11_re -= c##11_02_im * reg##02_im;\
2167  a11_im += c##11_02_re * reg##02_im;\
2168  a11_im += c##11_02_im * reg##02_re;\
2169  a11_re += c##11_10_re * reg##10_re;\
2170  a11_re -= c##11_10_im * reg##10_im;\
2171  a11_im += c##11_10_re * reg##10_im;\
2172  a11_im += c##11_10_im * reg##10_re;\
2173  a11_re += c##11_11_re * reg##11_re;\
2174  a11_im += c##11_11_re * reg##11_im;\
2175  a11_re += c##11_12_re * reg##12_re;\
2176  a11_re -= c##11_12_im * reg##12_im;\
2177  a11_im += c##11_12_re * reg##12_im;\
2178  a11_im += c##11_12_im * reg##12_re;\
2179  \
2180  a12_re += c##12_00_re * reg##00_re;\
2181  a12_re -= c##12_00_im * reg##00_im;\
2182  a12_im += c##12_00_re * reg##00_im;\
2183  a12_im += c##12_00_im * reg##00_re;\
2184  a12_re += c##12_01_re * reg##01_re;\
2185  a12_re -= c##12_01_im * reg##01_im;\
2186  a12_im += c##12_01_re * reg##01_im;\
2187  a12_im += c##12_01_im * reg##01_re;\
2188  a12_re += c##12_02_re * reg##02_re;\
2189  a12_re -= c##12_02_im * reg##02_im;\
2190  a12_im += c##12_02_re * reg##02_im;\
2191  a12_im += c##12_02_im * reg##02_re;\
2192  a12_re += c##12_10_re * reg##10_re;\
2193  a12_re -= c##12_10_im * reg##10_im;\
2194  a12_im += c##12_10_re * reg##10_im;\
2195  a12_im += c##12_10_im * reg##10_re;\
2196  a12_re += c##12_11_re * reg##11_re;\
2197  a12_re -= c##12_11_im * reg##11_im;\
2198  a12_im += c##12_11_re * reg##11_im;\
2199  a12_im += c##12_11_im * reg##11_re;\
2200  a12_re += c##12_12_re * reg##12_re;\
2201  a12_im += c##12_12_re * reg##12_im;\
2202  \
2203  /*apply i*(2*kappa*mu=a)*gamma5*/\
2204  a00_re = a00_re - .5*a* reg##00_im; a00_im = a00_im + .5*a* reg##00_re;\
2205  a01_re = a01_re - .5*a* reg##01_im; a01_im = a01_im + .5*a* reg##01_re;\
2206  a02_re = a02_re - .5*a* reg##02_im; a02_im = a02_im + .5*a* reg##02_re;\
2207  a10_re = a10_re - .5*a* reg##10_im; a10_im = a10_im + .5*a* reg##10_re;\
2208  a11_re = a11_re - .5*a* reg##11_im; a11_im = a11_im + .5*a* reg##11_re;\
2209  a12_re = a12_re - .5*a* reg##12_im; a12_im = a12_im + .5*a* reg##12_re;\
2210  reg##00_re = a00_re; reg##00_im = a00_im;\
2211  reg##01_re = a01_re; reg##01_im = a01_im;\
2212  reg##02_re = a02_re; reg##02_im = a02_im;\
2213  reg##10_re = a10_re; reg##10_im = a10_im;\
2214  reg##11_re = a11_re; reg##11_im = a11_im;\
2215  reg##12_re = a12_re; reg##12_im = a12_im;\
2216 }\
2217 /*Apply inverse clover*/\
2218 {\
2219  /*ASSN_CLOVER(TMCLOVERTEX, 0)*/ /* PUEDO EIMINARLO PORQUE YA LO HEMOS LEIDO */ \
2220  INVERT_CLOVER(c) \
2221  spinorFloat a00_re = 0; spinorFloat a00_im = 0;\
2222  spinorFloat a01_re = 0; spinorFloat a01_im = 0;\
2223  spinorFloat a02_re = 0; spinorFloat a02_im = 0;\
2224  spinorFloat a10_re = 0; spinorFloat a10_im = 0;\
2225  spinorFloat a11_re = 0; spinorFloat a11_im = 0;\
2226  spinorFloat a12_re = 0; spinorFloat a12_im = 0;\
2227  \
2228  a00_re += c##00_00_re * reg##00_re;\
2229  a00_im += c##00_00_re * reg##00_im;\
2230  a00_re += c##00_01_re * reg##01_re;\
2231  a00_re -= c##00_01_im * reg##01_im;\
2232  a00_im += c##00_01_re * reg##01_im;\
2233  a00_im += c##00_01_im * reg##01_re;\
2234  a00_re += c##00_02_re * reg##02_re;\
2235  a00_re -= c##00_02_im * reg##02_im;\
2236  a00_im += c##00_02_re * reg##02_im;\
2237  a00_im += c##00_02_im * reg##02_re;\
2238  a00_re += c##00_10_re * reg##10_re;\
2239  a00_re -= c##00_10_im * reg##10_im;\
2240  a00_im += c##00_10_re * reg##10_im;\
2241  a00_im += c##00_10_im * reg##10_re;\
2242  a00_re += c##00_11_re * reg##11_re;\
2243  a00_re -= c##00_11_im * reg##11_im;\
2244  a00_im += c##00_11_re * reg##11_im;\
2245  a00_im += c##00_11_im * reg##11_re;\
2246  a00_re += c##00_12_re * reg##12_re;\
2247  a00_re -= c##00_12_im * reg##12_im;\
2248  a00_im += c##00_12_re * reg##12_im;\
2249  a00_im += c##00_12_im * reg##12_re;\
2250  \
2251  a01_re += c##01_00_re * reg##00_re;\
2252  a01_re -= c##01_00_im * reg##00_im;\
2253  a01_im += c##01_00_re * reg##00_im;\
2254  a01_im += c##01_00_im * reg##00_re;\
2255  a01_re += c##01_01_re * reg##01_re;\
2256  a01_im += c##01_01_re * reg##01_im;\
2257  a01_re += c##01_02_re * reg##02_re;\
2258  a01_re -= c##01_02_im * reg##02_im;\
2259  a01_im += c##01_02_re * reg##02_im;\
2260  a01_im += c##01_02_im * reg##02_re;\
2261  a01_re += c##01_10_re * reg##10_re;\
2262  a01_re -= c##01_10_im * reg##10_im;\
2263  a01_im += c##01_10_re * reg##10_im;\
2264  a01_im += c##01_10_im * reg##10_re;\
2265  a01_re += c##01_11_re * reg##11_re;\
2266  a01_re -= c##01_11_im * reg##11_im;\
2267  a01_im += c##01_11_re * reg##11_im;\
2268  a01_im += c##01_11_im * reg##11_re;\
2269  a01_re += c##01_12_re * reg##12_re;\
2270  a01_re -= c##01_12_im * reg##12_im;\
2271  a01_im += c##01_12_re * reg##12_im;\
2272  a01_im += c##01_12_im * reg##12_re;\
2273  \
2274  a02_re += c##02_00_re * reg##00_re;\
2275  a02_re -= c##02_00_im * reg##00_im;\
2276  a02_im += c##02_00_re * reg##00_im;\
2277  a02_im += c##02_00_im * reg##00_re;\
2278  a02_re += c##02_01_re * reg##01_re;\
2279  a02_re -= c##02_01_im * reg##01_im;\
2280  a02_im += c##02_01_re * reg##01_im;\
2281  a02_im += c##02_01_im * reg##01_re;\
2282  a02_re += c##02_02_re * reg##02_re;\
2283  a02_im += c##02_02_re * reg##02_im;\
2284  a02_re += c##02_10_re * reg##10_re;\
2285  a02_re -= c##02_10_im * reg##10_im;\
2286  a02_im += c##02_10_re * reg##10_im;\
2287  a02_im += c##02_10_im * reg##10_re;\
2288  a02_re += c##02_11_re * reg##11_re;\
2289  a02_re -= c##02_11_im * reg##11_im;\
2290  a02_im += c##02_11_re * reg##11_im;\
2291  a02_im += c##02_11_im * reg##11_re;\
2292  a02_re += c##02_12_re * reg##12_re;\
2293  a02_re -= c##02_12_im * reg##12_im;\
2294  a02_im += c##02_12_re * reg##12_im;\
2295  a02_im += c##02_12_im * reg##12_re;\
2296  \
2297  a10_re += c##10_00_re * reg##00_re;\
2298  a10_re -= c##10_00_im * reg##00_im;\
2299  a10_im += c##10_00_re * reg##00_im;\
2300  a10_im += c##10_00_im * reg##00_re;\
2301  a10_re += c##10_01_re * reg##01_re;\
2302  a10_re -= c##10_01_im * reg##01_im;\
2303  a10_im += c##10_01_re * reg##01_im;\
2304  a10_im += c##10_01_im * reg##01_re;\
2305  a10_re += c##10_02_re * reg##02_re;\
2306  a10_re -= c##10_02_im * reg##02_im;\
2307  a10_im += c##10_02_re * reg##02_im;\
2308  a10_im += c##10_02_im * reg##02_re;\
2309  a10_re += c##10_10_re * reg##10_re;\
2310  a10_im += c##10_10_re * reg##10_im;\
2311  a10_re += c##10_11_re * reg##11_re;\
2312  a10_re -= c##10_11_im * reg##11_im;\
2313  a10_im += c##10_11_re * reg##11_im;\
2314  a10_im += c##10_11_im * reg##11_re;\
2315  a10_re += c##10_12_re * reg##12_re;\
2316  a10_re -= c##10_12_im * reg##12_im;\
2317  a10_im += c##10_12_re * reg##12_im;\
2318  a10_im += c##10_12_im * reg##12_re;\
2319  \
2320  a11_re += c##11_00_re * reg##00_re;\
2321  a11_re -= c##11_00_im * reg##00_im;\
2322  a11_im += c##11_00_re * reg##00_im;\
2323  a11_im += c##11_00_im * reg##00_re;\
2324  a11_re += c##11_01_re * reg##01_re;\
2325  a11_re -= c##11_01_im * reg##01_im;\
2326  a11_im += c##11_01_re * reg##01_im;\
2327  a11_im += c##11_01_im * reg##01_re;\
2328  a11_re += c##11_02_re * reg##02_re;\
2329  a11_re -= c##11_02_im * reg##02_im;\
2330  a11_im += c##11_02_re * reg##02_im;\
2331  a11_im += c##11_02_im * reg##02_re;\
2332  a11_re += c##11_10_re * reg##10_re;\
2333  a11_re -= c##11_10_im * reg##10_im;\
2334  a11_im += c##11_10_re * reg##10_im;\
2335  a11_im += c##11_10_im * reg##10_re;\
2336  a11_re += c##11_11_re * reg##11_re;\
2337  a11_im += c##11_11_re * reg##11_im;\
2338  a11_re += c##11_12_re * reg##12_re;\
2339  a11_re -= c##11_12_im * reg##12_im;\
2340  a11_im += c##11_12_re * reg##12_im;\
2341  a11_im += c##11_12_im * reg##12_re;\
2342  \
2343  a12_re += c##12_00_re * reg##00_re;\
2344  a12_re -= c##12_00_im * reg##00_im;\
2345  a12_im += c##12_00_re * reg##00_im;\
2346  a12_im += c##12_00_im * reg##00_re;\
2347  a12_re += c##12_01_re * reg##01_re;\
2348  a12_re -= c##12_01_im * reg##01_im;\
2349  a12_im += c##12_01_re * reg##01_im;\
2350  a12_im += c##12_01_im * reg##01_re;\
2351  a12_re += c##12_02_re * reg##02_re;\
2352  a12_re -= c##12_02_im * reg##02_im;\
2353  a12_im += c##12_02_re * reg##02_im;\
2354  a12_im += c##12_02_im * reg##02_re;\
2355  a12_re += c##12_10_re * reg##10_re;\
2356  a12_re -= c##12_10_im * reg##10_im;\
2357  a12_im += c##12_10_re * reg##10_im;\
2358  a12_im += c##12_10_im * reg##10_re;\
2359  a12_re += c##12_11_re * reg##11_re;\
2360  a12_re -= c##12_11_im * reg##11_im;\
2361  a12_im += c##12_11_re * reg##11_im;\
2362  a12_im += c##12_11_im * reg##11_re;\
2363  a12_re += c##12_12_re * reg##12_re;\
2364  a12_im += c##12_12_re * reg##12_im;\
2365  \
2366  /*store the result*/\
2367  reg##00_re = a00_re; reg##00_im = a00_im;\
2368  reg##01_re = a01_re; reg##01_im = a01_im;\
2369  reg##02_re = a02_re; reg##02_im = a02_im;\
2370  reg##10_re = a10_re; reg##10_im = a10_im;\
2371  reg##11_re = a11_re; reg##11_im = a11_im;\
2372  reg##12_re = a12_re; reg##12_im = a12_im;\
2373  \
2374 }\
2375 \
2376 /* apply second chiral block*/\
2377 {\
2378  ASSN_CLOVER(TMCLOVERTEX, 1)\
2379  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
2380  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
2381  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
2382  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
2383  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
2384  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
2385  \
2386  a20_re += c##20_20_re * reg##20_re;\
2387  a20_im += c##20_20_re * reg##20_im;\
2388  a20_re += c##20_21_re * reg##21_re;\
2389  a20_re -= c##20_21_im * reg##21_im;\
2390  a20_im += c##20_21_re * reg##21_im;\
2391  a20_im += c##20_21_im * reg##21_re;\
2392  a20_re += c##20_22_re * reg##22_re;\
2393  a20_re -= c##20_22_im * reg##22_im;\
2394  a20_im += c##20_22_re * reg##22_im;\
2395  a20_im += c##20_22_im * reg##22_re;\
2396  a20_re += c##20_30_re * reg##30_re;\
2397  a20_re -= c##20_30_im * reg##30_im;\
2398  a20_im += c##20_30_re * reg##30_im;\
2399  a20_im += c##20_30_im * reg##30_re;\
2400  a20_re += c##20_31_re * reg##31_re;\
2401  a20_re -= c##20_31_im * reg##31_im;\
2402  a20_im += c##20_31_re * reg##31_im;\
2403  a20_im += c##20_31_im * reg##31_re;\
2404  a20_re += c##20_32_re * reg##32_re;\
2405  a20_re -= c##20_32_im * reg##32_im;\
2406  a20_im += c##20_32_re * reg##32_im;\
2407  a20_im += c##20_32_im * reg##32_re;\
2408  \
2409  a21_re += c##21_20_re * reg##20_re;\
2410  a21_re -= c##21_20_im * reg##20_im;\
2411  a21_im += c##21_20_re * reg##20_im;\
2412  a21_im += c##21_20_im * reg##20_re;\
2413  a21_re += c##21_21_re * reg##21_re;\
2414  a21_im += c##21_21_re * reg##21_im;\
2415  a21_re += c##21_22_re * reg##22_re;\
2416  a21_re -= c##21_22_im * reg##22_im;\
2417  a21_im += c##21_22_re * reg##22_im;\
2418  a21_im += c##21_22_im * reg##22_re;\
2419  a21_re += c##21_30_re * reg##30_re;\
2420  a21_re -= c##21_30_im * reg##30_im;\
2421  a21_im += c##21_30_re * reg##30_im;\
2422  a21_im += c##21_30_im * reg##30_re;\
2423  a21_re += c##21_31_re * reg##31_re;\
2424  a21_re -= c##21_31_im * reg##31_im;\
2425  a21_im += c##21_31_re * reg##31_im;\
2426  a21_im += c##21_31_im * reg##31_re;\
2427  a21_re += c##21_32_re * reg##32_re;\
2428  a21_re -= c##21_32_im * reg##32_im;\
2429  a21_im += c##21_32_re * reg##32_im;\
2430  a21_im += c##21_32_im * reg##32_re;\
2431  \
2432  a22_re += c##22_20_re * reg##20_re;\
2433  a22_re -= c##22_20_im * reg##20_im;\
2434  a22_im += c##22_20_re * reg##20_im;\
2435  a22_im += c##22_20_im * reg##20_re;\
2436  a22_re += c##22_21_re * reg##21_re;\
2437  a22_re -= c##22_21_im * reg##21_im;\
2438  a22_im += c##22_21_re * reg##21_im;\
2439  a22_im += c##22_21_im * reg##21_re;\
2440  a22_re += c##22_22_re * reg##22_re;\
2441  a22_im += c##22_22_re * reg##22_im;\
2442  a22_re += c##22_30_re * reg##30_re;\
2443  a22_re -= c##22_30_im * reg##30_im;\
2444  a22_im += c##22_30_re * reg##30_im;\
2445  a22_im += c##22_30_im * reg##30_re;\
2446  a22_re += c##22_31_re * reg##31_re;\
2447  a22_re -= c##22_31_im * reg##31_im;\
2448  a22_im += c##22_31_re * reg##31_im;\
2449  a22_im += c##22_31_im * reg##31_re;\
2450  a22_re += c##22_32_re * reg##32_re;\
2451  a22_re -= c##22_32_im * reg##32_im;\
2452  a22_im += c##22_32_re * reg##32_im;\
2453  a22_im += c##22_32_im * reg##32_re;\
2454  \
2455  a30_re += c##30_20_re * reg##20_re;\
2456  a30_re -= c##30_20_im * reg##20_im;\
2457  a30_im += c##30_20_re * reg##20_im;\
2458  a30_im += c##30_20_im * reg##20_re;\
2459  a30_re += c##30_21_re * reg##21_re;\
2460  a30_re -= c##30_21_im * reg##21_im;\
2461  a30_im += c##30_21_re * reg##21_im;\
2462  a30_im += c##30_21_im * reg##21_re;\
2463  a30_re += c##30_22_re * reg##22_re;\
2464  a30_re -= c##30_22_im * reg##22_im;\
2465  a30_im += c##30_22_re * reg##22_im;\
2466  a30_im += c##30_22_im * reg##22_re;\
2467  a30_re += c##30_30_re * reg##30_re;\
2468  a30_im += c##30_30_re * reg##30_im;\
2469  a30_re += c##30_31_re * reg##31_re;\
2470  a30_re -= c##30_31_im * reg##31_im;\
2471  a30_im += c##30_31_re * reg##31_im;\
2472  a30_im += c##30_31_im * reg##31_re;\
2473  a30_re += c##30_32_re * reg##32_re;\
2474  a30_re -= c##30_32_im * reg##32_im;\
2475  a30_im += c##30_32_re * reg##32_im;\
2476  a30_im += c##30_32_im * reg##32_re;\
2477  \
2478  a31_re += c##31_20_re * reg##20_re;\
2479  a31_re -= c##31_20_im * reg##20_im;\
2480  a31_im += c##31_20_re * reg##20_im;\
2481  a31_im += c##31_20_im * reg##20_re;\
2482  a31_re += c##31_21_re * reg##21_re;\
2483  a31_re -= c##31_21_im * reg##21_im;\
2484  a31_im += c##31_21_re * reg##21_im;\
2485  a31_im += c##31_21_im * reg##21_re;\
2486  a31_re += c##31_22_re * reg##22_re;\
2487  a31_re -= c##31_22_im * reg##22_im;\
2488  a31_im += c##31_22_re * reg##22_im;\
2489  a31_im += c##31_22_im * reg##22_re;\
2490  a31_re += c##31_30_re * reg##30_re;\
2491  a31_re -= c##31_30_im * reg##30_im;\
2492  a31_im += c##31_30_re * reg##30_im;\
2493  a31_im += c##31_30_im * reg##30_re;\
2494  a31_re += c##31_31_re * reg##31_re;\
2495  a31_im += c##31_31_re * reg##31_im;\
2496  a31_re += c##31_32_re * reg##32_re;\
2497  a31_re -= c##31_32_im * reg##32_im;\
2498  a31_im += c##31_32_re * reg##32_im;\
2499  a31_im += c##31_32_im * reg##32_re;\
2500  \
2501  a32_re += c##32_20_re * reg##20_re;\
2502  a32_re -= c##32_20_im * reg##20_im;\
2503  a32_im += c##32_20_re * reg##20_im;\
2504  a32_im += c##32_20_im * reg##20_re;\
2505  a32_re += c##32_21_re * reg##21_re;\
2506  a32_re -= c##32_21_im * reg##21_im;\
2507  a32_im += c##32_21_re * reg##21_im;\
2508  a32_im += c##32_21_im * reg##21_re;\
2509  a32_re += c##32_22_re * reg##22_re;\
2510  a32_re -= c##32_22_im * reg##22_im;\
2511  a32_im += c##32_22_re * reg##22_im;\
2512  a32_im += c##32_22_im * reg##22_re;\
2513  a32_re += c##32_30_re * reg##30_re;\
2514  a32_re -= c##32_30_im * reg##30_im;\
2515  a32_im += c##32_30_re * reg##30_im;\
2516  a32_im += c##32_30_im * reg##30_re;\
2517  a32_re += c##32_31_re * reg##31_re;\
2518  a32_re -= c##32_31_im * reg##31_im;\
2519  a32_im += c##32_31_re * reg##31_im;\
2520  a32_im += c##32_31_im * reg##31_re;\
2521  a32_re += c##32_32_re * reg##32_re;\
2522  a32_im += c##32_32_re * reg##32_im;\
2523  \
2524  /*apply i*(2*kappa*mu=a)*gamma5*/\
2525  a20_re = a20_re + .5*a* reg##20_im; a20_im = a20_im - .5*a* reg##20_re;\
2526  a21_re = a21_re + .5*a* reg##21_im; a21_im = a21_im - .5*a* reg##21_re;\
2527  a22_re = a22_re + .5*a* reg##22_im; a22_im = a22_im - .5*a* reg##22_re;\
2528  a30_re = a30_re + .5*a* reg##30_im; a30_im = a30_im - .5*a* reg##30_re;\
2529  a31_re = a31_re + .5*a* reg##31_im; a31_im = a31_im - .5*a* reg##31_re;\
2530  a32_re = a32_re + .5*a* reg##32_im; a32_im = a32_im - .5*a* reg##32_re;\
2531  reg##20_re = a20_re; reg##20_im = a20_im;\
2532  reg##21_re = a21_re; reg##21_im = a21_im;\
2533  reg##22_re = a22_re; reg##22_im = a22_im;\
2534  reg##30_re = a30_re; reg##30_im = a30_im;\
2535  reg##31_re = a31_re; reg##31_im = a31_im;\
2536  reg##32_re = a32_re; reg##32_im = a32_im;\
2537 }\
2538 /*Apply inverse clover*/\
2539 {\
2540  /*ASSN_CLOVER(TMCLOVERTEX, 1)*/ /* PUEDO EIMINARLO PORQUE YA LO HEMOS LEIDO */ \
2541  INVERT_CLOVER(c) \
2542  spinorFloat a20_re = 0; spinorFloat a20_im = 0;\
2543  spinorFloat a21_re = 0; spinorFloat a21_im = 0;\
2544  spinorFloat a22_re = 0; spinorFloat a22_im = 0;\
2545  spinorFloat a30_re = 0; spinorFloat a30_im = 0;\
2546  spinorFloat a31_re = 0; spinorFloat a31_im = 0;\
2547  spinorFloat a32_re = 0; spinorFloat a32_im = 0;\
2548  \
2549  a20_re += c##20_20_re * reg##20_re;\
2550  a20_im += c##20_20_re * reg##20_im;\
2551  a20_re += c##20_21_re * reg##21_re;\
2552  a20_re -= c##20_21_im * reg##21_im;\
2553  a20_im += c##20_21_re * reg##21_im;\
2554  a20_im += c##20_21_im * reg##21_re;\
2555  a20_re += c##20_22_re * reg##22_re;\
2556  a20_re -= c##20_22_im * reg##22_im;\
2557  a20_im += c##20_22_re * reg##22_im;\
2558  a20_im += c##20_22_im * reg##22_re;\
2559  a20_re += c##20_30_re * reg##30_re;\
2560  a20_re -= c##20_30_im * reg##30_im;\
2561  a20_im += c##20_30_re * reg##30_im;\
2562  a20_im += c##20_30_im * reg##30_re;\
2563  a20_re += c##20_31_re * reg##31_re;\
2564  a20_re -= c##20_31_im * reg##31_im;\
2565  a20_im += c##20_31_re * reg##31_im;\
2566  a20_im += c##20_31_im * reg##31_re;\
2567  a20_re += c##20_32_re * reg##32_re;\
2568  a20_re -= c##20_32_im * reg##32_im;\
2569  a20_im += c##20_32_re * reg##32_im;\
2570  a20_im += c##20_32_im * reg##32_re;\
2571  \
2572  a21_re += c##21_20_re * reg##20_re;\
2573  a21_re -= c##21_20_im * reg##20_im;\
2574  a21_im += c##21_20_re * reg##20_im;\
2575  a21_im += c##21_20_im * reg##20_re;\
2576  a21_re += c##21_21_re * reg##21_re;\
2577  a21_im += c##21_21_re * reg##21_im;\
2578  a21_re += c##21_22_re * reg##22_re;\
2579  a21_re -= c##21_22_im * reg##22_im;\
2580  a21_im += c##21_22_re * reg##22_im;\
2581  a21_im += c##21_22_im * reg##22_re;\
2582  a21_re += c##21_30_re * reg##30_re;\
2583  a21_re -= c##21_30_im * reg##30_im;\
2584  a21_im += c##21_30_re * reg##30_im;\
2585  a21_im += c##21_30_im * reg##30_re;\
2586  a21_re += c##21_31_re * reg##31_re;\
2587  a21_re -= c##21_31_im * reg##31_im;\
2588  a21_im += c##21_31_re * reg##31_im;\
2589  a21_im += c##21_31_im * reg##31_re;\
2590  a21_re += c##21_32_re * reg##32_re;\
2591  a21_re -= c##21_32_im * reg##32_im;\
2592  a21_im += c##21_32_re * reg##32_im;\
2593  a21_im += c##21_32_im * reg##32_re;\
2594  \
2595  a22_re += c##22_20_re * reg##20_re;\
2596  a22_re -= c##22_20_im * reg##20_im;\
2597  a22_im += c##22_20_re * reg##20_im;\
2598  a22_im += c##22_20_im * reg##20_re;\
2599  a22_re += c##22_21_re * reg##21_re;\
2600  a22_re -= c##22_21_im * reg##21_im;\
2601  a22_im += c##22_21_re * reg##21_im;\
2602  a22_im += c##22_21_im * reg##21_re;\
2603  a22_re += c##22_22_re * reg##22_re;\
2604  a22_im += c##22_22_re * reg##22_im;\
2605  a22_re += c##22_30_re * reg##30_re;\
2606  a22_re -= c##22_30_im * reg##30_im;\
2607  a22_im += c##22_30_re * reg##30_im;\
2608  a22_im += c##22_30_im * reg##30_re;\
2609  a22_re += c##22_31_re * reg##31_re;\
2610  a22_re -= c##22_31_im * reg##31_im;\
2611  a22_im += c##22_31_re * reg##31_im;\
2612  a22_im += c##22_31_im * reg##31_re;\
2613  a22_re += c##22_32_re * reg##32_re;\
2614  a22_re -= c##22_32_im * reg##32_im;\
2615  a22_im += c##22_32_re * reg##32_im;\
2616  a22_im += c##22_32_im * reg##32_re;\
2617  \
2618  a30_re += c##30_20_re * reg##20_re;\
2619  a30_re -= c##30_20_im * reg##20_im;\
2620  a30_im += c##30_20_re * reg##20_im;\
2621  a30_im += c##30_20_im * reg##20_re;\
2622  a30_re += c##30_21_re * reg##21_re;\
2623  a30_re -= c##30_21_im * reg##21_im;\
2624  a30_im += c##30_21_re * reg##21_im;\
2625  a30_im += c##30_21_im * reg##21_re;\
2626  a30_re += c##30_22_re * reg##22_re;\
2627  a30_re -= c##30_22_im * reg##22_im;\
2628  a30_im += c##30_22_re * reg##22_im;\
2629  a30_im += c##30_22_im * reg##22_re;\
2630  a30_re += c##30_30_re * reg##30_re;\
2631  a30_im += c##30_30_re * reg##30_im;\
2632  a30_re += c##30_31_re * reg##31_re;\
2633  a30_re -= c##30_31_im * reg##31_im;\
2634  a30_im += c##30_31_re * reg##31_im;\
2635  a30_im += c##30_31_im * reg##31_re;\
2636  a30_re += c##30_32_re * reg##32_re;\
2637  a30_re -= c##30_32_im * reg##32_im;\
2638  a30_im += c##30_32_re * reg##32_im;\
2639  a30_im += c##30_32_im * reg##32_re;\
2640  \
2641  a31_re += c##31_20_re * reg##20_re;\
2642  a31_re -= c##31_20_im * reg##20_im;\
2643  a31_im += c##31_20_re * reg##20_im;\
2644  a31_im += c##31_20_im * reg##20_re;\
2645  a31_re += c##31_21_re * reg##21_re;\
2646  a31_re -= c##31_21_im * reg##21_im;\
2647  a31_im += c##31_21_re * reg##21_im;\
2648  a31_im += c##31_21_im * reg##21_re;\
2649  a31_re += c##31_22_re * reg##22_re;\
2650  a31_re -= c##31_22_im * reg##22_im;\
2651  a31_im += c##31_22_re * reg##22_im;\
2652  a31_im += c##31_22_im * reg##22_re;\
2653  a31_re += c##31_30_re * reg##30_re;\
2654  a31_re -= c##31_30_im * reg##30_im;\
2655  a31_im += c##31_30_re * reg##30_im;\
2656  a31_im += c##31_30_im * reg##30_re;\
2657  a31_re += c##31_31_re * reg##31_re;\
2658  a31_im += c##31_31_re * reg##31_im;\
2659  a31_re += c##31_32_re * reg##32_re;\
2660  a31_re -= c##31_32_im * reg##32_im;\
2661  a31_im += c##31_32_re * reg##32_im;\
2662  a31_im += c##31_32_im * reg##32_re;\
2663  \
2664  a32_re += c##32_20_re * reg##20_re;\
2665  a32_re -= c##32_20_im * reg##20_im;\
2666  a32_im += c##32_20_re * reg##20_im;\
2667  a32_im += c##32_20_im * reg##20_re;\
2668  a32_re += c##32_21_re * reg##21_re;\
2669  a32_re -= c##32_21_im * reg##21_im;\
2670  a32_im += c##32_21_re * reg##21_im;\
2671  a32_im += c##32_21_im * reg##21_re;\
2672  a32_re += c##32_22_re * reg##22_re;\
2673  a32_re -= c##32_22_im * reg##22_im;\
2674  a32_im += c##32_22_re * reg##22_im;\
2675  a32_im += c##32_22_im * reg##22_re;\
2676  a32_re += c##32_30_re * reg##30_re;\
2677  a32_re -= c##32_30_im * reg##30_im;\
2678  a32_im += c##32_30_re * reg##30_im;\
2679  a32_im += c##32_30_im * reg##30_re;\
2680  a32_re += c##32_31_re * reg##31_re;\
2681  a32_re -= c##32_31_im * reg##31_im;\
2682  a32_im += c##32_31_re * reg##31_im;\
2683  a32_im += c##32_31_im * reg##31_re;\
2684  a32_re += c##32_32_re * reg##32_re;\
2685  a32_im += c##32_32_re * reg##32_im;\
2686  \
2687  /*store the result*/\
2688  reg##20_re = a20_re; reg##20_im = a20_im;\
2689  reg##21_re = a21_re; reg##21_im = a21_im;\
2690  reg##22_re = a22_re; reg##22_im = a22_im;\
2691  reg##30_re = a30_re; reg##30_im = a30_im;\
2692  reg##31_re = a31_re; reg##31_im = a31_im;\
2693  reg##32_re = a32_re; reg##32_im = a32_im;\
2694  \
2695 }\
2696 \
2697 /* change back from chiral basis*/\
2698 /* (note: required factor of 1/2 is included in clover term normalization)*/\
2699 {\
2700  spinorFloat a00_re = reg##10_re + reg##30_re;\
2701  spinorFloat a00_im = reg##10_im + reg##30_im;\
2702  spinorFloat a10_re = -reg##00_re - reg##20_re;\
2703  spinorFloat a10_im = -reg##00_im - reg##20_im;\
2704  spinorFloat a20_re = reg##10_re - reg##30_re;\
2705  spinorFloat a20_im = reg##10_im - reg##30_im;\
2706  spinorFloat a30_re = -reg##00_re + reg##20_re;\
2707  spinorFloat a30_im = -reg##00_im + reg##20_im;\
2708  \
2709  reg##00_re = a00_re*2.; reg##00_im = a00_im*2.;\
2710  reg##10_re = a10_re*2.; reg##10_im = a10_im*2.;\
2711  reg##20_re = a20_re*2.; reg##20_im = a20_im*2.;\
2712  reg##30_re = a30_re*2.; reg##30_im = a30_im*2.;\
2713 }\
2714 \
2715 {\
2716  spinorFloat a01_re = reg##11_re + reg##31_re;\
2717  spinorFloat a01_im = reg##11_im + reg##31_im;\
2718  spinorFloat a11_re = -reg##01_re - reg##21_re;\
2719  spinorFloat a11_im = -reg##01_im - reg##21_im;\
2720  spinorFloat a21_re = reg##11_re - reg##31_re;\
2721  spinorFloat a21_im = reg##11_im - reg##31_im;\
2722  spinorFloat a31_re = -reg##01_re + reg##21_re;\
2723  spinorFloat a31_im = -reg##01_im + reg##21_im;\
2724  \
2725  reg##01_re = a01_re*2.; reg##01_im = a01_im*2.;\
2726  reg##11_re = a11_re*2.; reg##11_im = a11_im*2.;\
2727  reg##21_re = a21_re*2.; reg##21_im = a21_im*2.;\
2728  reg##31_re = a31_re*2.; reg##31_im = a31_im*2.;\
2729 }\
2730 \
2731 {\
2732  spinorFloat a02_re = reg##12_re + reg##32_re;\
2733  spinorFloat a02_im = reg##12_im + reg##32_im;\
2734  spinorFloat a12_re = -reg##02_re - reg##22_re;\
2735  spinorFloat a12_im = -reg##02_im - reg##22_im;\
2736  spinorFloat a22_re = reg##12_re - reg##32_re;\
2737  spinorFloat a22_im = reg##12_im - reg##32_im;\
2738  spinorFloat a32_re = -reg##02_re + reg##22_re;\
2739  spinorFloat a32_im = -reg##02_im + reg##22_im;\
2740  \
2741  reg##02_re = a02_re*2.; reg##02_im = a02_im*2.;\
2742  reg##12_re = a12_re*2.; reg##12_im = a12_im*2.;\
2743  reg##22_re = a22_re*2.; reg##22_im = a22_im*2.;\
2744  reg##32_re = a32_re*2.; reg##32_im = a32_im*2.;\
2745 }\
2746 \
2747