deal.II version GIT relicensing-1941-ga9013bea74 2024-10-08 06:50:00+00:00
|
#include <deal.II/base/tensor.h>
Public Types | |
using | real_type = typename numbers::NumberTraits< Number >::real_type |
using | value_type = Number |
using | array_type = Number |
using | tensor_type = Number |
Public Member Functions | |
constexpr | Tensor () |
template<typename OtherNumber > | |
constexpr | Tensor (const Tensor< 0, dim, OtherNumber > &initializer) |
template<typename OtherNumber > | |
constexpr | Tensor (const OtherNumber &initializer) |
constexpr | operator Number & () |
constexpr | operator const Number & () const |
template<typename OtherNumber > | |
constexpr Tensor & | operator= (const Tensor< 0, dim, OtherNumber > &rhs) |
template<typename OtherNumber > | |
constexpr Tensor & | operator= (const OtherNumber &d) & |
template<typename OtherNumber > | |
constexpr Tensor & | operator= (const OtherNumber &d) &&=delete |
template<typename OtherNumber > | |
constexpr bool | operator== (const Tensor< 0, dim, OtherNumber > &rhs) const |
template<typename OtherNumber > | |
constexpr bool | operator!= (const Tensor< 0, dim, OtherNumber > &rhs) const |
template<typename OtherNumber > | |
constexpr Tensor & | operator+= (const Tensor< 0, dim, OtherNumber > &rhs) |
template<typename OtherNumber > | |
constexpr Tensor & | operator-= (const Tensor< 0, dim, OtherNumber > &rhs) |
template<typename OtherNumber > | |
constexpr Tensor & | operator*= (const OtherNumber &factor) |
template<typename OtherNumber > | |
constexpr Tensor & | operator/= (const OtherNumber &factor) |
constexpr Tensor | operator- () const |
constexpr void | clear () |
real_type | norm () const |
constexpr real_type | norm_square () const |
template<class Iterator > | |
void | unroll (const Iterator begin, const Iterator end) const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Static Public Attributes | |
static constexpr unsigned int | dimension = dim |
static constexpr unsigned int | rank = 0 |
static constexpr unsigned int | n_independent_components = 1 |
Private Attributes | |
Number | value |
Friends | |
template<int , int , typename > | |
class | Tensor |
This class is a specialized version of the Tensor<rank,dim,Number>
class. It handles tensors of rank zero, i.e. scalars. The second template argument dim
is ignored.
This class exists because in some cases we want to construct objects of type Tensor<spacedim-dim,dim,Number>, which should expand to scalars, vectors, matrices, etc, depending on the values of the template arguments dim
and spacedim
. We therefore need a class that acts as a scalar (i.e. Number
) for all purposes but is part of the Tensor template family.
dim | An integer that denotes the dimension of the space in which this tensor operates. This of course equals the number of coordinates that identify a point and rank-1 tensor. Since the current object is a rank-0 tensor (a scalar), this template argument has no meaning for this class. |
Number | The data type in which the tensor elements are to be stored. This will, in almost all cases, simply be the default double , but there are cases where one may want to store elements in a different (and always scalar) type. It can be used to base tensors on float or complex numbers or any other data type that implements basic arithmetic operations. Another example would be a type that allows for Automatic Differentiation (see, for example, the Sacado type used in step-33) and thereby can generate analytic (spatial) derivatives of a function that takes a tensor as argument. |
using Tensor< 0, dim, Number >::real_type = typename numbers::NumberTraits<Number>::real_type |
Declare a type that has holds real-valued numbers with the same precision as the template argument to this class. For std::complex<number>, this corresponds to type number, and it is equal to Number for all other cases. See also the respective field in Vector<Number>.
This alias is used to represent the return type of norms.
Internal type declaration that is used to specialize the return type of operator[]() for Tensor<1,dim,Number>
Constructor. Set to zero.
|
constexpr |
Constructor from tensors with different underlying scalar type. This obviously requires that the OtherNumber
type is convertible to Number
.
|
constexpr |
Constructor, where the data is copied from a C-style array.
|
constexpr |
Return a reference to the encapsulated Number object. Since rank-0 tensors are scalars, this is a natural operation.
This is the non-const conversion operator that returns a writable reference.
|
constexpr |
Return a reference to the encapsulated Number object. Since rank-0 tensors are scalars, this is a natural operation.
This is the const conversion operator that returns a read-only reference.
|
constexpr |
Assignment from tensors with different underlying scalar type. This obviously requires that the OtherNumber
type is convertible to Number
.
|
constexpr |
This operator assigns a scalar to a tensor. This obviously requires that the OtherNumber
type is convertible to Number
.
|
constexprdelete |
Assign a scalar to the current object. This overload is used for rvalue references; because it does not make sense to assign something to a temporary, the function is deleted.
|
constexpr |
Test for equality of two tensors.
|
constexpr |
Test for inequality of two tensors.
|
constexpr |
Add another scalar.
|
constexpr |
Subtract another scalar.
|
constexpr |
Multiply the scalar with a factor
.
|
constexpr |
Divide the scalar by factor
.
Reset all values to zero.
Note that this is partly inconsistent with the semantics of the clear()
member functions of the standard library containers and of several other classes within deal.II, which not only reset the values of stored elements to zero, but release all memory and return the object into an empty state. However, since the size of objects of the present type is determined by its template parameters, resizing is not an option, and indeed the state where all elements have a zero value is the state right after construction of such an object.
Return the Frobenius-norm of a tensor, i.e. the square root of the sum of the absolute squares of all entries. For the present case of rank-1 tensors, this equals the usual l2
norm of the vector.
|
constexpr |
Return the square of the Frobenius-norm of a tensor, i.e. the sum of the absolute squares of all entries.
void Tensor< 0, dim, Number >::unroll | ( | const Iterator | begin, |
const Iterator | end | ||
) | const |
Fill a range with all tensor elements. Since this type of Tensor only has one entry this just copies the value of this tensor into *begin
.
The template type Number must be convertible to the type of *begin
.
void Tensor< 0, dim, Number >::serialize | ( | Archive & | ar, |
const unsigned int | version | ||
) |
Read or write the data of this object to or from a stream for the purpose of serialization using the BOOST serialization library.
|
staticconstexpr |
Provide a way to get the dimension of an object without explicit knowledge of it's data type. Implementation is this way instead of providing a function dimension()
because now it is possible to get the dimension at compile time without the expansion and preevaluation of an inlined function; the compiler may therefore produce more efficient code and you may use this value to declare other data types.