VASP报错及修复
这篇博客主要整理一下自己在VASP使用和学习过程中遇到的错误以及如何修复这些报错.{:.info} VERY BAD NEWS! internal error in subroutine IBZKPT:Reciprocal lattice and k-lattice belong to different class of lattices. Often results are still useful.. 这个报错主要是对称性设置,在INCAR中加入12ISYM = 0SYMPREC = 1E-8问题得到解决. 公众号相关内容均会在公众号进行同步,若对该Blog感兴趣,欢迎关注微信公众号。{:.info} Email yxliphy@gmail.com
利用Wannier90的hr数据计算边界态
这里整理一下通过读取紧束缚模型的hr数据,从而进一步通过之前学习到的迭代格林函数方法来计算边界态,同时也构建一个有限大小的格点来计算边界态,也算是达到对一个模型完整研究的目的。{:.info} 前言之前已经学习了如何将一个现有的动量空间中的模型,变换成Wannier90所输出的tight binding的数据,可以参考从紧束缚模型出发构建WannierTools需要的数据这个Blog中的内容,因为现有一些程序是可以直接利用这些数据进行计算的,但是同样有时候需要利用实空间的tight binding数据来进行动量空间中的一些计算,这里就想整理一个比较通用的脚本,可以方便的将一个Wannier90输出的TB模型的数据,通过Fourier变换从而来得到动量空间中的哈密顿量,这样可以方便自己进行后面的一些计算,同时也可以只对某一个方向进行部分Fourier变换,从而构建一个半无限或者有效大小的体系来计算边界态,而半无限大系统计算边界态则是利用迭代格林函数的方法进行计算,有效大小体系的边界态我也会在后面的Blog中整理。 数据结构分析这里就以最熟悉的BHZ模型为例,借用从紧束缚模型出发构建WannierTools需要的数据这篇Blog中的方法,来构建 H(\mathbf{k})=(m_0-t_x\cos k_x-t_y\cos k_y)\sigma_z+ A_x\sin k_x\sigma_xs_z+A\sin...
Irvsp学习笔记
这里整理一下自己学习使用Irvsp的过程,在捋清楚它的计算流程的同时,也希望先学会使用这个对称性分析的工具,希望之后也能做一些相关方面的工作.{:.info}对于拓扑材料的计算,在判断是否是拓扑的,通常可以利用高对称点的信息来判断,比如对于存在时间反演和空间反演的的系统,可以通过时间反演不变动量点的宇称来直接判断拓扑性质,所以通常都需要计算高对称点的对称操作的本征值,这个就需要借助一些外部的工具来进行计算,比如Irvsp,这里就想学习一下这个工具是如何使用的. 下载安装 首先在Irvsp的网站上下载下来,然后解压上图所示的这个压缩文件,得到src_irvsp_v2_release这个文件夹,其中的内容如下 红色选中的则是下载下来的文件中包含的可执行文件,就可用来计算高对称点上的信息,不过先要计算vasp计算才可以.这里有一个example文件夹,其中就包含了一些给出的例子,这里就学习一下其中Bi这个文件中的内容. 自洽计算自洽计算的输入文件如下图所示 能带计算在做完了自洽计算之后,利用计算得到的波函数和电荷文件来计算能带,输入文件如下 能带计算完整之后就可以在这些能带K点上利用Irvsp来计算其高对称点的一些相关信息. Irvsp计算这里首先要准备好能带计算完成的一些输出文件,就可以在这些K点上来计算对称性的信息,这里主要的输入就是确定计算材料的空间群,然后执行Irvsp就可以 1irvsp -sg 166 > outir 执行完成之后就可以在outir得到相关的信息,其中会包含一些晶格信息,还有空间群的对称操作以及能带简并度能一些信息 这里需要设置一个东西 记得执行一下configure.sh这个文件,它会配置好kLittleGroups这个文件的位置,这样就不会出现文件位置有问题了. 公众号相关内容均会在公众号进行同步,若对该Blog感兴趣,欢迎关注微信公众号。{:.info} Email yxliphy@gmail.com
cylinder结构上的边界态理论
这里整理一下如何在一个方向上开边界的时候,如何求解边界态理论。{:.info} 前言之前已经整理过在动量空间中求解边界态理论,这里整理一下利用另外的一种方法来求解边界态理论,主要就是将哈密顿量变换到cylinder结构上,在一个有效大小的方向上计算边界态理论,主要的参考有效边界理论(space部分)这篇Blog中的哈密顿量来进行研究。文章中的主要内容都是参考Majorana Corner Modes in a High-Temperature Platform这篇文章中的内容。 模型这里采用文章中模型来进行求解 H(\mathbf{k})=(m_0-t_x\cos k_x-t_y\cos k_y)\sigma_z\tau_z+A_x\sin k_x\sigma_xs_z+A_y\sin k_y\sigma_y\tau_z+[\Delta_0-\Delta_1(\cos k_x+\cos k_y)]s_y\tau_y首先沿着一个方向进行傅立叶变换,使得一个方向在动量空间另外一个方向在实空间,将哈密顿量表示为 \begin{equation} \begin{aligned} H=&\sum_{x,k_y}\Psi^\dagger_{x,k_y}[(m_0-t_y\cos k_y)\sigma_z\tau_z+A_y\sin k_y\sigma_y\tau_z+(\Delta_0-\Delta_1\cos...
BBH模型的Wilson loop及Nested Wilson loop计算
这里整理一下高阶拓扑的BBH模型的一些拓扑性质的计算,包括边界态,Wilson loop以及Nested Wilson loop计算.{:.info} Wilson loop这个计算没有什么好说的,在其他模型里面也已经做过很多次了,比如BHZ模型Wilson loop计算这篇博客,废话不多说直接上代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104import numpy as npimport matplotlib.pyplot as pltdef Pauli(): s0 = np.array([[1,0],[0,1]]) sx = np.array([[0,1],[1,0]]) sy = np.array([[0,-1j],[1j,0]]) sz = np.array([[1,0],[0,-1]]) return s0,sx,sy,sz#--------------------------------------------------------------def hamset(kx,ky): s0 = np.zeros([2,2],np.complex) sx = np.zeros([2,2],np.complex) sy = np.zeros([2,2],np.complex) sz = np.zeros([2,2],np.complex) ham = np.zeros([4,4],np.complex) gamx = 0.5 gamy = 0.5 lamx = 1.0 lamy = 1.0 s0,sx,sy,sz = Pauli() ham = (gamx + lamx*np.cos(kx))*np.kron(sx,s0) + lamx*np.sin(kx)*np.kron(-sy,sz) +...
读取POSCAR构建实空间点阵
这里想整理利用VASP的POSCAR来构建一个实空间的点阵,在构建出实空间的点阵上再进行一些其他的操作.{:.info} 前言在学习固体物理的过程中,其实实空间中的点阵就是利用晶格矢量来构建实空间中的周期晶格的,公式如下 \mathbf{R}=i\cdot\mathbf{a}_1+j\cdot\mathbf{a}_2+k\cdot\mathbf{a}_3\quad i,j,k\in\mathbb{Z}这里的$\mathbf{a}_1,\mathbf{a}_2,\mathbf{a}_3$就是实空间中的元胞基矢,自己在之前的学习过程中,经常使用到的都是在正方点阵上的模型研究,也就是说 \mathbf{a}_1=(1,0,0)\quad\mathbf{a}_2=(0,1,0)\quad\mathbf{a}_3=(0,0,1)在这种情况下其实也不太需要使用晶格基矢来构建点阵,但是如果涉及到的是其它形状的点阵,比如graphene的点阵,如果还是用正方点阵的思路来构造格点,那么在选择最近邻和次近邻的时候,格点索引并不是很方便,所以如何是利用晶格基矢来构建实空间的点阵,那么最近邻和次近邻只需要关注距离就可以,而不用取关心比较复杂的格点的索引,通过点阵之间的距离再反推其对应的索引,就可以比较方便的建实空间的哈密顿量. 读取POSCAR1234567891011121314151617181920212223import numpy as npdef Read_POSCAR(): file = open('POSCAR') comment = file.readline() # 第一行是注释,用来解释说明这个体系是啥 lattice_constant = file.readline() # 第二行是晶格常数 v1 = file.readline() # 第3,4,5行是三个晶格基矢 v2 = file.readline() v3 = file.readline() v1 = [float(x) for x in v1.strip().split()] # 将读取到的字符串晶格矢量转换成浮点数 v2 = [float(x) for x in v2.strip().split()] v3 =...