RIXS calculations for an Anderson Impurity Model

RIXS calculations for an Anderson Impurity Model#

An Anderson Impurity Model (AIM) refers to a Hamiltonian with a set of correlated orbitals, often referred to as the impurity or metal states, that hybridize with a set of uncorrelated orbitals, commonly known as the ligands or bath states.

This example examines RIXS simulations for NiPS₃ based on Ref. [1].

AIM

In this example, we will focus on some properties of the model. If desired, the function we will run can be examined here.

import numpy as np
import matplotlib.pyplot as plt
from helper_function import make_rixs

%matplotlib inline

Original model#

ominc, eloss, rixs, impurity_occupation = make_rixs()
fig, ax = plt.subplots(figsize=(3, 4))
art = ax.pcolormesh(ominc, eloss, rixs.sum(-1).T, cmap='terrain', shading='gouraud',
                   vmin=0, vmax=1.5)
plt.colorbar(art, ax=ax, orientation='horizontal')
ax.set_xlabel('Incident energy (eV)')
ax.set_ylabel('Energy loss (eV)')
ax.set_title(f"Model from Nat. Comm. 15, 3496 (2024)")
plt.tight_layout()
plt.show()

Hide code cell output

../../_images/16e9141797bc3b4dc0b6bc197d9ec3b9311b2dfa3ebdf60374ca5f0af68be00f.png

Let’s discuss how we obtained this model. (If desired, the full gory details are in Ref. [2].)

Magnetic field behavior#

What is the spin of the ground state? And what will happen when a magnetic field is applied?

ominc, eloss, rixs, impurity_occupation = make_rixs(ext_B=np.array([0.1, 0, 0]))
fig, ax = plt.subplots(figsize=(3, 4))
art = ax.pcolormesh(ominc, eloss, rixs.sum(-1).T, cmap='terrain', shading='gouraud',
                   vmin=0, vmax=0.5)
plt.colorbar(art, ax=ax, orientation='horizontal')
ax.set_xlabel('Incident energy (eV)')
ax.set_ylabel('Energy loss (eV)')
ax.set_title(f"{impurity_occupation:.1f} electrons on Ni")
ax.set_ylim(-0.1, 0.5)
plt.tight_layout()
plt.show()

Hide code cell output

../../_images/c4419f2c2d043b089fd1190806d8e261d5a64362eb8926c0f5c739d513e79539.png

Charge-transfer energy behavior#

What happens to the charge on Ni and the spin-flip transition energy when the charge transfer energy is made very large?

ominc, eloss, rixs, impurity_occupation = make_rixs(ext_B=np.array([0.1, 0, 0]),
                                                    Delta=10, c_level=-696)
fig, ax = plt.subplots(figsize=(3, 4))
art = ax.pcolormesh(ominc, eloss, rixs.sum(-1).T, cmap='terrain', shading='gouraud',
                   vmin=0, vmax=0.5)
plt.colorbar(art, ax=ax, orientation='horizontal')
ax.set_xlabel('Incident energy (eV)')
ax.set_ylabel('Energy loss (eV)')
ax.set_title(f"{impurity_occupation:.1f} electrons on Ni")
ax.set_ylim(-0.1, 0.5)
plt.tight_layout()
plt.show()

Hide code cell output

../../_images/40918e07f7b3e13c692cdbd82a7ce6b52c2b54303e4d83e792cb89172b0edd6b.png

Quality of match#

This plot, taken from our recent paper [1], illustrates the level of precision in a good theory-experiment match. Match

Challenge#

Parameter extraction is hard because (a) the experiment theory matche is imperfect (b) degeneracies and the solution including an anticorrelation between charge transfer and Hund’s exchange. Several different solutions exist in the literature.[1],[3],[4],[5]