Reference documentation for deal.II version Git f264146 2017-10-18 16:34:34 -0400
Classes | Namespaces | Enumerations | Functions
symmetric_tensor.h File Reference
#include <deal.II/base/tensor.h>
#include <deal.II/base/numbers.h>
#include <deal.II/base/table_indices.h>
#include <deal.II/base/template_constraints.h>
#include <array>
#include <algorithm>
#include <functional>
Include dependency graph for symmetric_tensor.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  SymmetricTensor< rank_, dim, Number >
 
struct  internal::SymmetricTensor::Inverse< rank, dim, Number >
 
struct  internal::SymmetricTensorAccessors::double_contraction_result< rank1, rank2, dim, Number, OtherNumber >
 
struct  internal::SymmetricTensorAccessors::double_contraction_result< 2, 2, dim, Number, OtherNumber >
 
struct  internal::SymmetricTensorAccessors::StorageType< rank, dim, Number >
 
struct  internal::SymmetricTensorAccessors::StorageType< 2, dim, Number >
 
struct  internal::SymmetricTensorAccessors::StorageType< 4, dim, Number >
 
struct  internal::SymmetricTensorAccessors::AccessorTypes< rank, dim, constness, Number >
 
struct  internal::SymmetricTensorAccessors::AccessorTypes< rank, dim, true, Number >
 
struct  internal::SymmetricTensorAccessors::AccessorTypes< rank, dim, false, Number >
 
class  SymmetricTensor< rank_, dim, Number >
 

Namespaces

 internal
 
 internal::SymmetricTensor
 
 internal::SymmetricTensorAccessors
 

Enumerations

enum  SymmetricTensorEigenvectorMethod { SymmetricTensorEigenvectorMethod::hybrid, SymmetricTensorEigenvectorMethod::ql_implicit_shifts, SymmetricTensorEigenvectorMethod::jacobi }
 

Functions

TableIndices< 2 > internal::SymmetricTensorAccessors::merge (const TableIndices< 2 > &previous_indices, const unsigned int new_index, const unsigned int position)
 
TableIndices< 4 > internal::SymmetricTensorAccessors::merge (const TableIndices< 4 > &previous_indices, const unsigned int new_index, const unsigned int position)
 
template<int dim, typename Number >
void internal::SymmetricTensor::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 > internal::SymmetricTensor::ql_implicit_shifts (const ::SymmetricTensor< 2, dim, Number > &A)
 
template<int dim, typename Number >
std::array< std::pair< Number, Tensor< 1, dim, Number > >, dim > internal::SymmetricTensor::jacobi (::SymmetricTensor< 2, dim, Number > A)
 
template<typename Number >
std::array< std::pair< Number, Tensor< 1, 2, Number > >, 2 > internal::SymmetricTensor::hybrid (const ::SymmetricTensor< 2, 2, Number > &A)
 
template<typename Number >
std::array< std::pair< Number, Tensor< 1, 3, Number > >, 3 > internal::SymmetricTensor::hybrid (const ::SymmetricTensor< 2, 3, Number > &A)
 

Enumeration Type Documentation

An enumeration for the algorithm to be employed when performing the computation of normalized eigenvectors and their corresponding eigenvalues by the eigenvalues() and eigenvectors() methods operating on SymmetricTensor objects.

The specialized algorithms utilized in computing the eigenvectors are presented in

1 @Article{Kopp2008,
2  title = {Efficient numerical diagonalization of hermitian 3x3 matrices},
3  author = {Kopp, J.},
4  journal = {International Journal of Modern Physics C},
5  year = {2008},
6  volume = {19},
7  number = {3},
8  pages = {523--548},
9  doi = {10.1142/S0129183108012303},
10  eprinttype = {arXiv},
11  eprint = {physics/0610206v3},
12  eprintclass = {physics.comp-ph},
13  url = {https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html}
14 }
Enumerator
hybrid 

A hybrid approach that preferentially uses 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.

This method potentially offers the quickest computation if the pathological case is not encountered.

ql_implicit_shifts 

The iterative QL algorithm with implicit shifts applied after tridiagonalization of the tensor using the householder method.

This method offers a compromise between speed of computation and its robustness. This method is particularly useful when the elements of \(T\) have greatly varying magnitudes, which would typically lead to a loss of accuracy when computing the smaller eigenvalues.

jacobi 

The iterative Jacobi algorithm.

This method offers is the most robust of the available options, with reliable results obtained for even the most pathological cases. It is, however, the slowest algorithm of all of those implemented.

Definition at line 3010 of file symmetric_tensor.h.