#ifndef GRID_MATH_REALITY_H #define GRID_MATH_REALITY_H namespace Grid { /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////// CONJ /////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef GRID_WARN_SUBOPTIMAL #warning "Optimisation alert switch over to two argument form to avoid copy back in perf critical timesI " #endif /////////////////////////////////////////////// // multiply by I; make recursive. /////////////////////////////////////////////// template inline iScalar timesI(const iScalar&r) { iScalar ret; ret._internal = timesI(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 iScalar timesMinusI(const iScalar&r) { iScalar ret; ret._internal = timesMinusI(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 iScalar conj(const iScalar&r) { iScalar ret; ret._internal = conj(r._internal); return ret; } template inline iVector conj(const iVector&r) { iVector ret; for(int i=0;i inline iMatrix conj(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