RIXS calculations for an atomic model#

Here we show how to compute RIXS for Sr₂YIrO₆ based on Ref. [1].

Sr₂YIrO₆

Imports#

import edrixs
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

Specify active core and valence orbitals#

shell_name = ('t2g', 'p32')
v_noccu = 4

Slater parameters#

The paper specifies the valence Coulomb interactions and spin orbit coupling [1][2]. Other interaction parameters can be loaded from a database containing Hartree-Fock predictions.

F2_dd = 2.15
F4_dd = 1.34
lam = 0.42

info = edrixs.utils.get_atom_data('Ir', '5d', v_noccu, edge='L3')
G1_dp = info['slater_n'][5][1]
G3_dp = info['slater_n'][6][1]
F2_dp = info['slater_n'][4][1]

slater = [[0, F2_dd, F4_dd],
          [0, F2_dd, F4_dd, 0, F2_dp, G1_dp, G3_dp]]
v_soc = (lam, lam)

Diagonalization#

Since we have already specified a \(t_{2g}\) subshell only, we do not need to pass an additional v_cfmat matrix.

Note that we need to tune the energy of the intermediate state via off.

off = 11216
out = edrixs.ed_1v1c_py(shell_name, shell_level=(0, -off), v_soc=v_soc,
                        c_soc=info['c_soc'], v_noccu=v_noccu, slater=slater)
eval_i, eval_n, trans_op = out

Compute XAS#

ominc = np.arange(11200, 11230, 0.1)
temperature = 300  # in K

thin = np.deg2rad(30)
pol_type = [('linear', 0)]

xas = edrixs.xas_1v1c_py(
    eval_i, eval_n, trans_op, ominc, gamma_c=info['gamma_c'],
    thin=thin, pol_type=pol_type)

The array xas will have shape (len(ominc), len(pol_type)).

Compute RIXS#

eloss = np.linspace(-.5, 6, 400)
pol_type_rixs = [('linear', 0, 'linear', 0), ('linear', 0, 'linear', np.pi/2)]
gs_list = [0, 1, 2]
thout = np.deg2rad(60)
gamma_f = 0.02

rixs = edrixs.rixs_1v1c_py(
    eval_i, eval_n, trans_op, ominc, eloss,
    gamma_c=info['gamma_c'], gamma_f=gamma_f,
    thin=thin, thout=thout,
    pol_type=pol_type_rixs, gs_list=gs_list,
    temperature=temperature
)

The array rixs will have shape (len(ominc), len(eloss), len(pol_type)).

Plot XAS and RIXS#

What do you expect the XAS spectrum to look like?

Why is there zero elastic intensity and what could I alter in the experimental geometry in order to see elastic intensity?

fig, axs = plt.subplots(2, 1, figsize=(4, 6))

def plot_it(axs, ominc, xas, eloss, rixscut, rixsmap=None, label=None):
    axs[0].plot(ominc/1000, xas[:, 0], label=label)
    axs[0].set_xlabel('Energy (keV)')
    axs[0].set_ylabel('Intensity')
    axs[0].set_title('XAS')

    axs[1].plot(eloss, rixscut, label=f"{label}")
    axs[1].set_xlabel('Energy loss (eV)')
    axs[1].set_ylabel('Intensity')
    axs[1].set_title(f'RIXS at resonance')

rixs_pol_sum = rixs.sum(-1)
cut_index = np.argmax(rixs_pol_sum[:, eloss < 2].sum(1))
rixscut = rixs_pol_sum[cut_index]

plot_it(axs.ravel(), ominc, xas, eloss, rixscut, rixsmap=rixs_pol_sum)
plt.tight_layout()

Hide code cell output

../../_images/506ddb66879a494886f912f8e454e65ba0bb3872a1a33ee42144c868902d0168.png

Full d shell calculation#

Does it make sense to consider only the \(t_{2g}\) subshell [3]?

How will the XAS and RIXS spectra change when including the \(e_{g}\) states?

ten_dq = 3.5
v_cfmat = edrixs.cf_cubic_d(ten_dq)


out = edrixs.ed_1v1c_py(('d', 'p32'), shell_level=(0, -off), v_soc=v_soc,
                        v_cfmat=v_cfmat,
                        c_soc=info['c_soc'], v_noccu=v_noccu, slater=slater)
eval_i, eval_n, trans_op = out
xas_full_d_shell = edrixs.xas_1v1c_py(
    eval_i, eval_n, trans_op, ominc, gamma_c=info['gamma_c'],
    thin=thin, pol_type=pol_type,
    gs_list=gs_list)
edrixs >>> Running XAS ...
edrixs >>> XAS Done !
rixs_full_d_shell = edrixs.rixs_1v1c_py(
    eval_i, eval_n, trans_op, np.array([11215]), eloss,
    gamma_c=info['gamma_c'], gamma_f=gamma_f,
    thin=thin, thout=thout,
    pol_type=pol_type_rixs,
    temperature=temperature)
edrixs >>> Running RIXS ...
edrixs >>> RIXS Done !
fig, axs = plt.subplots(2, 1, figsize=(4, 6))

plot_it(axs, ominc, xas, eloss, rixscut, label='$t_{2g}$ subshell')
rixscut_d_shell = rixs_full_d_shell.sum((0, -1))
plot_it(axs, ominc, xas_full_d_shell, eloss, rixscut_d_shell, label='$d$ shell')

for ax in axs:
    ax.legend(fontsize=6)
plt.tight_layout()

Hide code cell output

../../_images/754289a8768b0997a27ec9d848c150a5cacbef0d4cef4a8168aafb870b51488c.png

References#