if __name__ == "__main__": ''' U-5f2 :math:`L_{3}`-edge, :math:`2p_{3/2}\\rightarrow 6d` transition, indirect RIXS. Orbital order: 5f, 6d, 2p32 ''' # mpi4py env comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() # Occupancy of U 5f orbitals noccu = 2 res = edrixs.get_atom_data('U', v_name=('5f', '6d'), v_noccu=(noccu, 0), edge='L3', trans_to_which=2, label=('f', 'd', 'p')) if rank == 0: print(res, flush=True) # Slater integrals si = collections.OrderedDict(res['slater_i']) sn = collections.OrderedDict(res['slater_n']) # Initial Hamiltonian, 5f-5f si['F2_ff'] = si['F2_ff'] * 0.77 si['F4_ff'] = si['F4_ff'] * 0.77 si['F6_ff'] = si['F6_ff'] * 0.77 si['F0_ff'] = edrixs.get_F0('f', si['F2_ff'], si['F4_ff'], si['F6_ff'])
#!/usr/bin/env python import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import edrixs # Setup parameters # ---------------- # Number of occupancy of 3d shell noccu = 8 res = edrixs.get_atom_data('Ni', v_name='3d', v_noccu=noccu, edge='L23') name_i, slat_i = [list(i) for i in zip(*res['slater_i'])] name_n, slat_n = [list(i) for i in zip(*res['slater_n'])] # Slater integrals for initial Hamiltonian without core-hole si = edrixs.rescale(slat_i, ([1, 2], [0.65] * 2)) si[0] = edrixs.get_F0('d', si[1], si[2]) # F0_dd # Slater integrals for intermediate Hamiltonian with core-hole sn = edrixs.rescale(slat_n, ([1, 2, 4, 5, 6], [0.65, 0.65, 0.95, 0.7, 0.7])) sn[0] = edrixs.get_F0('d', sn[1], sn[2]) # F0_dd sn[3] = edrixs.get_F0('dp', sn[5], sn[6]) # F0_dp slater = (si, sn) # Spin-orbit coupling strengths zeta_d_i = res['v_soc_i'][0] # valence 3d electron without core-hole zeta_d_n = res['v_soc_n'][0] # valence 3d electron with core-hole # E_{L2} - E_{L3} = 1.5 * zeta_p
import edrixs if __name__ == "__main__": ''' Pu-5f6 :math:`O_{4,5}`-edge, :math:`5d_{3/2,5/2}\\rightarrow 5f` transition. How to run ---------- mpiexec -n 4 python run_rixs_fsolver.py ''' # PARAMETERS # ----------- # Occupancy of U 5f orbitals noccu = 6 res = edrixs.get_atom_data('Pu', v_name='5f', v_noccu=noccu, edge='O45') name_i, slat_i = [list(i) for i in zip(*res['slater_i'])] name_n, slat_n = [list(i) for i in zip(*res['slater_n'])] # Initial Hamiltonian si = edrixs.rescale(slat_i, ([1, 2, 3], [0.77] * 3)) si[0] = edrixs.get_F0('f', si[1], si[2], si[3]) # Intermediate Hamiltonian sn = edrixs.rescale(slat_n, ([1, 2, 3, 5, 6, 7, 8, 9], [0.77] * 3 + [0.6] * 4)) sn[0] = edrixs.get_F0('f', sn[1], sn[2], sn[3]) sn[4] = edrixs.get_F0('fd', sn[7], sn[8], sn[9]) slater = (si, sn)
# where :code:`edrixs.tmat_c2r('d', ispin=True)` is the transformation matrix. # We needed to tell edrixs that we are working with a :math:`d`-shell and that it # should include spin. We could also have transformed :code:`v` to see how these # eignevectors are composed of the real harmonic basis. We will see an example # of this later. ################################################################################ # Crystal field on an atom # ------------------------------------------------------------------------------ # To simulate the solid state, we need to combine the crystal field with Coulomb # interactions. Let us choose an atomic model for Ni. l = 2 norb = 10 noccu = 8 basis = edrixs.get_fock_bin_by_N(norb, noccu) slater = edrixs.get_atom_data('Ni', '3d', noccu, edge='L3')['slater_i'] ################################################################################ # Let us implement a tetragonal crystal field, for which we need to pass # :code:`d1` the splitting of :math:`d_{yz}/d_{zx}` and :math:`d_{xy}` and # :code:`d3` the splitting of :math:`d_{3z^2-r^2}` and :math:`d_{x^2-y^2}`. ten_dq, d1, d3 = 2.5, 0.9, .2 ################################################################################ # To determine the eigenvalues and eigenvectors we need to transform both our # Coulomb matrix and our crystal field matrix into the same basis. See the # example on exact diagonalization if needed. In this case, we put this # procedure into a function, with the option to scale the Coulomb interactions. def diagonlize(scaleU=1):