Reference documentation for deal.II version GIT 8ad845fa53 2023-12-10 20:50:02+00:00
internal::SymmetricTensorImplementation Namespace Reference

## Classes

struct  Inverse

struct  SortEigenValuesVectors

struct  Inverse< 4, 3, adouble >

## Functions

template<int dim, typename Number >
void tridiagonalize (const ::SymmetricTensor< 2, dim, Number > &A, ::Tensor< 2, dim, Number > &Q, std::array< Number, dim > &d, std::array< Number, dim - 1 > &e)

template<int dim, typename Number >
std::array< std::pair< Number, Tensor< 1, dim, Number > >, dim > ql_implicit_shifts (const ::SymmetricTensor< 2, dim, Number > &A)

template<int dim, typename Number >
std::array< std::pair< Number, Tensor< 1, dim, Number > >, dim > jacobi (::SymmetricTensor< 2, dim, Number > A)

template<typename Number >
std::array< std::pair< Number, Tensor< 1, 2, Number > >, 2 > hybrid (const ::SymmetricTensor< 2, 2, Number > &A)

template<typename Number >
std::array< std::pair< Number, Tensor< 1, 3, Number > >, 3 > hybrid (const ::SymmetricTensor< 2, 3, Number > &A)

## Detailed Description

A namespace for functions and classes that are internal to how the SymmetricTensor class (and its associate functions) works.

## ◆ tridiagonalize()

template<int dim, typename Number >
 void internal::SymmetricTensorImplementation::tridiagonalize ( const ::SymmetricTensor< 2, dim, Number > & A, ::Tensor< 2, dim, Number > & Q, std::array< Number, dim > & d, std::array< Number, dim - 1 > & e )

Tridiagonalize a rank-2 symmetric tensor using the Householder method. The specialized algorithm implemented here is given in

@article{Kopp2008,
title = {Efficient numerical diagonalization of hermitian 3x3
matrices},
author = {Kopp, J.},
journal = {International Journal of Modern Physics C},
year = {2008},
volume = {19},
number = {3},
pages = {523--548},
doi = {10.1142/S0129183108012303},
eprinttype = {arXiv},
eprint = {physics/0610206v3},
eprintclass = {physics.comp-ph},
url =
{https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html}
}

and is based off of the generic algorithm presented in section 11.3.2 of

@book{Press2007,
title = {Numerical recipes 3rd edition: The art of scientific
computing},
author = {Press, W. H.},
journal = {Cambridge university press},
year = {2007}
}
Parameters
 [in] A This tensor to be tridiagonalized [out] Q The orthogonal matrix effecting the transformation [out] d The diagonal elements of the tridiagonal matrix [out] e The off-diagonal elements of the tridiagonal matrix

## ◆ ql_implicit_shifts()

template<int dim, typename Number >
 std::array >, dim> internal::SymmetricTensorImplementation::ql_implicit_shifts ( const ::SymmetricTensor< 2, dim, Number > & A )

Compute the eigenvalues and eigenvectors of a real-valued rank-2 symmetric tensor using the QL algorithm with implicit shifts. The specialized algorithm implemented here is given in

@article{Kopp2008,
title = {Efficient numerical diagonalization of hermitian 3x3
matrices},
author = {Kopp, J.},
journal = {International Journal of Modern Physics C},
year = {2008},
volume = {19},
number = {3},
pages = {523--548},
doi = {10.1142/S0129183108012303},
eprinttype = {arXiv},
eprint = {physics/0610206v3},
eprintclass = {physics.comp-ph},
url =
{https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html}
}

and is based off of the generic algorithm presented in section 11.4.3 of

@book{Press2007,
title = {Numerical recipes 3rd edition: The art of scientific
computing},
author = {Press, W. H.},
journal = {Cambridge university press},
year = {2007}
}
Parameters
 [in] A The tensor of which the eigenvectors and eigenvalues are to be computed.
Returns
An array containing the eigenvectors and the associated eigenvalues. The array is not sorted in any particular order.

## ◆ jacobi()

template<int dim, typename Number >
 std::array >, dim> internal::SymmetricTensorImplementation::jacobi ( ::SymmetricTensor< 2, dim, Number > A )

Compute the eigenvalues and eigenvectors of a real-valued rank-2 symmetric tensor using the Jacobi algorithm. The specialized algorithm implemented here is given in

@article{Kopp2008,
title = {Efficient numerical diagonalization of hermitian 3x3
matrices},
author = {Kopp, J.},
journal = {International Journal of Modern Physics C},
year = {2008},
volume = {19},
number = {3},
pages = {523--548},
doi = {10.1142/S0129183108012303},
eprinttype = {arXiv},
eprint = {physics/0610206v3},
eprintclass = {physics.comp-ph},
url =
{https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html}
}

and is based off of the generic algorithm presented in section 11.4.3 of

@book{Press2007,
title = {Numerical recipes 3rd edition: The art of scientific
computing},
author = {Press, W. H.},
journal = {Cambridge university press},
year = {2007}
}
Parameters
 [in] A The tensor of which the eigenvectors and eigenvalues are to be computed.
Returns
An array containing the eigenvectors and the associated eigenvalues. The array is not sorted in any particular order.

## ◆ hybrid() [1/2]

template<typename Number >
 std::array >, 2> internal::SymmetricTensorImplementation::hybrid ( const ::SymmetricTensor< 2, 2, Number > & A )

Compute the eigenvalues and eigenvectors of a real-valued rank-2 symmetric 2x2 tensor using the characteristic equation to compute eigenvalues and an analytical approach based on the cross-product for the eigenvectors. If the computations are deemed too inaccurate then the method falls back to ql_implicit_shifts.

Parameters
 [in] A The tensor of which the eigenvectors and eigenvalues are to be computed.
Returns
An array containing the eigenvectors and the associated eigenvalues. The array is not sorted in any particular order.

## ◆ hybrid() [2/2]

template<typename Number >
 std::array >, 3> internal::SymmetricTensorImplementation::hybrid ( const ::SymmetricTensor< 2, 3, Number > & A )

Compute the eigenvalues and eigenvectors of a real-valued rank-2 symmetric 3x3 tensor using the characteristic equation to compute eigenvalues and an analytical approach based on the cross-product for the eigenvectors. If the computations are deemed too inaccurate then the method falls back to ql_implicit_shifts. The specialized algorithm implemented here is given in

@article{Kopp2008,
title = {Efficient numerical diagonalization of hermitian 3x3
matrices},
author = {Kopp, J.},
journal = {International Journal of Modern Physics C},
year = {2008},
volume = {19},
number = {3},
pages = {523--548},
doi = {10.1142/S0129183108012303},
eprinttype = {arXiv},
eprint = {physics/0610206v3},
eprintclass = {physics.comp-ph},
url =
{https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html}
}
Parameters
 [in] A The tensor of which the eigenvectors and eigenvalues are to be computed.
Returns
An array containing the eigenvectors and the associated eigenvalues. The array is not sorted in any particular order.