PAOFLOW.projection.do_non_ortho#

Functions#

do_non_ortho(Hks, Sks)

Apply a non-orthogonality transformation to the PAO Hamiltonian.

Module Contents#

PAOFLOW.projection.do_non_ortho.do_non_ortho(Hks, Sks)[source]#

Apply a non-orthogonality transformation to the PAO Hamiltonian.

Parameters:
  • Hks (np.ndarray, shape (nawf, nawf, nkpnts, nspin)) – Orthogonal PAO Hamiltonian in k-space (as produced by projwfc or the PAO builder).

  • Sks (np.ndarray, shape (nawf, nawf, nkpnts) or larger) – Overlap matrix in k-space. Only the first nawf x nawf block is used.

Returns:

Symmetrically orthogonalised Hamiltonian \(S^{1/2} H S^{1/2}\) for each k-point and spin channel.

Return type:

np.ndarray, shape (nawf, nawf, nkpnts, nspin)

Notes

When the PAO basis is non-orthogonal, the PAO Hamiltonian obtained from projwfc must be transformed to an orthogonal representation before diagonalisation. The transformation is

\[\tilde{H}(\mathbf{k}) = S^{1/2}(\mathbf{k})\, H(\mathbf{k})\, S^{1/2}(\mathbf{k})\]

where \(S^{1/2}\) is the matrix square root of the overlap matrix, computed via scipy.linalg.sqrtm() for each k-point independently. The eigenvalues of \(\tilde{H}\) are identical to those of the generalised eigenvalue problem \(H \mathbf{v} = E S \mathbf{v}\).