# 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

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

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

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.

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)