Si的DKK哈密顿量拟合

Si 的 DKK 哈密顿量为:

拟合结果为

1, 未考虑归一化系数

 2. 考虑归一化系数

 

L = -5.53 M = -3.64 ,N= -8.32 (参数取自GTS VSP)

这里注意的是,单位归一化问题, hbar/2m_0 = 3.8099333795 eV*A^2。

 

代码如下:

import numpy as np 
import matplotlib.pyplot as plt

def H(kx,ky,kz):
    H0, H1 = np.eye(3), np.eye(3)
    H0 = -0.551363*H0+M*(kx**2+ky**2+kz**2)*H0
    H1[0][0],H1[0][1],H1[0][2] = (L-M)*kx**2, N*kx*ky, N*kx*kz
    H1[1][0],H1[1][1],H1[1][2] = N*kx*ky, (L-M)*ky**2, N*ky*kz
    H1[2][0],H1[2][1],H1[2][2] = N*kx*kz, N*ky*kz,  (L-M)*kz**2
    return H0+H1

def plot1():
    res1,res2,res3 = [],[],[]
    kpath = [0]
    Lp = [0.5*1.1491,0.5*1.1491,0.5*1.1491]
    len_L = 100
    kxold,kyold,kzold = 0,0,0
    for i in range(len_L-1,-1,-1):
        kx = i*Lp[0]/(len_L-1)
        ky = i*Lp[1]/(len_L-1)
        kz = i*Lp[2]/(len_L-1)
        tmp = kpath[-1] + ((kx-kxold)**2+(ky-kyold)**2+(kz-kzold)**2)**0.5
        kpath.append(tmp)
        kxold,kyold,kzold = kx,ky,kz

        a, b = np.linalg.eig(H(kx,ky,kz))
        a = sorted(a)
        res1.append(a[0])
        res2.append(a[1])
        res3.append(a[2])
    
    flag = kpath[-1]
    
    Xp = [0,1.1491,0]
    len_X = 100
    kxold,kyold,kzold = 0,0,0
    for i in range(len_X):
        kx = i*Xp[0]/(len_L-1)
        ky = i*Xp[1]/(len_L-1)
        kz = i*Xp[2]/(len_L-1)
        tmp = kpath[-1] + ((kx-kxold)**2+(ky-kyold)**2+(kz-kzold)**2)**0.5
        kpath.append(tmp)
        kxold,kyold,kzold = kx,ky,kz

        a, b = np.linalg.eig(H(kx,ky,kz))
        a = sorted(a)
        res1.append(a[0])
        res2.append(a[1])
        res3.append(a[2])

    plt.plot(kpath[1:],res1)
    plt.plot(kpath[1:],res2)
    plt.plot(kpath[1:],res3)
    plt.axvline(flag)
    plt.ylim([-2,0])
    plt.show()

if __name__ == '__main__':
    # a = 1
    a = 3.80993
    L=-5.53*a
    M=-3.64*a
    N=-8.32*a
    plot1()
View Code

 

posted @ 2022-09-27 10:55  ghzphy  阅读(73)  评论(0编辑  收藏  举报