.\" .de Id .. .de Sp .if n .sp .if t .sp 0.4 .. .TH tensor4 2rheolef "rheolef-6.7" "rheolef-6.7" "rheolef-6.7" .\" label: /*Class:tensor4 .SH NAME \fBtensor4\fP - a fouth order tensor .\" skip: @cindex tensor4 .\" skip: @clindex tensor4 .SH SYNOPSYS The \fBtensor4\fP class defines a fourth tensor where indices varie from zero to 2 (aka 3D physical space). .\" END .SH IMPLEMENTATION .\" begin_example .Sp .nf template class tensor4_basic { public: typedef size_t size_type; typedef T element_type; typedef T float_type; // allocators: tensor4_basic (); explicit tensor4_basic (const T& init_val); tensor4_basic (const tensor4_basic& a); static tensor4_basic eye (size_type d = 3); #ifdef _RHEOLEF_HAVE_STD_INITIALIZER_LIST tensor4_basic (const std::initializer_list > > >& il); #endif // _RHEOLEF_HAVE_STD_INITIALIZER_LIST // affectation: tensor4_basic& operator= (const tensor4_basic& a); tensor4_basic& operator= (const T& val); // accessors: T& operator()(size_type i, size_type j, size_type k, size_type l); const T& operator()(size_type i, size_type j, size_type k, size_type l) const; tensor_basic& operator()(size_type i, size_type j); const tensor_basic& operator()(size_type i, size_type j) const; // algebra: tensor4_basic& operator*= (const T& k); tensor4_basic& operator/= (const T& k) { return operator*= (1./k); } tensor4_basic operator* (const T& k) const; tensor4_basic operator/ (const T& k) const; tensor4_basic operator+ (const tensor4_basic& b) const; tensor4_basic operator- (const tensor4_basic& b) const; // io: std::ostream& put (std::ostream& out, size_type d=3) const; // data: protected: tensor_basic > _x; }; typedef tensor4_basic tensor4; // nonlinear algebra: template T norm2 (const tensor4_basic&); template T norm (const tensor4_basic& a) { return sqrt(norm2(a)); } template tensor4_basic dexp (const tensor_basic& a, size_t d = 3); // algebra: template tensor_basic ddot (const tensor4_basic&, const tensor_basic&); template tensor_basic ddot (const tensor_basic&, const tensor4_basic&); .Sp .fi .\" end_example