PAOFLOW.hamiltonian.do_spin_orbit#
Functions#
|
Build per-l SOC contributions for an arbitrary shells layout. |
|
Construct the tight-binding spin-orbit Hamiltonian in real space. |
|
Build the p-orbital spin-orbit coupling matrix for the PS pseudopotential type. |
|
Build the p-orbital spin-orbit coupling matrix for the SP pseudopotential type. |
|
Build the p-orbital spin-orbit coupling matrix for the SPD pseudopotential type. |
|
Build the d-orbital spin-orbit coupling matrix for the SPD pseudopotential type. |
|
Build the p-orbital spin-orbit coupling matrix for the SSPD pseudopotential type. |
|
Build the d-orbital spin-orbit coupling matrix for the SSPD pseudopotential type. |
|
p-orbital SOC matrix for the SPDS layout (s, p, d, s_semicore). |
|
d-orbital SOC matrix for the SPDS layout (d at indices 4..8). |
|
Build the p-orbital spin-orbit coupling matrix for the SSPPD pseudopotential type. |
|
Build the d-orbital spin-orbit coupling matrix for the SSPPD pseudopotential type. |
Module Contents#
- PAOFLOW.hamiltonian.do_spin_orbit.build_generic_soc(theta, phi, shells_list, norb, active_shells=None)[source]#
Build per-l SOC contributions for an arbitrary shells layout.
- Parameters:
theta (float) – Quantisation-axis angles (radians).
phi (float) – Quantisation-axis angles (radians).
shells_list (sequence of int) – Per-shell angular momenta in the order they appear in the atom’s orbital basis (e.g.
[0, 1, 2]forspd,[0, 1, 2, 0]forspds,[0, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2]for an extended Pt basis).norb (int) – Total number of orbitals per atom (must equal
sum(2l+1)).active_shells (sequence of bool or float, optional) – Per-shell weight applied to the SOC kernel of each shell. Booleans are interpreted as 0/1.
None(default) uses a hydrogenic-style1/k**2falloff over the occurrence index of each l > 0 channel: the valence shell (k=1) gets weight 1, the first augmentation (k=2) gets 0.25, the second (k=3) gets ~0.111, etc. l=0 shells always get 0.
- Returns:
(HR_soc_p, HR_soc_d) – SOC blocks restricted to l=1 and l=2 shells respectively. Caller weights them by
lambda_pandlambda_d.- Return type:
tuple of two
(2*norb, 2*norb)complex arrays
Notes
The per-element
lambda_p/lambda_dare fit (or read from tables) for the valence p/d shell. Applying the samelambdato every shell of the same l in an extended/augmented basis triple-counts SOC on unoccupied polarisation channels and corrupts response functions (e.g. spin Hall conductivity). Conversely, zeroing the augmentation shells entirely under-broadens the conduction-side response. The default1/k**2heuristic is a compromise that preserves the valence kernel exactly (matching the hardcoded minimal-basis kernelssoc_p_spd,soc_p_spds, …) while leaving a small residual weight on the augmentation channels. Pass an explicitactive_shells(bool or float per shell) to override.
- PAOFLOW.hamiltonian.do_spin_orbit.do_spin_orbit_H(data_controller)[source]#
Construct the tight-binding spin-orbit Hamiltonian in real space.
Follows the formalism of Abate and Asdente, Phys. Rev. 140, A1303 (1965).
- Parameters:
data_controller (DataController) – Object providing
data_arraysanddata_attributes. Required arrays:HRs(shape(nawf, nawf, nk1, nk2, nk3, nspin)),naw,orb_pseudo,lambda_p,lambda_d. Required attributes:natoms,theta,phi.- Returns:
Modifies
data_arraysin place:HRs: replaced by the spin-orbit-coupled Hamiltonian of shape(2*nawf, 2*nawf, nk1, nk2, nk3, 1).naw: extended by appending a copy of itself.
Updates
data_attributes:nawf: set to2 * nawf.
- Return type:
None
Notes
For a non-magnetic system the spin-degenerate block is \(H_{\uparrow\uparrow} = H_{\downarrow\downarrow} = H_0\). For a magnetic system the two spin channels are taken from the two spin components of
HRs. The SOC term is added only at the \(\mathbf{R}=(0,0,0)\) site; p- and d-channel couplings are weighted bylambda_pandlambda_d, respectively.
- PAOFLOW.hamiltonian.do_spin_orbit.soc_p_ps(theta, phi, norb)[source]#
Build the p-orbital spin-orbit coupling matrix for the PS pseudopotential type.
- Parameters:
- Returns:
Spin-orbit coupling matrix in the \(|\uparrow\rangle \oplus |\downarrow\rangle\) basis. The p-state block occupies indices 0–2 (up) and
norb–norb+2(down).- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
- PAOFLOW.hamiltonian.do_spin_orbit.soc_p_sp(theta, phi, norb)[source]#
Build the p-orbital spin-orbit coupling matrix for the SP pseudopotential type.
- Parameters:
- Returns:
Spin-orbit coupling matrix; the p-state block occupies indices 1–3 (s precedes p in the SP basis).
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
- PAOFLOW.hamiltonian.do_spin_orbit.soc_p_spd(theta, phi, norb)[source]#
Build the p-orbital spin-orbit coupling matrix for the SPD pseudopotential type.
- Parameters:
- Returns:
p-channel spin-orbit coupling matrix in the SPD orbital ordering.
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
- PAOFLOW.hamiltonian.do_spin_orbit.soc_d_spd(theta, phi, norb)[source]#
Build the d-orbital spin-orbit coupling matrix for the SPD pseudopotential type.
- Parameters:
- Returns:
d-channel spin-orbit coupling matrix in the SPD orbital ordering (d-states occupy indices 4–8).
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
- PAOFLOW.hamiltonian.do_spin_orbit.soc_p_sspd(theta, phi, norb)[source]#
Build the p-orbital spin-orbit coupling matrix for the SSPD pseudopotential type.
- Parameters:
- Returns:
p-channel spin-orbit coupling matrix in the SSPD orbital ordering (p-states occupy indices 2–4).
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
Notes
Orbital layout is hardcoded to the s, s*, p, d basis.
- PAOFLOW.hamiltonian.do_spin_orbit.soc_d_sspd(theta, phi, norb)[source]#
Build the d-orbital spin-orbit coupling matrix for the SSPD pseudopotential type.
- Parameters:
- Returns:
d-channel spin-orbit coupling matrix in the SSPD orbital ordering (d-states occupy indices 5–9).
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
Notes
Orbital layout is hardcoded to the s, s*, p, d basis.
- PAOFLOW.hamiltonian.do_spin_orbit.soc_p_spds(theta, phi, norb)[source]#
p-orbital SOC matrix for the SPDS layout (s, p, d, s_semicore).
Identical to
soc_p_spd()except the down-spin block offset is parametrised onnorb(=10 here) instead of the hard-coded9. The trailing semicore-s orbital at index 9 is left untouched (the SOC operator vanishes on l=0).
- PAOFLOW.hamiltonian.do_spin_orbit.soc_d_spds(theta, phi, norb)[source]#
d-orbital SOC matrix for the SPDS layout (d at indices 4..8).
- PAOFLOW.hamiltonian.do_spin_orbit.soc_p_ssppd(theta, phi, norb)[source]#
Build the p-orbital spin-orbit coupling matrix for the SSPPD pseudopotential type.
- Parameters:
- Returns:
p-channel spin-orbit coupling matrix in the SSPPD orbital ordering (p-states occupy indices 5–7).
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex
- PAOFLOW.hamiltonian.do_spin_orbit.soc_d_ssppd(theta, phi, norb)[source]#
Build the d-orbital spin-orbit coupling matrix for the SSPPD pseudopotential type.
- Parameters:
- Returns:
d-channel spin-orbit coupling matrix in the SSPPD orbital ordering.
- Return type:
np.ndarray, shape
(2*norb, 2*norb), complex