模型和能带, 学术

以一维链为例子说明能带折叠(附Python代码)

当元胞以倍数增加时,能带会发生折叠。本篇以一维链为例子,给出折叠后的能带图。

另外推荐阅读:通过速度和能量找到能带折叠前和折叠后的对应关系(附Python代码)

为了简洁和避免重复,这里的代码用到Guan软件包中的函数:https://py.guanjihuan.com,根据函数名可以大概看出来实现什么功能。如果有需要知道函数的详细内容,可看对应的源码。

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/27656
"""

import guan
import numpy as np

# one dimensional chain model
unit_cell = 0
hopping = 1
hamiltonian_function = guan.one_dimensional_fourier_transform_with_k(unit_cell, hopping)
k_array = np.linspace(-np.pi, np.pi, 100)
eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_function)
guan.plot(k_array, eigenvalue_array, xlabel='k', ylabel='E', style='k', title='one dimensional chain model')

# n times band folding
max_n = 10
for n in np.arange(2, max_n+1):
    unit_cell = np.zeros((n, n))
    for i0 in range(int(n)):
        for j0 in range(int(n)):
            if abs(i0-j0)==1:
                unit_cell[i0, j0] = 1
    hopping = np.zeros((n, n))
    hopping[0, n-1] = 1
    hamiltonian_function = guan.one_dimensional_fourier_transform_with_k(unit_cell, hopping)
    k_array = np.linspace(-np.pi, np.pi, 100)
    eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_function)
    guan.plot(k_array, eigenvalue_array, xlabel='k', ylabel='E', style='k', title='%i times band folding'%n)

运行结果:

1,308 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code