Dear GetFEM community,
I am currently working on a nonlinear solid mechanics problem using GetFEM++, and I would like to compute the eigenvalues and eigenvectors of the right Cauchy-Green deformation tensor , where is the deformation gradient.
Since is a symmetric positive-definite tensor, its spectral decomposition (principal stretches and directions) is particularly useful for my analysis.
My question is:
Is there any built-in functionality in GetFEM++ to compute the eigenvalues and eigenvectors of such a tensor field, either symbolically or numerically (e.g., at Gauss points or element-wise)?
If not directly available, I would appreciate any recommendations on how to extract the tensor at integration points and perform the eigen decomposition using external libraries (e.g., Eigen, NumPy, etc.).
Thank you in advance for your support and suggestions.
No, actually this we have not implemented, but we have implemented matrix logarithm function Logm (and also Expm), which can do as much as eigenvalue decomposition.
This is an excerpt from my notes on hyperelasticity, about a Logm/Expm based implementaion of the Ogden material law:
eigendecomposition (and its derivatives) are as you might know quite ugly in their implementation for the case of multiple eigenvalues. We can implement it if you are interested in, but I would need to find time for it.
Thank you very much for your answer, @Konstantinos.Poulios. I actually need it for a specific problem, and I’m quite sure it will also be helpful for the community. In the meantime, I’ll also try to explore some solutions on my side.
Thanks again!
The first questions we need to answer before implementing this are:
- what the syntax should be used for the eigenvectors and eigenvalues of a matrix
A. It could be Eig(A) and Eigv(A). For example if A is 3x3, then Eig(A) will be a 3x3 matrix and Eigv(A) a vector of length 3.
- what types of matrices to support for
A and how to deal with matrices that do not match the posed limitations. The simplest option is to limit the implementation to symmetric matrices. Then the implementation could either 1) always symmetrize A, 2) ignore the lower triangle of A, 3) ignore the upper triangle of A, 4) always check that A is indeed symmetric.
- what dimensions to support for
A. The simplest option is to implement the operator for 2x2 and 3x3 matrices and give an error otherwise.
- how to deal with the ordering of eigenvalues/eigenvectors and multiple eigenvalues. This is usually a big annoyance with eigendecompositions.