abinit实战手册转载内容摘要:

方法来计算晶体的能带结构一般来说,要进行两个步骤。 这不论是采用 VASP、 PWSCF 还是 ABINIT 这些程序。 步骤为:先进行自洽的电子结构迭代得到自洽计算得到的电荷密度,然后读入这个自洽得到的电荷密度,进行非自洽的计算得到体系的本征值。 下面以立方的 ZrO2 晶体为例,采用 ABINIT 来计算。 下面采用 ndset 这个关键词,在输入文件中输入这两步的控制参数,一次性计算完成得到能带结构。 并对相关的相关的输入参数进行解释: 采用 的赝势是 : 和 ,输入文件 的内容为 INP OUT zroi zroo zro ./ ./ 此 文件的内容设置了主要输入文件的名称和赝势文件所在的目录。 主要输入文件 INP 的内容为(紫色标示): Crystalline ZrO2cubic ndtset 2 表示有两组控制参数:第一组控制参数用来设置自洽计算,第二组是非自洽的本征值计算 Dataset 1 : usual selfconsistent calculation kptopt1 1 自洽计算中设置 k 点网格取样的方法,表明采用 ngkpt 和 shfitk 来设置 k 点网格。 nshiftk1 4 使生成的 k 点进行平移。 shiftk1 ngkpt1 8 8 8 K 点网格取样,网格划分的分割数 prtden1 1 表明输出电荷密度文件。 tolvrs1 自洽计算收 敛的标准 iscf1 5 自洽迭代计算时,采用 CG 方法来优化有效势 Dataset 2 : 用来设置本征值计算时的参数 iscf2 2 表明非自洽计算 getden2 1 读入上一组数据进行自洽计算得到的电荷密度文件 kptopt2 5 负数,表示下面计算能带计算时,有 5 段特殊线 (由 6 个特殊 k 点来确定 ) ndivk2 10 12 18 8 8 每段特殊线上分几等份 kptbounds2 特殊 k 点的坐标 W point L point Gamma point X point W point Gamma enunit2 0 输出本征值时,本征值的单位,这里为 0 表示是以 Hatree 为单位给出 prteig2 1 表明输出本征值到文件中 Definition of the unit cell acell 3* 设置晶常数 rprim 设置计算原胞的基矢 (同上面的 acell 一起构成原胞的基矢 ) Definition of the atom types ntypat 2 原胞的原子种类数目 znucl 40 8 每类原子的核电荷数 natom 3 原胞中总的原子数目 typat 1 2*2 表示第一个原子是第一类的,后面两个原子是第二类的。 xred 以分数坐标给出原子的位置 Definition of the SCF procedure nband 30 在计算中考虑多少条能带 ecut 平面波切断动能 diemac 体系的宏观介电常数,给一个近似值就可以了。 nstep 60 自洽迭代时的最大步数 计算得到的本征值文件 zroo_DS2_EIG 内容为: Eigenvalues (hartree) for nkpt= 57 k points: kpt 1, nband= 30, wtk= , kpt= (reduced coord) kpt 2, nband= 30, wtk= , kpt= (reduced coord)。 把它们转换为 k 点的绝对值和本征值后,画图如下: 附 1 处理 abinit 计算得到的本征值文件 在采用 abinit 计算固体的能带结构时, abinit 输出的本征值文件格式为: Eigenvalues (hartree) for nkpt= 27 k points: kpt 1, nband= 20, wtk= , kpt= (reduced coord) kpt 2, nband= 20, wtk= , kpt= (reduced coord)。 第一行告诉你输出的本征值的单位是 Hatree,共计算了 27个特殊 k 点。 下面是分别给出每个 k点的的坐标,以及所计算的本征值。 但是要把这些本征值和 k 点的坐标对应起来画图,怎么办呢。 这里提供一个我根据 pwscf 程序包中的 一个代码改写后的小工具 ,它用来把每个 k点与前一个 k 点之间的间隔一一加起来得到的距离和本征值对应起来。 的内容如下: ! for ABINIT ! program prog real, allocatable :: e(:,:) real, allocatable :: k(:,:) real, dimension(3) ::k0,a character(len=32):: input, output character(len=32):: xx, yy write(6,*) 39。 number of calculated bands39。 read(5,*) nbands write(6,*) 39。 number of bands to be plotted39。 read(5,*) nbands2 write(6,*) 39。 number of kpoints39。 read(5,*) nk write(6,*) 39。 fermi level (eV)39。 read(5,*) ef write(6,*) 39。 name e 39。 read(5,*) input,output allocate(e(nk,nbands)) allocate(k(nk,3)) open(10,file=input, status=39。 old39。 ) open(11,file=output, status=39。 new39。 ) read(10,*) xx, xx,xx,xx, nkpt, xx, xx。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。