Reference documentation for deal.II version GIT relicensing-437-g81ec864850 2024-04-19 07:30:02+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
Classes | Functions
internal::SymmetricTensorImplementation Namespace Reference

Classes

struct  Inverse
 
struct  Inverse< 4, 3, adouble >
 
struct  SortEigenValuesVectors
 

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.

Function Documentation

◆ 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 
)
private

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]AThis tensor to be tridiagonalized
[out]QThe orthogonal matrix effecting the transformation
[out]dThe diagonal elements of the tridiagonal matrix
[out]eThe 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)
private

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]AThe 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)
private

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]AThe 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)
private

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]AThe 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)
private

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]AThe 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.