30#ifndef GRID_MATH_INNER_H
31#define GRID_MATH_INNER_H
62 Optimization::PrecisionChange::StoD(l.
v,la.
v,lb.
v);
68 Optimization::PrecisionChange::StoD(l.
v,la.
v,lb.
v);
77 typedef decltype(ReduceD(lhs._internal[0])) ret_t;
79 for(
int c1=0;c1<N;c1++){
80 ret._internal[c1] = ReduceD(lhs._internal[c1]);
87 typedef decltype(ReduceD(lhs._internal[0][0])) ret_t;
89 for(
int c1=0;c1<N;c1++){
90 for(
int c2=0;c2<N;c2++){
91 ret._internal[c1][c2]=ReduceD(lhs._internal[c1][c2]);
98 typedef decltype(ReduceD(lhs._internal)) ret_t;
110 typedef decltype(
Reduce(lhs._internal[0])) ret_t;
112 for(
int c1=0;c1<N;c1++){
113 ret._internal[c1] =
Reduce(lhs._internal[c1]);
120 typedef decltype(
Reduce(lhs._internal[0][0])) ret_t;
122 for(
int c1=0;c1<N;c1++){
123 for(
int c2=0;c2<N;c2++){
124 ret._internal[c1][c2]=
Reduce(lhs._internal[c1][c2]);
131 typedef decltype(
Reduce(lhs._internal)) ret_t;
153 Optimization::PrecisionChange::StoD(l.
v,la.
v,lb.
v);
154 Optimization::PrecisionChange::StoD(r.
v,ra.
v,rb.
v);
161 Optimization::PrecisionChange::StoD(l.
v,la.
v,lb.
v);
162 Optimization::PrecisionChange::StoD(r.
v,ra.
v,rb.
v);
170 typedef decltype(
innerProductD(lhs._internal[0],rhs._internal[0])) ret_t;
173 for(
int c1=0;c1<N;c1++){
174 ret._internal +=
innerProductD(lhs._internal[c1],rhs._internal[c1]);
181 typedef decltype(
innerProductD(lhs._internal[0][0],rhs._internal[0][0])) ret_t;
184 for(
int c1=0;c1<N;c1++){
185 for(
int c2=0;c2<N;c2++){
186 ret._internal+=
innerProductD(lhs._internal[c1][c2],rhs._internal[c1][c2]);
193 typedef decltype(
innerProductD(lhs._internal,rhs._internal)) ret_t;
238 typedef decltype(
innerProductD2(lhs._internal[0],rhs._internal[0])) ret_t;
241 for(
int c1=0;c1<N;c1++){
242 ret._internal +=
innerProductD2(lhs._internal[c1],rhs._internal[c1]);
249 typedef decltype(
innerProductD2(lhs._internal[0][0],rhs._internal[0][0])) ret_t;
252 for(
int c1=0;c1<N;c1++){
253 for(
int c2=0;c2<N;c2++){
254 ret._internal+=
innerProductD2(lhs._internal[c1][c2],rhs._internal[c1][c2]);
261 typedef decltype(
innerProductD2(lhs._internal,rhs._internal)) ret_t;
273 typedef decltype(
innerProduct(lhs._internal[0],rhs._internal[0])) ret_t;
276 for(
int c1=0;c1<N;c1++){
277 ret._internal +=
innerProduct(lhs._internal[c1],rhs._internal[c1]);
284 typedef decltype(
innerProduct(lhs._internal[0][0],rhs._internal[0][0])) ret_t;
287 for(
int c1=0;c1<N;c1++){
288 for(
int c2=0;c2<N;c2++){
289 ret._internal+=
innerProduct(lhs._internal[c1][c2],rhs._internal[c1][c2]);
296 typedef decltype(
innerProduct(lhs._internal,rhs._internal)) ret_t;
#define accelerator_inline
accelerator_inline void zeroit(Grid_simd2< S, V > &z)
Grid_simd2< complex< double >, vComplexD > vComplexD2
Grid_simd2< double, vRealD > vRealD2
Grid_simd< complex< float >, SIMD_Ftype > vComplexF
Grid_simd< float, SIMD_Ftype > vRealF
Grid_simd< complex< double >, SIMD_Dtype > vComplexD
Grid_simd< double, SIMD_Dtype > vRealD
Lattice< vobj > real(const Lattice< vobj > &lhs)
void precisionChange(Lattice< VobjOut > &out, const Lattice< VobjIn > &in, const precisionChangeWorkspace &workspace)
#define NAMESPACE_BEGIN(A)
std::complex< RealF > ComplexF
std::complex< RealD > ComplexD
accelerator_inline vComplexD2 TensorRemove(const vComplexD2 &x)
accelerator_inline ComplexD innerProductD2(const ComplexF &l, const ComplexF &r)
accelerator_inline RealD norm2(const sobj &arg)
accelerator_inline auto Reduce(const iVector< l, N > &lhs) -> iVector< decltype(Reduce(lhs._internal[0])), N >
accelerator_inline ComplexD innerProductD(const ComplexF &l, const ComplexF &r)
accelerator_inline auto innerProduct(const iVector< l, N > &lhs, const iVector< r, N > &rhs) -> iScalar< decltype(innerProduct(lhs._internal[0], rhs._internal[0]))>