WannierTools研究Haldane 模型

 

通过第一性原理计算,可以对具体的材料进行研究,我自己也在对这个方向慢慢进行摸索,但是VASP等软件并不是万能的,有些其它的性质它并不能得到,所以就有了一些开源的软件,比如Wannier90,WannierTools可以用来你和紧束缚能带,计算体系的拓扑性质.我在这里首先学习的是WannierTools,因为它可以利用一些有Wannier90计算得到的数据,来计算对应体系的拓扑量以及能谱,自己...

通过第一性原理计算,可以对具体的材料进行研究,我自己也在对这个方向慢慢进行摸索,但是VASP等软件并不是万能的,有些其它的性质它并不能得到,所以就有了一些开源的软件,比如Wannier90,WannierTools可以用来你和紧束缚能带,计算体系的拓扑性质.我在这里首先学习的是WannierTools,因为它可以利用一些有Wannier90计算得到的数据,来计算对应体系的拓扑量以及能谱,自己对这方面是比较熟悉的,就先学习如何利用WannierTools来计算Haldane模型的一些拓扑性质.

首先如何下载和安装WannierTools可以自行参考官网,通常情况下如果课题组从事这方面的研究肯定服务器上就会安装好,除非你是白手起家,或者是自己想学这个东西(比如我),那么你就需要去按照教程安装一下了,这里就不介绍怎么安装了,后面有机会我再整理一份教程来演示如何编译安装WannierTools.

这里的对与Haldane模型的研究,也是基于WannierTools自带的练习进行的,我只是简单的跟着重复一些这些例子,然后加上一些自己对一些参数设置的理解.软件下载之后解压之后,主体结构如下

png

文件夹src中放置的是计算的主体源代码,如果对某一部分内容感兴趣,可以直接研究学习源代码,examples中放置的就是一些具体的计算实例了,初学的话可以跟着这里面的例子来学习,官网也有这些例子的详细教程.

png

Haldane model

png

关于Haldane模型的参数和拓扑性质如上图所示,我这里主要就是利用examples中的Haldane_model这个文件夹中的内容来对这个实例进行重复,文件夹内容如下图所示

png

在利用WannierTools计算的时候,主要的文件有两个,一个是name_hr.dat这个文件时候Wannier90计算产生的紧束缚模型的数据,当然了也可以通过现有的紧束缚模型来产生这个数据,实例中的Haldane_model就是利用现有的紧束缚模型来产生的这个数据,这个方法我还在研究中,至于如何利用Wannier90来产生这个数据,这个任务是之后的事情了.第二个重要的文件就是wt.in,这个文件的主要作用就是来进行计算参数的设置,控制要进行什么样的计算.

首先进入到上图的文件夹中,执行下面的命令来产生上面提及到的两个重要文件

python haldane_hr_gen-trivial-insulator.py
cp wt.in-trivial-insulator wt.in

如何利用紧束缚模型产生name_hr.dat我并没学会,所以这里主要就解读一下wt.in中的参数都是在做什么

&TB_FILE
Hrfile = "Haldane_hr.dat"   ! 设置紧束缚近似模型数据存储的文件名
/


!> bulk band structure calculation flag
&CONTROL                  ! 从这里开始设置计算的细节
BulkBand_calc         = T  ! calculate band structure in kpath mode(计算体态能带)
BulkBand_plane_calc   = T  ! calculate band structure in kplane mode
SlabBand_calc         = T  ! Calculate slab band structure in kpath mode(半开边界的能带计算)
SlabSS_calc           = F  ! Calculate surface states in kpath mode(计算表面态,也就是计算表面的谱函数)
Wanniercenter_calc    = T  ! calculate Wilson loop(利用/wilson loop的方法计算体系Wannier Center的演化,可用来研究拓扑不变量)
BerryCurvature_calc   = T  ! 计算体系的Berry曲率
/

&SYSTEM
NSLAB =60               ! 半开边界情况下,开边界方向上格点的数目
NumOccupied = 1         ! NumOccupied  占据态的数目
SOC = 0                 ! soc(0代表没有自旋轨道耦合,1代表有自旋轨道后河)
E_FERMI = 0        ! e-fermi  费米能的位置
/

&PARAMETERS
Eta_Arc = 0.01     ! infinite small value, like brodening 
E_arc = 0.0         ! energy for calculate Fermi Arc
OmegaNum = 1000  ! omega number      设置确定能量区间中的撒点数目
OmegaMin = -5.0     ! energy interval  设置计算的能量区间
OmegaMax =  5.0     ! energy interval
Nk1 = 60            ! number k points 在k空间计算时候的k点撒点数目控制
Nk2 = 60            ! number k points 
NP = 1              ! number of principle layers
/

LATTICE  ! 这里设置元胞的信息,与VASP中的设置是相同的
Angstrom
2.1377110  -1.2342080   0.0000000
0.0000000   2.4684160   0.0000000
0.0000000   0.0000000   10.000000

ATOM_POSITIONS
2                               ! number of atoms for projectors
Direct                          ! Direct or Cartisen coordinate
C 0.333333 0.666667 0.500000    ! 元胞中原子的位置
C 0.666667 0.333333 0.500000 

PROJECTORS   ! 设置元胞中每个原子贡献的轨道
1 1          ! number of projectors
C pz
C pz


SURFACE            ! See doc for details(表面态计算设置,也就是选择哪个方向是开边界,哪个方向是周期的)
 0  0  1           ! 通常体系默认为是3D的,所以一般情况下是设置两个方向为周期,一个方向为开边界来计算能带
 1  0  0
 0  1  0

KPATH_BULK            ! k point path(这里用来设置计算体态能带时候的路径)
3              ! number of k line only for bulk band
  M   0.50000  0.00000  0.00000   K' -.33333   -.33333  0.00000
  K'  -.33333  -.33333  0.00000   G  0.00000   0.00000  0.00000
  G   0.00000  0.00000  0.00000   K  0.33333   0.33333  0.00000

KPATH_SLAB
1        ! numker of k line for 2D case
0 0.0 0.0 1 0. 1.0  ! k path for 2D case

KPLANE_SLAB
-0.5 -0.5      ! Original point for 2D k plane
 1.0  0.0      ! The first vector to define 2D k plane 
 0.0  1.0      ! The second vector to define 2D k plane  for arc plots

KPLANE_BULK
 0.00  0.00  0.00   ! Original point for 3D k plane 
 1.00  0.00  0.00   ! The first vector to define 3d k space plane
 0.00  1.00  0.00   ! The second vector to define 3d k space plane

将上面所说的两个文件准备好之后,就可以开始进行计算了

mpirun -np 2 wt.x &  # -np后面的数值是你想要开多少个核进行并行计算

计算完成之后,根据设置的参数不同,则会有一些不同的文件结果输出,所有的结果都可以利用gnuplot来绘制,所以最后的结果中可以看到一些后缀为.gnu的文件,执行这个文件即可

gnuplot bulkek.gnu
gnuplot bulkek_plane.gnu
gnuplot Berrycurvature.gnu
gnuplot wcc.gnu
gnuplot slabek.gnu

最后的结果如下所示 png

png

png

png

Other Case

上面是对平庸相的Haldane模型计算的结果,在对参数进行调整之后就可以计算其它相对应的结果

  • Chern insulator
    python haldane_hr_gen-chern-insulator.py
    cp wt.in-chern-insulator wt.in
    mpirun -np 2 wt.x 
    
  • Gapless semimeta
    python haldane_hr_gen-gapless.py
    cp wt.in-gapless wt.in
    mpirun -np 2 wt.x &
    

公众号

相关内容均会在公众号进行同步,若对该Blog感兴趣,欢迎关注微信公众号。

png