BRIXS: Calculating Resonant Inelastic X-Ray Scattering Spectra from Bethe-Salpeter Equation Calculations
This code determines resonant inelastic x-ray scattering (RIXS) spectra for solids, starting from Bethe-Salpeter Equation (BSE) calculations in an all-electron many-body framework.
If you use BRIXS, I ask that you cite our initial publication, as well as Christian Vorwerk's PhD thesis.
In RIXS, an x-ray photon with energy
Following the derivation presented in Phys. Rev. 2, 042003(R) (2020), the RIXS double-differential cross section (DDCS) is defined as
where
where
where
The excitation pathway
To perform calculations with BRIXS, you first need to calculate two BSE
calculations to obtain the core excitation eigenstates
NOTE: Here, we are interested in the eigenstates of the polarizability. In a
typical BSE calculation, one is only interested in the dielectric function. As
such, the eigenvectors from these calculations are typically obtained from a
reduced BSE Hamiltonian, using the adjusted Coulomb potential
To use the BRIXS code, first perform a valence- and core-level BSE calculation with the exciting code. To calculate the matrix elements of the polarizability, add the following part to the input.xml
chibar="true"
chibar0comp="1"
The first attribute triggers the calculation of the full polarizability at vanishing momentum transfer, while the second one defines for which the BSE is solved. The additional dependence occurs since we calculate the analytical limit for the exchange interaction, i.e.
where the first term in the sum is needed to tame the divergence of the Coulomb
potential as
This yields
As we can see, this matrix element depends on the direction
NOTE: When one calculates the dielectric function as described above, only
the component of the dielectric tensor specified by chibar0comp
will agree
with the corresponding component obtained from a calculation with
chibar="false"
. The other components will differ and will be incorrect.
Once the BSE calculations are performed, the HDF5 files optical_output.h5, core_output.h5, and pmat.h5 have to be gathered in a directory together with the input file input.cfg. Then, the execution of rixs-pathway creates the file data.h5. Once this file is present, the execution of rixs-oscstr creates the final output in the file rixs.h5. A more detailed tutorial is provided in the file TUTORIAL.md