OpenWalnut  1.3.1
Public Member Functions | List of all members
WTensorSym< order, dim, Data_T > Class Template Reference

Implements a symmetric tensor that has the same number of components in every direction. More...

#include <WTensorSym.h>

+ Inheritance diagram for WTensorSym< order, dim, Data_T >:

Public Member Functions

 WTensorSym ()
 Default constructor of the symmetric tensor.
 WTensorSym (const WValue< Data_T > &data)
 Constructs and initializes the symmetrical Tensor with a WValue.
 WTensorSym (const boost::array< Data_T, WTensorBaseSym< order, dim, Data_T >::dataSize > &data)
 Constructs and initializes the symmetrical Tensor with a boost array.
Data_T evaluateSphericalFunction (WValue< Data_T > const &gradient) const
 Evaluate - for a given gradient - the spherical function represented by this symmetric tensor.
Data_T evaluateSphericalFunction (WVector3d const &gradient) const
 Evaluate - for a given gradient - the spherical function represented by this symmetric tensor.
- Public Member Functions inherited from WTensorFunc< WTensorBaseSym, order, dim, Data_T >
 WTensorFunc ()
 Default constructor.
 WTensorFunc (const WValue< Data_T > &data)
 Initializes the tensor with the given data.
 WTensorFunc (const boost::array< Data_T, WTensorBaseSym< order, dim, Data_T >::dataSize > &data)
 Initializes the tensor with the given data.
- Public Member Functions inherited from WTensorBaseSym< order, dim, Data_T >
 WTensorBaseSym ()
 Standard constructor.
 WTensorBaseSym (const WValue< Data_T > &data)
 Constructs the symmetrical tensor and initialize with the given data.
 WTensorBaseSym (const boost::array< Data_T, dataSize > &data)
 Constructs the symmetrical tensor and initialize with the given data.
 WTensorBaseSym (WTensorBaseSym const &t)
 Copy constructor.
WTensorBaseSym const & operator= (WTensorBaseSym const &t)
 Copy operator.
std::size_t getDimension () const
 Get the dimension of this tensor.
std::size_t getOrder () const
 Get the order of this tensor.
void setValues (WValue< Data_T > const &values)
 Set internal data from a WValue.
void setValues (boost::array< Data_T, dataSize > const &values)
 Set internal data from a boost array.
template<typename Index_T >
Data_T & operator[] (std::vector< Index_T > const &indices)
 Get the element at a specific position.
template<typename Index_T >
Data_T const & operator[] (std::vector< Index_T > const &indices) const
 Get the element at a specific position.
template<typename Index_T >
Data_T & operator[] (Index_T indices[])
 Get the element at a specific position.
template<typename Index_T >
Data_T const & operator[] (Index_T indices[]) const
 Get the element at a specific position.
bool operator== (WTensorBaseSym const &other) const
 Compare this WTensorBaseSym to another one.
bool operator!= (WTensorBaseSym const &other) const
 Compare this WTensorBaseSym to another one.

Additional Inherited Members

- Public Types inherited from WTensorBaseSym< order, dim, Data_T >
enum  { dataSize = WBinom< order + dim - 1, order >::value }
 Declare a compile-time constant as enum and not as static constant. More...
- Protected Attributes inherited from WTensorBaseSym< order, dim, Data_T >
boost::array< Data_T, dataSizem_data
 Stores the elements of this tensor lexicographical ordered on their indices, where for each set of permutations the lexicographical lowest index is used.

Detailed Description

template<std::size_t order, std::size_t dim, typename Data_T = double>
class WTensorSym< order, dim, Data_T >

Implements a symmetric tensor that has the same number of components in every direction.

A symmetric tensor has the same value for every permutation of the indices.

For example, t(i,j) = t(j,i) for a tensor of order 2, and t(i,j,k) = t(j,i,k) = t(i,k,j) = t(j,k,i) = t(k,i,j) = t(k,j,i) for a tensor of order 3.

Template Parameters
orderThe order of the tensor.
dimThe dimension of the tensor, i.e. the number of components in each direction.
Data_TThe datatype of the components, double by default.
Notes:
The dimension may never be 0.
Notes:
The type Data_T may not throw exceptions on construction, destruction or during any assignment operator.

Access to specific elements of the tensor can be achieved in 2 ways:

Notes:
The datatype of the array or std::vector can be any type castable to std::size_t.
Notes:
There is no bounds checking for the array version of operator [].
Notes:
Operator () is not supported for orders larger than 6.

This class optimizes memory usage. For example, for a symmetric tensor of order 2 and dimension 3, only 6 values (instead of 9) need to be stored. However, there is additional memory overhead per class (i.e. per allocation of the template parameters), which is of constant size and thus does not depend on the number of instances.

Usage and operators are the same as with WTensor. Note that changes to an element t(i,j,k,...) also change every element whose indices are a permutation of i,j,k... .

See Also
WTensor

Definition at line 73 of file WTensorSym.h.

Constructor & Destructor Documentation

template<std::size_t order, std::size_t dim, typename Data_T >
WTensorSym< order, dim, Data_T >::WTensorSym ( )

Default constructor of the symmetric tensor.

Definition at line 135 of file WTensorSym.h.

template<std::size_t order, std::size_t dim, typename Data_T>
WTensorSym< order, dim, Data_T >::WTensorSym ( const WValue< Data_T > &  data)
explicit

Constructs and initializes the symmetrical Tensor with a WValue.

Notes:
The same ordering as for the data member is required.
Parameters
dataThe components in same ordering as for the data member m_data is required, (
See Also
m_data).

Definition at line 141 of file WTensorSym.h.

template<std::size_t order, std::size_t dim, typename Data_T>
WTensorSym< order, dim, Data_T >::WTensorSym ( const boost::array< Data_T, WTensorBaseSym< order, dim, Data_T >::dataSize > &  data)
explicit

Constructs and initializes the symmetrical Tensor with a boost array.

Notes:
The same ordering as for the data member is required.
Parameters
dataThe components in same ordering as for the data member m_data is required, (
See Also
m_data).

Definition at line 147 of file WTensorSym.h.

Member Function Documentation

template<std::size_t order, std::size_t dim, typename Data_T>
Data_T WTensorSym< order, dim, Data_T >::evaluateSphericalFunction ( WValue< Data_T > const &  gradient) const

Evaluate - for a given gradient - the spherical function represented by this symmetric tensor.

Template Parameters
Thetype that stores the gradient, must implement operator [].
Parameters
gradientThe normalized vector that represents the gradient direction.
Notes:
If the gradient is not normalized, the result is undefined.

Thanks to CHeine for the idea for this algorithm.

Returns
The function value on the sphere for this tensor and the given gradient.

Definition at line 153 of file WTensorSym.h.

References WRecursiveTensorEvaluation< Data_T, k, n, N, m >::evaluate().

Referenced by WTensorSymTest::testEvaluateSphericalFunction().

template<std::size_t order, std::size_t dim, typename Data_T>
Data_T WTensorSym< order, dim, Data_T >::evaluateSphericalFunction ( WVector3d const &  gradient) const

Evaluate - for a given gradient - the spherical function represented by this symmetric tensor.

Template Parameters
Thetype that stores the gradient, must implement operator [].
Parameters
gradientThe normalized vector that represents the gradient direction.
Notes:
If the gradient is not normalized, the result is undefined.

Thanks to CHeine for the idea for this algorithm.

Returns
The function value on the sphere for this tensor and the given gradient.

Definition at line 161 of file WTensorSym.h.

References WRecursiveTensorEvaluation< Data_T, k, n, N, m >::evaluate().


The documentation for this class was generated from the following file: