A
软件介绍
pythTB是基于python开发的紧束缚模型计算软件,由Sinisa Coh 和 David Vanderbilt开发,可以计算能带,态密度,贝利曲率,边界态等性质。可以用来研究电子结构、能带拓扑等。
功能特点如下:
1 能够简单的求解紧束缚哈密顿的本征值和本征波函数。
2可以构建slab, cube, 以及其他形式的边界条件。
3 计算Berry phase,Wilson loop eigenvalues。
4 绘能带图、Berry phase图、拓扑表面态 等。
接下来,小编将举几个经典的例子来介绍该软件的使用方法。它是一个不错的TB-model学习软件。
B
安装方法
安装非常简单,在linux下, 运行命令:
pip install pythtb –upgrade
或者下载文件(文末 盘链接)
解压: tar -zxf pythtb-1.7.2.tar.gz
进入文件夹:cd pythtb-1.7.2
安装: python setup.py install
这样就完成了安装。接下来测试是否安装成功:
运行命令
python (进入python环境)
import pythtb
没有 错,就说明安装成功。
石墨烯能带
这一节以石墨烯为例,介绍参数的意义(其中蓝色为代码)
先给出石墨烯的结构图
以及结构文件POSCAR:
Grap
1.0
2.45 0.0 0.0
1.225 2.1217 0.0
0.0 0.0 10.0
C
2 Direct
0.3333 0.3333 0.5
0.6667 0.6667 0.5
主要参数设置的方法以及解释如下:
lat=[[1.0,0.0],[0.5,np.sqrt(3.0)/2.0]]
orb=[[1./3.,1./3.],[2./3.,2./3.]]
t=-1
如石墨烯结构图所示,lat是指晶格参数,石墨烯是二维的,所以只有两个基矢:
(1 0),(0.5,0.866)它这里晶格常数长度设置成了1,其实具体值不影响,只要比例对了就可以(晶体的对称性、形状能够保持一致),因为在求能谱的时候,是以波矢k (2pi/a)为单位的。orb是指轨道,电子轨道是基于格点的,所以要有一个相对坐标。第一格轨道其实就是第一个C原子上的pz轨道,坐标(1/3. , 1/3.),第二个坐标(2/3. , 2/3.)。t是指hopping强度。
my_model=tb_model(2,2,lat,orb)
这一行是哈密顿所需要的主要参数,源函数形式如下:
pythtb.tb_model(dim_k, dim_r, lat=None, orb=None, per=None, nspin=1)
第一个对应k空间的纬度dim_k=2,第二个是晶格纬度dim_r=2,第三个是基矢lat,第四个是轨道orb。
my_model.set_onsite([-delta,delta])
格点能,对角项的能量,这里因为两个C的pz轨道想等,所以等设置成了0(源程序中可能会让人误解,并不需要互为相反数,根据对角项的实际能量给)
my_model.set_hop(t, 0, 1, [ 0, 0])
my_model.set_hop(t, 1, 0, [ 1, 0])
my_model.set_hop(t, 1, 0, [ 0, 1])
这三行是hopping项,就是C1跟C2之间的所有hopping
源函数形式如下:
set_hop(hop_amp, ind_i, ind_j, ind_R=None, mode='set', allow_conjugate_pair=False)
其中hop_amp = t, 这里t是hopping强度;ind_i, ind_j 是指哪些轨道,对应orb这个参数的数组。第四个参数是一个数组,是指哪一个晶胞(耦合hopping可能是晶胞内的格点,也可能是晶胞之间的格点)
比如my_model.set_hop(t, 0, 1, [ 0, 0])这一行代码,
第一个参数是hopping强度,第二三参数是晶胞中第0和第1个轨道(python数组以0开头,所以其实是指第一跟第二个轨道)。第四个参数是一个数组,是指ind_j这个格点是属于那个晶胞的,ind_i这个原子默认是指[0,0]这个晶胞,而ind_j需要指定。这里ind_j也是[0,0]这个晶胞。也就是说是晶胞内的两个格点上的轨道之间的耦合。
这里给出这三个hopping(my_model.set_hop这个函数)对应的轨道以及晶胞位置示意图:
my_model.display
在输出结果中打印出紧束缚模型
path=[[0.,0.],[2./3.,1./3.],[.5,.5],[0.,0.]]
label=(r'$Gamma $',r'$K$', r'$M$', r'$Gamma $')
高对称点的路径(Gamma–K–M–Gamma)以及label
nk=121
高对称点之间的K点数
(k_vec,k_dist,k_node)=my_model.k_path(path,nk)
以path,nk为参数设置k点
evals=my_model.solve_all(k_vec)
求哈密顿中的所有k点的本征值
后面代码都是绘图的参数了,略
运行命令:python graphene.py
输出结果如下:
—————————————
report of tight-binding model
—————————————
k-space dimension = 2
r-space dimension = 2
number of spin components = 1
periodic directions = [0, 1]
number of orbitals = 2
number of electronic states = 2
lattice vectors:
# 0 ===> [ 1.0 , 0.0 ]
# 1 ===> [ 0.5 , 0.866 ]
positions of orbitals:
# 0 ===> [ 0.3333 , 0.3333 ]
# 1 ===> [ 0.6667 , 0.6667 ]
site energies:
# 0 ===> -0.0
# 1 ===> 0.0
hoppings:
< 0 | H | 1 + [ 0 , 0 ] > ===> -1.0 + 0.0 i
< 1 | H | 0 + [ 1 , 0 ] > ===> -1.0 + 0.0 i
< 1 | H | 0 + [ 0 , 1 ] > ===> -1.0 + 0.0 i
hopping distances:
| pos( 0 ) – pos( 1 + [ 0 , 0 ] ) | = 0.5774
| pos( 1 ) – pos( 0 + [ 1 , 0 ] ) | = 0.5774
| pos( 1 ) – pos( 0 + [ 0 , 1 ] ) | = 0.5774
—– k_path report begin ———-
real-space lattice vectors
[[1. 0. ]
[0.5 0.86603]]
k-space metric tensor
[[ 1.33333 -0.66667]
[-0.66667 1.33333]]
internal coordinates of nodes
[[0. 0. ]
[0.66667 0.33333]
[0.5 0.5 ]
[0. 0. ]]
reciprocal-space lattice vectors
[[ 1. -0.57735]
[ 0. 1.1547 ]]
cartesian coordinates of nodes
[[0. 0. ]
[0.66667 0. ]
[0.5 0.28868]
[0. 0. ]]
list of segments:
length = 0.66667 from [0. 0.] to [0.66667 0.33333]
length = 0.33333 from [0.66667 0.33333] to [0.5 0.5]
length = 0.57735 from [0.5 0.5] to [0. 0.]
node distance list: [0. 0.66667 1. 1.57735]
node index list: [ 0 51 76 120]
—– k_path report end ————
—————————————
starting calculation
—————————————
Calculating bands…
Done.
并生成一个能带文件graphene.pdf
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!