Loading...
Searching...
No Matches
q3::LowdinTransform Struct Reference

#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
 

Detailed Description

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.

Member Data Documentation

◆ eigenvalues

std::vector<Real> q3::LowdinTransform::eigenvalues

◆ eigenvectors

std::vector<Complex> q3::LowdinTransform::eigenvectors

◆ inverse_square_root

std::vector<Complex> q3::LowdinTransform::inverse_square_root

Definition at line 54 of file lowdin_orthogonalization.hpp.

Referenced by q3::compute_lowdin_transform().

◆ number_of_orbitals

int q3::LowdinTransform::number_of_orbitals = 0

The documentation for this struct was generated from the following file: