coulomb_utensor¶
- edrixs.coulomb_utensor.get_gaunt(l1, l2)[source]¶
Calculate the Gaunt coefficents \(C_{l_1,l_2}(k,m_1,m_2)\)
\[C_{l_1,l_2}(k,m_1,m_2)=\sqrt{\frac{4\pi}{2k+1}} \int \mathop{d\phi} \mathop{d\theta} sin(\theta) Y_{l_1}^{m_1\star}(\theta,\phi) Y_{k}^{m_1-m_2}(\theta,\phi) Y_{l_2}^{m_2}(\theta,\phi)\]- Parameters:
- l1: int
The first quantum number of angular momentum.
- l2: int
The second quantum number of angular momentum.
- Returns:
- res: 3d float array
The calculated Gaunt coefficents.
The 1st index (\(= 0, 1, ..., l_1+l_2+1\)) is the order \(k\).
The 2nd index (\(= 0, 1, ... ,2l_1\)) is the magnetic quantum number \(m_1\) plus \(l_1\)
The 3nd index (\(= 0, 1, ... ,2l_2\)) is the magnetic quantum number \(m_2\) plus \(l_2\)
Notes
It should be noted that \(C_{l_1,l_2}(k,m_1,m_2)\) is nonvanishing only when
\(k + l_1 + l_2 = \text{even}\),
and
\(|l_1 - l_2| \leq k \leq l_1 + l_2\).
Please see Ref. [1] p. 10 for more details.
References
[1]Sugano S, Tanabe Y and Kamimura H. 1970. Multiplets of Transition-Metal Ions in Crystals. Academic Press, New York and London.
Examples
>>> import edrixs
Get gaunt coefficients between \(p\)-shell and \(d\)-shell
>>> g = edrixs.get_gaunt(1, 2)
- edrixs.coulomb_utensor.get_umat_kanamori(norbs, U, J)[source]¶
Calculate the Coulomb interaction tensor for a Kanamori-type interaction. For the \(t2g\)-shell case, it is parameterized by \(U, J\).
- Parameters:
- norbs: int
number of orbitals (including spin).
- U: float
Hubbard \(U\) for electrons residing on the same orbital with opposite spin.
- J: float
Hund’s coupling.
- Returns:
- umat: 4d complex array
The calculated Coulomb interaction tensor
See also
coulomb_utensor.get_umat_kanamori_ge
coulomb_utensor.get_umat_slater
coulomb_utensor.umat_slater
Notes
The order of spin index is: up, down, up, down, …, up, down.
- edrixs.coulomb_utensor.get_umat_kanamori_ge(norbs, U1, U2, J, Jx, Jp)[source]¶
Calculate the Coulomb interaction tensor for a Kanamori-type interaction. For the general case, it is parameterized by \(U_1, U_2, J, J_x, J_p\).
- Parameters:
- norbs: int
number of orbitals (including spin).
- U1: float
Hubbard \(U\) for electrons residing on the same orbital with opposite spin.
- U2: float
Hubbard \(U\) for electrons residing on different orbitals.
- J: float
Hund’s coupling for density-density interaction.
- Jx: float
Hund’s coupling for spin flip.
- Jp: float
Hund’s coupling for pair-hopping.
- Returns:
- umat: 4d complex array
The calculated Coulomb interaction tensor
See also
coulomb_utensor.get_umat_kanamori
coulomb_utensor.get_umat_slater
coulomb_utensor.umat_slater
Notes
The order of spin index is: up, down, up, down, …, up, down.
- edrixs.coulomb_utensor.get_umat_slater(case, *args)[source]¶
Convenient adapter function to return the Coulomb interaction tensor for common case.
- Parameters:
- case: string
Indicates atomic shells, should be one of
For single shell:
‘s’: single \(s\)-shell (\(l=0\))
‘p’: single \(p\)-shell (\(l=1\))
‘p12’: single \(p_{1/2}\)-shell (\(l=1\))
‘p32’: single \(p_{3/2}\)-shell (\(l=1\))
‘t2g’: single \(t_{2g}\)-shell (\(l_{\text{eff}}=1\))
‘d’: single \(d\)-shell (\(l=2\))
‘d32’: single \(d_{3/2}\)-shell (\(l=2\))
‘d52’: single \(d_{5/2}\)-shell (\(l=2\))
‘f’: single \(f\)-shell (\(l=3\))
‘f52’: single \(f_{5/2}\)-shell (\(l=3\))
‘f72’: single \(f_{7/2}\)-shell (\(l=3\))
For two shells:
case = str1 + str2
where, str1 and str2 are strings and they can be any of
[‘s’, ‘p’, ‘p12’, ‘p32’, ‘t2g’, ‘d’, ‘d32’, ‘d52’, ‘f’, ‘f52’, ‘f72’]
For examples,
‘dp’: 1st \(d\)-shell and 2nd \(p\)-shell
‘dp12’: 1st \(d\)-shell and 2nd \(p_{1/2}\)-shell
‘f52p32’: 1st \(f_{5/2}\)-shell and 2nd \(p_{3/2}\)-shell
‘t2gp’: 1st \(t_{2g}\)-shell and 2nd \(p\)-shell
- *args: floats
Variable length argument list. Slater integrals. The order of these integrals shoule be
For only one shell case,
args = [F0, F2, F4, F6, ….]
For two shells case,
args = [FX_11, FX_12, GX_12, FX_22]
where, 1 (2) means 1st (2nd)-shell, and X=0, 2, 4, … or X=1, 3, 5 …, and X should be in ascending order. The following are possible cases:
‘s’:
args = [F0]
‘p’, ‘p12’, ‘p32’:
args = [F0, F2]
‘d’, ‘d32’, ‘d52’, ‘t2g’:
args = [F0, F2, F4]
‘f’, ‘f52’, ‘f72’:
args = [F0, F2, F4, F6]
‘ss’:
args = [F0_11, F0_12, G0_12, F0_22]
‘ps’, ‘p12s’, ‘p32s’:
args = [F0_11, F2_11, F0_12, G1_12, F0_22]
‘ds’, ‘d32s’, ‘d52s’, ‘t2gs’:
args = [F0_11, F2_11, F4_11, F0_12, G2_12, F0_22]
‘fs’, ‘f52s’, ‘f72s’:
args = [F0_11, F2_11, F4_11, F6_11, F0_12, G3_12, F0_22]
‘sp’, ‘sp12’, ‘sp32’:
args = [F0_11, F0_12, G1_12, F0_22, F2_22]
‘pp’, ‘pp12’, ‘pp32’, ‘p12p’, ‘p12p12’, ‘p12p32’, ‘p32p’, ‘p32p12’, ‘p32p32’:
args = [F0_11, F2_11, F0_12, F2_12, G0_12, G2_12, F0_22, F2_22]
‘dp’, ‘dp12’, ‘dp32’, ‘d32p’, ‘d32p12’, ‘d32p32’, ‘d52p’, ‘d52p12’, ‘d52p32’, ‘t2gp’, ‘t2gp12’, t2gp32’:
args = [F0_11, F2_11, F4_11, F0_12, F2_12, G1_12, G3_12, F0_22, F2_22]
‘fp’, ‘fp12’, ‘fp32’, ‘f52p’, ‘f52p12’, ‘f52p32’, ‘f72p’, ‘f72p12’, ‘f72p32’:
args = [F0_11, F2_11, F4_11, F6_11, F0_12, F2_12, G2_12, G4_12, F0_22, F2_22]
‘sd’, ‘sd32’, ‘sd52’:
args = [F0_11, F0_12, G2_12, F0_22, F2_22, F4_22]
‘pd’, ‘pd32’, ‘pd52’, ‘p12d’, ‘p12d32’, ‘p12d52’, ‘p32d’, ‘p32d32’, ‘p32d52’:
args = [F0_11, F2_11, F0_12, F2_12, G1_12, G3_12, F0_22, F2_22, F4_22]
‘dd’, ‘dd32’, ‘dd52’, ‘d32d’, ‘d32d32’, ‘d32d52’, ‘d52d’, ‘d52d32’, ‘d52d52’, ‘t2gd’, ‘t2gd32’, ‘t2gd52’:
args = [F0_11, F2_11, F4_11, F0_12, F2_12, F4_12, G0_12, G2_12, G4_12, F0_22, F2_22, F4_22]
‘fd’, ‘fd32’, ‘fd52’, ‘f52d’, ‘f52d32’, ‘f52d52’, ‘f72d’, ‘f72d32’, ‘f72d52’:
args = [F0_11, F2_11, F4_11, F6_11, F0_12, F2_12, F4_12, G1_12, G3_12, G5_12, F0_22, F2_22, F4_22]
‘sf’, ‘sf52’, ‘sf72’:
args = [F0_11, F0_12, G3_12, F0_22, F2_22, F4_22, F6_22]
‘pf’, ‘pf52’, ‘pf72’, ‘p12f’, ‘p12f52’, ‘p12f72’, ‘p32f’, ‘p32f52’, ‘p32f72’:
args = [F0_11, F2_11, F0_12, F2_12, G2_12, G4_12, F0_22, F2_22, F4_22, F6_22]
‘df’, ‘df52’, ‘df72’, ‘d32f’, ‘d32f52’, ‘d32f72’, ‘d52f’, ‘d52f52’, ‘d52f72’, ‘t2gf’, ‘t2gf52’, ‘t2gf72’:
args = [F0_11, F2_11, F4_11, F0_12, F2_12, F4_12, G1_12, G3_12, G5_12, F0_22, F2_22, F4_22, F6_22]
‘ff’, ‘ff52’, ‘ff72’, ‘f52f’, ‘f52f52’, ‘f52f72’, ‘f72f’, ‘f72f52’, ‘f72f72’:
args = [F0_11, F2_11, F4_11, F6_11, F0_12, F2_12, F4_12, F6_12, G0_12, G2_12, G4_12, G6_12, F0_22, F2_22, F4_22, F6_22]
- Returns:
- umat: 4d array of complex
the Coulomb interaction tensor
See also
coulomb_utensor.umat_slater
coulomb_utensor.get_umat_kanamori
coulomb_utensor.get_umat_kanamori_ge
Examples
>>> import edrixs >>> F0_dd, F2_dd, F4_dd = 3.0, 1.0, 0.5 >>> F0_dp, F2_dp, G1_dp, G3_dp = 2.0, 1.0, 0.2, 0.1 >>> F0_pp, F2_pp = 0.0, 0.0 >>> slater = [F0_dd, F2_dd, F4_dd, F0_dp, F2_dp, G1_dp, G3_dp, F0_pp, F2_pp] >>> umat_d = edrixs.get_umat_slater('d', F0_dd, F2_dd, F4_dd) >>> umat_dp = edrixs.get_umat_slater('dp', *slater) >>> umat_t2gp = edrixs.get_umat_slater('t2gp', *slater) >>> umat_dp32 = edrixs.get_umat_slater('dp32', *slater)
- edrixs.coulomb_utensor.get_umat_slater_3shells(shell_name, *args)[source]¶
Given three shells, build the slater type of Coulomb tensors among the three shells.
- Parameters:
- shell_name: tuple of three strings
Shells names.
- *args: floats
Slater integrals. The order should be
FX_11, FX_12, GX_12, FX_22, FX_13, GX_13, FX_23, GX_23, FX_33
where, 1, 2, 3 means 1st, 2nd, 3rd shell, and X=0, 2, 4, … or X=1, 3, 5 …, and X should be in ascending order.
- Returns:
- umat: 4d complex array
Rank-4 Coulomb tensors.
- edrixs.coulomb_utensor.umat_slater(l_list, fk)[source]¶
Calculate the Coulomb interaction tensor which is parameterized by Slater integrals \(F^{k}\):
\[U_{m_{l_i}m_{s_i}, m_{l_j}m_{s_j}, m_{l_t}m_{s_t}, m_{l_u}m_{s_u}}^{i,j,t,u} =\frac{1}{2} \delta_{m_{s_i},m_{s_t}}\delta_{m_{s_j},m_{s_u}} \delta_{m_{l_i}+m_{l_j}, m_{l_t}+m_{l_u}} \sum_{k}C_{l_i,l_t}(k,m_{l_i},m_{l_t})C_{l_u,l_j} (k,m_{l_u},m_{l_j})F^{k}_{i,j,t,u}\]where \(m_s\) is the magnetic quantum number for spin and \(m_l\) is the magnetic quantum number for orbital. \(F^{k}_{i,j,t,u}\) are Slater integrals. \(C_{l_i,l_j}(k,m_{l_i},m_{l_j})\) are Gaunt coefficients.
- Parameters:
- l_list: list of int
contains the quantum number of orbital angular momentum \(l\) for each shell.
- fk: dict of float
contains all the possible Slater integrals between the shells in l_list, the key is a tuple of 5 ints (\(k,i,j,t,u\)), where \(k\) is the order, \(i,j,t,u\) are the shell indices begin with 1.
- Returns:
- umat: 4d array of complex
contains the Coulomb interaction tensor.
See also
coulomb_utensor.get_umat_slater
coulomb_utensor.get_umat_kanamori
coulomb_utensor.get_umat_kanamori_ge
Examples
>>> import edrixs
For only one \(d\)-shell
>>> l_list = [2] >>> fk={} >>> F0, F2, F4 = 5.0, 4.0 2.0 >>> fk[(0,1,1,1,1)] = F0 >>> fk[(2,1,1,1,1)] = F2 >>> fk[(4,1,1,1,1)] = F4 >>> umat_d = edrixs.umat_slater(l_list, fk)
For one \(d\)-shell and one \(p\)-shell
>>> l_list = [2,1] >>> fk={} >>> F0_dd, F2_dd, F4_dd = 5.0, 4.0, 2.0 >>> F0_dp, F2_dp = 4.0, 2.0 >>> G1_dp, G3_dp = 2.0, 1.0 >>> F0_pp, F2_pp = 2.0, 1.0
>>> fk[(0,1,1,1,1)] = F0_dd >>> fk[(2,1,1,1,1)] = F2_dd >>> fk[(4,1,1,1,1)] = F4_dd
>>> fk[(0,1,2,1,2)] = F0_dp >>> fk[(0,2,1,2,1)] = F0_dp >>> fk[(2,1,2,1,2)] = F2_dp >>> fk[(2,2,1,2,1)] = F2_dp
>>> fk[(1,1,2,2,1)] = G1_dp >>> fk[(1,2,1,1,2)] = G1_dp >>> fk[(3,1,2,2,1)] = G3_dp >>> fk[(3,2,1,1,2)] = G3_dp
>>> fk[(0,2,2,2,2)] = F0_pp >>> fk[(2,2,2,2,2)] = F2_pp
>>> umat_dp = edrixs.umat_slater(l_list, fk)