7#ifndef QDP_SCALAR_SPECIFIC_H
8#define QDP_SCALAR_SPECIFIC_H
62 inline void broadcast(
void* dest,
size_t nbytes) {}
74template<
class T,
class T1,
class Op,
class RHS>
77 const QDPExpr<RHS,OScalar<T1> >&
r;
83 const int *tab_ ) :
d(d_),
r(r_),
op(op_),
tab(tab_) {}
89template<
class T,
class T1,
class Op,
class RHS>
90void ev_userfunc(
int lo,
int hi,
int myId, u_arg<T,T1,Op,RHS> *a)
92 OLattice<T>& dest = a->d;
93 const QDPExpr<RHS,OScalar<T1> >&rhs = a->r;
94 const int* tab = a->tab;
98 for(
int j=lo; j < hi; ++j)
109template<
class T,
class T1,
class Op,
class RHS>
112 const QDPExpr<RHS,OLattice<T1> >&
r;
118 const int *tab_) :
d(d_),
r(r_),
op(op_),
tab(tab_) {}
125template<
class T,
class T1,
class Op,
class RHS>
129 OLattice<T>& dest = a->d;
130 const QDPExpr<RHS,OLattice<T1> >&rhs = a->r;
131 const int* tab = a->tab;
135 for(
int j=lo; j < hi; ++j)
151template<
class T,
class T1,
class Op,
class RHS>
158#if defined(QDP_USE_PROFILING)
159 static QDPProfile_t prof(dest, op, rhs);
163 int numSiteTable = s.numSiteTable();
181#if defined(QDP_USE_PROFILING)
195template<
class T,
class T1,
class Op,
class RHS>
202#if defined(QDP_USE_PROFILING)
203 static QDPProfile_t prof(dest, op, rhs);
207 int numSiteTable = s.numSiteTable();
226#if defined(QDP_USE_PROFILING)
236template<
class T,
class T1,
class Op,
class RHS>
243#if defined(QDP_USE_PROFILING)
244 static QDPProfile_t prof(dest, op, rhs);
259 const int *tab = s.siteTable().slice();
261#pragma omp parallel for
262 for(
int j=0; j < s.numSiteTable(); ++j)
269#if defined(QDP_USE_PROFILING)
279template<
class T1,
class T2>
284 const Subset& s = d.subset();
287#pragma omp parallel for
288 for(
int j=0; j < s.numSiteTable(); ++j)
291 copymask(dest.elem(i), mask.elem(i), s1.elem(i));
297template<
class T1,
class T2>
303#pragma omp parallel for
304 for(
int i=0; i < vvol; ++i)
305 copymask(dest.elem(i), mask.elem(i), s1.elem(i));
342 const int *tab = s.siteTable().slice();
350 for(
int j=0; j < s.numSiteTable(); ++j) {
357#pragma omp critical (random)
371 const Subset& s = dd.subset();
394 const int *tab = s.siteTable().slice();
396#pragma omp parallel for
397 for(
int j=0; j < s.numSiteTable(); ++j)
411 const Subset& s = dd.subset();
432 const int *tab = s.siteTable().slice();
434#pragma omp parallel for
435 for(
int j=0; j < s.numSiteTable(); ++j)
445template<
class T,
class S>
449 const Subset& s = dd.subset();
460#pragma omp parallel for
461 for(
int i=0; i < vvol; ++i)
474template<
class RHS,
class T>
480#if defined(QDP_USE_PROFILING)
487#if defined(QDP_USE_PROFILING)
502template<
class RHS,
class T>
508#if defined(QDP_USE_PROFILING)
515#if defined(QDP_USE_PROFILING)
531template<
class RHS,
class T>
537#if defined(QDP_USE_PROFILING)
545 const int *tab = s.siteTable().slice();
552#pragma omp for nowait
553 for(
int j=0; j < s.numSiteTable(); ++j) {
561 d.elem() += dthread.elem();
566#if defined(QDP_USE_PROFILING)
581template<
class RHS,
class T>
587#if defined(QDP_USE_PROFILING)
602#pragma omp for nowait
603 for(
int i=0; i < vvol; ++i) {
609 d.elem() += dthread.elem();
613#if defined(QDP_USE_PROFILING)
629template<
class RHS,
class T>
635#if defined(QDP_USE_PROFILING)
649#pragma omp for nowait
650 for(
int i=0; i < vvol; ++i) {
656 d.elem() += dthread.elem();
660#if defined(QDP_USE_PROFILING)
680template<
class RHS,
class T>
686#if defined(QDP_USE_PROFILING)
692 for(
int i=0; i < ss.numSubsets(); ++i)
695#if defined(QDP_USE_PROFILING)
714 template<
class RHS,
class T>
725 template<
class RHS,
class T>
731 for(
int i=lo; i < hi; ++i) {
732 int j = lat_color[i];
737template<
class RHS,
class T>
739sumMulti(
const QDPExpr<RHS,OLattice<T> >& s1,
const Set& ss)
743#if defined(QDP_USE_PROFILING)
744 static QDPProfile_t prof(dest[0],
OpAssign(), FnSum(), s1);
752 pdest[thread].resize(ss.numSubsets());
754 for(
int k=0; k < ss.numSubsets(); ++k) {
766 for(
int k=0; k< ss.numSubsets(); ++k) {
767 dest[k] = pdest[0][k];
771 for(
int k=0; k< ss.numSubsets(); ++k) {
772 dest[k] += pdest[thread][k];
777 for(
int i=0; i < vvol; ++i)
779 int j = lat_color[i];
784#if defined(QDP_USE_PROFILING)
795template<
class RHS,
class T>
801#if defined(QDP_USE_PROFILING)
807 for(
int k=0; k < ss.numSubsets(); ++k)
814 for(
int i=0; i < vvol; ++i)
816 int j = lat_color[i];
820#if defined(QDP_USE_PROFILING)
846#if defined(QDP_USE_PROFILING)
847 static QDPProfile_t prof(dest(0,0),
OpAssign(),
FnSum(), s1);
852 for(
int i=0; i < dest.
size1(); ++i)
853 for(
int j=0; j < dest.
size2(); ++j)
856#if defined(QDP_USE_PROFILING)
876multi2d<typename UnaryReturn<OLattice<T>, FnSumMulti>
::Type_t>
881#if defined(QDP_USE_PROFILING)
882 static QDPProfile_t prof(dest(0,0),
OpAssign(),
FnSum(), s1);
887 for(
int i=0; i < dest.
size1(); ++i)
888 for(
int j=0; j < dest.
size2(); ++j)
895 for(
int k=0; k < s1.size(); ++k)
899 for(
int i=0; i < vvol; ++i)
901 int j = lat_color[i];
902 dest(k,j).elem() += ss1.
elem(i);
906#if defined(QDP_USE_PROFILING)
926norm2(
const multi1d< OScalar<T> >& s1)
930#if defined(QDP_USE_PROFILING)
931 static QDPProfile_t prof(d,
OpAssign(), FnNorm2(), s1[0]);
938 for(
int n=0; n < s1.size(); ++n)
940 OScalar<T>& ss1 = s1[n];
944#if defined(QDP_USE_PROFILING)
977#if defined(QDP_USE_PROFILING)
985 const int *tab = s.siteTable().slice();
987 for(
int n=0; n < s1.size(); ++n) {
997 for(
int j=0; j < s.numSiteTable(); ++j) {
1005 d.elem() += dthread.elem();
1011#if defined(QDP_USE_PROFILING)
1046template<
class T1,
class T2>
1052#if defined(QDP_USE_PROFILING)
1060 for(
int n=0; n < s1.size(); ++n)
1067#if defined(QDP_USE_PROFILING)
1078template<
class T1,
class T2>
1094template<
class T1,
class T2>
1101#if defined(QDP_USE_PROFILING)
1109 const int *tab = s.siteTable().slice();
1111 for(
int n=0; n < s1.size(); ++n) {
1121 for(
int j=0; j < s.numSiteTable(); ++j)
1128 d.elem() += dthread.elem();
1133#if defined(QDP_USE_PROFILING)
1150template<
class T1,
class T2>
1167template<
class T1,
class T2>
1173#if defined(QDP_USE_PROFILING)
1181 for(
int n=0; n < s1.size(); ++n)
1188#if defined(QDP_USE_PROFILING)
1199template<
class T1,
class T2>
1216template<
class T1,
class T2>
1223#if defined(QDP_USE_PROFILING)
1231 const int *tab = s.siteTable().slice();
1233 for(
int n=0; n < s1.size(); ++n) {
1244 for(
int j=0; j < s.numSiteTable(); ++j)
1251 d.elem() += dthread.elem();
1256#if defined(QDP_USE_PROFILING)
1273template<
class T1,
class T2>
1289template<
class RHS,
class T>
1295#if defined(QDP_USE_PROFILING)
1302#if defined(QDP_USE_PROFILING)
1317template<
class RHS,
class T>
1323#if defined(QDP_USE_PROFILING)
1332 for(
int i=1; i < vvol; ++i)
1337 if (
toBool(dd > d.elem()))
1341#if defined(QDP_USE_PROFILING)
1355template<
class RHS,
class T>
1361#if defined(QDP_USE_PROFILING)
1368#if defined(QDP_USE_PROFILING)
1383template<
class RHS,
class T>
1389#if defined(QDP_USE_PROFILING)
1398 for(
int i=1; i < vvol; ++i)
1403 if (
toBool(dd < d.elem()))
1407#if defined(QDP_USE_PROFILING)
1428 return isnan(s1.elem());
1442#if defined(QDP_USE_PROFILING)
1448 for(
int i=0; i < vvol; ++i)
1450 d |=
isnan(s1.elem(i));
1455#if defined(QDP_USE_PROFILING)
1473 return isinf(s1.elem());
1487#if defined(QDP_USE_PROFILING)
1493 for(
int i=0; i < vvol; ++i)
1495 d |=
isinf(s1.elem(i));
1500#if defined(QDP_USE_PROFILING)
1532#if defined(QDP_USE_PROFILING)
1538 for(
int i=0; i < vvol; ++i)
1545#if defined(QDP_USE_PROFILING)
1577#if defined(QDP_USE_PROFILING)
1583 for(
int i=0; i < vvol; ++i)
1590#if defined(QDP_USE_PROFILING)
1625template<
class RHS,
class T1>
1660template<
class RHS,
class T1>
1701#pragma omp parallel for
1705 dest[i].elem() = src.
elem(i);
1722#pragma omp parallel for
1726 dest.
elem(i) = src[i].elem();
1752#if defined(QDP_USE_PROFILING)
1754struct TagVisitor<FnMap, PrintTag> :
public ParenPrinter<FnMap>
1756 static void visit(FnMap op, PrintTag t)
1757 { t.os_m <<
"shift"; }
1763template<
class A,
class CTag>
1811 template<
class T1,
class C1>
1823 template<
class T1,
class C1>
1844 void operator=(
const Map&) {}
1848 multi1d<int> goffsets;
1880 template<
class T1,
class C1>
1892 template<
class T1,
class C1>
1945 template<
class T1,
class C1>
1957 template<
class T1,
class C1>
1977 multi1d<Map> bimaps;
2010 template<
class T1,
class C1>
2022 template<
class T1,
class C1>
2042 multi2d<Map> bimapsa;
2053#ifdef QDP_USE_LIBXML2
2058 xml.openTag(
"OLattice");
2060 XMLWriterAPI::AttributeList alist;
2063 for(
int site=0; site < vvol; ++site)
2066 std::ostringstream os;
2068 for(
int i=1; i < coord.size(); ++i)
2069 os <<
" " << coord[i];
2072 alist.push_back(XMLWriterAPI::Attribute(
"site", site));
2073 alist.push_back(XMLWriterAPI::Attribute(
"coord", os.str()));
2075 xml.openTag(
"elem", alist);
2094 bin.writeArray((
const char *)&(d.elem()),
2105 for(
int site=0; site < vvol; ++site)
2108 bin.writeArray((
const char*)&(d.elem(i)),
2120 const Subset& sub = dd.subset();
2121 const Set& set = sub.getSet();
2126 const int color = sub.color();
2130 for(
int site=0; site < vvol; ++site)
2133 if (lat_color[i] == color)
2135 bin.writeArray((
const char*)&(d.elem(i)),
2148 bin.writeArray((
const char*)&(d.elem(i)),
2158 bin.readArray((
char*)&(d.elem()),
2169 for(
int site=0; site < vvol; ++site)
2172 bin.readArray((
char*)&(d.elem(i)),
2184 bin.readArray((
char*)&(d.elem(i)),
2195 const Subset& sub = dd.subset();
2196 const Set& set = sub.getSet();
2201 const int color = sub.color();
2205 for(
int site=0; site < vvol; ++site)
2208 if (lat_color[i] == color)
2210 bin.readArray((
char*)&(d.elem(i)),
2222 void readSlice(BinaryReader& bin, OLattice<T>& data,
2223 int start_lexico,
int stop_lexico)
2225 for(
int site=start_lexico; site < stop_lexico; ++site)
2228 bin.readArray((
char*)&(data.elem(i)),
2236 int start_lexico,
int stop_lexico)
2238 for(
int site=start_lexico; site < stop_lexico; ++site)
ForEach< Expr, FTag, CTag >::Type_t forEach(const Expr &e, const FTag &f, const CTag &c)
#define PETE_EMPTY_CONSTRUCTORS(CLASS)
ArrayBiDirectional of general permutation map class for communications.
~ArrayBiDirectionalMap()
Destructor.
void make(const ArrayMapFunc &func)
Actual constructor from a function object.
ArrayBiDirectionalMap(const ArrayMapFunc &fn)
Constructor from a function object.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPType< T1, C1 > &l, int isign, int dir)
Function call operator for a shift.
ArrayBiDirectionalMap()
Constructor - does nothing really.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPExpr< T1, C1 > &l, int isign, int dir)
Array of general permutation map class for communications.
ArrayMap()
Constructor - does nothing really.
ArrayMap(const ArrayMapFunc &fn)
Constructor from a function object.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPType< T1, C1 > &l, int dir)
Function call operator for a shift.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPExpr< T1, C1 > &l, int dir)
void make(const ArrayMapFunc &func)
Actual constructor from a function object.
BiDirectional of general permutation map class for communications.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPType< T1, C1 > &l, int isign)
Function call operator for a shift.
void make(const MapFunc &func)
Actual constructor from a function object.
~BiDirectionalMap()
Destructor.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPExpr< T1, C1 > &l, int isign)
BiDirectionalMap(const MapFunc &fn)
Constructor from a function object.
BiDirectionalMap()
Constructor - does nothing really.
Binary writer base class.
virtual void writeArray(const char *output, size_t nbytes, size_t nmemb)
Write data from the primary node.
General permutation map class for communications.
Map(const MapFunc &fn)
Constructor from a function object.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPType< T1, C1 > &l)
Function call operator for a shift.
Map()
Constructor - does nothing really.
void make(const MapFunc &func)
Actual constructor from a function object.
const multi1d< int > & Offsets() const
Accessor to offsets.
MakeReturn< UnaryNode< FnMap, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t operator()(const QDPExpr< T1, C1 > &l)
Outer grid Scalar class */.
OLattice class narrowed to a subset.
Expression class for QDP.
QDPType - major type class/container for all QDP objects.
void QDP_extract(multi1d< OScalar< T > > &dest, const OLattice< T > &src, const Subset &s)
Copy data values from field src to array dest.
OLattice< T1 > & pokeSite(OLattice< T1 > &l, const OScalar< T1 > &r, const multi1d< int > &coord)
Insert site element.
OScalar< T1 > peekSite(const QDPExpr< RHS, OScalar< T1 > > &l, const multi1d< int > &coord)
Extract site element.
void QDP_insert(OLattice< T > &dest, const multi1d< OScalar< T > > &src, const Subset &s)
Inserts data values from site array src.
OScalar< T1 > peekSite(const OScalar< T1 > &l, const multi1d< int > &coord)
Extract site element.
OScalar< T1 > peekSite(const OLattice< T1 > &l, const multi1d< int > &coord)
Extract site element.
OScalar< T1 > peekSite(const QDPExpr< RHS, OLattice< T1 > > &l, const multi1d< int > &coord)
Extract site element.
Set - collection of subsets controlling which sites are involved in an operation.
int numSubsets() const
Return number of subsets.
const multi1d< int > & latticeColoring() const
The coloring of the lattice sites.
Subsets - controls how lattices are looped.
const multi1d< int > & siteTable() const
const Op & operation() const
DeReference< Child >::Return_t child() const
Container for a multi-dimensional 1D array.
const T * slice() const
Return ref to a column slice.
Container for a multi-dimensional 2D array.
int size1() const
Size of array.
OLattice< PScalar< PSeed< RScalar< INTEGER32 > > > > LatticeSeed
OScalar< PScalar< PSeed< RScalar< INTEGER32 > > > > Seed
OLattice< PScalar< PScalar< RScalar< INTEGER32 > > > > LatticeInteger
OScalar< T1 > peekSite(const OScalar< T1 > &l, const multi1d< int > &coord)
Extract site element.
BinaryReturn< C1, C2, FnInnerProductReal >::Type_t innerProductReal(const QDPType< T1, C1 > &s1, const QDPType< T2, C2 > &s2)
OScalar = innerProductReal(adj(source1)*source2).
UnaryReturn< C, FnGlobalMin >::Type_t globalMin(const QDPType< T, C > &s1)
OScalar = globalMin(source).
UnaryReturn< C, FnNorm2 >::Type_t norm2(const QDPType< T, C > &s1)
OScalar = norm2(trace(adj(source)*source)).
bool isnan(const QDPExpr< T, C > &s1)
bool = isnan(source)
bool isfinite(const QDPExpr< T, C > &s1)
bool = isfinite(source)
BinaryReturn< C1, C2, FnInnerProduct >::Type_t innerProduct(const QDPType< T1, C1 > &s1, const QDPType< T2, C2 > &s2)
OScalar = innerProduct(adj(source1)*source2).
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, FnSumMulti >::Type_t sumMulti(const QDPType< T, C > &s1, const Set &ss)
dest = sumMulti(source1,Set)
UnaryReturn< C, FnSum >::Type_t sum(const QDPType< T, C > &s1)
OScalar = sum(source).
TextWriter & operator<<(TextWriter &txt, const std::string &output)
void write(BinaryWriter &bin, const std::string &output)
void read(BinaryReader &bin, std::string &input, size_t maxBytes)
void fill_gaussian(IScalar< T > &d, IScalar< T > &r1, IScalar< T > &r2)
dest = gaussian
void zero_rep(IScalar< T > &dest)
dest = 0
void copymask(IScalar< T > &d, const IScalar< T1 > &mask, const IScalar< T > &s1)
dest = (mask) ? s1 : dest
bool toBool(const IScalar< T > &s)
QDP Boolean to bool primitive in conversion routine.
void evaluate(OLattice< DCol > &d, const OpAssign &op, const QDPExpr< BinaryNode< OpMultiply, Reference< QDPType< DCol, OLattice< DCol > > >, Reference< QDPType< DCol, OLattice< DCol > > > >, OLattice< DCol > > &rhs, const Subset &s)
void gaussian(OSubScalar< T > &d)
dest = gaussian
void random(OScalar< T > &d)
dest = random
Subset all
Default all subset.
void readSlice(BinaryReader &bin, OLattice< T > &data, int start_lexico, int stop_lexico)
void writeSlice(BinaryWriter &bin, const OLattice< T > &data, int start_lexico, int stop_lexico)
Layout namespace holding info on problem size and machine info.
int linearSiteIndex(int site)
The linearized site index for the corresponding lexicographic site.
int sitesOnNode()
Subgrid lattice volume.
const multi1d< int > & lattSize()
Virtual grid (problem grid) lattice size.
LatticeInteger latticeCoordinate(int mu)
coord[mu] <- mu : fill with lattice coord in mu direction
int vol()
Total lattice volume.
bool primaryNode()
Returns whether this is the primary node.
void globalOr(bool &dest)
Wrapper to get a functional global Or.
void broadcast(T &dest)
Broadcast from primary node to all other nodes.
void globalSum(T &dest)
Sum across all nodes.
void globalAnd(bool &dest)
Wrapper to get a functional global And.
void broadcast_str(std::string &result)
Broadcast a string from primary node to all other nodes.
void globalSumArray(unsigned int *dest, int len)
Wrapper to get a functional unsigned global sum.
Random number generator namespace.
Seed ran_mult_n
RNG multiplier raised to the volume+1.
Seed ran_mult
RNG multiplier.
LatticeSeed * lattice_ran_mult
The lattice of skewed RNG multipliers.
Seed ran_seed
Global (current) seed.
Yet another random number generator.
void dispatch_to_threads(int numSiteTable, Arg a, void(*func)(int, int, int, Arg *))
ForEach< Expr, FTag, CTag >::Type_t forEach(const Expr &e, const FTag &f, const CTag &c)
void sumMultiKernel(int lo, int hi, int my_id, SumMultiOLatticeThreadArgs< RHS, T > *a)
void evaluate_userfunc(int lo, int hi, int myId, user_arg< T, T1, Op, RHS > *a)
user function for the evaluate function:
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)
QDPTime_t getClockTime()
Get the wallclock time.
void evaluate_F(T *dest, const Op &op, const QDPExpr< RHS, OScalar< T1 > > &rhs, const Subset &s)
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)
void ev_userfunc(int lo, int hi, int myId, u_arg< T, T1, Op, RHS > *a)
user function for the evaluate function:
multi1d< int > crtesn(int ipos, const multi1d< int > &latt_size)
Decompose a lexicographic site into coordinates.
void fill_random(float &d, T1 &seed, T2 &skewed_seed, const T1 &seed_mult)
dest = random
MakeReturn< UnaryNode< FnLocalNorm2, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLocalNorm2 >::Type_t >::Expression_t localNorm2(const QDPExpr< T1, C1 > &l)
static Type_t combine(const A &a, const Op &, const Tag &)
UnaryReturn< T, FnMap >::Type_t operator()(const T &a) const
FnMap(const int *goffsets)
static Type_t apply(const UnaryNode< FnMap, A > &expr, const EvalLeaf1 &f, const CTag &c)
Combine1< TypeA_t, FnMap, CTag >::Type_t Type_t
ForEach< A, EvalLeaf1, CTag >::Type_t TypeA_t
static Type_t apply(const Expr &expr, const FTag &f, const CTag &)
LeafFunctor< Expr, FTag >::Type_t Type_t
static Expression_t make(const T &a)
multi1d<OScalar> dest = sumMulti(OLattice,Set)
const multi1d< int > & lat_color
multi1d< typename UnaryReturn< OLattice< T >, FnSumMulti >::Type_t > & dest
SumMultiOLatticeThreadArgs(const multi1d< int > &lat_color_, const QDPExpr< RHS, OLattice< T > > &s_, multi1d< typename UnaryReturn< OLattice< T >, FnSumMulti >::Type_t > &dest_)
const QDPExpr< RHS, OLattice< T > > & s
user argument for the evaluate function:
u_arg(OLattice< T > &d_, const QDPExpr< RHS, OScalar< T1 > > &r_, const Op &op_, const int *tab_)
const QDPExpr< RHS, OScalar< T1 > > & r
user argument for the evaluate function:
user_arg(OLattice< T > &d_, const QDPExpr< RHS, OLattice< T1 > > &r_, const Op &op_, const int *tab_)
const QDPExpr< RHS, OLattice< T1 > > & r