5 #ifndef _SQUARETENSOR_H_
6 #define _SQUARETENSOR_H_
14 template <
class T,
int N>
30 for(
int i=0; i<
NSQR; i++)
36 for(
int i=0; i<N; i++)
37 for(
int j=0; j<N; j++)
38 (*
this)(i,j) = (i==j) ? s : 0;
67 for(
int i=0;i<
NSQR;i++)
68 os <<
_data[i] <<
" " ;
74 for(
int i=0; i<
NSQR; i++)
83 for(
int i=0; i<N; i++)
84 for(
int j=0; j<N; j++)
85 (*
this)(i,j) = (i==j) ? s : T(0.);
91 for(
int i=0;i<
NSQR;i++)
99 for(
int i=0;i<
NSQR;i++)
106 for(
int i=0;i<
NSQR;i++)
120 for(
int i=0;i<
NSQR;i++)
134 for(
int i=0;i<
NSQR;i++)
147 for(
int i=0;i<
NSQR;i++)
160 p(i,j) += (*this)(i,k) * o(k,j);
169 for(
int i=0;i<NSQR;i++) _data[i] = NumTypeTraits<T>::getZero();
175 for(
int i=0; i<N; i++)
176 r += (*
this)(i,i) * (*
this)(i,i);
182 return mag2() < tolerance*tolerance;
195 for (
int i=0; i<N; i++)
203 for(
int i=0; i<N; i++)
212 for(
int i=0; i<N; i++)
220 for(
int i=0; i<
NSQR; i++)
227 for(
int i=0; i<
NSQR; i++)
233 for(
int i=0; i<
NSQR; i++)
239 for(
int i=0; i<
NSQR; i++)
245 for(
int i=0; i<
NSQR; i++)
251 for(
int i=0; i<
NSQR; i++)
259 template<
class T,
int N>
268 template<
class T,
int N>
275 template<
class T,
int N>
282 template<
class T,
int N>
289 template<
class T,
int N>
296 template<
class T,
int N>
303 template<
class T,
int N>
310 template<
class T,
int N>
315 for(
int i=0; i<N; i++)
318 for(
int j=0; j<N; j++)
324 template<
class T,
int N>
331 template<
class T,
int N>
338 template<
class T,
int N>
346 template<
class T,
int N>
351 for(
int i=0; i<N; i++) r(i,i) = s;
361 T det = a(0,0)*a(1,1)-a(0,1)*a(1,0);
362 inv(0,0) = a(1,1) / det;
363 inv(0,1) = -a(0,1) / det;
364 inv(1,0) = -a(1,0) / det;
365 inv(1,1) = a(0,0) / det;
376 T det = a(0,0)*(a(1,1)*a(2,2)-a(1,2)*a(2,1))
377 -a(0,1)*(a(1,0)*a(2,2) - a(1,2)*a(2,0))
378 +a(0,2)*(a(1,0)*a(2,1) - a(1,1)*a(2,0));
380 inv(0,0) = (a(1,1)*a(2,2) - a(1,2)*a(2,1)) / det;
381 inv(0,1) = (a(0,2)*a(2,1) - a(0,1)*a(2,2)) / det;
382 inv(0,2) = (a(0,1)*a(1,2) - a(0,2)*a(1,1)) / det;
383 inv(1,0) = (a(1,2)*a(2,0) - a(1,0)*a(2,2)) / det;
384 inv(1,1) = (a(0,0)*a(2,2) - a(0,2)*a(2,0)) / det;
385 inv(1,2) = (a(0,2)*a(1,0) - a(0,0)*a(1,2)) / det;
386 inv(2,0) = (a(1,0)*a(2,1) - a(1,1)*a(2,0)) / det;
387 inv(2,1) = (a(0,1)*a(2,0) - a(0,0)*a(2,1)) / det;
388 inv(2,2) = (a(0,0)*a(1,1) - a(0,1)*a(1,0)) / det;
404 const int rowDim = connectivity.
getRowDim();
406 for(
int i=0; i<rowDim; i++)
408 for(
int ndr=0; ndr<N; ndr++)
409 for(
int ndc=0; ndc<N; ndc++)
411 const int nfr = i*N + ndr;
412 const int nfc = i*N + ndc;
415 flatCoeffs[fp] = diag[i](ndr,ndc);
418 for(
int jp=myRow[i]; jp<myRow[i+1]; jp++)
420 const int j = myCol[jp];
422 for(
int ndr=0; ndr<N; ndr++)
423 for(
int ndc=0; ndc<N; ndc++)
425 const int nfr = i*N + ndr;
426 const int nfc = j*N + ndc;
428 flatCoeffs[fp] = offDiag[jp](ndr,ndc);
SquareTensor< T, N > operator+(const SquareTensor< T, N > &a, const SquareTensor< T, N > &b)
const Array< int > & getCol() const
const Array< int > & getRow() const
static double doubleMeasure(const SquareTensor &x)
static void reduceSum(T_Scalar &sum, const This_T &x)
SquareTensor< T, N > operator/(const SquareTensor< T, N > &a, const T s)
static void setMax(SquareTensor &x, const SquareTensor &y)
SquareTensor & operator-=(const T s)
static SquareTensor getUnity()
static SquareTensor getNegativeUnity()
SquareTensor & operator+=(const T s)
SquareTensor & operator=(const SquareTensor &o)
SquareTensor< T, N > operator*(const SquareTensor< T, N > &a, const SquareTensor< T, N > &b)
SquareTensor< T, N > operator-(const SquareTensor< T, N > &a, const SquareTensor< T, N > &b)
SquareTensor< T, 2 > inverse(const SquareTensor< T, 2 > &a)
const T & operator()(int i, int j) const
NumTypeTraits< T >::T_BuiltIn T_BuiltIn
static void safeDivide(SquareTensor &x, const SquareTensor &y)
int getCoeffPosition(const int i, const int j) const
static void getShape(int *shp)
static void accumulateDotProduct(SquareTensor &sum, const SquareTensor &v0, const SquareTensor &v1)
bool operator<(const double tolerance) const
SquareTensor & operator-=(const SquareTensor &o)
SquareTensor & operator+=(const SquareTensor &o)
SquareTensor & operator=(const T &s)
SquareTensor & operator/=(const T s)
string intAsString(const int i)
static void normalize(SquareTensor &x, const SquareTensor &y)
SquareTensor & operator/=(const SquareTensor &o)
SquareTensor & operator*=(const SquareTensor &o)
NumTypeTraits< T >::T_Scalar T_Scalar
static SquareTensor getZero()
SquareTensor< T, N > This_T
static string getTypeName()
ostream & operator<<(ostream &os, const SquareTensor< T, N > &v)
static void accumulateOneNorm(SquareTensor &sum, const SquareTensor &v)
void printFromC(ostream &os) const
SquareTensor(const SquareTensor &o)
void setFlatCoeffs(Array< double > &flatCoeffs, const CRConnectivity &flatConnectivity, const Array< SquareTensor< double, N > > &diag, const Array< SquareTensor< double, N > > &offDiag, const CRConnectivity &connectivity)
SquareTensor & operator*=(const T s)
static int getDimension()
static void write(FILE *fp, const SquareTensor &x)
T & operator()(int i, int j)