|
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) |
|
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< std::pair< Number, Tensor< 1, dim, Number > >, 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< std::pair< Number, Tensor< 1, dim, Number > >, 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< std::pair< Number, Tensor< 1, 2, Number > >, 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< std::pair< Number, Tensor< 1, 3, Number > >, 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.