Grid 0.7.0
TwoSpinor.h
Go to the documentation of this file.
1/*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5 Source file: ./lib/qcd/spin/TwoSpinor.h
6
7 Copyright (C) 2015
8
9Author: Peter Boyle <paboyle@ph.ed.ac.uk>
10Author: Peter Boyle <peterboyle@Peters-MacBook-Pro-2.local>
11
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License along
23 with this program; if not, write to the Free Software Foundation, Inc.,
24 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25
26 See the full license in the file "LICENSE" in the top level distribution directory
27*************************************************************************************/
28/* END LEGAL */
29#ifndef GRID_QCD_TWOSPIN_H
30#define GRID_QCD_TWOSPIN_H
31
33
34
36// Normalisation alert; the g5 project is 1/2(1+-G5)
37// the xyzt projects are (1+-Gxyzt)
38//
39// * xyzt project
40//
41// This is because this is how the Wilson operator is normally written as
42// (m+4r) - \frac{1}{2} D_{hop}
43// and / or
44// 1 - \frac{1}{2 m+8r} D_{hop} = 1 - kappa D_{hop}
45//
46// Note that the free, critical hopping parameter kappa is then 1/8 th for r=1.
47//
48// However, the xyzt 2spin "projectors" are not really projectors because they do not
49// square to 1, however the ChiralProjector is a true projector.
50//
51// For this reason there is NO provision in Grid of a four spinor result from the
52// xyzt projectors. They are intended to be used only in combination with "reconstruct" in the
53// wilson dirac operator and closely related actions.
54//
55// I also do NOT provide lattice wide operators of these, since the dirac operator is best implemented
56// via Stencils and single site variants will be needed only for the cache friendly high perf dirac operator.
57//
58// * chiral project
59//
60// Both four spinor and two spinor result variants are provided.
61//
62// The four spinor project will be recursively provided to Lattice wide routines, and likely used in
63// the domain wall and mobius implementations.
64//
66
67/* Gx
68 * 0 0 0 i [0]+-i[3]
69 * 0 0 i 0 [1]+-i[2]
70 * 0 -i 0 0
71 * -i 0 0 0
72 */
73
74// To fail is not to err (Cryptic clue: suggest to Google SFINAE ;) )
75template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjXp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
76{
77 hspin(0)=fspin(0)+timesI(fspin(3));
78 hspin(1)=fspin(1)+timesI(fspin(2));
79}
80template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjXm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
81{
82 hspin(0)=fspin(0)-timesI(fspin(3));
83 hspin(1)=fspin(1)-timesI(fspin(2));
84}
85
86// 0 0 0 -1 [0] -+ [3]
87// 0 0 1 0 [1] +- [2]
88// 0 1 0 0
89// -1 0 0 0
90template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjYp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
91{
92 hspin(0)=fspin(0)-fspin(3);
93 hspin(1)=fspin(1)+fspin(2);
94}
95template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjYm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
96{
97 hspin(0)=fspin(0)+fspin(3);
98 hspin(1)=fspin(1)-fspin(2);
99}
100/*Gz
101 * 0 0 i 0 [0]+-i[2]
102 * 0 0 0 -i [1]-+i[3]
103 * -i 0 0 0
104 * 0 i 0 0
105 */
106template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjZp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
107{
108 hspin(0)=fspin(0)+timesI(fspin(2));
109 hspin(1)=fspin(1)-timesI(fspin(3));
110}
111template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjZm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
112{
113 //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
114 hspin(0)=fspin(0)-timesI(fspin(2));
115 hspin(1)=fspin(1)+timesI(fspin(3));
116}
117/*Gt
118 * 0 0 1 0 [0]+-[2]
119 * 0 0 0 1 [1]+-[3]
120 * 1 0 0 0
121 * 0 1 0 0
122 */
123template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjTp (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
124{
125 //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
126 hspin(0)=fspin(0)+fspin(2);
127 hspin(1)=fspin(1)+fspin(3);
128}
129template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProjTm (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
130{
131 hspin(0)=fspin(0)-fspin(2);
132 hspin(1)=fspin(1)-fspin(3);
133}
134/*G5
135 * 1 0 0 0
136 * 0 1 0 0
137 * 0 0 -1 0
138 * 0 0 0 -1
139 */
140template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5p (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
141{
142 hspin(0)=fspin(0);
143 hspin(1)=fspin(1);
144}
145
146template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5m (iVector<vtype,Nhs> &hspin,const iVector<vtype,Ns> &fspin)
147{
148 hspin(0)=fspin(2);
149 hspin(1)=fspin(3);
150}
151
152template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5p (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
153{
154 rfspin(0)=fspin(0);
155 rfspin(1)=fspin(1);
156 rfspin(2)=Zero();
157 rfspin(3)=Zero();
158}
159template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spProj5m (iVector<vtype,Ns> &rfspin,const iVector<vtype,Ns> &fspin)
160{
161 rfspin(0)=Zero();
162 rfspin(1)=Zero();
163 rfspin(2)=fspin(2);
164 rfspin(3)=fspin(3);
165}
166
167template<class vtype,int N,IfCoarsened<iVector<vtype,N> > = 0> accelerator_inline void spProj5p (iVector<vtype,N> &rfspin,const iVector<vtype,N> &fspin)
168{
169 const int hN = N>>1;
170 for(int s=0;s<hN;s++){
171 rfspin(s)=fspin(s);
172 rfspin(s+hN)=Zero();
173 }
174}
175template<class vtype,int N,IfCoarsened<iVector<vtype,N> > = 0> accelerator_inline void spProj5m (iVector<vtype,N> &rfspin,const iVector<vtype,N> &fspin)
176{
177 const int hN = N>>1;
178 for(int s=0;s<hN;s++){
179 rfspin(s)=Zero();
180 rfspin(s+hN)=fspin(s+hN);
181 }
182}
183
185// Reconstruction routines to move back again to four spin
187/* Gx
188 * 0 0 0 i [0]+-i[3]
189 * 0 0 i 0 [1]+-i[2]
190 * 0 -i 0 0 -i[1]+-[2] == -i ([0]+-i[3]) = -i (1)
191 * -i 0 0 0 -i[0]+-[3] == -i ([1]+-i[2]) = -i (0)
192 */
193template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconXp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
194{
195 fspin(0)=hspin(0);
196 fspin(1)=hspin(1);
197 fspin(2)=timesMinusI(hspin(1));
198 fspin(3)=timesMinusI(hspin(0));
199}
200template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconXm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
201{
202 fspin(0)=hspin(0);
203 fspin(1)=hspin(1);
204 fspin(2)=timesI(hspin(1));
205 fspin(3)=timesI(hspin(0));
206}
207template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconXp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
208{
209 fspin(0)+=hspin(0);
210 fspin(1)+=hspin(1);
211 fspin(2)-=timesI(hspin(1));
212 fspin(3)-=timesI(hspin(0));
213}
214template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconXm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
215{
216 fspin(0)+=hspin(0);
217 fspin(1)+=hspin(1);
218 fspin(2)+=timesI(hspin(1));
219 fspin(3)+=timesI(hspin(0));
220}
221
222// 0 0 0 -1 [0] -+ [3]
223// 0 0 1 0 [1] +- [2]
224// 0 1 0 0 == 1(1)
225// -1 0 0 0 ==-1(0)
226
227template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconYp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
228{
229 fspin(0)=hspin(0);
230 fspin(1)=hspin(1);
231 fspin(2)= hspin(1);
232 fspin(3)=-hspin(0);//Unary minus?
233}
234template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconYm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
235{
236 fspin(0)=hspin(0);
237 fspin(1)=hspin(1);
238 fspin(2)=-hspin(1);
239 fspin(3)= hspin(0);
240}
241template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconYp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
242{
243 fspin(0)+=hspin(0);
244 fspin(1)+=hspin(1);
245 fspin(2)+=hspin(1);
246 fspin(3)-=hspin(0);
247}
248template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconYm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
249{
250 fspin(0)+=hspin(0);
251 fspin(1)+=hspin(1);
252 fspin(2)-=hspin(1);
253 fspin(3)+=hspin(0);
254}
255
256/*Gz
257 * 0 0 i 0 [0]+-i[2]
258 * 0 0 0 -i [1]-+i[3]
259 * -i 0 0 0 => -i (0)
260 * 0 i 0 0 => i (1)
261 */
262template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconZp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
263{
264 fspin(0)=hspin(0);
265 fspin(1)=hspin(1);
266 fspin(2)=timesMinusI(hspin(0));
267 fspin(3)=timesI(hspin(1));
268}
269template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconZm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
270{
271 fspin(0)=hspin(0);
272 fspin(1)=hspin(1);
273 fspin(2)= timesI(hspin(0));
274 fspin(3)=timesMinusI(hspin(1));
275}
276template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconZp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
277{
278 fspin(0)+=hspin(0);
279 fspin(1)+=hspin(1);
280 fspin(2)-=timesI(hspin(0));
281 fspin(3)+=timesI(hspin(1));
282}
283template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconZm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
284{
285 fspin(0)+=hspin(0);
286 fspin(1)+=hspin(1);
287 fspin(2)+=timesI(hspin(0));
288 fspin(3)-=timesI(hspin(1));
289}
290/*Gt
291 * 0 0 1 0 [0]+-[2]
292 * 0 0 0 1 [1]+-[3]
293 * 1 0 0 0 => (0)
294 * 0 1 0 0 => (1)
295 */
296template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconTp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
297{
298 fspin(0)=hspin(0);
299 fspin(1)=hspin(1);
300 fspin(2)=hspin(0);
301 fspin(3)=hspin(1);
302}
303template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spReconTm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
304{
305 fspin(0)=hspin(0);
306 fspin(1)=hspin(1);
307 fspin(2)=-hspin(0);
308 fspin(3)=-hspin(1);
309}
310template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconTp (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
311{
312 fspin(0)+=hspin(0);
313 fspin(1)+=hspin(1);
314 fspin(2)+=hspin(0);
315 fspin(3)+=hspin(1);
316}
317template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumReconTm (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
318{
319 fspin(0)+=hspin(0);
320 fspin(1)+=hspin(1);
321 fspin(2)-=hspin(0);
322 fspin(3)-=hspin(1);
323}
324/*G5
325 * 1 0 0 0
326 * 0 1 0 0
327 * 0 0 -1 0
328 * 0 0 0 -1
329 */
330template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spRecon5p (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
331{
332 fspin(0)=hspin(0)+hspin(0); // add is lower latency than mul
333 fspin(1)=hspin(1)+hspin(1); // probably no measurable diffence though
334 fspin(2)=Zero();
335 fspin(3)=Zero();
336}
337template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void spRecon5m (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
338{
339 fspin(0)=Zero();
340 fspin(1)=Zero();
341 fspin(2)=hspin(0)+hspin(0);
342 fspin(3)=hspin(1)+hspin(1);
343}
344template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumRecon5p (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
345{
346 fspin(0)+=hspin(0)+hspin(0);
347 fspin(1)+=hspin(1)+hspin(1);
348}
349template<class vtype,IfSpinor<iVector<vtype,Ns> > = 0> accelerator_inline void accumRecon5m (iVector<vtype,Ns> &fspin,const iVector<vtype,Nhs> &hspin)
350{
351 //typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
352 fspin(2)+=hspin(0)+hspin(0);
353 fspin(3)+=hspin(1)+hspin(1);
354}
355
357// Recursively apply these until we hit the spin index
359
361// Xp
363template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
364{
365 for(int i=0;i<N;i++) {
366 spProjXp(hspin._internal[i],fspin._internal[i]);
367 }
368}
369template<class rtype,class vtype> accelerator_inline void spProjXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
370{
371 spProjXp(hspin._internal,fspin._internal);
372}
373template<class rtype,class vtype,int N> accelerator_inline void spProjXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
374{
375 for(int i=0;i<N;i++){
376 for(int j=0;j<N;j++){
377 spProjXp(hspin._internal[i][j],fspin._internal[i][j]);
378 }}
379}
380
381
382template<class rtype,class vtype> accelerator_inline void spReconXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
383{
384 spReconXp(hspin._internal,fspin._internal);
385}
386template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
387{
388 for(int i=0;i<N;i++) {
389 spReconXp(hspin._internal[i],fspin._internal[i]);
390 }
391}
392template<class rtype,class vtype,int N> accelerator_inline void spReconXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
393{
394 for(int i=0;i<N;i++){
395 for(int j=0;j<N;j++){
396 spReconXp(hspin._internal[i][j],fspin._internal[i][j]);
397 }}
398}
399
400template<class rtype,class vtype> accelerator_inline void accumReconXp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
401{
402 accumReconXp(hspin._internal,fspin._internal);
403}
404template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconXp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
405{
406 for(int i=0;i<N;i++) {
407 accumReconXp(hspin._internal[i],fspin._internal[i]);
408 }
409}
410template<class rtype,class vtype,int N> accelerator_inline void accumReconXp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
411{
412 for(int i=0;i<N;i++){
413 for(int j=0;j<N;j++){
414 accumReconXp(hspin._internal[i][j],fspin._internal[i][j]);
415 }}
416}
417
419// Xm
421template<class rtype,class vtype> accelerator_inline void spProjXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
422{
423 spProjXm(hspin._internal,fspin._internal);
424}
425template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
426{
427 for(int i=0;i<N;i++) {
428 spProjXm(hspin._internal[i],fspin._internal[i]);
429 }
430}
431template<class rtype,class vtype,int N> accelerator_inline void spProjXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
432{
433 for(int i=0;i<N;i++){
434 for(int j=0;j<N;j++){
435 spProjXm(hspin._internal[i][j],fspin._internal[i][j]);
436 }}
437}
438
439
440template<class rtype,class vtype> accelerator_inline void spReconXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
441{
442 spReconXm(hspin._internal,fspin._internal);
443}
444template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
445{
446 for(int i=0;i<N;i++) {
447 spReconXm(hspin._internal[i],fspin._internal[i]);
448 }
449}
450template<class rtype,class vtype,int N> accelerator_inline void spReconXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
451{
452 for(int i=0;i<N;i++){
453 for(int j=0;j<N;j++){
454 spReconXm(hspin._internal[i][j],fspin._internal[i][j]);
455 }}
456}
457
458template<class rtype,class vtype> accelerator_inline void accumReconXm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
459{
460 accumReconXm(hspin._internal,fspin._internal);
461}
462template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconXm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
463{
464 for(int i=0;i<N;i++) {
465 accumReconXm(hspin._internal[i],fspin._internal[i]);
466 }
467}
468template<class rtype,class vtype,int N> accelerator_inline void accumReconXm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
469{
470 for(int i=0;i<N;i++){
471 for(int j=0;j<N;j++){
472 accumReconXm(hspin._internal[i][j],fspin._internal[i][j]);
473 }}
474}
475
477// Yp
479template<class rtype,class vtype> accelerator_inline void spProjYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
480{
481 spProjYp(hspin._internal,fspin._internal);
482}
483template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
484{
485 for(int i=0;i<N;i++) {
486 spProjYp(hspin._internal[i],fspin._internal[i]);
487 }
488}
489template<class rtype,class vtype,int N> accelerator_inline void spProjYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
490{
491 for(int i=0;i<N;i++){
492 for(int j=0;j<N;j++){
493 spProjYp(hspin._internal[i][j],fspin._internal[i][j]);
494 }}
495}
496
497
498template<class rtype,class vtype> accelerator_inline void spReconYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
499{
500 spReconYp(hspin._internal,fspin._internal);
501}
502template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
503{
504 for(int i=0;i<N;i++) {
505 spReconYp(hspin._internal[i],fspin._internal[i]);
506 }
507}
508template<class rtype,class vtype,int N> accelerator_inline void spReconYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
509{
510 for(int i=0;i<N;i++){
511 for(int j=0;j<N;j++){
512 spReconYp(hspin._internal[i][j],fspin._internal[i][j]);
513 }}
514}
515
516template<class rtype,class vtype> accelerator_inline void accumReconYp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
517{
518 accumReconYp(hspin._internal,fspin._internal);
519}
520template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconYp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
521{
522 for(int i=0;i<N;i++) {
523 accumReconYp(hspin._internal[i],fspin._internal[i]);
524 }
525}
526template<class rtype,class vtype,int N> accelerator_inline void accumReconYp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
527{
528 for(int i=0;i<N;i++){
529 for(int j=0;j<N;j++){
530 accumReconYp(hspin._internal[i][j],fspin._internal[i][j]);
531 }}
532}
533
535// Ym
537template<class rtype,class vtype> accelerator_inline void spProjYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
538{
539 spProjYm(hspin._internal,fspin._internal);
540}
541template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
542{
543 for(int i=0;i<N;i++) {
544 spProjYm(hspin._internal[i],fspin._internal[i]);
545 }
546}
547template<class rtype,class vtype,int N> accelerator_inline void spProjYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
548{
549 for(int i=0;i<N;i++){
550 for(int j=0;j<N;j++){
551 spProjYm(hspin._internal[i][j],fspin._internal[i][j]);
552 }}
553}
554
555template<class rtype,class vtype> accelerator_inline void spReconYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
556{
557 spReconYm(hspin._internal,fspin._internal);
558}
559template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
560{
561 for(int i=0;i<N;i++) {
562 spReconYm(hspin._internal[i],fspin._internal[i]);
563 }
564}
565template<class rtype,class vtype,int N> accelerator_inline void spReconYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
566{
567 for(int i=0;i<N;i++){
568 for(int j=0;j<N;j++){
569 spReconYm(hspin._internal[i][j],fspin._internal[i][j]);
570 }}
571}
572
573template<class rtype,class vtype> accelerator_inline void accumReconYm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
574{
575 accumReconYm(hspin._internal,fspin._internal);
576}
577template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconYm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
578{
579 for(int i=0;i<N;i++) {
580 accumReconYm(hspin._internal[i],fspin._internal[i]);
581 }
582}
583template<class rtype,class vtype,int N> accelerator_inline void accumReconYm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
584{
585 for(int i=0;i<N;i++){
586 for(int j=0;j<N;j++){
587 accumReconYm(hspin._internal[i][j],fspin._internal[i][j]);
588 }}
589}
590
591
593// Zp
595template<class rtype,class vtype> accelerator_inline void spProjZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
596{
597 spProjZp(hspin._internal,fspin._internal);
598}
599template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
600{
601 for(int i=0;i<N;i++) {
602 spProjZp(hspin._internal[i],fspin._internal[i]);
603 }
604}
605template<class rtype,class vtype,int N> accelerator_inline void spProjZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
606{
607 for(int i=0;i<N;i++){
608 for(int j=0;j<N;j++){
609 spProjZp(hspin._internal[i][j],fspin._internal[i][j]);
610 }}
611}
612
613
614template<class rtype,class vtype> accelerator_inline void spReconZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
615{
616 spReconZp(hspin._internal,fspin._internal);
617}
618template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
619{
620 for(int i=0;i<N;i++) {
621 spReconZp(hspin._internal[i],fspin._internal[i]);
622 }
623}
624template<class rtype,class vtype,int N> accelerator_inline void spReconZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
625{
626 for(int i=0;i<N;i++){
627 for(int j=0;j<N;j++){
628 spReconZp(hspin._internal[i][j],fspin._internal[i][j]);
629 }}
630}
631
632template<class rtype,class vtype> accelerator_inline void accumReconZp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
633{
634 accumReconZp(hspin._internal,fspin._internal);
635}
636template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconZp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
637{
638 for(int i=0;i<N;i++) {
639 accumReconZp(hspin._internal[i],fspin._internal[i]);
640 }
641}
642template<class rtype,class vtype,int N> accelerator_inline void accumReconZp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
643{
644 for(int i=0;i<N;i++){
645 for(int j=0;j<N;j++){
646 accumReconZp(hspin._internal[i][j],fspin._internal[i][j]);
647 }}
648}
649
650
652// Zm
654template<class rtype,class vtype> accelerator_inline void spProjZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
655{
656 spProjZm(hspin._internal,fspin._internal);
657}
658template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
659{
660 for(int i=0;i<N;i++) {
661 spProjZm(hspin._internal[i],fspin._internal[i]);
662 }
663}
664template<class rtype,class vtype,int N> accelerator_inline void spProjZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
665{
666 for(int i=0;i<N;i++){
667 for(int j=0;j<N;j++){
668 spProjZm(hspin._internal[i][j],fspin._internal[i][j]);
669 }}
670}
671
672
673template<class rtype,class vtype> accelerator_inline void spReconZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
674{
675 spReconZm(hspin._internal,fspin._internal);
676}
677template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
678{
679 for(int i=0;i<N;i++) {
680 spReconZm(hspin._internal[i],fspin._internal[i]);
681 }
682}
683template<class rtype,class vtype,int N> accelerator_inline void spReconZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
684{
685 for(int i=0;i<N;i++){
686 for(int j=0;j<N;j++){
687 spReconZm(hspin._internal[i][j],fspin._internal[i][j]);
688 }}
689}
690
691template<class rtype,class vtype> accelerator_inline void accumReconZm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
692{
693 accumReconZm(hspin._internal,fspin._internal);
694}
695template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconZm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
696{
697 for(int i=0;i<N;i++) {
698 accumReconZm(hspin._internal[i],fspin._internal[i]);
699 }
700}
701template<class rtype,class vtype,int N> accelerator_inline void accumReconZm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
702{
703 for(int i=0;i<N;i++){
704 for(int j=0;j<N;j++){
705 accumReconZm(hspin._internal[i][j],fspin._internal[i][j]);
706 }}
707}
708
709
711// Tp
713template<class rtype,class vtype> accelerator_inline void spProjTp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
714{
715 spProjTp(hspin._internal,fspin._internal);
716}
717template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjTp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
718{
719 for(int i=0;i<N;i++) {
720 spProjTp(hspin._internal[i],fspin._internal[i]);
721 }
722}
723template<class rtype,class vtype,int N> accelerator_inline void spProjTp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
724{
725 for(int i=0;i<N;i++){
726 for(int j=0;j<N;j++){
727 spProjTp(hspin._internal[i][j],fspin._internal[i][j]);
728 }}
729}
730
731
732template<class rtype,class vtype> accelerator_inline void spReconTp (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
733{
734 spReconTp(hspin._internal,fspin._internal);
735}
736template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconTp (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
737{
738 for(int i=0;i<N;i++) {
739 spReconTp(hspin._internal[i],fspin._internal[i]);
740 }
741}
742template<class rtype,class vtype,int N> accelerator_inline void spReconTp (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
743{
744 for(int i=0;i<N;i++){
745 for(int j=0;j<N;j++){
746 spReconTp(hspin._internal[i][j],fspin._internal[i][j]);
747 }}
748}
749
750template<class rtype,class vtype> accelerator_inline void accumReconTp (iScalar<rtype> &hspin, iScalar<vtype> &fspin)
751{
752 accumReconTp(hspin._internal,fspin._internal);
753}
754template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconTp (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
755{
756 for(int i=0;i<N;i++) {
757 accumReconTp(hspin._internal[i],fspin._internal[i]);
758 }
759}
760template<class rtype,class vtype,int N> accelerator_inline void accumReconTp (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
761{
762 for(int i=0;i<N;i++){
763 for(int j=0;j<N;j++){
764 accumReconTp(hspin._internal[i][j],fspin._internal[i][j]);
765 }}
766}
767
769// Tm
771template<class rtype,class vtype> accelerator_inline void spProjTm (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
772{
773 spProjTm(hspin._internal,fspin._internal);
774}
775template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProjTm (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
776{
777 for(int i=0;i<N;i++) {
778 spProjTm(hspin._internal[i],fspin._internal[i]);
779 }
780}
781template<class rtype,class vtype,int N> accelerator_inline void spProjTm (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
782{
783 for(int i=0;i<N;i++){
784 for(int j=0;j<N;j++){
785 spProjTm(hspin._internal[i][j],fspin._internal[i][j]);
786 }}
787}
788
789
790template<class rtype,class vtype> accelerator_inline void spReconTm (iScalar<rtype> &hspin, const iScalar<vtype> &fspin)
791{
792 spReconTm(hspin._internal,fspin._internal);
793}
794template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spReconTm (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
795{
796 for(int i=0;i<N;i++) {
797 spReconTm(hspin._internal[i],fspin._internal[i]);
798 }
799}
800template<class rtype,class vtype,int N> accelerator_inline void spReconTm (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
801{
802 for(int i=0;i<N;i++){
803 for(int j=0;j<N;j++){
804 spReconTm(hspin._internal[i][j],fspin._internal[i][j]);
805 }}
806}
807
808template<class rtype,class vtype> accelerator_inline void accumReconTm (iScalar<rtype> &hspin, const iScalar<vtype> &fspin)
809{
810 accumReconTm(hspin._internal,fspin._internal);
811}
812template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumReconTm (iVector<rtype,N> &hspin, const iVector<vtype,N> &fspin)
813{
814 for(int i=0;i<N;i++) {
815 accumReconTm(hspin._internal[i],fspin._internal[i]);
816 }
817}
818template<class rtype,class vtype,int N> accelerator_inline void accumReconTm (iMatrix<rtype,N> &hspin, const iMatrix<vtype,N> &fspin)
819{
820 for(int i=0;i<N;i++){
821 for(int j=0;j<N;j++){
822 accumReconTm(hspin._internal[i][j],fspin._internal[i][j]);
823 }}
824}
825
827// 5p
829template<class rtype,class vtype,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
830{
831 spProj5p(hspin._internal,fspin._internal);
832}
833template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spProj5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
834{
835 for(int i=0;i<N;i++) {
836 spProj5p(hspin._internal[i],fspin._internal[i]);
837 }
838}
839template<class rtype,class vtype,int N,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
840{
841 for(int i=0;i<N;i++){
842 for(int j=0;j<N;j++){
843 spProj5p(hspin._internal[i][j],fspin._internal[i][j]);
844 }}
845}
846
847template<class rtype,class vtype> accelerator_inline void spRecon5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
848{
849 spRecon5p(hspin._internal,fspin._internal);
850}
851template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spRecon5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
852{
853 for(int i=0;i<N;i++) {
854 spRecon5p(hspin._internal[i],fspin._internal[i]);
855 }
856}
857template<class rtype,class vtype,int N> accelerator_inline void spRecon5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
858{
859 for(int i=0;i<N;i++){
860 for(int j=0;j<N;j++){
861 spRecon5p(hspin._internal[i][j],fspin._internal[i][j]);
862 }}
863}
864
865template<class rtype,class vtype> accelerator_inline void accumRecon5p (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
866{
867 accumRecon5p(hspin._internal,fspin._internal);
868}
869template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumRecon5p (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
870{
871 for(int i=0;i<N;i++) {
872 accumRecon5p(hspin._internal[i],fspin._internal[i]);
873 }
874}
875template<class rtype,class vtype,int N> accelerator_inline void accumRecon5p (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
876{
877 for(int i=0;i<N;i++){
878 for(int j=0;j<N;j++){
879 accumRecon5p(hspin._internal[i][j],fspin._internal[i][j]);
880 }}
881}
882
883// four spinor projectors for chiral proj
884template<class vtype,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5p (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
885{
886 spProj5p(hspin._internal,fspin._internal);
887}
888template<class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5p (iVector<vtype,N> &hspin,const iVector<vtype,N> &fspin)
889{
890 for(int i=0;i<N;i++) {
891 spProj5p(hspin._internal[i],fspin._internal[i]);
892 }
893}
894template<class vtype,int N,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5p (iMatrix<vtype,N> &hspin,const iMatrix<vtype,N> &fspin)
895{
896 for(int i=0;i<N;i++){
897 for(int j=0;j<N;j++){
898 spProj5p(hspin._internal[i][j],fspin._internal[i][j]);
899 }}
900}
901
902
904// 5m
906
907template<class rtype,class vtype,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
908{
909 spProj5m(hspin._internal,fspin._internal);
910}
911template<class rtype,class vtype,int N,IfNotSpinor<iVector<rtype,N> > = 0,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
912{
913 for(int i=0;i<N;i++) {
914 spProj5m(hspin._internal[i],fspin._internal[i]);
915 }
916}
917template<class rtype,class vtype,int N,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
918{
919 for(int i=0;i<N;i++){
920 for(int j=0;j<N;j++){
921 spProj5m(hspin._internal[i][j],fspin._internal[i][j]);
922 }}
923}
924
925template<class rtype,class vtype> accelerator_inline void spRecon5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
926{
927 spRecon5m(hspin._internal,fspin._internal);
928}
929template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void spRecon5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
930{
931 for(int i=0;i<N;i++) {
932 spRecon5m(hspin._internal[i],fspin._internal[i]);
933 }
934}
935template<class rtype,class vtype,int N> accelerator_inline void spRecon5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
936{
937 for(int i=0;i<N;i++){
938 for(int j=0;j<N;j++){
939 spRecon5m(hspin._internal[i][j],fspin._internal[i][j]);
940 }}
941}
942
943template<class rtype,class vtype> accelerator_inline void accumRecon5m (iScalar<rtype> &hspin,const iScalar<vtype> &fspin)
944{
945 accumRecon5m(hspin._internal,fspin._internal);
946}
947template<class rtype,class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0> accelerator_inline void accumRecon5m (iVector<rtype,N> &hspin,const iVector<vtype,N> &fspin)
948{
949 for(int i=0;i<N;i++) {
950 accumRecon5m(hspin._internal[i],fspin._internal[i]);
951 }
952}
953template<class rtype,class vtype,int N> accelerator_inline void accumRecon5m (iMatrix<rtype,N> &hspin,const iMatrix<vtype,N> &fspin)
954{
955 for(int i=0;i<N;i++){
956 for(int j=0;j<N;j++){
957 accumRecon5m(hspin._internal[i][j],fspin._internal[i][j]);
958 }}
959}
960
961
962// four spinor projectors for chiral proj
963template<class vtype,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5m (iScalar<vtype> &hspin,const iScalar<vtype> &fspin)
964{
965 spProj5m(hspin._internal,fspin._internal);
966}
967template<class vtype,int N,IfNotSpinor<iVector<vtype,N> > = 0,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5m (iVector<vtype,N> &hspin,const iVector<vtype,N> &fspin)
968{
969 for(int i=0;i<N;i++) {
970 spProj5m(hspin._internal[i],fspin._internal[i]);
971 }
972}
973template<class vtype,int N,IfNotCoarsened<iScalar<vtype> > = 0> accelerator_inline void spProj5m (iMatrix<vtype,N> &hspin,const iMatrix<vtype,N> &fspin)
974{
975 for(int i=0;i<N;i++){
976 for(int j=0;j<N;j++){
977 spProj5m(hspin._internal[i][j],fspin._internal[i][j]);
978 }}
979}
980
982#endif
#define accelerator_inline
accelerator_inline void timesMinusI(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &in)
accelerator_inline void timesI(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &in)
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
accelerator_inline void spProjXp(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:75
accelerator_inline void spReconZm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:269
accelerator_inline void spRecon5m(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:337
accelerator_inline void accumReconYp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:241
accelerator_inline void spProjYm(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:95
accelerator_inline void accumReconZm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:283
accelerator_inline void spProjTm(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:129
accelerator_inline void spProjZp(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:106
accelerator_inline void spProjTp(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:123
accelerator_inline void accumRecon5p(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:344
accelerator_inline void spReconXp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:193
accelerator_inline void spProj5m(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:146
accelerator_inline void spReconTp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:296
accelerator_inline void spProjZm(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:111
accelerator_inline void spReconTm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:303
accelerator_inline void spReconYp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:227
accelerator_inline void accumReconYm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:248
accelerator_inline void accumRecon5m(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:349
accelerator_inline void spProj5p(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:140
accelerator_inline void spProjXm(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:80
accelerator_inline void accumReconTp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:310
accelerator_inline void spProjYp(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:90
accelerator_inline void accumReconZp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:276
accelerator_inline void spRecon5p(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:330
accelerator_inline void spReconXm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:200
accelerator_inline void accumReconXp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:207
accelerator_inline void accumReconTm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:317
accelerator_inline void accumReconXm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:214
accelerator_inline void spReconYm(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:234
accelerator_inline void spReconZp(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:262
Definition Simd.h:194
vtype _internal[N][N]
vtype _internal
vtype _internal[N]