Open mpmdean opened 3 years ago
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
@mpmdean Thanks for the suggestion! I will look into this later.
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.
See also: https://arxiv.org/pdf/cond-mat/0505214.pdf section 3.4.1 Crystal Field