外尔半金属的哈密顿量和费米弧(附Python代码)

您所在的位置:网站首页 半弧怎么画 外尔半金属的哈密顿量和费米弧(附Python代码)

外尔半金属的哈密顿量和费米弧(附Python代码)

2024-07-11 04:04| 来源: 网络整理| 查看: 265

发布时间:2020年9月29日2023年2月7日

最近修改时间:2023年2月7日

1. 外尔半金属能带

外尔半金属最小模型[1,2,3]:

H=A(k_x \sigma_{x}+k_y \sigma_{y})+M_{k}\sigma_{z}

其中,M_k=M_0-M_1(k_{x}^{2}+k_{y}^{2}+k_{z}^{2})

本征值为:

E_{\pm}=\pm \sqrt{M_{k}^{2}+A^{2}(k_{x}^{2}+k_{y}^{2})}

两个外尔点的坐标为(0, 0,\pm k_c),其中k_c \equiv \sqrt{M_0/M_1}

计算能带的Python代码:

""" This code is supported by the website: https://www.guanjihuan.com The newest version of this code is on the web page: https://www.guanjihuan.com/archives/6077 """ import numpy as np from math import * import matplotlib.pyplot as plt def main(): n = 0.5 k1 = np.arange(-n*pi, n*pi, n/20) k2 = np.arange(-n*pi, n*pi, n/20) plot_bands_two_dimension(k1, k2, hamiltonian) def hamiltonian(kx,kz,ky=0): # Weyl semimetal A = 1 M0 = 1 M1 = 1 H = A*(kx*sigma_x()+ky*sigma_y())+(M0-M1*(kx**2+ky**2+kz**2))*sigma_z() return H def sigma_x(): return np.array([[0, 1],[1, 0]]) def sigma_y(): return np.array([[0, -1j],[1j, 0]]) def sigma_z(): return np.array([[1, 0],[0, -1]]) def plot_bands_two_dimension(k1, k2, hamiltonian): from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter dim = hamiltonian(0, 0).shape[0] dim1 = k1.shape[0] dim2 = k2.shape[0] eigenvalue_k = np.zeros((dim2, dim1, dim)) i0 = 0 for k10 in k1: j0 = 0 for k20 in k2: matrix0 = hamiltonian(k10, k20) eigenvalue, eigenvector = np.linalg.eig(matrix0) eigenvalue_k[j0, i0, :] = np.sort(np.real(eigenvalue[:])) j0 += 1 i0 += 1 fig = plt.figure() ax = fig.gca(projection='3d') k1, k2 = np.meshgrid(k1, k2) for dim0 in range(dim): ax.plot_surface(k1, k2, eigenvalue_k[:, :, dim0], cmap=cm.coolwarm, linewidth=0, antialiased=False) plt.xlabel('kx') plt.ylabel('kz') ax.set_zlabel('E') plt.show() if __name__ == '__main__': main()

计算结果为:

2. 外尔半金属的费米弧

通过推导[2](这里推导过程略),可得到y=0表面态的哈密顿量:

E_{\mathrm{arc}}(k_x, k_z)= sgn(M)Ak_x

在推导过程中,表面态还有以下限制:

k_{x}^{2}+k_{z}^{2}k_{c}^{2}

在这里给定一个费米能,表面态(费米弧)是一条线段。当费米能E=0时,k_x=0,该线段为|k_z||k_c|,连接两个外尔点。

计算表面态的Python代码:

""" This code is supported by the website: https://www.guanjihuan.com The newest version of this code is on the web page: https://www.guanjihuan.com/archives/6077 """ import numpy as np from math import * import matplotlib.pyplot as plt def main(): n = 0.5 k1 = np.arange(-n*pi, n*pi, n/50) k2 = np.arange(-n*pi, n*pi, n/50) plot_bands_two_dimension_direct(k1, k2, hamiltonian) def hamiltonian(kx,kz,ky=0): # surface states of Weyl semimetal A = 1 H = A*kx return H def sigma_x(): return np.array([[0, 1],[1, 0]]) def sigma_y(): return np.array([[0, -1j],[1j, 0]]) def sigma_z(): return np.array([[1, 0],[0, -1]]) def plot_bands_two_dimension_direct(k1, k2, hamiltonian): from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter fig = plt.figure() ax = fig.gca(projection='3d') dim1 = k1.shape[0] dim2 = k2.shape[0] eigenvalue_k = np.zeros((dim2, dim1)) i0 = 0 for k10 in k1: j0 = 0 for k20 in k2: if (k10**2+k20**2 3,993 次浏览


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3