#ifndef GRID_MATH_REALITY_H #define GRID_MATH_REALITY_H namespace Grid { /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////// CONJ /////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// // multiply by I; make recursive. /////////////////////////////////////////////// template inline iScalar timesI(const iScalar&r) { iScalar ret; timesI(ret._internal,r._internal); return ret; } template inline iVector timesI(const iVector&r) { iVector ret; for(int i=0;i inline iMatrix timesI(const iMatrix&r) { iMatrix ret; for(int i=0;i inline void timesI(iScalar &ret,const iScalar&r) { timesI(ret._internal,r._internal); } template inline void timesI(iVector &ret,const iVector&r) { for(int i=0;i inline void timesI(iMatrix &ret,const iMatrix&r) { for(int i=0;i inline iScalar timesMinusI(const iScalar&r) { iScalar ret; timesMinusI(ret._internal,r._internal); return ret; } template inline iVector timesMinusI(const iVector&r) { iVector ret; for(int i=0;i inline iMatrix timesMinusI(const iMatrix&r) { iMatrix ret; for(int i=0;i inline void timesMinusI(iScalar &ret,const iScalar&r) { timesMinusI(ret._internal,r._internal); } template inline void timesMinusI(iVector &ret,const iVector&r) { for(int i=0;i inline void timesMinusI(iMatrix &ret,const iMatrix&r) { for(int i=0;i inline iScalar conjugate(const iScalar&r) { iScalar ret; ret._internal = conjugate(r._internal); return ret; } template inline iVector conjugate(const iVector&r) { iVector ret; for(int i=0;i inline iMatrix conjugate(const iMatrix&r) { iMatrix ret; for(int i=0;i inline iScalar adj(const iScalar&r) { iScalar ret; ret._internal = adj(r._internal); return ret; } template inline iVector adj(const iVector&r) { iVector ret; for(int i=0;i inline iMatrix adj(const iMatrix &arg) { iMatrix ret; for(int c1=0;c1 inline auto real(const iScalar &z) -> iScalar { iScalar ret; ret._internal = real(z._internal); return ret; } template inline auto real(const iMatrix &z) -> iMatrix { iMatrix ret; for(int c1=0;c1 inline auto real(const iVector &z) -> iVector { iVector ret; for(int c1=0;c1 inline auto imag(const iScalar &z) -> iScalar { iScalar ret; ret._internal = imag(z._internal); return ret; } template inline auto imag(const iMatrix &z) -> iMatrix { iMatrix ret; for(int c1=0;c1 inline auto imag(const iVector &z) -> iVector { iVector ret; for(int c1=0;c1