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'])
Beispiel #2
0
#!/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
Beispiel #3
0
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)
Beispiel #4
0
# 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):