Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

trigonal CFs #92

Open
mpmdean opened this issue Aug 14, 2020 · 1 comment
Open

trigonal CFs #92

mpmdean opened this issue Aug 14, 2020 · 1 comment

Comments

@mpmdean
Copy link
Contributor

mpmdean commented Aug 14, 2020

At some point it would be nice to implement trigonal CFs for the full d-electron shell.

Below are my notes. It might be useful for users to write them in the real harmonic basis and then return the converted ones.

#!/usr/bin/env python

import numpy as np
from numpy import exp as e
import scipy
import edrixs


# z along face surface normal
ten_dq = 10 # cubic distortion
delta =  1 # trigonal distortion

from numpy import sqrt

# write eigenvections in real harmonic basis using edrixs convention
tmat_r2trig = np.array([[1,         0,        0,         0,         0],  # z^2
                        [0,         0,sqrt(1/3),-sqrt(2/3),         0],  # zx
                        [0, sqrt(1/3),        0,         0,-sqrt(2/3)],  # zy
                        [0,         0,sqrt(2/3),  sqrt(1/3),        0],  # x^2-y^2
                        [0,-sqrt(2/3),        0,         0,-sqrt(1/3)]], # xy
                       dtype=np.complex128) 

# invert matrix
tmat_trig2tr = np.conj(np.transpose(tmat_r2trig))

# create matrix in trigonal basis
tmp_trig = np.zeros((5, 5), dtype=np.complex)
ind = np.arange(5)
# energies are diagaonal in trigonal basis
tmp_trig[ind, ind] = np.array([-0.4*ten_dq, delta-0.4*ten_dq, delta-0.4*ten_dq, 0.6*ten_dq, 0.6*ten_dq])

# convert to real harmonic basis
tmp = edrixs.cb_op(tmp_trig, tmat_trig2tr)

cf = np.zeros((10, 10), dtype=np.complex)
cf[0:10:2, 0:10:2] = tmp
cf[1:10:2, 1:10:2] = tmp

#z^2 zx zy x^2-y^2 xy
e, v = scipy.linalg.eigh(tmp)
for energy, vec in zip(e, v.T):
    print(f"{energy:.2f} {vec.round(3).real}")


# apical atom along z
ten_dq = 10 # cubic distortion
delta =  1 # trigonal distortion

from numpy import sqrt

phi = 2*np.pi/3
ep = np.exp(1j*phi)/np.sqrt(3)
em = np.exp(-1j*phi)/np.sqrt(3)
e0 = 1/np.sqrt(3)

# write eigenvections in real harmonic basis using edrixs convention
tmat_r2trig = np.array([[0,         0,       0,         1,        0],
                        [e0,       em,      ep,         0,        0],
                        [e0,       ep,      em,         0,        0],
                        [0,         0,       0,         0,        1],
                        [e0,       e0,      e0,         0,        0]],
                       dtype=np.complex128)
# invert matrix
tmat_trig2tr = np.conj(np.transpose(tmat_r2trig))

# create matrix in trigonal basis
tmp_trig = np.zeros((5, 5), dtype=np.complex)
ind = np.arange(5)
# energies are diagaonal in trigonal basis
tmp_trig[ind, ind] = np.array([-0.4*ten_dq, delta-0.4*ten_dq, delta-0.4*ten_dq, 0.6*ten_dq, 0.6*ten_dq])

# convert to real harmonic basis
tmp = edrixs.cb_op(tmp_trig, tmat_trig2tr)

cf = np.zeros((10, 10), dtype=np.complex)
cf[0:10:2, 0:10:2] = tmp
cf[1:10:2, 1:10:2] = tmp

#z^2 zx zy x^2-y^2 xy
e, v = scipy.linalg.eigh(tmp)
for energy, vec in zip(e, v.T):
    print(f"{energy:.2f} {vec.round(3).real}")

See also:
https://arxiv.org/pdf/cond-mat/0505214.pdf
section 3.4.1 Crystal Field

@shenmidelin
Copy link
Contributor

@mpmdean Thanks for the suggestion! I will look into this later.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants