#ifndef GRID_MATH_INNER_H #define GRID_MATH_INNER_H namespace Grid { /////////////////////////////////////////////////////////////////////////////////////// // innerProduct Scalar x Scalar -> Scalar // innerProduct Vector x Vector -> Scalar // innerProduct Matrix x Matrix -> Scalar /////////////////////////////////////////////////////////////////////////////////////// template inline auto innerProduct (const iVector& lhs,const iVector& rhs) -> iScalar { typedef decltype(innerProduct(lhs._internal[0],rhs._internal[0])) ret_t; iScalar ret=zero; for(int c1=0;c1 inline auto innerProduct (const iMatrix& lhs,const iMatrix& rhs) -> iScalar { typedef decltype(innerProduct(lhs._internal[0][0],rhs._internal[0][0])) ret_t; iScalar ret=zero; iScalar tmp; for(int c1=0;c1 inline auto innerProduct (const iScalar& lhs,const iScalar& rhs) -> iScalar { typedef decltype(innerProduct(lhs._internal,rhs._internal)) ret_t; iScalar ret; ret._internal = innerProduct(lhs._internal,rhs._internal); return ret; } } #endif