PAOFLOW.utils.perturb_split#
Functions#
|
Project two operators onto the Bloch eigenstate basis with degenerate-subspace diagonalisation. |
Module Contents#
- PAOFLOW.utils.perturb_split.perturb_split(rot_op1, rot_op2, v_k, degen, return_v_k=False)[source]#
Project two operators onto the Bloch eigenstate basis with degenerate-subspace diagonalisation.
- Parameters:
rot_op1 (np.ndarray, shape
(nawf, nawf)) – First operator matrix in the original PAO basis. The degenerate subspaces are diagonalised with respect to this operator.rot_op2 (np.ndarray, shape
(nawf, nawf)) – Second operator matrix in the original PAO basis. Projected using the eigenvectors obtained by diagonalisingrot_op1.v_k (np.ndarray, shape
(nawf, bnd)) – Bloch eigenvector matrix at a single k-point (columns are eigenstates).degen (list of array_like) – List of degenerate subspace index sets at this k-point. Each element is an array of indices corresponding to a degenerate manifold. An empty list indicates no degeneracies.
return_v_k (bool, optional) – If
True, also return the modified eigenvector matrix after degenerate-subspace rotations. Default isFalse.
- Returns:
op1 (np.ndarray, shape
(nawf, nawf)) –rot_op1projected onto the (modified) Bloch eigenstate basis.op2 (np.ndarray, shape
(nawf, nawf)) –rot_op2projected onto the (modified) Bloch eigenstate basis.v_k_temp (np.ndarray, shape
(nawf, bnd)) – Modified eigenvector matrix (returned only whenreturn_v_k=True).
Notes
When no degenerate subspaces are present (
len(degen) == 0), the projection is a straightforward unitary transformation:\[O = V^\dagger A V\]where \(V\) =
v_kand \(A\) is either operator.For each degenerate manifold \(\mathcal{D}\) (indices
lltoul), the function diagonalisesop1restricted to that block:\[\text{eigh}\left( O_1[\mathcal{D}, \mathcal{D}] \right) \rightarrow \text{eigenvalues},\; W_{\mathcal{D}}\]and applies the rotation \(V_{\mathcal{D}} \leftarrow V_{\mathcal{D}} W_{\mathcal{D}}\) to lift the degeneracy. Both operators are then projected using the updated eigenvectors. This approach is used throughout PAOFLOW to obtain well-defined momentum and curvature matrix elements at degenerate k-points.