QDP++
qdp_primscalar.h
Go to the documentation of this file.
1// -*- C++ -*-
2
6
7#ifndef QDP_PRIMSCALAR_H
8#define QDP_PRIMSCALAR_H
9
10namespace QDP {
11
12
13//-------------------------------------------------------------------------------------
21
23
24template<class T> class PScalar
25{
26public:
29
30 //---------------------------------------------------------
32 PScalar(const typename WordType<T>::Type_t& rhs) : F(rhs) {}
33
35 template<class T1>
36 PScalar(const PScalar<T1>& rhs) : F(rhs.elem()) {}
37
39 template<class T1>
40 PScalar(const T1& rhs) : F(rhs) {}
41
42 //---------------------------------------------------------
43#if 0
45
46 inline
47 PScalar& operator=(const typename WordType<T>::Type_t& rhs)
48 {
49 elem() = rhs;
50 return *this;
51 }
52#endif
53
55
56 template<class T1>
57 inline
59 {
60 elem() = rhs.elem();
61 return *this;
62 }
63
65 template<class T1>
66 inline
68 {
69 elem() += rhs.elem();
70 return *this;
71 }
72
74 template<class T1>
75 inline
77 {
78 elem() -= rhs.elem();
79 return *this;
80 }
81
83 template<class T1>
84 inline
86 {
87 elem() *= rhs.elem();
88 return *this;
89 }
90
92 template<class T1>
93 inline
95 {
96 elem() /= rhs.elem();
97 return *this;
98 }
99
101 template<class T1>
102 inline
104 {
105 elem() %= rhs.elem();
106 return *this;
107 }
108
110 template<class T1>
111 inline
113 {
114 elem() |= rhs.elem();
115 return *this;
116 }
117
119 template<class T1>
120 inline
122 {
123 elem() &= rhs.elem();
124 return *this;
125 }
126
128 template<class T1>
129 inline
131 {
132 elem() ^= rhs.elem();
133 return *this;
134 }
135
137 template<class T1>
138 inline
140 {
141 elem() <<= rhs.elem();
142 return *this;
143 }
144
146 template<class T1>
147 inline
149 {
150 elem() >>= rhs.elem();
151 return *this;
152 }
153
155 PScalar(const PScalar& a): F(a.F) {/* fprintf(stderr,"copy PScalar\n"); */}
156
157public:
158 T& elem() {return F;}
159 const T& elem() const {return F;}
160
161private:
162 T F;
163};
164
165
166// Input
168template<class T>
169inline
170std::istream& operator>>(std::istream& s, PScalar<T>& d)
171{
172 return s >> d.elem();
173}
174
176template<class T>
177inline
179{
180 return s >> d.elem();
181}
182
183// Output
185template<class T>
186inline
187std::ostream& operator<<(std::ostream& s, const PScalar<T>& d)
188{
189 return s << d.elem();
190}
191
193template<class T>
194inline
196{
197 return s << d.elem();
198}
199
201template<class T>
202inline
204{
205 return txt >> d.elem();
206}
207
209template<class T>
210inline
212{
213 return txt << d.elem();
214}
215
216#ifdef QDP_USE_LIBXML2
218template<class T>
219inline
220XMLWriter& operator<<(XMLWriter& xml, const PScalar<T>& d)
221{
222 return xml << d.elem();
223}
224
226template<class T>
227inline
228void read(XMLReader& xml, const std::string& path, PScalar<T>& d)
229{
230 read(xml, path, d.elem());
231}
232#endif
233 // end of group primscalar
235
236
237//-----------------------------------------------------------------------------
238// Traits classes
239//-----------------------------------------------------------------------------
240
241// Underlying word type
242template<class T>
243struct WordType<PScalar<T> >
244{
245 typedef typename WordType<T>::Type_t Type_t;
246};
247
248// Fixed Precision Types
249template<class T>
254
255template<class T>
260
261// Internally used scalars
262template<class T>
266
267// Internally used real scalars
268template<class T>
272
273// Makes a primitive scalar leaving grid alone
274template<class T>
278
279// Makes a lattice scalar leaving primitive indices alone
280template<class T>
284
285
286//-----------------------------------------------------------------------------
287// Traits classes to support return types
288//-----------------------------------------------------------------------------
289
290// Default unary(PScalar) -> PScalar
291template<class T1, class Op>
295
296// Default binary(PScalar,PScalar) -> PScalar
297template<class T1, class T2, class Op>
301
302
303#if 0
304template<class T1, class T2>
305struct UnaryReturn<PScalar<T2>, OpCast<T1> > {
307// typedef T1 Type_t;
308};
309#endif
310
311// Assignment is different
312template<class T1, class T2 >
315};
316
317template<class T1, class T2>
320};
321
322template<class T1, class T2>
326
327template<class T1, class T2>
331
332template<class T1, class T2>
336
337template<class T1, class T2>
340};
341
342template<class T1, class T2>
346
347template<class T1, class T2>
351
352template<class T1, class T2>
356
357template<class T1, class T2>
361
362template<class T1, class T2>
366
367
368
369
370//-----------------------------------------------------------------------------
371// Operators
372//-----------------------------------------------------------------------------
373
376
377// Primitive Scalars
378
379// ! PScalar
380template<class T>
384
385template<class T1>
388{
389 return ! l.elem();
390}
391
392// + PScalar
393template<class T1>
396{
397 return +l.elem();
398}
399
400// - PScalar
401template<class T1>
404{
405 return -l.elem();
406}
407
408// PScalar + PScalar
409template<class T1, class T2>
410inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpAdd>::Type_t
412{
413 return l.elem() + r.elem();
414}
415
416// PScalar - PScalar
417template<class T1, class T2>
418inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpSubtract>::Type_t
420{
421 return l.elem() - r.elem();
422}
423
424// PScalar * PScalar
425template<class T1, class T2>
426inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpMultiply>::Type_t
428{
429 return l.elem() * r.elem();
430}
431
432// Optimized adj(PMatrix)*PMatrix
433template<class T1, class T2>
434inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpAdjMultiply>::Type_t
436{
437 return adjMultiply(l.elem(), r.elem());
438}
439
440// Optimized PMatrix*adj(PMatrix)
441template<class T1, class T2>
442inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpMultiplyAdj>::Type_t
444{
445 return multiplyAdj(l.elem(), r.elem());
446}
447
448// Optimized PMatrix*adj(PMatrix)
449template<class T1, class T2>
450inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,4>, OpMultiplyAdj>::Type_t
452{
453 return multiplyAdj(l.elem(), r.elem());
454}
455
456// Optimized adj(PMatrix)*adj(PMatrix)
457template<class T1, class T2>
458inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpAdjMultiplyAdj>::Type_t
460{
461 return adjMultiplyAdj(l.elem(), r.elem());
462}
463
464// PScalar / PScalar
465template<class T1, class T2>
466inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpDivide>::Type_t
468{
469 return l.elem() / r.elem();
470}
471
472
473// PScalar << PScalar
474template<class T1, class T2 >
478
479template<class T1, class T2>
481operator<<(const PScalar<T1>& l, const PScalar<T2>& r)
482{
483 return l.elem() << r.elem();
484}
485
486// PScalar >> PScalar
487template<class T1, class T2 >
491
492template<class T1, class T2>
495{
496 return l.elem() >> r.elem();
497}
498
499// PScalar % PScalar
500template<class T1, class T2>
501inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpMod>::Type_t
503{
504 return l.elem() % r.elem();
505}
506
507// PScalar ^ PScalar
508template<class T1, class T2>
509inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpBitwiseXor>::Type_t
511{
512 return l.elem() ^ r.elem();
513}
514
515// PScalar & PScalar
516template<class T1, class T2>
517inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpBitwiseAnd>::Type_t
519{
520 return l.elem() & r.elem();
521}
522
523// PScalar | PScalar
524template<class T1, class T2>
525inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, OpBitwiseOr>::Type_t
527{
528 return l.elem() | r.elem();
529}
530
531
532// Comparisons
533template<class T1, class T2 >
537
538template<class T1, class T2>
540operator<(const PScalar<T1>& l, const PScalar<T2>& r)
541{
542 return l.elem() < r.elem();
543}
544
545
546template<class T1, class T2 >
550
551template<class T1, class T2>
553operator<=(const PScalar<T1>& l, const PScalar<T2>& r)
554{
555 return l.elem() <= r.elem();
556}
557
558
559template<class T1, class T2 >
563
564template<class T1, class T2>
567{
568 return l.elem() > r.elem();
569}
570
571
572template<class T1, class T2 >
576
577template<class T1, class T2>
580{
581 return l.elem() >= r.elem();
582}
583
584
585template<class T1, class T2 >
589
590template<class T1, class T2>
593{
594 return l.elem() == r.elem();
595}
596
597
598template<class T1, class T2 >
602
603template<class T1, class T2>
606{
607 return l.elem() != r.elem();
608}
609
610
611template<class T1, class T2>
615
616template<class T1, class T2>
619{
620 return l.elem() && r.elem();
621}
622
623
624template<class T1, class T2>
628
629template<class T1, class T2>
632{
633 return l.elem() || r.elem();
634}
635
636
637//-----------------------------------------------------------------------------
638// Functions
639
640// Adjoint
641template<class T1>
643adj(const PScalar<T1>& s1)
644{
645 return adj(s1.elem());
646}
647
648
649// Conjugate
650template<class T1>
653{
654 return conj(s1.elem());
655}
656
657
658// Transpose
659template<class T1>
662{
663 return transpose(s1.elem());
664}
665
666
667// TRACE
668// trace = Trace(source1)
669template<class T1>
672{
673 return trace(s1.elem());
674}
675
676
677// trace = Re(Trace(source1))
678template<class T1>
681{
682 return realTrace(s1.elem());
683}
684
685
686// trace = Im(Trace(source1))
687template<class T1>
690{
691 return imagTrace(s1.elem());
692}
693
694
695// trace = colorTrace(source1)
696template<class T1>
699{
700 return traceColor(s1.elem());
701}
702
703
705template<class T1>
708{
709 return traceSpin(s1.elem());
710}
711
713template<class T1>
716{
717 return transposeSpin(s1.elem());
718}
719
721template<class T1, class T2>
722inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnTraceMultiply>::Type_t
724{
725 return traceMultiply(l.elem(), r.elem());
726}
727
729template<class T1, class T2>
730inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnTraceColorMultiply>::Type_t
732{
733 return traceMultiply(l.elem(), r.elem());
734}
735
737template<class T1, class T2>
738inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnTraceSpinMultiply>::Type_t
740{
741 return traceMultiply(l.elem(), r.elem());
742}
743
745template<class T1, class T2>
746inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnTraceSpinOuterProduct>::Type_t
748{
749 return traceSpinOuterProduct(l.elem(), r.elem());
750}
751
753template<class T1, class T2>
754inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnOuterProduct>::Type_t
756{
757 return outerProduct(l.elem(),r.elem());
758}
759
760
762template<class T>
764real(const PScalar<T>& s1)
765{
766 return real(s1.elem());
767}
768
769
770// PScalar = Im(PScalar)
771template<class T>
773imag(const PScalar<T>& s1)
774{
775 return imag(s1.elem());
776}
777
778
779// ArcCos
780template<class T1>
783{
784 return acos(s1.elem());
785}
786
787// ArcSin
788template<class T1>
791{
792 return asin(s1.elem());
793}
794
795// ArcTan
796template<class T1>
799{
800 return atan(s1.elem());
801}
802
803// Ceil(ing)
804template<class T1>
807{
808 return ceil(s1.elem());
809}
810
811// Cos
812template<class T1>
814cos(const PScalar<T1>& s1)
815{
816 return cos(s1.elem());
817}
818
819// Cosh
820template<class T1>
823{
824 return cosh(s1.elem());
825}
826
827// Exp
828template<class T1>
830exp(const PScalar<T1>& s1)
831{
832 return exp(s1.elem());
833}
834
835// Fabs
836template<class T1>
839{
840 return fabs(s1.elem());
841}
842
843// Floor
844template<class T1>
847{
848 return floor(s1.elem());
849}
850
851// Log
852template<class T1>
854log(const PScalar<T1>& s1)
855{
856 return log(s1.elem());
857}
858
859// Log10
860template<class T1>
863{
864 return log10(s1.elem());
865}
866
867// Sin
868template<class T1>
870sin(const PScalar<T1>& s1)
871{
872 return sin(s1.elem());
873}
874
875// Sinh
876template<class T1>
879{
880 return sinh(s1.elem());
881}
882
883// Sqrt
884template<class T1>
887{
888 return sqrt(s1.elem());
889}
890
891// Tan
892template<class T1>
894tan(const PScalar<T1>& s1)
895{
896 return tan(s1.elem());
897}
898
899// Tanh
900template<class T1>
903{
904 return tanh(s1.elem());
905}
906
907
908//-----------------------------------------------------------------------------
909// These functions always return bool
911template<class T1>
913 bool Type_t;
914};
915
916template<class T1>
917inline bool
919{
920 return isnan(s1.elem());
921}
922
924template<class T1>
926 bool Type_t;
927};
928
929template<class T1>
930inline bool
932{
933 return isinf(s1.elem());
934}
935
937template<class T1>
939 bool Type_t;
940};
941
942template<class T1>
943inline bool
945{
946 return isnormal(s1.elem());
947}
948
950template<class T1>
952 bool Type_t;
953};
954
955template<class T1>
956inline bool
958{
959 return isfinite(s1.elem());
960}
961
962
963//-----------------------------------------------------------------------------
965template<class T1, class T2>
966inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnPow>::Type_t
967pow(const PScalar<T1>& s1, const PScalar<T2>& s2)
968{
969 return pow(s1.elem(), s2.elem());
970}
971
973template<class T1, class T2>
974inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnArcTan2>::Type_t
975atan2(const PScalar<T1>& s1, const PScalar<T2>& s2)
976{
977 return atan2(s1.elem(), s2.elem());
978}
979
980
982template<class T1, class T2>
983inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnCmplx>::Type_t
984cmplx(const PScalar<T1>& s1, const PScalar<T2>& s2)
985{
986 return cmplx(s1.elem(), s2.elem());
987}
988
989
990
991// Global Functions
992// PScalar = i * PScalar
993template<class T>
996{
997 return timesI(s1.elem());
998}
999
1000// PScalar = -i * PScalar
1001template<class T>
1004{
1005 return timesMinusI(s1.elem());
1006}
1007
1008
1010template<class T>
1013{
1014 return seedToFloat(s1.elem());
1015}
1016
1017
1019
1020template<class T>
1021inline typename UnaryReturn<PScalar<T>, FnGetSite>::Type_t
1022getSite(const PScalar<T>& s1, int innersite)
1023{
1024 return getSite(s1.elem(), innersite);
1025}
1026
1028
1029template<class T>
1030inline typename UnaryReturn<PScalar<T>, FnPeekColorVector>::Type_t
1031peekColor(const PScalar<T>& l, int row)
1032{
1033 return peekColor(l.elem(),row);
1034}
1035
1037
1038template<class T>
1039inline typename UnaryReturn<PScalar<T>, FnPeekColorMatrix>::Type_t
1040peekColor(const PScalar<T>& l, int row, int col)
1041{
1042 return peekColor(l.elem(),row,col);
1043}
1044
1046
1047template<class T>
1048inline typename UnaryReturn<PScalar<T>, FnPeekSpinVector>::Type_t
1049peekSpin(const PScalar<T>& l, int row)
1050{
1051 return peekSpin(l.elem(),row);
1052}
1053
1055
1056template<class T>
1057inline typename UnaryReturn<PScalar<T>, FnPeekSpinMatrix>::Type_t
1058peekSpin(const PScalar<T>& l, int row, int col)
1059{
1060 return peekSpin(l.elem(),row,col);
1061}
1062
1063
1065
1066template<class T1, class T2>
1067inline PScalar<T1>&
1068pokeColor(PScalar<T1>& l, const PScalar<T2>& r, int row)
1069{
1070 pokeColor(l.elem(),r.elem(),row);
1071 return l;
1072}
1073
1075
1076template<class T1, class T2>
1077inline PScalar<T1>&
1078pokeColor(PScalar<T1>& l, const PScalar<T2>& r, int row, int col)
1079{
1080 pokeColor(l.elem(),r.elem(),row,col);
1081 return l;
1082}
1083
1085
1086template<class T1, class T2>
1087inline PScalar<T1>&
1088pokeSpin(PScalar<T1>& l, const PScalar<T2>& r, int row)
1089{
1090 pokeSpin(l.elem(),r.elem(),row);
1091 return l;
1092}
1093
1095
1096template<class T1, class T2>
1097inline PScalar<T1>&
1098pokeSpin(PScalar<T1>& l, const PScalar<T2>& r, int row, int col)
1099{
1100 pokeSpin(l.elem(),r.elem(),row,col);
1101 return l;
1102}
1103
1104
1105//-----------------------------------------------------------------------------
1107template<class T2, int N, int m>
1108inline typename BinaryReturn<GammaConst<N,m>, PScalar<T2>, OpGammaConstMultiply>::Type_t
1110{
1111 return l * r.elem();
1112}
1113
1115template<class T2, int N, int m>
1116inline typename BinaryReturn<PScalar<T2>, GammaConst<N,m>, OpGammaConstMultiply>::Type_t
1118{
1119 return l.elem() * r;
1120}
1121
1122//-----------------------------------------------------------------------------
1124template<class T>
1127{
1128 return spinProjectDir0Minus(s1.elem());
1129}
1130
1132template<class T>
1135{
1136 return spinReconstructDir0Minus(s1.elem());
1137}
1138
1139
1141template<class T>
1144{
1145 return spinProjectDir1Minus(s1.elem());
1146}
1147
1149template<class T>
1152{
1153 return spinReconstructDir1Minus(s1.elem());
1154}
1155
1156
1158template<class T>
1161{
1162 return spinProjectDir2Minus(s1.elem());
1163}
1164
1166template<class T>
1169{
1170 return spinReconstructDir2Minus(s1.elem());
1171}
1172
1173
1175template<class T>
1178{
1179 return spinProjectDir3Minus(s1.elem());
1180}
1181
1183template<class T>
1186{
1187 return spinReconstructDir3Minus(s1.elem());
1188}
1189
1190
1192template<class T>
1195{
1196 return spinProjectDir0Plus(s1.elem());
1197}
1198
1200template<class T>
1203{
1204 return spinReconstructDir0Plus(s1.elem());
1205}
1206
1207
1209template<class T>
1212{
1213 return spinProjectDir1Plus(s1.elem());
1214}
1215
1217template<class T>
1220{
1221 return spinReconstructDir1Plus(s1.elem());
1222}
1223
1224
1226template<class T>
1229{
1230 return spinProjectDir2Plus(s1.elem());
1231}
1232
1234template<class T>
1237{
1238 return spinReconstructDir2Plus(s1.elem());
1239}
1240
1241
1243template<class T>
1246{
1247 return spinProjectDir3Plus(s1.elem());
1248}
1249
1251template<class T>
1254{
1255 return spinReconstructDir3Plus(s1.elem());
1256}
1257
1258//-----------------------------------------------------------------------------
1260template<class T>
1263{
1264 return chiralProjectPlus(s1.elem());
1265}
1266
1268template<class T>
1271{
1272 return chiralProjectMinus(s1.elem());
1273}
1274
1275
1276//-----------------------------------------------------------------------------
1277// quark propagator contraction
1278template<class T1, class T2>
1279inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnQuarkContract13>::Type_t
1281{
1282 return quarkContract13(s1.elem(), s2.elem());
1283}
1284
1285template<class T1, class T2>
1286inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnQuarkContract14>::Type_t
1288{
1289 return quarkContract14(s1.elem(), s2.elem());
1290}
1291
1292template<class T1, class T2>
1293inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnQuarkContract23>::Type_t
1295{
1296 return quarkContract23(s1.elem(), s2.elem());
1297}
1298
1299template<class T1, class T2>
1300inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnQuarkContract24>::Type_t
1302{
1303 return quarkContract24(s1.elem(), s2.elem());
1304}
1305
1306template<class T1, class T2>
1307inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnQuarkContract12>::Type_t
1309{
1310 return quarkContract12(s1.elem(), s2.elem());
1311}
1312
1313template<class T1, class T2>
1314inline typename BinaryReturn<PScalar<T1>, PScalar<T2>, FnQuarkContract34>::Type_t
1316{
1317 return quarkContract34(s1.elem(), s2.elem());
1318}
1319
1320
1321//-----------------------------------------------------------------------------
1322// Contraction for color matrices
1323// colorContract
1325
1328template<class T1, class T2, class T3>
1332
1333template<class T1, class T2, class T3>
1335colorContract(const PScalar<T1>& s1, const PScalar<T2>& s2, const PScalar<T3>& s3)
1336{
1337 return colorContract(s1.elem(), s2.elem(), s3.elem());
1338}
1339
1340
1341//-----------------------------------------------------------------------------
1342// Contraction of two colorvectors
1344template<class T1, class T2>
1348
1349template<class T1, class T2>
1352{
1353 return colorVectorContract(s1.elem(), s2.elem());
1354}
1355
1356
1357
1358//-----------------------------------------------------------------------------
1359// Cross product for color vectors
1361template<class T1, class T2>
1365
1366template<class T1, class T2>
1369{
1370 return colorCrossProduct(s1.elem(), s2.elem());
1371}
1372
1373
1374
1375//-----------------------------------------------------------------------------
1377template<class T, class T1>
1378inline void
1379copymask(PScalar<T>& d, const PScalar<T1>& mask, const PScalar<T>& s1)
1380{
1381 copymask(d.elem(),mask.elem(),s1.elem());
1382}
1383
1385template<class T, class T1, class T2>
1386inline void
1387fill_random(PScalar<T>& d, T1& seed, T2& skewed_seed, const T1& seed_mult)
1388{
1389 fill_random(d.elem(), seed, skewed_seed, seed_mult);
1390}
1391
1392
1394template<class T>
1395inline void
1397{
1398 fill_gaussian(d.elem(), r1.elem(), r2.elem());
1399}
1400
1401
1402#if 1
1403// Global sum over site indices only
1404template<class T>
1408
1409template<class T>
1410inline typename UnaryReturn<PScalar<T>, FnSum>::Type_t
1411sum(const PScalar<T>& s1)
1412{
1413 return sum(s1.elem());
1414}
1415#endif
1416
1417
1418// ! PScalar
1419template<class T>
1423
1424// InnerProduct (norm-seq) global sum = sum(tr(adj(s1)*s1))
1425template<class T>
1429
1430template<class T>
1434
1435template<class T>
1438{
1439 return localNorm2(s1.elem());
1440}
1441
1442// Global max
1443template<class T>
1447
1448template<class T>
1451{
1452 return globalMax(s1.elem());
1453}
1454
1455
1456// Global min
1457template<class T>
1461
1462template<class T>
1465{
1466 return globalMin(s1.elem());
1467}
1468
1469
1471template<class T1, class T2>
1475
1476template<class T1, class T2>
1480
1481template<class T1, class T2>
1484{
1485 return localInnerProduct(s1.elem(), s2.elem());
1486}
1487
1488
1490template<class T1, class T2>
1494
1495template<class T1, class T2>
1499
1500template<class T1, class T2>
1503{
1504 return localInnerProductReal(s1.elem(), s2.elem());
1505}
1506
1507
1509template<class T1, class T2>
1513
1514template<class T1, class T2>
1517{
1518 return localColorInnerProduct(s1.elem(), s2.elem());
1519}
1520
1521
1523
1527template<class T1, class T2, class T3>
1531
1532template<class T1, class T2, class T3>
1534where(const PScalar<T1>& a, const PScalar<T2>& b, const PScalar<T3>& c)
1535{
1536 return where(a.elem(), b.elem(), c.elem());
1537}
1538
1539
1540//-----------------------------------------------------------------------------
1542template<class T>
1543inline int
1545{
1546 return toInt(s.elem());
1547}
1548
1550template<class T>
1551inline float
1553{
1554 return toFloat(s.elem());
1555}
1556
1558template<class T>
1559inline double
1561{
1562 return toDouble(s.elem());
1563}
1564
1566template<class T>
1567inline bool
1569{
1570 return toBool(s.elem());
1571}
1572
1574template<class T>
1575inline typename WordType< PScalar<T> >::Type_t
1577{
1578 return toWordType(s.elem());
1579}
1580
1581
1582//-----------------------------------------------------------------------------
1583// Other operations
1585template<class T>
1586inline void
1588{
1589 zero_rep(dest.elem());
1590}
1591
1593template<class T, class T1>
1594inline void
1595cast_rep(T& d, const PScalar<T1>& s1)
1596{
1597 cast_rep(d, s1.elem());
1598}
1599
1601template<class T, class T1>
1602inline void
1604{
1605 cast_rep(d.elem(), s1.elem());
1606}
1607
1609template<class T, class T1>
1610inline void
1611copy_site(PScalar<T>& d, int isite, const PScalar<T1>& s1)
1612{
1613 copy_site(d.elem(), isite, s1.elem());
1614}
1615
1617template<class T, class T1>
1618inline void
1620 const PScalar<T1>& s0, int i0,
1621 const PScalar<T1>& s1, int i1,
1622 const PScalar<T1>& s2, int i2,
1623 const PScalar<T1>& s3, int i3)
1624{
1625 gather_sites(d.elem(), s0.elem(), i0, s1.elem(), i1, s2.elem(), i2, s3.elem(), i3);
1626}
1627 // end of group primscalar
1629
1630} // namespace QDP
1631
1632#endif
Primitive Scalar.
PScalar(const PScalar &a)
Deep copies here.
PScalar & operator%=(const PScalar< T1 > &rhs)
PScalar %= PScalar.
PScalar & operator-=(const PScalar< T1 > &rhs)
PScalar -= PScalar.
PScalar & operator+=(const PScalar< T1 > &rhs)
PScalar += PScalar.
PScalar & operator*=(const PScalar< T1 > &rhs)
PScalar *= PScalar.
PScalar & operator>>=(const PScalar< T1 > &rhs)
PScalar >>= PScalar.
PScalar & operator|=(const PScalar< T1 > &rhs)
PScalar |= PScalar.
PScalar & operator^=(const PScalar< T1 > &rhs)
PScalar ^= PScalar.
PScalar(const typename WordType< T >::Type_t &rhs)
construct dest = const
PScalar & operator<<=(const PScalar< T1 > &rhs)
PScalar <<= PScalar.
PScalar & operator&=(const PScalar< T1 > &rhs)
PScalar &= PScalar.
PScalar & operator/=(const PScalar< T1 > &rhs)
PScalar /= PScalar.
PScalar(const PScalar< T1 > &rhs)
construct dest = rhs
PScalar & operator=(const PScalar< T1 > &rhs)
PScalar = PScalar.
const T & elem() const
PScalar(const T1 &rhs)
construct dest = rhs
Primitive spin Vector class.
StandardInputStream class.
Definition qdp_stdio.h:33
StandardOutputStream class.
Definition qdp_stdio.h:106
Text input class.
Definition qdp_io.h:42
Text output base class.
Definition qdp_io.h:203
XML reader class.
Definition qdp_xmlio.h:44
UnaryReturn< C, FnGlobalMin >::Type_t globalMin(const QDPType< T, C > &s1)
OScalar = globalMin(source).
bool isnan(const QDPExpr< T, C > &s1)
bool = isnan(source)
bool isfinite(const QDPExpr< T, C > &s1)
bool = isfinite(source)
bool isnormal(const QDPExpr< T, C > &s1)
bool = isnormal(source)
bool isinf(const QDPExpr< T, C > &s1)
bool = isinf(source)
UnaryReturn< C, FnGlobalMax >::Type_t globalMax(const QDPType< T, C > &s1)
OScalar = globalMax(source).
UnaryReturn< C, FnSum >::Type_t sum(const QDPType< T, C > &s1)
OScalar = sum(source).
void gather_sites(ILattice< T, 2 > &d, const ILattice< T1, 2 > &s0, int i0, const ILattice< T1, 2 > &s1, int i1)
gather several inner sites together
Definition qdp_inner.h:3307
TextWriter & operator<<(TextWriter &txt, const std::string &output)
Definition qdp_io.cc:283
TextReader & operator>>(TextReader &txt, std::string &input)
Definition qdp_io.cc:121
void read(BinaryReader &bin, std::string &input, size_t maxBytes)
Definition qdp_io.cc:778
void fill_gaussian(IScalar< T > &d, IScalar< T > &r1, IScalar< T > &r2)
dest = gaussian
Definition qdp_inner.h:1861
void copy_site(IScalar< T > &d, int isite, const IScalar< T1 > &s1)
dest [some type] = source [some type]
Definition qdp_inner.h:1682
int toInt(const IScalar< T > &s)
QDP Int to int primitive in conversion routine.
Definition qdp_inner.h:1615
WordType< IScalar< T > > toWordType(const IScalar< T > &s)
QDP Wordtype to primitive wordtype.
Definition qdp_inner.h:1647
void zero_rep(IScalar< T > &dest)
dest = 0
Definition qdp_inner.h:1841
void copymask(IScalar< T > &d, const IScalar< T1 > &mask, const IScalar< T > &s1)
dest = (mask) ? s1 : dest
Definition qdp_inner.h:1656
double toDouble(const IScalar< T > &s)
QDP Double to double primitive in conversion routine.
Definition qdp_inner.h:1631
BinaryReturn< IScalar< T1 >, IScalar< T2 >, OpAdjMultiplyAdj >::Type_t adjMultiplyAdj(const IScalar< T1 > &l, const IScalar< T2 > &r)
Definition qdp_inner.h:1198
bool toBool(const IScalar< T > &s)
QDP Boolean to bool primitive in conversion routine.
Definition qdp_inner.h:1639
BinaryReturn< IScalar< T1 >, IScalar< T2 >, OpMultiplyAdj >::Type_t multiplyAdj(const IScalar< T1 > &l, const IScalar< T2 > &r)
Definition qdp_inner.h:1189
void cast_rep(T &d, const IScalar< T1 > &s1)
dest [float type] = source [int type]
Definition qdp_inner.h:1664
BinaryReturn< IScalar< T1 >, IScalar< T2 >, OpAdjMultiply >::Type_t adjMultiply(const IScalar< T1 > &l, const IScalar< T2 > &r)
Definition qdp_inner.h:1180
UnaryReturn< IScalar< T >, FnGetSite >::Type_t getSite(const IScalar< T > &s1, int innersite)
Definition qdp_inner.h:1605
float toFloat(const IScalar< T > &s)
QDP Real to float primitive in conversion routine.
Definition qdp_inner.h:1623
BinaryReturn< PColorMatrix< T1, N >, PColorMatrix< T2, N >, FnTraceColorMultiply >::Type_t traceColorMultiply(const PColorMatrix< T1, N > &l, const PColorMatrix< T2, N > &r)
BinaryReturn< PMatrix< T1, N, C >, PMatrix< T2, N, C >, FnTraceMultiply >::Type_t traceMultiply(const PMatrix< T1, N, C > &l, const PMatrix< T2, N, C > &r)
BinaryReturn< PMatrix< T1, N, C >, PMatrix< T2, N, C >, FnTraceSpinMultiply >::Type_t traceSpinMultiply(const PMatrix< T1, N, C > &l, const PMatrix< T2, N, C > &r)
BinaryReturn< PScalar< T1 >, PScalar< T2 >, FnTraceSpinOuterProduct >::Type_t traceSpinOuterProduct(const PScalar< T1 > &l, const PScalar< T2 > &r)
PScalar = traceSpin(outerProduct(PScalar, PScalar)).
Yet another random number generator.
MakeReturn< UnaryNode< FnTraceSpin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTraceSpin >::Type_t >::Expression_t traceSpin(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4959
MakeReturn< BinaryNode< FnColorCrossProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnColorCrossProduct >::Type_t >::Expression_t colorCrossProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2396
MakeReturn< UnaryNode< FnAdjoint, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnAdjoint >::Type_t >::Expression_t adj(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4842
MakeReturn< BinaryNode< FnPow, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnPow >::Type_t >::Expression_t pow(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2700
MakeReturn< UnaryNode< FnReal, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnReal >::Type_t >::Expression_t real(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4972
MakeReturn< UnaryNode< FnTimesMinusI, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTimesMinusI >::Type_t >::Expression_t timesMinusI(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5024
MakeReturn< UnaryNode< FnSpinProjectDir2Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir2Minus >::Type_t >::Expression_t spinProjectDir2Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5128
MakeReturn< TrinaryNode< FnWhere, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPType< T2, C2 > >::Leaf_t, typenameCreateLeaf< typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t >::Leaf_t >, typenameTrinaryReturn< C1, C2, typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t, FnWhere >::Type_t >::Expression_t where(const QDPType< T1, C1 > &a, const QDPType< T2, C2 > &b, const typename WordType< C1 >::Type_t &c)
Definition qdp.h:4576
MakeReturn< UnaryNode< FnSeedToFloat, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSeedToFloat >::Type_t >::Expression_t seedToFloat(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5037
MakeReturn< UnaryNode< FnPeekColorMatrix, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t peekColor(const QDPExpr< T1, C1 > &l, int row, int col)
Definition qdp_newops.h:161
MakeReturn< TrinaryNode< FnColorContract, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPType< T2, C2 > >::Leaf_t, typenameCreateLeaf< typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t >::Leaf_t >, typenameTrinaryReturn< C1, C2, typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t, FnColorContract >::Type_t >::Expression_t colorContract(const QDPType< T1, C1 > &a, const QDPType< T2, C2 > &b, const typename WordType< C1 >::Type_t &c)
Definition qdp.h:4557
MakeReturn< UnaryNode< FnSpinProjectDir1Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir1Minus >::Type_t >::Expression_t spinProjectDir1Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5115
MakeReturn< UnaryNode< FnHypSin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnHypSin >::Type_t >::Expression_t sinh(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5440
MakeReturn< BinaryNode< OpEQ, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpEQ >::Type_t >::Expression_t operator==(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2812
MakeReturn< BinaryNode< OpGT, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpGT >::Type_t >::Expression_t operator>(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2780
MakeReturn< UnaryNode< FnTimesI, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTimesI >::Type_t >::Expression_t timesI(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5011
MakeReturn< UnaryNode< FnSpinProjectDir0Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir0Plus >::Type_t >::Expression_t spinProjectDir0Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5050
MakeReturn< UnaryNode< FnSpinReconstructDir2Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir2Minus >::Type_t >::Expression_t spinReconstructDir2Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5232
MakeReturn< UnaryNode< FnHypTan, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnHypTan >::Type_t >::Expression_t tanh(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5479
MakeReturn< UnaryNode< FnFabs, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnFabs >::Type_t >::Expression_t fabs(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5375
MakeReturn< UnaryNode< FnRealTrace, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnRealTrace >::Type_t >::Expression_t realTrace(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4920
MakeReturn< UnaryNode< FnTrace, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTrace >::Type_t >::Expression_t trace(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4907
MakeReturn< BinaryNode< OpMultiply, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpMultiply >::Type_t >::Expression_t operator*(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2588
MakeReturn< BinaryNode< FnLocalInnerProductReal, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLocalInnerProductReal >::Type_t >::Expression_t localInnerProductReal(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2428
MakeReturn< BinaryNode< FnQuarkContract14, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract14 >::Type_t >::Expression_t quarkContract14(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2476
MakeReturn< UnaryNode< FnHypCos, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnHypCos >::Type_t >::Expression_t cosh(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5349
MakeReturn< BinaryNode< OpAdd, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpAdd >::Type_t >::Expression_t operator+(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2556
MakeReturn< UnaryNode< FnSpinReconstructDir2Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir2Plus >::Type_t >::Expression_t spinReconstructDir2Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5180
MakeReturn< UnaryNode< FnSpinProjectDir3Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir3Minus >::Type_t >::Expression_t spinProjectDir3Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5141
MakeReturn< UnaryNode< FnCos, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnCos >::Type_t >::Expression_t cos(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5336
MakeReturn< BinaryNode< OpSubtract, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpSubtract >::Type_t >::Expression_t operator-(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2572
MakeReturn< BinaryNode< OpMod, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpMod >::Type_t >::Expression_t operator%(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2620
MakeReturn< BinaryNode< FnQuarkContract12, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract12 >::Type_t >::Expression_t quarkContract12(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2524
MakeReturn< UnaryNode< FnSpinReconstructDir0Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir0Plus >::Type_t >::Expression_t spinReconstructDir0Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5154
MakeReturn< UnaryNode< FnArcTan, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnArcTan >::Type_t >::Expression_t atan(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5310
MakeReturn< BinaryNode< FnArcTan2, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnArcTan2 >::Type_t >::Expression_t atan2(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2732
MakeReturn< UnaryNode< FnTraceColor, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTraceColor >::Type_t >::Expression_t traceColor(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4946
MakeReturn< UnaryNode< FnConjugate, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnConjugate >::Type_t >::Expression_t conj(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4855
MakeReturn< BinaryNode< FnQuarkContract34, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract34 >::Type_t >::Expression_t quarkContract34(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2540
MakeReturn< UnaryNode< FnSpinReconstructDir1Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir1Plus >::Type_t >::Expression_t spinReconstructDir1Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5167
MakeReturn< UnaryNode< FnFloor, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnFloor >::Type_t >::Expression_t floor(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5388
MakeReturn< BinaryNode< FnColorVectorContract, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnColorVectorContract >::Type_t >::Expression_t colorVectorContract(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2380
MakeReturn< UnaryNode< OpNot, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, OpNot >::Type_t >::Expression_t operator!(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5544
MakeReturn< UnaryNode< FnSpinReconstructDir1Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir1Minus >::Type_t >::Expression_t spinReconstructDir1Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5219
MakeReturn< UnaryNode< FnSpinProjectDir2Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir2Plus >::Type_t >::Expression_t spinProjectDir2Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5076
MakeReturn< BinaryNode< FnOuterProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnOuterProduct >::Type_t >::Expression_t outerProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2364
MakeReturn< BinaryNode< FnLocalColorInnerProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLocalColorInnerProduct >::Type_t >::Expression_t localColorInnerProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2444
MakeReturn< BinaryNode< OpBitwiseAnd, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpBitwiseAnd >::Type_t >::Expression_t operator&(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2636
MakeReturn< BinaryNode< FnLocalInnerProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLocalInnerProduct >::Type_t >::Expression_t localInnerProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2412
MakeReturn< UnaryNode< FnArcSin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnArcSin >::Type_t >::Expression_t asin(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5297
MakeReturn< UnaryNode< FnExp, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnExp >::Type_t >::Expression_t exp(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5362
C1 & pokeColor(QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r, int row, int col)
Definition qdp_newops.h:360
MakeReturn< UnaryNode< FnPeekSpinMatrix, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t peekSpin(const QDPExpr< T1, C1 > &l, int row, int col)
Definition qdp_newops.h:258
MakeReturn< UnaryNode< FnSpinProjectDir3Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir3Plus >::Type_t >::Expression_t spinProjectDir3Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5089
MakeReturn< BinaryNode< OpAnd, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpAnd >::Type_t >::Expression_t operator&&(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2844
MakeReturn< BinaryNode< OpGE, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpGE >::Type_t >::Expression_t operator>=(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2796
MakeReturn< UnaryNode< FnTransposeSpin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTransposeSpin >::Type_t >::Expression_t transposeSpin(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4894
MakeReturn< UnaryNode< FnLog10, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLog10 >::Type_t >::Expression_t log10(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5414
MakeReturn< BinaryNode< OpBitwiseOr, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpBitwiseOr >::Type_t >::Expression_t operator|(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2652
MakeReturn< UnaryNode< FnSpinReconstructDir3Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir3Minus >::Type_t >::Expression_t spinReconstructDir3Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5245
MakeReturn< BinaryNode< FnCmplx, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnCmplx >::Type_t >::Expression_t cmplx(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2348
MakeReturn< BinaryNode< OpDivide, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpDivide >::Type_t >::Expression_t operator/(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2604
MakeReturn< UnaryNode< FnSin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSin >::Type_t >::Expression_t sin(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5427
MakeReturn< UnaryNode< FnArcCos, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnArcCos >::Type_t >::Expression_t acos(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5284
MakeReturn< UnaryNode< FnCeil, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnCeil >::Type_t >::Expression_t ceil(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5323
MakeReturn< UnaryNode< FnTranspose, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTranspose >::Type_t >::Expression_t transpose(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4868
MakeReturn< UnaryNode< FnSpinReconstructDir0Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir0Minus >::Type_t >::Expression_t spinReconstructDir0Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5206
MakeReturn< UnaryNode< FnImag, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnImag >::Type_t >::Expression_t imag(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4985
MakeReturn< UnaryNode< FnChiralProjectMinus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnChiralProjectMinus >::Type_t >::Expression_t chiralProjectMinus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5271
MakeReturn< BinaryNode< OpLT, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpLT >::Type_t >::Expression_t operator<(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2748
MakeReturn< BinaryNode< OpNE, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpNE >::Type_t >::Expression_t operator!=(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2828
MakeReturn< BinaryNode< OpOr, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpOr >::Type_t >::Expression_t operator||(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2860
MakeReturn< UnaryNode< FnSqrt, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSqrt >::Type_t >::Expression_t sqrt(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5453
MakeReturn< UnaryNode< FnTan, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTan >::Type_t >::Expression_t tan(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5466
MakeReturn< BinaryNode< FnQuarkContract23, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract23 >::Type_t >::Expression_t quarkContract23(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2492
MakeReturn< UnaryNode< FnImagTrace, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnImagTrace >::Type_t >::Expression_t imagTrace(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4933
MakeReturn< UnaryNode< FnChiralProjectPlus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnChiralProjectPlus >::Type_t >::Expression_t chiralProjectPlus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5258
MakeReturn< BinaryNode< OpLE, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpLE >::Type_t >::Expression_t operator<=(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2764
MakeReturn< UnaryNode< FnSpinProjectDir0Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir0Minus >::Type_t >::Expression_t spinProjectDir0Minus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5102
MakeReturn< BinaryNode< OpBitwiseXor, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpBitwiseXor >::Type_t >::Expression_t operator^(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2668
void fill_random(float &d, T1 &seed, T2 &skewed_seed, const T1 &seed_mult)
dest = random
Definition qdp_random.h:54
MakeReturn< BinaryNode< FnQuarkContract13, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract13 >::Type_t >::Expression_t quarkContract13(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2460
MakeReturn< UnaryNode< FnLocalNorm2, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLocalNorm2 >::Type_t >::Expression_t localNorm2(const QDPExpr< T1, C1 > &l)
Definition qdp.h:4998
MakeReturn< BinaryNode< FnQuarkContract24, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract24 >::Type_t >::Expression_t quarkContract24(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Definition qdp.h:2508
MakeReturn< UnaryNode< FnLog, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLog >::Type_t >::Expression_t log(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5401
C1 & pokeSpin(QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r, int row, int col)
Definition qdp_newops.h:509
MakeReturn< UnaryNode< FnSpinReconstructDir3Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir3Plus >::Type_t >::Expression_t spinReconstructDir3Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5193
MakeReturn< UnaryNode< FnSpinProjectDir1Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir1Plus >::Type_t >::Expression_t spinProjectDir1Plus(const QDPExpr< T1, C1 > &l)
Definition qdp.h:5063
PScalar< typename BinaryReturn< T1, T2, FnColorCrossProduct >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnColorVectorContract >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnInnerProductReal >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnInnerProduct >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnLocalColorInnerProduct >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnLocalInnerProductReal >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnLocalInnerProduct >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpAnd >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpEQ >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpGE >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpGT >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpLE >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpLT >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpLeftShift >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpNE >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpOr >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, OpRightShift >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, Op >::Type_t > Type_t
PScalar< typename DoublePrecType< T >::Type_t > Type_t
PScalar< typename InternalScalar< T >::Type_t > Type_t
Construct simple word type used at some level within primitives.
Definition qdp_traits.h:98
PScalar< typename LatticeScalar< T >::Type_t > Type_t
Makes a lattice scalar leaving primitive indices alone.
Definition qdp_traits.h:108
PScalar< typename PrimitiveScalar< T >::Type_t > Type_t
Makes a primitive scalar leaving grid alone.
Definition qdp_traits.h:103
PScalar< typename RealScalar< T >::Type_t > Type_t
Construct simple word type used at some level within primitives.
Definition qdp_traits.h:113
PScalar< typename SinglePrecType< T >::Type_t > Type_t
PScalar< typename TrinaryReturn< T1, T2, T3, FnColorContract >::Type_t > Type_t
PScalar< typename TrinaryReturn< T1, T2, T3, FnWhere >::Type_t > Type_t
PScalar< typename UnaryReturn< T1, Op >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnGlobalMax >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnGlobalMin >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnLocalNorm2 >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnNorm2 >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnSumMulti >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnSum >::Type_t > Type_t
PScalar< typename UnaryReturn< T, OpNot >::Type_t > Type_t
WordType< T >::Type_t Type_t
Find the underlying word type of a field.
Definition qdp_traits.h:29