TB模型软件pythTB 简明教程–石墨烯能带计算

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进行处理,非常感谢!

上一篇 2021年3月2日
下一篇 2021年3月2日

相关推荐