29#ifndef GRID_MATH_TRACE_H
30#define GRID_MATH_TRACE_H
44template<
class vtype,
int N>
50 ret._internal=ret._internal+
trace(arg._internal[i][i]);
63template<
class vtype,
int N>
68 ret._internal[i]=
trace(arg._internal[i]);
75template<
class S1 ,
class S2, IfNotGr
idTensor<S1> = 0, IfNotGr
idTensor<S2> = 0>
77 ->
decltype(arg1*arg2)
82template<
class vtype,
class rtype,
int N >
85 iScalar<
decltype(
trace(arg1._internal[0][0]*arg2._internal[0][0] )) > ret;
89 ret._internal=ret._internal+
traceProduct(arg1._internal[i][j],arg2._internal[j][i]);
94template<
class vtype,
class rtype >
97 iScalar<
decltype(
trace(arg1._internal*arg2._internal))> ret;
#define accelerator_inline
accelerator_inline void zeroit(Grid_simd2< S, V > &z)
#define NAMESPACE_BEGIN(A)
std::complex< RealF > ComplexF
std::complex< RealD > ComplexD
accelerator_inline ComplexF trace(const ComplexF &arg)
accelerator_inline auto traceProduct(const S1 &arg1, const S2 &arg2) -> decltype(arg1 *arg2)