7 #ifndef ANTI_SYM_TENZOR_H
8 #define ANTI_SYM_TENZOR_H
32 template<
class T,
unsigned D>
58 "Number of arguments does not match AntiSymTenzor dimension!!");
59 X[0]= x10;
X[1]= x20;
X[2]= x21;
71 for (
unsigned int i=1; i<D; ++i) {
72 for (
unsigned int j=0; j<i; ++j)
73 (*
this)[((i-1)*i/2)+j] = (t(i,j)-t(j,i))*0.5;
145 int size(
void)
const {
return sizeof(*this); }
184 return -
X[((j-1)*j/2) + i];
186 return X[((i-1)*i/2) + j];
192 return (*
this)(i, j);
200 int lo = i < j ? i : j;
201 int hi = i > j ? i : j;
209 return (*
this)(i, j);
240 return !(*
this == that);
271 template<
class T,
unsigned int D>
295 class DontInitialize {};
312 PInsist(rhs==0,
"Cannot assign non-zero value to a 1D AntiSymTenzor!");
346 int size(
void)
const {
return sizeof(*this); }
389 return (*
this)(i, j);
400 return (*
this)(i, j);
421 return !(*
this == that);
464 template <
class T,
unsigned D>
469 template <
class T,
unsigned D>
506 template <
class T,
unsigned D>
508 PInsist(D<4,
"AntiSymTenzor cofactors() function not implemented for D>3!");
517 result(0,0) = rhs(1,1)*rhs(2,2) - rhs(1,2)*rhs(2,1);
518 result(1,0) = rhs(0,2)*rhs(2,1) - rhs(0,1)*rhs(2,2);
519 result(2,0) = rhs(0,1)*rhs(1,2) - rhs(1,1)*rhs(0,2);
520 result(0,1) = rhs(2,0)*rhs(1,2) - rhs(1,0)*rhs(2,2);
521 result(1,1) = rhs(0,0)*rhs(2,2) - rhs(0,2)*rhs(2,0);
522 result(2,1) = rhs(1,0)*rhs(0,2) - rhs(0,0)*rhs(1,2);
523 result(0,2) = rhs(1,0)*rhs(2,1) - rhs(2,0)*rhs(1,1);
524 result(1,2) = rhs(0,1)*rhs(2,0) - rhs(0,0)*rhs(2,1);
525 result(2,2) = rhs(0,0)*rhs(1,1) - rhs(1,0)*rhs(0,1);
534 result(0,0) = rhs(1,1);
535 result(1,0) = -rhs(0,1);
536 result(0,1) = -rhs(1,0);
537 result(1,1) = rhs(0,0);
558 template<
class T,
unsigned D>
566 template<
class T,
unsigned D>
593 template <
class T1,
class T2,
unsigned D >
601 template <
class T1,
class T2,
unsigned D >
609 template <
class T1,
class T2,
unsigned D >
617 template <
class T1,
class T2,
unsigned D >
625 template <
class T1,
class T2,
unsigned D >
633 template <
class T1,
class T2,
unsigned D >
640 template <
class T1,
class T2,
unsigned D >
651 template <
class T1,
class T2,
unsigned D >
659 template <
class T1,
class T2,
unsigned D >
667 template <
class T1,
class T2,
unsigned D >
675 template <
class T1,
class T2,
unsigned D >
683 template <
class T1,
class T2,
unsigned D >
693 template<
class T,
unsigned D>
696 for (
unsigned int i=0; i<D; i++) {
698 for (
unsigned int j=0; j<D-1; j++) {
699 out << rhs(i,j) <<
" , ";
701 out << rhs(i,D-1) <<
")";
705 out <<
"( " << rhs(0,0) <<
" )";
AntiSymTenzor< T, D > transpose(const AntiSymTenzor< T, D > &rhs)
Tenzor< T, D > cofactors(const AntiSymTenzor< T, D > &)
const AntiSymTenzor< T, D > & operator+(const AntiSymTenzor< T, D > &op)
AntiSymTenzor< T, D > operator-(const AntiSymTenzor< T, D > &op)
T det(const AntiSymTenzor< T, 3 > &)
std::ostream & operator<<(std::ostream &out, const AntiSymTenzor< T, D > &rhs)
PETEBinaryReturn< T1, T2, OpMultipply >::type dotdot(const AntiSymTenzor< T1, D > &lhs, const AntiSymTenzor< T2, D > &rhs)
Tenzor< typename PETEBinaryReturn< T1, T2, OpMultipply >::type, D > dot(const AntiSymTenzor< T1, D > &lhs, const AntiSymTenzor< T2, D > &rhs)
T trace(const AntiSymTenzor< T, D > &)
#define TSV_ELEMENTWISE_OPERATOR(TSV, OP, APP)
PETE_TTTree< OpWhere, typename Cond_t::PETE_Expr_t, typename True_t::PETE_Expr_t, PETE_Scalar< Vektor< T, Dim > > > where(const PETE_Expr< Cond_t > &c, const PETE_Expr< True_t > &t, const Vektor< T, Dim > &f)
double Min(double a, double b)
double Max(double a, double b)
constexpr double e
The value of.
AntiSymTenzor(DontInitialize)
bool operator!=(const AntiSymTenzor< T, D > &that) const
AntiSymTenzor< T, D > & operator+=(const AntiSymTenzor< T1, D > &rhs)
Message & getMessage(Message &m)
AssignProxy operator()(unsigned int i, unsigned int j)
Element_t operator[](unsigned int i) const
AntiSymTenzor< T, D > & operator*=(const T &rhs)
AntiSymTenzor< T, D > & operator/=(const AntiSymTenzor< T1, D > &rhs)
Element_t & operator[](unsigned int i)
AntiSymTenzor(const Tenzor< T, D > &t)
const AntiSymTenzor< T, D > & operator=(const AntiSymTenzor< T, D > &rhs)
AssignProxy operator()(std::pair< int, int > a)
AntiSymTenzor< T, D > & operator*=(const AntiSymTenzor< T1, D > &rhs)
Element_t operator()(unsigned int i, unsigned int j) const
Element_t & operator()(unsigned int i)
Message & putMessage(Message &m) const
Element_t operator()(std::pair< int, int > a) const
Element_t operator()(unsigned int i) const
AntiSymTenzor< T, D > & operator-=(const AntiSymTenzor< T1, D > &rhs)
AntiSymTenzor(const T &x10, const T &x20, const T &x21)
AntiSymTenzor(const AntiSymTenzor< T, D > &rhs)
AntiSymTenzor(const T &x00)
bool operator==(const AntiSymTenzor< T, D > &that) const
AntiSymTenzor< T, D > & operator/=(const T &rhs)
const AssignProxy & operator=(const AssignProxy &a)
AssignProxy(const AssignProxy &model)
AssignProxy(Element_t &elem, int where)
const AssignProxy & operator=(const Element_t &e)
AntiSymTenzor< T, 1 > & operator-=(const AntiSymTenzor< T1, 1 > &)
AntiSymTenzor(const Tenzor< T, 1 > &)
const AntiSymTenzor< T, 1 > & operator=(const AntiSymTenzor< T1, 1 > &)
AntiSymTenzor< T, 1 > & operator/=(const T &)
AntiSymTenzor(DontInitialize)
const AntiSymTenzor< T, 1 > & operator=(const AntiSymTenzor< T, 1 > &)
AntiSymTenzor< T, 1 > & operator+=(const AntiSymTenzor< T1, 1 > &)
Element_t operator()(unsigned int i, unsigned int j) const
const AntiSymTenzor< T, 1 > & operator=(const T &rhs)
Element_t operator()(std::pair< int, int > a) const
AntiSymTenzor< T, 1 > & operator*=(const AntiSymTenzor< T1, 1 > &)
Message & putMessage(Message &m) const
AntiSymTenzor(const AntiSymTenzor< T, 1 > &)
AntiSymTenzor< T, 1 > & operator*=(const T &)
Message & getMessage(Message &m)
AntiSymTenzor< T, 1 > & operator/=(const AntiSymTenzor< T1, 1 > &)
AssignProxy operator()(unsigned int i, unsigned int j)
Element_t operator[](unsigned int i) const
bool operator!=(const AntiSymTenzor< T, 1 > &that) const
Element_t operator()(unsigned int i) const
AssignProxy operator()(std::pair< int, int > a)
bool operator==(const AntiSymTenzor< T, 1 > &) const
const AssignProxy & operator=(const Element_t &e)
const AssignProxy & operator=(const AssignProxy &a)
AssignProxy(Element_t &elem, int where)
AssignProxy(const AssignProxy &model)
Message & put(const T &val)
Message & setCopy(const bool c)
Message & get(const T &cval)
PETE_ComputeBinaryType< T1, T2, Op, Op::tag >::type type