Source code for edrixs.soc

__all__ = ['atom_hsoc']

import numpy as np


[docs] def atom_hsoc(case, soc): """ Return atomic spin-orbit coupling matrix :math:`\\vec{l}\\cdot\\vec{s}` in complex spherical harmonics basis. Parameters ---------- case: str String label indicating atomic shell, - 'p': for :math:`p` -shell. - 't2g': for :math:`t_{2g}` -shell. - 'd': for :math:`d` -shell. - 'f': for :math:`f` -shell. soc: float The strength of spin-orbit coupling. Returns ------- hsoc: 2d complex array The spin-orbit coupling matrix. """ sqrt2 = np.sqrt(2.0) sqrt6 = np.sqrt(6.0) sqrt10 = np.sqrt(10.0) sqrt12 = np.sqrt(12.0) if case.strip() == 'p': hsoc = np.zeros((6, 6), dtype=np.complex128) hsoc[0, 0] = -1.0 hsoc[3, 0] = sqrt2 hsoc[1, 1] = 1.0 hsoc[5, 2] = sqrt2 hsoc[0, 3] = sqrt2 hsoc[4, 4] = 1.0 hsoc[2, 5] = sqrt2 hsoc[5, 5] = -1.0 return 0.5 * soc * hsoc elif case.strip() == 't2g': hsoc = np.zeros((6, 6), dtype=np.complex128) hsoc[0, 0] = -1.0 hsoc[3, 0] = sqrt2 hsoc[1, 1] = 1.0 hsoc[5, 2] = sqrt2 hsoc[0, 3] = sqrt2 hsoc[4, 4] = 1.0 hsoc[2, 5] = sqrt2 hsoc[5, 5] = -1.0 return 0.5 * -soc * hsoc elif case.strip() == 'd': hsoc = np.zeros((10, 10), dtype=np.complex128) hsoc[0, 0] = -2.0 hsoc[3, 0] = 2.0 hsoc[1, 1] = 2.0 hsoc[2, 2] = -1.0 hsoc[5, 2] = sqrt6 hsoc[0, 3] = 2.0 hsoc[3, 3] = 1.0 hsoc[7, 4] = sqrt6 hsoc[2, 5] = sqrt6 hsoc[6, 6] = 1.0 hsoc[9, 6] = 2.0 hsoc[4, 7] = sqrt6 hsoc[7, 7] = -1.0 hsoc[8, 8] = 2.0 hsoc[6, 9] = 2.0 hsoc[9, 9] = -2.0 return 0.5 * soc * hsoc elif case.strip() == 'f': hsoc = np.zeros((14, 14), dtype=np.complex128) hsoc[0, 0] = -3.0 hsoc[3, 0] = sqrt6 hsoc[1, 1] = 3.0 hsoc[2, 2] = -2.0 hsoc[5, 2] = sqrt10 hsoc[0, 3] = sqrt6 hsoc[3, 3] = 2.0 hsoc[4, 4] = -1.0 hsoc[7, 4] = sqrt12 hsoc[2, 5] = sqrt10 hsoc[5, 5] = 1.0 hsoc[9, 6] = sqrt12 hsoc[4, 7] = sqrt12 hsoc[8, 8] = 1.0 hsoc[11, 8] = sqrt10 hsoc[6, 9] = sqrt12 hsoc[9, 9] = -1.0 hsoc[10, 10] = 2.0 hsoc[13, 10] = sqrt6 hsoc[8, 11] = sqrt10 hsoc[11, 11] = -2.0 hsoc[12, 12] = 3.0 hsoc[10, 13] = sqrt6 hsoc[13, 13] = -3.0 return 0.5 * soc * hsoc else: raise Exception("error in atom_hsoc: DO NOT support SOC for this case: ", case)