PAOFLOW.topology.clebsch_gordan#

Functions#

spinor(l, j, m, spin)

Compute a numerical Clebsch-Gordan coefficient for a spinor.

clebsch_gordan(nawf, sh_l, sh_j, spol)

Build the spin operator matrix in the coupled \(\lvert j, m_j, l, s \rangle\) basis.

Module Contents#

PAOFLOW.topology.clebsch_gordan.spinor(l, j, m, spin)[source]#

Compute a numerical Clebsch-Gordan coefficient for a spinor.

Parameters:
  • l (int) – Orbital angular momentum quantum number.

  • j (float) – Total angular momentum quantum number (\(j = l \pm 1/2\)).

  • m (int) – Projection of the total angular momentum along z (\(m_j - 1/2\) for the down component).

  • spin (int) – Selects the spin-up (0) or spin-down (1) coefficient.

Returns:

The Clebsch-Gordan coefficient \(\langle l, m_l; 1/2, \pm 1/2 \mid j, m_j \rangle\).

Return type:

float

Notes

The function aborts via quit() when an incompatible combination of j, l, or spin is supplied, printing a diagnostic message on rank 0.

PAOFLOW.topology.clebsch_gordan.clebsch_gordan(nawf, sh_l, sh_j, spol)[source]#

Build the spin operator matrix in the coupled \(\lvert j, m_j, l, s \rangle\) basis.

Parameters:
  • nawf (int) – Total number of atomic wave-function projectors (= 2 * number of spinor components).

  • sh_l (list of int) – Orbital angular momentum quantum numbers \(l\) for each shell.

  • sh_j (list of float) – Total angular momentum quantum numbers \(j\) for each shell, used to detect descending/ascending ordering in the pseudopotential.

  • spol (int) – Spin polarisation component: 0 for x, 1 for y, 2 for z.

Returns:

The spin operator \(S^{spol}\) expressed in the \(\lvert j, m_j, l, s \rangle\) basis.

Return type:

np.ndarray, shape (nawf, nawf), complex

Notes

The transformation matrices \(U_l\) are built by contracting Clebsch-Gordan coefficients (from spinor()) for angular momenta \(l = 0, 1, 2, 3\). The full basis-change matrix \(T_n\) is assembled block-diagonally over all shells. The spin operator is then

\[S_j = T_n \, S_l \, T_n^\top\]

where \(S_l\) is the Pauli spin operator in the \(\lvert l, m_l, s, s_z \rangle\) basis. Raises ValueError if the shell occupancies implied by sh_l do not sum to nawf.