#include <lowdin_orthogonalization.hpp>
Public Attributes | |
| std::vector< Real > | eigenvalues |
| std::vector< Complex > | eigenvectors |
| std::vector< Complex > | inverse_square_root |
| int | number_of_orbitals = 0 |
S^{-1/2} for one orbital set, together with the eigendecomposition it was built from.
The eigenpairs are kept rather than discarded because the derivative of S^{-1/2} cannot be recovered from S^{-1/2} alone: dS and S^{-1/2} do not commute, so d(S^{-1/2}) is the solution of a Lyapunov equation that is diagonal only in S's own eigenbasis (see lowdin_inverse_square_root_derivative). DFT+U forces with ortho-atomic projectors need exactly that, and re-diagonalizing S per displaced atom and Cartesian direction to get it back would be both wasteful and a second definition of the same transform.
Both matrices are column-major – element (row, column) at row + column * number_of_orbitals. eigenvectors is ZHEEV's own output (column k is eigenvector k); inverse_square_root is Hermitian, so its layout only fixes which index is written first.
Definition at line 50 of file lowdin_orthogonalization.hpp.
| std::vector<Real> q3::LowdinTransform::eigenvalues |
Definition at line 52 of file lowdin_orthogonalization.hpp.
Referenced by q3::compute_lowdin_transform(), and q3::lowdin_inverse_square_root_derivative().
| std::vector<Complex> q3::LowdinTransform::eigenvectors |
Definition at line 53 of file lowdin_orthogonalization.hpp.
Referenced by q3::compute_lowdin_transform(), and q3::lowdin_inverse_square_root_derivative().
| std::vector<Complex> q3::LowdinTransform::inverse_square_root |
Definition at line 54 of file lowdin_orthogonalization.hpp.
Referenced by q3::compute_lowdin_transform().
| int q3::LowdinTransform::number_of_orbitals = 0 |
Definition at line 51 of file lowdin_orthogonalization.hpp.
Referenced by q3::compute_lowdin_transform(), and q3::lowdin_inverse_square_root_derivative().