8#ifndef QDP_PRIMVECTOR_H
9#define QDP_PRIMVECTOR_H
30template <
class T,
int N,
template<
class,
int>
class C>
class PVector
44 for(
int i=0; i < N; ++i)
47 return static_cast<CC&
>(*this);
64 for(
int i=0; i < N; ++i)
67 return static_cast<CC&
>(*this);
75 for(
int i=0; i < N; ++i)
78 return static_cast<CC&
>(*this);
86 for(
int i=0; i < N; ++i)
89 return static_cast<CC&
>(*this);
97 for(
int i=0; i < N; ++i)
100 return static_cast<CC&
>(*this);
111#if defined(QDP_USE_ARRAY_INITIALIZER)
118 for(
int i=0; i < N; ++i)
127 const T&
elem(
int i)
const {
return F[i];}
136template<
class T,
int N,
template<
class,
int>
class C>
140 for(
int i=0; i < N; ++i)
146template<
class T,
int N,
template<
class,
int>
class C>
150 for(
int i=0; i < N; ++i)
157template<
class T,
int N,
template<
class,
int>
class C>
161 for(
int i=0; i < N; ++i)
168template<
class T,
int N,
template<
class,
int>
class C>
172 for(
int i=0; i < N; ++i)
180template<
class T,
int N,
template<
class,
int>
class C>
184 for(
int i=0; i < N; ++i)
191template<
class T,
int N,
template<
class,
int>
class C>
195 for(
int i=0; i < N; ++i)
201#ifdef QDP_USE_LIBXML2
203template<
class T,
int N,
template<
class,
int>
class C>
205XMLWriter&
operator<<(XMLWriter& xml,
const PVector<T,N,C>& d)
207 xml.openTag(
"Vector");
209 XMLWriterAPI::AttributeList alist;
212 for(
int i=0; i < N; ++i)
215 alist.push_back(XMLWriterAPI::Attribute(
"row", i));
217 xml.openTag(
"elem", alist);
234template<
class T1,
int N,
template<
class,
int>
class C>
240template<
class T1,
int N,
template<
class,
int>
class C>
246template<
class T1,
int N,
template<
class,
int>
class C>
253template<
class T,
int N,
template<
class,
int>
class C>
259template<
class T,
int N,
template<
class,
int>
class C>
265template<
class T,
int N,
template<
class,
int>
class C>
275template<
class T1,
int N,
template<
class,
int>
class C,
class Op>
280template<
class T1,
class T2,
int N,
template<
class,
int>
class C,
class Op>
286template<
class T1,
class T2,
int N,
template<
class,
int>
class C1,
287 template<
class,
int>
class C2,
class Op>
289 typedef C2<typename BinaryReturn<T1, T2, Op>::Type_t, N>
Type_t;
293template<
class T1,
class T2,
int N,
template<
class,
int>
class C,
class Op>
299template<
class T1,
class T2,
int N,
template<
class,
int>
class C,
class Op>
306template<
class T1,
class T2>
315template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
320template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
325template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
330template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
335template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
352template<
class T1,
int N,
template<
class,
int>
class C>
358 for(
int i=0; i < N; ++i)
359 d.elem(i) = +l.
elem(i);
364template<
class T1,
int N,
template<
class,
int>
class C>
370 for(
int i=0; i < N; ++i)
371 d.elem(i) = -l.
elem(i);
376template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
382 for(
int i=0; i < N; ++i)
388template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
394 for(
int i=0; i < N; ++i)
401template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
407 for(
int i=0; i < N; ++i)
413template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
419 for(
int i=0; i < N; ++i)
426template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
432 for(
int i=0; i < N; ++i)
438template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
444 for(
int i=0; i < N; ++i)
451template<
class T1,
class T2,
int N,
template<
class,
int>
class C1,
template<
class,
int>
class C2>
457 for(
int i=0; i < N; ++i)
459 d.elem(i) = l.
elem(i,0) * r.
elem(0);
460 for(
int j=1; j < N; ++j)
461 d.elem(i) += l.
elem(i,j) * r.
elem(j);
468template<
class T1,
class T2,
int N,
template<
class,
int>
class C1,
template<
class,
int>
class C2>
474 for(
int i=0; i < N; ++i)
477 for(
int j=1; j < N; ++j)
485template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
491 for(
int i=0; i < N; ++i)
499template<
class T,
int N,
template<
class,
int>
class C>
505 for(
int i=0; i < N; ++i)
513template<
class T,
int N,
template<
class,
int>
class C>
519 for(
int i=0; i < N; ++i)
527template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
533 for(
int i=0; i < N; ++i)
543template<
class T1,
int N,
template<
class,
int>
class C>
548template<
class T1,
int N,
template<
class,
int>
class C>
554 for(
int i=0; i < N; ++i)
561template<
class T1,
int N,
template<
class,
int>
class C>
566template<
class T1,
int N,
template<
class,
int>
class C>
572 for(
int i=0; i < N; ++i)
579template<
class T1,
int N,
template<
class,
int>
class C>
584template<
class T1,
int N,
template<
class,
int>
class C>
590 for(
int i=0; i < N; ++i)
597template<
class T1,
int N,
template<
class,
int>
class C>
602template<
class T1,
int N,
template<
class,
int>
class C>
608 for(
int i=0; i < N; ++i)
618template<
class T1,
int N,
template<
class,
int>
class C>
624 for(
int i=0; i < N; ++i)
631template<
class T,
int N,
template<
class,
int>
class C>
637 for(
int i=0; i < N; ++i)
644template<
class T,
int N,
template<
class,
int>
class C>
650 for(
int i=0; i < N; ++i)
659template<
class T,
int N,
template<
class,
int>
class C>
665 for(
int i=0; i < N; ++i)
673template<
class T,
int N,
template<
class,
int>
class C>
679 for(
int i=0; i < N; ++i)
686template<
class T,
int N,
template<
class,
int>
class C>
692 for(
int i=0; i < N; ++i)
699template<
class T,
int N,
template<
class,
int>
class C>
705 for(
int i=0; i < N; ++i)
712template<
class T,
int N,
template<
class,
int>
class C>
718 for(
int i=0; i < N; ++i)
725template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
731 for(
int i=0; i < N; ++i)
733 return static_cast<Return_t&
>(l);
738template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
744 for(
int i=0; i < N; ++i)
746 return static_cast<Return_t&
>(l);
751template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
757 for(
int i=0; i < N; ++i)
759 return static_cast<Return_t&
>(l);
764template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
770 for(
int i=0; i < N; ++i)
772 return static_cast<Return_t&
>(l);
777template<
class T,
int N,
template<
class,
int>
class C>
781 for(
int i=0; i < N; ++i)
786template<
class T,
class T1,
int N,
template<
class,
int>
class C>
790 for(
int i=0; i < N; ++i)
796template<
class T,
class T1,
int N,
template<
class,
int>
class C>
800 for(
int i=0; i < N; ++i)
805template<
class T,
class T1,
int N,
template<
class,
int>
class C>
809 for(
int i=0; i < N; ++i)
815template<
class T,
class T1,
int N,
template<
class,
int>
class C>
823 for(
int i=0; i < N; ++i)
833template<
class T,
int N,
template<
class,
int>
class C,
class T1,
class T2>
838 for(
int i=0; i < N; ++i)
844template<
class T,
int N,
template<
class,
int>
class C>
848 for(
int i=0; i < N; ++i)
855template<
class T,
int N,
template<
class,
int>
class C>
860template<
class T,
int N,
template<
class,
int>
class C>
866 for(
int i=0; i < N; ++i)
867 d.elem(i) =
sum(s1.elem(i));
875template<
class T,
int N,
template<
class,
int>
class C>
880template<
class T,
int N,
template<
class,
int>
class C>
885template<
class T,
int N,
template<
class,
int>
class C>
892 for(
int i=1; i < N; ++i)
900template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
905template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
910template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
917 for(
int i=1; i < N; ++i)
928template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
933template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
938template<
class T1,
class T2,
int N,
template<
class,
int>
class C>
945 for(
int i=1; i < N; ++i)
1005template<
class T1,
class T2,
class T3,
int N,
template<
class,
int>
class C>
1010template<
class T1,
class T2,
class T3,
int N,
template<
class,
int>
class C>
1017 for(
int i=0; i < N; ++i)
CC & operator/=(const PScalar< T1 > &rhs)
PVector /= PScalar.
CC & operator*=(const PScalar< T1 > &rhs)
PVector *= PScalar.
CC & operator-=(const C< T1, N > &rhs)
PVector -= PVector.
CC & operator=(const C< T1, N > &rhs)
PVector = PVector.
CC & operator+=(const C< T1, N > &rhs)
PVector += PVector.
const T & elem(int i) const
CC & assign(const C< T1, N > &rhs)
PVector = PVector.
StandardOutputStream class.
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, 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
TextWriter & operator<<(TextWriter &txt, const std::string &output)
TextReader & operator>>(TextReader &txt, std::string &input)
void fill_gaussian(IScalar< T > &d, IScalar< T > &r1, IScalar< T > &r2)
dest = gaussian
void copy_site(IScalar< T > &d, int isite, const IScalar< T1 > &s1)
dest [some type] = source [some type]
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
BinaryReturn< IScalar< T1 >, IScalar< T2 >, OpMultiplyAdj >::Type_t multiplyAdj(const IScalar< T1 > &l, const IScalar< T2 > &r)
BinaryReturn< IScalar< T1 >, IScalar< T2 >, OpAdjMultiply >::Type_t adjMultiply(const IScalar< T1 > &l, const IScalar< T2 > &r)
UnaryReturn< IScalar< T >, FnGetSite >::Type_t getSite(const IScalar< T > &s1, int innersite)
OLattice< PScalar< PColorMatrix< RComplexFloat, 3 > > > C
Yet another random number generator.
MakeReturn< UnaryNode< FnReal, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnReal >::Type_t >::Expression_t real(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnTimesMinusI, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTimesMinusI >::Type_t >::Expression_t timesMinusI(const QDPExpr< T1, C1 > &l)
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)
MakeReturn< UnaryNode< FnPeekColorMatrix, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t peekColor(const QDPExpr< T1, C1 > &l, int row, int col)
MakeReturn< UnaryNode< FnTimesI, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTimesI >::Type_t >::Expression_t timesI(const QDPExpr< T1, C1 > &l)
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)
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)
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)
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)
MakeReturn< UnaryNode< FnConjugate, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnConjugate >::Type_t >::Expression_t conj(const QDPExpr< T1, C1 > &l)
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)
C1 & pokeColor(QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r, int row, int col)
MakeReturn< UnaryNode< FnPeekSpinMatrix, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, C1 >::Expression_t peekSpin(const QDPExpr< T1, C1 > &l, int row, int col)
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)
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)
MakeReturn< UnaryNode< FnImag, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnImag >::Type_t >::Expression_t imag(const QDPExpr< T1, C1 > &l)
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)
C1 & pokeSpin(QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r, int row, int col)
OLattice< PScalar< PColorMatrix< RComplexFloat, 3 > > > C
C2< typename BinaryReturn< T1, T2, Op >::Type_t, N > Type_t
C< typename BinaryReturn< T1, T2, Op >::Type_t, N > Type_t
C< typename BinaryReturn< T1, T2, Op >::Type_t, N > Type_t
PScalar< typename BinaryReturn< T1, T2, FnInnerProductReal >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnLocalInnerProduct >::Type_t > Type_t
PScalar< typename BinaryReturn< T1, T2, FnInnerProduct >::Type_t > Type_t
C< typename BinaryReturn< T1, T2, Op >::Type_t, N > Type_t
PScalar< typename BinaryReturn< T1, T2, FnLocalInnerProductReal >::Type_t > Type_t
PVector< typename DoublePrecType< T1 >::Type_t, N, C > Type_t
Structure for extracting color matrix components.
Structure for extracting color vector components.
Structure for extracting spin matrix components.
Structure for extracting spin vector components.
Structure for inserting color vector components.
Structure for inserting spin vector components.
PScalar< typename InternalScalar< T >::Type_t > Type_t
Construct simple word type used at some level within primitives.
C< typename LatticeScalar< T >::Type_t, N > Type_t
Makes a lattice scalar leaving primitive indices alone.
PScalar< typename PrimitiveScalar< T >::Type_t > Type_t
Makes a primitive scalar leaving grid alone.
PVector< typename SinglePrecType< T1 >::Type_t, N, C > Type_t
C< typename TrinaryReturn< T1, T2, T3, FnWhere >::Type_t, N > Type_t
C< typename UnaryReturn< T1, Op >::Type_t, N > Type_t
PScalar< typename UnaryReturn< T, FnLocalNorm2 >::Type_t > Type_t
PScalar< typename UnaryReturn< T, FnNorm2 >::Type_t > Type_t
WordType< T1 >::Type_t Type_t
Find the underlying word type of a field.