2.3 wannier90+wanniertools
参考:
https://zhuanlan.zhihu.com/p/355317202
https://blog.sciencenet.cn/blog-2909108-1154273.html
https://zhuanlan.zhihu.com/p/642116307
https://zhuanlan.zhihu.com/p/25432728
一、安装编译
wannier90安装
下载: https://wannier.org/download/
2.1版本是可以与VASP结合的最新版本。但是2.1版本默认安装与VASP接口并不好,主要是借助肖承诚博士写了一个Fortran的接口(https://github.com/Chengcheng-Xiao/VASP2WAN90_v2_fix), 需要注意的是这个接口是针对VASP 5.4.4版本的。1.2版本与VASP的接口是好的,所以1.2版本默认安装就好。对比两个版本的不同,1.2版本的主要缺点就在于不能构建向上自旋和向下自旋的能带,也就是没有自旋轨道耦合作用的铁磁和反铁磁体系。
1.1 wannier90 2.1安装
首先,解压安装包
tar -zxvf wannier90-2.1.0.tar.gz
其次,进入文件夹
cd wannier90-2.1.0/
然后,准备编译文件(这里老王用的是ifort,注意要检查ifort和mpiifort执行命令)
cp config/make.inc.ifort make.inc
接着,编译
make
完成后,编译库,得到libwannier.a文件
make lib
1.2 VASP编译(注意以上接口VASP2WAN90_v2_fix只针对VASP 5.4.4)
首先拷贝VASP2WAN90_v2_fix接口文件中的mlwf.patch 到VASP代码编译目录下。然后执行如下命令。
patch -p0 < mlwf.patch
接着在VASP makefile.include 文件中加入下面两行。注意路径。
1 | CPP_OPTIONS+=-DVASP2WANNIER90v2 |
最后编译即可
make all
wannier-tools安装
开源软件包WannierTools,是一个用于研究新型拓扑材料的软件。此代码在紧束缚模型中工作,可以由另一个软件包Wannier90生成。
它可以通过计算Wilson loop来帮助对给定材料的拓扑相进行分类,通过角分辨光电发射(ARPES)和红外光谱技术,可以得到表面态光谱扫描隧道显微镜(STM)实验。它还可以识别Weyl/Dirac点和节点线结构的位置,计算闭合动量环周围的贝里相位和部分布里渊区(BZ)的贝里曲率。
此外,WannierTools还可以计算非磁性金属和半金属的普通磁电阻利用玻尔兹曼输运理论,计算给定磁场方向和强度下的朗道能级谱;并从超胞计算中得到展开的能谱。
wanniertools官方安装教程
http://www.wanniertools.com/installation.html
安装依赖环境
1、Intel编译器即oneapi(Fortran compiler (Gfortran or ifort),MPICH version higher than 2.1.5,Lapack and Blas library, (Intel MKL recommended))
2、Arpack-ng
安装步骤
下载wanniertools和arpack安装包并分别解压
1 | unzip wannier_tools-master.zip |
先进入arpack,修改编译文件并编译
在ARmake.inc中修改编译路径,这里以实际安装路径为准
1 | home = $(HOME)/ARPACK |
修改编译器,参考VASP安装时的makefile.include
1 | FC=f77 |
改为
1 | FC = mpiifort |
然后执行make编译
make lib
直至产生libarpack_SUN4.a文件,该文件会因为不同机器不同环境而不同名称,只要确定好,然后在编译wanniertools的时候指定好就行了
在wanniertools的src文件夹的makefile文件中该默认值为
1 | #ARPACK LIBRARY |
修改为刚刚已经生成的文件路径,这里使用的是Makefile.intel-mpi,重命名为makefile
1 | cp Makefile.intel-mpi Makefile |
然后编译即可
1 | make |
最后生成wt.x文件即为安装成功
1 | cp -f wt.x../bin |
二、计算过程(以石墨烯为例)
1、结构优化加自洽计算
POSCAR为
1
2
3
4
5
6
7
8
9
10Surf-mp-48
1.00000000000000
1.2344083195740001 -2.1380573715510001 0.0000000000000000
1.2344083195740001 2.1380573715510001 0.0000000000000000
0.0000000000000000 0.0000000000000000 12.0000000000000000
C
2
Direct
0.0000000000000000 0.0000000000000000 0.5000000000000000
0.3333329999917112 0.6666670000099160 0.5000000000000000
INCAR为
1 | SYSTEM=Graphene |
加SOC在自洽计算加上LSORBIT=T
2、非自洽计算投影能带
在自洽计算基础上,cp -r scf band
修改INCAR
1 | ISTART = 1 |
KPOINTS 改为高对称点路径。
画一下能带结构,然后再做一下Fatband分析,了解费米面附近能带是有哪些成分构成的。以C的pz轨道。
3、非自洽vasp产生.win文件
在自洽计算基础上 cp -r scf wan1
修改INCAR
1 | ISTART = 1 |
注意,INCAR中使用NPAR参数会出错
KPOINTS、POSCAR、POTCAR不改。
准备好wannier90.win文件,同时在INCAR里头添加一行LWANNIER90=.TRUE.和一行ICHARG=11,然后再运行一遍VASP。 顺利的话,会产生 wannier90.amn, wannier90.mmn, wannier90.eig, wannier90.chk 等4个文件。wannier90.win里头的内容也有可能会被改变。包括结构信息,k点信息。有了这三个文件就可以进一步调节参数,构造wannier函数了。请注意wannier90.win里头的num_bands要和OUTCAR里头的NBANDS一致。.mmn积分矩阵和.amn布洛赫态在轨道上的尝试投影和UNK0000x.1存储实空间单胞的布洛赫态相关信息,这些文件是运行链接wannier90的DFT计算输出的结果,而gaas.win是计算参数设置文件
4、wannier90.x计算
运行wannier90主程序。mpirun -np 40 wannier90.x wannier90 &
注意在第3步打开hr_plot = T
,关闭write_hr = true
;在第4步打开write_hr = true
,关闭hr_plot = T
。
这里后面一个winner90代表wannier90.win的文件.win前面的部分。如果你的win文件是name.win运行的地方就可以是
wannier90.x name &
运行过程中当num_bands > num_wann 有个迭代过程,控制迭代步数可以通过
1 | dis_num_iter = 200 # 迭代1,默认200步 |
最后会生成wannier90.chk文件,restart计算会读取这个文件。
加入能带部分的话第一次运行就会出来,wannier90_band.dat文件,这个可以用来和DFT结果对比。
构造好Wannier函数以后,仔细检查一下wannier90.wout,
搜索”Final State”,在这里可以看到每条Wannier轨道的展宽,由此可以检查你构造的Wannier函数是否足够局域。如果有某个Wannier函数的展宽
比晶格常数大许多,就表明你的Wannier函数构造不是很理想,需要不断调节投影轨道,解纠缠窗口以及Frozen窗口等。从这些轨道的中心和展宽也能
看出轨道之间的简并性如何,由此也可以判断所构造的Wannier函数对称性如何,这个也会影响后续的分析,特别是表面态的计算。查看wannier90.wout末尾的Final State的最后一列小于3,其结果是可以的。
5、
紧接着,你就可以开始书写WannierTools的主输入文件了,
目前叫input.dat,以后会改成http://wt.in (WannierTools v2.2之后)。 这里不具体介绍每一个参数,在说明文档中有详细的介绍,中文版的说明文档正在翻译中。
input.dat文件有模板,使用的时候直接拷贝然后加以修改。很多内容都可以直接从wannier90.win和wannier90.wout中拷
贝。 Bi2Se3的主输入文件input.dat可以在附件中下载得到。我们可以通过控制输入文件中的一些参数来实现我们所需要的功能。
常见报错
首先跑接口会生成3个文件.amm .mmm .eig通过这三个文件构造wannier函数。也可以提前把.win文件准备好放进去。以上三个文件生成后运行wannier90.x会成.chk文件
Restar=T是需要读取.chk文件的
Error: restart requested but wannier90.chkfile not found
原因:加了restart = plot 这个命令,但却没有wannier90.chk这个文件。Restart是需要读取wannier90.chk的。
解决办法:注释掉restart = plot,然后重新运行wannier90.x wannier90 &得到wannier90.chk.
- 问题:Wannier90 is running in LIBRARY MODE
Setting up k-point neighbours…
Ignoring
解决办法:尽量串行,不要并行。请再次运行 $postw90 wannier90的为输出的数据
Spinors与文件INCAR中的ISPIN的设置有关,同时存在或者同时去掉,否则影响.amn文件的形成。(自旋轨道耦合)
谨慎用use_bloch_phases=T一般是F
问题:param_read: mismatch in wannier90.eig
解决办法:每一步计算的核数要相等
- 问题:dis_windows: More states in the forze window than target WFs
解决办法:把dis_windows改大点
- Fewer projections defined than the number of wannier functions requested.
投影的轨道太少
解决办法:增加投影的轨道
- Kmesh_get_bvector: Not enongh bevectors found
解决办法:添加kemsh_tol
- Wanted band:1 found band:17
Wanted kpoint:2 found kpoint:1
解决办法:常见原因是num_bands设置错误,返回band计算文件夹查看NBANDS
- Dis_windows: Energy window contains fewer states than number sf target WFs
解决办法:把dis_windows改大点
- Dis_windows: more states in the frozen window than WFs
解决办法:调节frozen window, 投影太多或者这个窗口太大涉及到别的轨道
- Wannier 运行有两种模式一是library mode,一种是单机模式stand-alone mode
解决办法:library mode是需要进行串行。
- param_get_projection: too many projections defined
解决办法:begin projections random
原因:num_wann 与设置投影数不匹配。
解决办法:不加soc:num_wann 等于每种原子投影轨道数之和
soc:num_wann 等于两倍的每种原子投影轨道数之和
Gnuplot的报错信息”arc_bulk.gnu”, line 26: warning: No unsable data in this plot to auto-scale axis range
param_get_projection: Problem reading m state into string
解决办法:已解决Fe: s;px;py;pz;dz2;dxz;dyz;dx2-y2;dxy
不是Fe:s;p;d
- 能带拟合的不好可能是因为,投影的不对,还有核数和能带数的关系
解决办法:太马虎了,这样的问题肯定是K点写错了
能带布里渊区的宽度不一样有可能是wannier里规定的K点数并没有完全计算。
- num_iter = 2000 #wannier center 迭代次数
num_print_cycles = 40 #wannier center 迭代每40步输出一次
dis_num_iter = 1200 #解纠缠的迭代步数#
num_iter最小化过程中的总迭代次数。如果您希望生成投影wf而不是最大本地化的wf,则设置num_iter=0(请参阅教程中的示例8)?默认值为100
dis_mix_ratio = 1.d0 # 0.5<dis_mix_ratio<1, 默认值0.5
#在解纠缠过程中,要利用混合参数进行收敛,值为0.5是“安全”的选择。使用1.0(即不混合)通常会得到更快的收敛,但可能会导致 最小化,在某些情况下是不稳定的。
dis_conv_tol = 1.0E-10 # Delta < 1.000E-10 over 3 iterations
- dis_win_max = 15
dis_froz_max = 14
num_wan = 12
exclude_bands : 1-11,26 #在使用这个参数时,num_bands = 总能带数减去排除在外的能带数
num_bands = 14
#如果使用能量窗口规定想要拟合的能带区间,需要同时使用这个几个参数
wannier_plot_supercell =2 #在一个对应于“超胞”的网格上生成WFs
wannier_plot_list =2 #列举要画出WFs的序号,与wannier center 的序号是一致的
运行接口的情况有三种,一是选择投影能带数发生了改变,二是,需要写入wannier90.win的输入文件;三是需要在INCAR添加关键参数,输出wannier.x需要的文件。(仅仅是调节能量窗口是不需要重新运行接口的)
无没有projection是肯定没有amn的