5 #ifndef _DIAGONALTENSOR_H_
6 #define _DIAGONALTENSOR_H_
13 template <
class T,
int N>
26 for(
int i=0; i<N; i++)
32 for(
int i=0; i<N; i++)
58 os <<
_data[i] <<
" " ;
64 for(
int i=0; i<N; i++)
151 for(
int i=0;i<N;i++) _data[i] = NumTypeTraits<T>::getZero();
157 for(
int i=0; i<N; i++)
164 return mag2() < tolerance*tolerance;
177 for (
int i=0; i<N; i++)
185 for(
int i=0; i<N; i++)
194 for(
int i=0; i<N; i++)
202 for(
int i=0; i<N; i++)
209 for(
int i=0; i<N; i++)
215 for(
int i=0; i<N; i++)
221 for(
int i=0; i<N; i++)
227 for(
int i=0; i<N; i++)
233 for(
int i=0; i<N; i++)
241 template<
class T,
int N>
250 template<
class T,
int N>
257 template<
class T,
int N>
264 template<
class T,
int N>
271 template<
class T,
int N>
278 template<
class T,
int N>
285 template<
class T,
int N>
292 template<
class T,
int N>
297 for(
int i=0; i<N; i++) r[i] = a[i]*b[i];
301 template<
class T,
int N>
308 template<
class T,
int N>
313 for(
int i=0; i<N; i++) r[i] = a[i]/b[i];
317 template<
class T,
int N>
322 for(
int i=0; i<N; i++) r[i] = a[i]/b[i];
326 template<
class T,
int N>
331 for(
int i=0; i<N; i++) r[i] = s/a[i];
335 template<
class T,
int N>
DiagonalTensor & operator=(const DiagonalTensor &o)
DiagonalTensor & operator+=(const DiagonalTensor &o)
DiagonalTensor & operator-=(const T s)
static void normalize(DiagonalTensor &x, const DiagonalTensor &y)
static double doubleMeasure(const DiagonalTensor &x)
DiagonalTensor< T, N > operator-(const DiagonalTensor< T, N > &a, const DiagonalTensor< T, N > &b)
const T & operator[](int n) const
DiagonalTensor & operator/=(const T s)
static string getTypeName()
DiagonalTensor< T, N > This_T
DiagonalTensor & operator=(const T &o)
static DiagonalTensor getUnity()
bool operator<(const double tolerance) const
static int getDimension()
DiagonalTensor< T, N > operator+(const DiagonalTensor< T, N > &a, const DiagonalTensor< T, N > &b)
void printFromC(ostream &os) const
static void setMax(DiagonalTensor &x, const DiagonalTensor &y)
DiagonalTensor(const DiagonalTensor &o)
ostream & operator<<(ostream &os, const DiagonalTensor< T, N > &v)
static void accumulateDotProduct(DiagonalTensor &sum, const DiagonalTensor &v0, const DiagonalTensor &v1)
string intAsString(const int i)
DiagonalTensor & operator/=(const DiagonalTensor &o)
static void safeDivide(DiagonalTensor &x, const DiagonalTensor &y)
DiagonalTensor & operator*=(const DiagonalTensor &o)
static void accumulateOneNorm(DiagonalTensor &sum, const DiagonalTensor &v)
static DiagonalTensor getNegativeUnity()
NumTypeTraits< T >::T_BuiltIn T_BuiltIn
T DiagToOffDiag(const DiagonalTensor< T, N > &x)
static DiagonalTensor getZero()
DiagonalTensor< T, N > operator/(const DiagonalTensor< T, N > &a, const T s)
DiagonalTensor< T, N > operator*(const DiagonalTensor< T, N > &a, const DiagonalTensor< T, N > &b)
NumTypeTraits< T >::T_Scalar T_Scalar
DiagonalTensor & operator+=(const T s)
DiagonalTensor & operator*=(const T s)
DiagonalTensor operator-()
static void reduceSum(T_Scalar &sum, const This_T &x)
static void getShape(int *shp)
DiagonalTensor(const T &o)
DiagonalTensor & operator-=(const DiagonalTensor &o)
static void write(FILE *fp, const DiagonalTensor &x)