科学网

 找回密码
  注册

tag 标签: VASP

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

lev00 and TETR
qlm2001 2012-9-18 20:22
Two methods to compile lev00 Method 1: lev00直接用gfortran编译就可以,经测试,gfortran编译正常。 LIBS=-lgfortran -lgfortranbegin FCOMPL= gfortran$(DEBUG) Method 2: 采用Intel编译器, 去掉 FCOMPL= ifort -debug -check -traceback -fpe0 -warn -Vaxlib $(DEBUG) 一行中 -check选项后面的几项 FCOMPL= ifort -debug -check $(DEBUG) then, add LIBS = -L/opt/intel/mkl/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64 ---------------------------------------------------------- TETR ====================== LIBS = -L/opt/intel/mkl/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64 FCOMPL = ifort -Vaxlib $(DEBUG) finally set environment variable =================================
8553 次阅读|0 个评论
[转载]VASP与电荷密度差
热度 1 dwd0826 2012-9-16 14:38
[转载]VASP与电荷密度差
一般分为:差分电荷密度图(deformation charge density),二次差分电荷密度图(difference charge density) 两者的区别有很多种说法,其中一种定义认为: 差分电荷定义为成键后的电荷密度与对应的点的原子电荷密度之差。通过差分电荷密度的计算和分析,可以清楚地得到在成键和成键电子耦合过程中的电荷移动以及成键极化方向等性质。 “二次”是指同一个体系化学成分或者几何构型改变之后电荷的重新分布。 如何做对电荷密度做差,目前有两个版本的公式: 个人认为公式(1)和差分电荷密度的定义比较吻合,但是这种方法会产生很多干扰信息,而文献中常用的是公式(2)。 这里主要是讨论在VASP中如何得到用来分析成键前后电荷转移的电荷密度差。 此时电荷密度差定义为: delta_RHO = RHO_sc - RHO_atom 其中 RHO_sc 为自洽的面电荷密度,而 RHO_atom 为相应的非自洽的面电荷密度,是由理想的原子周围电荷分布堆彻得到的,即为原子电荷密度的叠加(a superposition of atomic charge densities)。 不同晶面的 RHO_sc 可由自洽计算的CHG或CHGCAR得到; 而计算 RHO_atom 所需的 CHG 或 CHGCAR 可由下述非自洽计算得到: 仍使用原来自洽计算时的四个输入文件,但INCAR中需要设置 ICHARG=12 和 NELM=0,其他设置不变。 需要特别注意的,应保持前后两次计算(自洽和非自洽)中的 FFT-mesh 一致。因为,只有维数一样,我们才能对两个RHO作相应的矩阵相减。不过,只要按上一段提到的设置方法做就行了,无须特别增加别的设置。 数据处理: 矩阵相减:使用MatLab 或是自已写个小程序。 作图:Origin 或 MatLab。 如何用VASP做电荷密度差图? ① 对优化后的结构做静态自洽计算 要注意的是,AB、A和B要分别放在同样大小的空间格子中并保证A和B与AB中相应坐标不变,计算时也要保证三次自洽计算所采用的FFT mesh 一致(NGXF,NGYF,NGZF)。 INCAR中几个注意的参数: IBRION = -1;NSW = 0; NGXF,NGYF,NGZF ② 做差 将第一步得到的三个CHGCAR文件依次命名为CHGCAR1、CHGCAR2、CHGCAR3,采用脚本程序按照公式②对三个文件做差,得到CHGdiff文件。 ③ 视图 3D显示可以将得到的CHGdiff文件添加vasp后缀(CHGdiff.vasp),用VESTA读取,另外VESTA也可以做2D切面,缺点是没有标度。 2D的显示也可以用lev00去做切面,然后用origin作图,得到的2D面电荷密度差带有标度便于分析(具体做法可参阅lev00说明书)。 ④ 以CO为例 图1左图是CO的电荷密度差黄色部分表示电荷密度增加,蓝色表示电荷密度减少,右图是Gaussian模拟的CO的HOMO和LUMO轨道,可以看出黄色部分对应HOMO,蓝色部分对应LUMO。 图2 是用lev00切面,origin做图得到的CO二维图示。 图1 图2 图3 PS: 作差所用的各种工具网上都可以找到,不再上传。
8675 次阅读|1 个评论
vasp的分子动力学模拟
热度 1 dwd0826 2012-9-13 19:34
vasp做分子动力学的好处,由于vasp是近些年开发的比较成熟的软件,在做电子scf速度方面有较好的优势。 缺点:可选系综太少。 尽管如此,对于大多数有关分子动力学的任务还是可以胜任的。 主要使用的系综是 NVT 和 NVE。 下面我将对主要参数进行介绍! 一般做分子动力学的时候都需要较多原子,一般都超过100个。 当原子数多的时候,k点实际就需要较少了。有的时候用一个k点就行,不过这都需要严格的测试。通常超过200个原子的时候,用一个k点,即Gamma点就可以了。 INCAR: EDIFF 一般来说,用1E-4 或者1E-5都可以,这个参数只是对第一个离子步的自洽影响大一些,对于长时间的分子动力学的模拟,精度小一点也无所谓,但不能太小。 IBRION=0 分子动力学模拟 IALGO=48 一般用48,对于原子数较多,这个优化方式较好。 NSW=1000 多少个时间步长。 POTIM=3 时间步长,单位fs, 通常1到3. ISIF=2 计算外界的压力. NBLOCK= 1 多少个时间步长,写一次CONTCAR,CHG和CHGCAR,PCDAT. KBLOCK=50 NBLOCK*KBLOCK 个步长写一次 XDATCAR. ISMEAR=-1 费米迪拉克分布. SIGMA =0.05 单位:电子伏 NELMIN=8 一般用6到8, 最小的电子scf数.太少的话,收敛的不好. LREAL=A APACO=10 径向分布函数距离, 单位是埃. NPACO=200 径向分布函数插的点数. LCHARG=F 尽量不写电荷密度,否则CHG文件太大. TEBEG=300 初始温度. TEEND=300 终态温度。 不设的话,等于TEBEG. SMASS -3 NVE ensemble;-1 用来做模拟退火。大于0 NVT 系综。 (http://cms.mpi.univie.ac.at/vasp/vasp/node95.html#incar) This file determines the kind of job which VASP will perform; single point energy calculation (SPE), geometry optimisation (GO - coarse/fine), molecular dynamics (MD - nve/nvt), spin polarised calculation (mag). Examples can be found in /home/cs/model/vasp_util. Example; INCAR.spe $system = single point energy calc NELMIN = 4 minimum number of electronic SCF cycles EDIFF = 1E-6 stooping criterion for electronic convergence NSW = 0 number of ionic shifts ISMEAR = 0 treatment of partial occupancies of electronic levels Example; INCAR.coarse $system = coarse geom optimisation NELMIN = 4 EDIFF = 1E-2 EDIFFG = -1E-2 stopping criterion for forces Fmax 0.01 eV/A IBRION = 2 minimisation method, good away from minimum ISIF = 3 optimise coords and cell pars LREAL =.TRUE. do calc in real space - quicker ISTART = 0 start with a random wavefunction NSW = 20 maximum of 20 ionic shifts ISMEAR = 0 LCHARG =.FALSE. don't write CHG and CHGCAR files Example; INCAR.fine $system = geom optimisation NELMIN = 4 EDIFF = 1E-6 EDIFFG = -1E-4 PREC = high increase energy cut-off by 25% IBRION = 1 minimisation method, good close to minimum ISIF = 3 NSW = 50 ISMEAR = 0 LCHARG=.FALSE. Example; INCAR.mag $system = collinear mag structure calc IBRION = 1 ISIF = 3 NPAR = 1 forces mag structure to be written in output file EDIFF = 1E-6 EDIFFG = -1E-3 PREC = high RWIGS = 1.376 0.900 1.233 1.302 radii for spherical integration of spin density, 1 per atom ISPIN = 2 do spin polarised calc MAGMOM = 24*0 5 -5 -5 5 initial mag moments for 28 atoms NSW = 20 Example; INCAR.nve $system = molecular dynamics ALGO = V MAXMIX = 40 IBRION = 0 do molecular dynamics NSW = 6000 number of time steps NBLOCK = 1 store structure every time step POTIM = 3.0 time step 3fs TEBEG = 673 target temperature ISYM = 0 turn off symmetry SMASS = -3 NVE ensemble LREAL =.TRUE. LCHARG =.FALSE. NELMIN = 4 PREC = LOW reduce energy cut-off by 25% for MD ISTART = 0 ISMEAR = 0; SIGMA=0.1 Example; INCAR.nvt $system = molecular dynamics ALGO = V MAXMIX = 40 IBRION = 0 NSW = 6000 NBLOCK = 1 POTIM = 3.0 TEBEG = 673 ISYM = 0 SMASS = 2 NVT ensemble, value determines frequency of coupling to heat bath LREAL =.TRUE. LCHARG =.FALSE. NELMIN = 4 PREC = LOW ISTART = 0 ISMEAR = 0; SIGMA=0.1 Example; INCAR.scale $system = molecular dynamics quench ALGO = V MAXMIX = 40 IBRION = 0 NSW = 50 NBLOCK = 5 rescale temperature every 5 steps POTIM = 3.0 TEBEG = 683 initial temp TEEND = 673 final temp ISYM = 0 SMASS = -1 MD with velocity scaling LREAL =.TRUE. LCHARG =.FALSE. NELMIN = 4 PREC = LOW ISTART = 0 ISMEAR = 0; SIGMA=0.1
22754 次阅读|1 个评论
[转载]VASP计算HOMO、LUMO轨道
dwd0826 2012-9-7 15:48
VASP 中画部分电荷密度 1.首先做一个静态 计算 ,得到WAVECAR , 2。在静态计算的基础上,加入如下 参数 : LPARD =.TRUE. NBMOD =4 EINT =-0.5 0.5 IBAND =130 140 KPUSE =1 2 5 LSEPB =.TRUE. LSEPK =.TRUE. 其实,大家关心的往往是HOMO 和LUMO 的轨道分布。只要在IBAND 中指定HOMO 和LUMO 对应的轨道系数即可。 参数介绍见 用VASP进行Partial Charge分析实 例 另一篇文章 VASP可视化分子轨道 转自: http://xueshu.anxue.net/thread-150394-1-1.html 【原创】最新版vaspmo (v0.1) ――可视化VASP分子轨道 可视化效果图,请参见旧贴: http://emuch.net/bbs/viewthread.php?tid=1818606 http://emuch.net/bbs/viewthread.php?tid=1831558 程序名称: vaspmo 版本: v0.1 作者: Yang Wang ( yangwang2010@gmail.com ) 发布时间: 2010年2月3日 版权声明: 本程序的算法和设计思路,以及代码编写都是Yang Wang的原创。任何个人 或团体不得将此程序用于任何商业用途。假如你在发表论文或学术报告中 用到该程序,请务必转引来源和作者。 任何疑问或反馈,请联系作者: yangwang2010@gmail.com 用途: 读入VASP计算得到的PROCAR和CONTCAR文件,输出Gaussian结果文件。该 文件能够被常用的量子化学可视化软件(如Molekel、Chemcraft、Gabedit 和Molden等)读取,进而绘制和观看体系的分子轨道。有些软件还能导出 cube文件(如Chemcraft和Molden等),从而又能被很多支持cube格式文件 的可视化软件所识别。 目前本程序适用于元素周期表中从氢到铋的元素(但不包括除了镧之外的镧 系其他元素),共69种元素。 新版本信息: 目前的v0.1版本纠正了v0.0版本的一些bug: 1) 坐标转换错误。 2) Ta和Bi元素名称错误。 新添功能: 1) 支持Chemcraft、Molden和Gabedit可识别的格式。 2) 隐藏或缩放指定某些原子的轨道。 3) 根据指定k点和输出格式自动命名输出文件。 4) 用户可以自定义输出文件名。 编译方法: 本程序只包含一个源文件:vaspmo.c,是用标准C语言编写的,因此任何标 准C编译器或C++编译器都能够编译。例如,在Linux下可使用如下命令编译: gcc -o vaspmo -lm vaspmo.c 使用方法: 1. VASP计算 1) PROCAR文件 VASP.3.2以上版本可以将体系波函数投影到以各个原子为中心的球谐函 数上去,从而得到各个原子轨道的相系数。但在VASP.3.X版本中,输出 文件的格式只能是PROOUT,而不是PROCAR文件。目前vaspmo程序不能处 理PROOUT文件,只能识别PROCAR文件。 VASP.4.X以上版本都可以计算输出PROCAR文件,具体方法是需要在INCAR 输入文件中添加并设置要害词LORBIT和/或RWIGS。 假如你使用VASP.4.6以上版本,一个最简单的方法就是在INCAR中添加: LORBIT = 12 假如你设置LORBIT = 2,则还需要设置各个离子类型的RWIGS大小。假如 注重,在VASP.4.X以上VASP.4.2以下的版本中,只能设置LORBIT = 2,因 此要计算轨道就不得不要设置RWIGS。 更具体的说明请参见VASP使用手册: http://cms.mpi.univie.ac.at/vasp/vasp/node127.html 2) CONTCAR文件 i. 为了使用方便,不得不使用新的CONTCAR文件格式来运行vaspmo程序。如 果你的CONTCAR文件格式是旧的,只需要手工添加一行元素类型信息即可。 具体方法见下。 CONTCAR文件的格式因VASP版本而略有不用。在VASP.5.X以上的版本中, CONTCAR文件多增加了一行,提供了元素类型信息。 下面是新版本的CONTCAR文件示例: ------------------------------------------------------------- Title 1.00000000000000000 5.1475600000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 12.8688950000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 30.0000000000000000 C H S Cu 6 4 4 40 Selective dynamics Direct ...... ...... ------------------------------------------------------------- 和旧格式相比,仅仅多出了C H S Cu一行。所以,假如你 使用VASP.4.X计算得到的CONTCAR文件,只需手工添加这一行信息即可。 ii. 目前的vaspmo程序要求CONTCAR文件中的坐标格式是分数坐标形式, 即“Direct”。 2. vaspmo使用方法 1) 程序运行的当前目录下不得不要有CONTCAR和PROCAR文件。 2) 在命令行运行的命令是: vaspmo 选项说明: -o 输出文件名 指定输出文件名。默认是VASPMO_K***.g03(当输出Molekel 可识别的格式时),或VASPMO_K***.out(当输出其他软件 可识别的格式时)。 -c --chemcraft 输出Chemcraft、Molden和Gabedit可识别的格式,这也是程序 的默认输出格式。 -m --molekel 输出Molekel可识别的格式。 -k 正整数 指定输出的哪一个K点的所有能级轨道。 -k all 输出所有K点的所有能级轨道。 -l 原子列表文件名 去掉或缩放某些原子的轨道。这些原子和相应的缩放系数是在 一个“原子列表文件”中定义的。 -h --help 显示帮助,然后退出程序。 3) 关于原子列表文件: 有时候我们需要缩放或隐藏(缩放系数为零)个别原子的轨道。为此, 我们首先需要建立一个原子列表文件,在这个文件中我们定义原子的序号 和相应的缩放系数。分行书写,每一行只能包含一次定义,一次定义可以 是如下三种形式中的一种: 原子序号 原子序号 缩放因子 原子序号1 原子序号2 缩放因子 其中原子序号是一个正整数,是该原子在CONTCAR中出现的顺序数。原子序号1 和原子序号2定义的是一群原子,即范围从原子序号1到和原子序号2。因此, 原子序号1不得不小于等于原子序号2。缩放因子可以是任何一个数值,取零则意味 着隐藏轨道,去负值则意味着反相。 以上三种定义中,第一种形式是隐藏一个原子的所有轨道,第二种形式是缩放 一个原子的所有轨道,第三种形式是缩放一群原子的所有轨道。 注重事项: 本程序vaspmo导出的分子轨道属于相当*定性*的结果,只提供比较粗糙的物理或 化学图像,不能用于进一步的定量分析或计算。 反馈和建议: 欢迎任何bug报告和改进建议,请发电子邮件至: yangwang2010@gmail.com 你也可以将你的CONTCAR或PROCAR作为附件发送给我。 非凡注重:假如你的求助,在你自己仔细阅读在上述的使用说明后都能得到解决, 请恕我拒绝回复。 附件1: 呵! release_vaspmo_v0.1.rar (2010-02-03 21:30:04, 84.31 K)
8124 次阅读|0 个评论
[转载] 用VASP进行Partial Charge分析实例
热度 1 dwd0826 2012-9-7 15:42
在这篇文章中,我将首先介绍Partial Charge的概念,以及如何用VASP具体的计算Partial Charge。首先,所谓的Partial Charge是针对与Total Charge来说的,指的是某个能量范围、某个K点或者某个特定的态所对应的电荷密度。在文献中最常见的是价带顶部,导带底部,表面态或者局域态所对应的Partial Charge。通过分析这些态所对应的Partial Charge,可以得到体系的一些性质,比如局域态具体的是局域在哪个原子上等。我将通过具体的例子说明如何用VASP进行Partial Charge Analysis。 进行Partial Charge Analysis的第一步是进行自洽的计算,得到体系的电子结构。这一步的计算采用通常的INCAR和KPOINTS文件。在自洽计算结束后,我们需要保存WAVECAR文件。(通过在INCAR文件中设置LWAVE=TRUE实现)在这个例子中,假设我们需要计算一个硅纳米线的导带和价带的Partial Charge。硅纳米线的结构如下: http://www.quantumchemistry.net/Experience/UploadFiles_6872/200603/20060331155154521.jpg 第二步是画出能带结构,以决定你需要画哪条能带的那个K点的态所对应的Partial Charge。关于具体如何用VASP画能带,请参见用VASP4.6计算晶体硅能带实例一文。我们得到硅纳米线的能带结构如下: 画能带时有些小技巧。你可以用一些支持列模块的编辑器,如UltraEdit,将OUTCAR里的各个K点所对应的本征值粘贴到Origin中。这一步完成后,在Origin中做一个矩阵转置,然后将K点坐标贴到第一列,并将其设为X坐标。如此画出来的基本上就是能带图了。在Origin中可以通过设置纵轴范围来更加清楚的区分费米能级附近的各条能带。如上的硅纳米线所对应的能带结构图如下: http://www.quantumchemistry.net/Experience/UploadFiles_6872/200603/20060331155540648.jpg 决定画哪条能带,或者那些感兴趣的K点之后,有如下几种方法计算不同的Partial Charge。如果你希望计算价带顶端的Partial Charge,则需要首先通过能带结构图确定价带的能带标号。需要注意,进行Partial Charge分析必须要保留有自洽计算的WAVECAR才可以。 第一种Partial Charge分析的INCAR ISTART = 1 job : 0-new 1-cont 2-samecut ICHARG = 1 charge: 1-file 2-atom 10-const LPARD=.TRUE. IBAND= 20 21 22 23 KPUSE= 1 2 3 4 LSEPB=.TRUE. LSEPK=.TRUE. 这样的INCAR给出的是指定能带,指定K点所对应的Partial Charge。分析导带、价带等的Partial Charge特性,通常采用的都是这种模式。 第二种Partial Charge分析的INCAR ISTART = 1 job : 0-new 1-cont 2-samecut ICHARG = 1 charge: 1-file 2-atom 10-const LPARD=.TRUE. EINT = -10.3 -5.1 LSEPB=.FALSE. LSEPK=.FALSE. 这样的INCAR给出的是在 能量之间的Partial Charge。这种模式适合于分析某个能量区间内的波函数的性质。 第三种Partial Charge分析的INCAR ISTART = 1 job : 0-new 1-cont 2-samecut ICHARG = 1 charge: 1-file 2-atom 10-const LPARD=.TRUE. NBMOD=-3 EINT = -1 LSEPB=.FALSE. LSEPK=.FALSE. 这样的INCAR给出的是从 能量之间的Partial Charge。这种模式最利于分析费米面附近的波函数的性质。 用第一种方法,我们可以得到硅纳米线价带顶部和导带底部的Partial Charge如下: http://www.quantumchemistry.net/Experience/UploadFiles_6872/200603/20060331155753136.jpg • LPARD: Evaluate partial (band and/or k-point) decomposed charge density. We want to stress again, that the wavefunctions read from WAVECAR must be converged in a separate prior run. If only LPARD is set (and none of the tags discussed below), the total charge density is evaluated from the wavefunctions and written to CHGCAR. • There are several ways how to specify for which bands the charge density is evaluated: In general the input lines with IBAND, EINT and NBMOD control this respect of the routine: • IBAND: Calculate the partial charge density for all bands specified in the array IBAND. If IBAND is specified in the INCAR file and NBMOD is not given, NBMOD is set automatically to the size of the array. If IBAND is for instance IBAND= 20 21 22 23 the charge density will be calculated for bands 20 to 23. • EINT: Specifies the energy range of the bands that are used for the evaluation of the partial charge density. Two real values should be given, if only one value is specified, the second one is set to ǫf . If EINT is given and NBMOD is not specified, NBMOD is set automatically to -2. • NBMOD: This integer variable can take the following values 0 Number of values in the array IBAND. If IBAND is specified, NBMOD is set automatically to the correct value (in that case NBMOD should not be set manually in the INCAR file) 0 Take all bands to calculate the charge density, even unoccupied bands are taken into account. -1 Calculate the total charge density as usual. This is the default value if nothing else is given. -2 Calculate the partial charge density for electrons with there eigenvalues in the range specified by EINT. -3 The same as before, but the energy range is given vs. the Fermi energy. • KPUSE: KPUSE specifies which k-points are used in the evaluation of the partial dos. KPUSE is an array of integer values. KPUSE= 1 2 3 4 means that the charge density is evaluated and summed for the first four k-points. Be careful: VASP changes the kpoint weights if KPUSE is specified. • LSEPB: Specifies whether the charge density is calculated for every band separately and written to a file PARCHG.nb.⋆ (TRUE) or whether charge density is merged for all selected bands and write to the file PARCHG.ALLB.⋆ or PARCHG. Default is FALSE. • LSEPK: Specifies whether the charge density of every k-point is write to the files PARCHG.⋆.nk (TRUE) or whether it is merged (FALSE) to a single file. If the merged file is written, then the weight of each k-point is determined from the KPOINTS file, otherwise the kpoints weights of one are chosen.
4182 次阅读|1 个评论
[转载]VASP包含范德瓦尔斯力的计算
dwd0826 2012-9-7 15:31
转自: http://cms.mpi.univie.ac.at/vasp/vasp/vdW_DF_functional_Langreth_Lundqvist_et_al.html vdW-DF functional of Langreth and Lundqvist et al.The vdW-DF proposed by Dion et al. is a non-local correlation functional that approximately accounts for dispersion interactions . In VASP the method is implemented using the algorithm of Roman-Perez and Soler which transforms the double real space integral to reciprocal space and reduces the computational effort. Several propsed versions of the method can be used : the original vdW-DF , vdW-DF with exchange functionals optimised for the correlation part , and the vdW-DF2 of Langreth and Lundqvist groups . N.B. : This feature has been implemented by J. Klimeš. If you make use of the vdW-DF functionals presented in this section, we ask that you cite the following paper: J. Klimeš, D. R. Bowler, and A. Michaelides, Phys. Rev. B 83 , 195131 (2011). Correlation functionals The method is invoked by setting LUSE_VDW = .TRUE. Moreover, the PBE correlation correction needs to be removed since only LDA correlation is used in the functionals. This is done by setting AGGAC = 0.0000 The two tags above need to be used for all the following functionals. Exchange functionals To use the different exchange functionals, the GGA tag needs to be set appropriately. The original version of Dion et al uses revPBE which can be set by GGA = RE More accurate exchange functionals for the vdW correlation functional have been proposed in and . They can be used by setting GGA = OR for optPBE, GGA = BO PARAM1 = 0.1833333333 PARAM2 = 0.2200000000 for the optB88 functional , or GGA = MK PARAM1 = 0.1234 PARAM2 = 1.0000 for the optB86b functional . For the vdW-DF2 functional the rPW86 exchange functional is used: GGA = ML moreover, the vdW functional needs to be changed to the vdW2 correlation which requires only a change of a parameter: Zab_vdW = -1.8867 An overview of the performance of the different approaches can be found for example in for gas phase clusters and in for solids. Important remarks : The method needs a precalculated kernel which is distributed via the VASP download portal ( VASP - src - vdw_kernel.bindat ) and on the ftp server ( vasp5/src/vdw_kernel.bindat ). If VASP does not find this file, the kernel will be calculated. This, however, is rather demanding calculation. The kernel needs to be either copied to the VASP run directory for each calculation or can be stored in a central location and read from there. The location needs to be set in routine PHI_GENERATE. This does not work on some clusters and the kernel needs to be copied into the run directory in such cases. Currently the evaluation of the vdW energy term is not done fully within the PAW method but the sum of the pseudo-valence density and partial core density is used. This approximation works rather well, as is discussed in , and the accuracy generally increases when the number of valence electrons is increased or when harder PAW datasets are used . For example, for adsorption it is recommended to compare the adsorption energy obtained with standard PAW datasets and more-electron POTCARs for both PBE calculation and vdW-DF calculation to asses the quality of the results. The optimisation of the cell (ISIF=3 and higher) is currently not possible. The spin polarised calculations are possible, but strictly speaking the non-local vdW correlation is not defined for spin-polarised systems. For spin-polarised calculation the non-local vdW correlation energy is evaluated on the sum of the spin-up and spin-down densities. The evaluation of the vdW energy requires some additional time. Most of it is spent on performing FFTs to evaluate the energy and potential. Thus the additional time is determined by the number of FFT grid points in the calculation, basically size of the simulation cell. It is almost independent on the number of the atoms in the cell. Thus the relative cost of the vdW-DF method depends on the ``filling" of the cell and increases with the amount of vacuum in the cell. The relative increase is high for isolated molecules in large cells, but small for solids in smaller cells with many k-points. This feature has been implemented by J. Klimeš. If you make use of the vdW-DF functionals presented in this section, we ask that you cite the following paper: J. Klimeš, D. R. Bowler, and A. Michaelides, Phys. Rev. B 83 , 195131 (2011). http://cms.mpi.univie.ac.at/vasp/vasp/DFT_D2_method_Grimme.html#tab:grimme DFT-D2 method of Grimme LVDW= .TRUE. | .FALSE. (Available as of VASP.5.2.11) Default: LVDW=.FALSE. Popular density functionals are unable to describe correctly van der Waals interactions resulting from dynamical correlations between fluctuating charge distributions. A pragmatic method to work around this problem has been given by the DFT-D approach , which consists in adding a semi-empirical dispersion potential to the conventional Kohn-Sham DFT energy: (90) In the DFT-D2 method of Grimme , the van der Waals interactions are described via a simple pair-wise force field, which is optimized for several popular DFT functionals. The dispersion energy for periodic systems is defined as (91) where the summations are over all atoms and all translations of the unit cell , the prime indicates that for , is a global scaling factor, denotes the dispersion coefficient for the atom pair , is a position vector of atom after performing translations of the unit cell along lattice vectors. In practice, terms corresponding to interactions over distances longer than a certain suitably chosen cutoff radius contribute only negligibly to and can be ignored. The term is a damping function (92) whose role is to scale the force field such as to minimize contributions from interactions within typical bonding distances. Combination rules for dispersion coefficients and vdW radii are (93) and (94) respectively. The global scaling parameter has been optimized for several different DFT functionals such as PBE ( ), BLYP ( ), and B3LYP ( ). The DFT-D2 method can be activated by setting LVDW=.TRUE. Optionally, the forcefield parameters can be controlled using the following flags (the default values are listed): VDW_RADIUS = 30.0 cutoff radius () for pair interactions VDW_SCALING = 0.75 global scaling factor VDW_D = 20.0 damping parameter VDW_C6 = ,... parameters ( ) for each species defined in POSCAR VDW_R0 = ,... parameters () for each species defined in POSCAR The default values for VDW_C6 and VDW_R0 are compiled in Tab. 2 . As the potential energy, interatomic forces as well as stress tensor are corrected by adding contribution from the forcefield, simulations such as the atomic and lattice relaxations, molecular dynamics, and vibrational analysis can be performed. The number of atomic pairs contributing to and the estimated vdW energy are written in OUTCAR (check lines following the expression 'Grimme's potential'). The forces and stresses written in OUTCAR contain the vdW correction but the corrected energy should be read from OSZICAR (energies in OUTCAR do not contain the vdW term). IMPORTANT NOTE: The defaults for VDW_C6 and VDW_R0 are defined only for the first five rows of periodic table of elements (see Tab. 2 ) - if the system contains other elements the user must provide the corresponding parameters. Table 2: Parameters used in the empirical force-field of Grimme . Element C R Element C R Jnm mol Jnm mol H 0.14 1.001 K 10.80 1.485 He 0.08 1.012 Ca 10.80 1.474 Li 1.61 0.825 Sc-Zn 10.80 1.562 Be 1.61 1.408 Ga 16.99 1.650 B 3.13 1.485 Ge 17.10 1.727 C 1.75 1.452 As 16.37 1.760 N 1.23 1.397 Se 12.64 1.771 O 0.70 1.342 Br 12.47 1.749 F 0.75 1.287 Kr 12.01 1.727 Ne 0.63 1.243 Rb 24.67 1.628 Na 5.71 1.144 Sr 24.67 1.606 Mg 5.71 1.364 Y-Cd 24.67 1.639 Al 10.79 1.716 In 37.32 1.672 Si 9.23 1.716 Sn 38.71 1.804 P 7.84 1.705 Sb 38.44 1.881 S 5.57 1.683 Te 31.74 1.892 Cl 5.07 1.639 I 31.50 1.892 Ar 4.61 1.595 Xe 29.99 1.881
13871 次阅读|0 个评论
vasp compilation
qlm2001 2012-8-17 15:52
Platform: Dell T7500 workstation; vasp 4.638; Ubuntu 12.04 (also ubuntu 11.04) software for compilation: gcc; gfortran(maybe necessary); ifort MKL (l_fcompxe_intel64_2011.9.293); openmpi-1.60 for parallelization version Procedures as follows 1. install ifort + mkl 2. make libintel64 3. install openmpi 4. make vasp.4.lib 5. make vasp Please reference to attachment file for detailed procedures and Makefiles both for series and parallel version compilaton process series.zip ; parallelization.zip
4233 次阅读|0 个评论
[转载][zhuanzai] VASP 5.2 parallel compilation
qlm2001 2012-7-18 12:42
I successfully installed VASP 5.2.12 on my DELL desktop, 2 Intel Xeon Quad cores, 8 CPUs in total. I spend a lot of time for it, I'd like to share the experience and I wish you to spend less. :) System: Ubuntu 11.04, 64 bit C compiler: gcc (you can also use icc, i installed Intel C++ Composer XE) Fortran compiler: Intel Fortran Composer XE 2011 GotoBLAS2-1.13 ( http://www.tacc.utexas.edu/tacc-projects/gotoblas2/downloads) FFTW 3.2.2 ( http://www.fftw.org/) , you can use newer if available Openmpi 1.4.3 ( http://www.open-mpi.org/) , you can use newer if available Since I use ubuntu I almost always use sudo command like sudo make TARGET=CORE2 USE_THREAD=0 I don't write sudo thing further in this post since it's feature of ubuntu. Parallel version 1) installation of GotoBLAS2 Basically it's suggested to type just make but this does not always work. I advise to build like make TARGET=CORE2 USE_THREAD=0 be careful with TARGET flag, don't use default or at list check, you could have problems because of that. Second one has to specify USE_THREAD=0 to have not threaded version, it's faster when used with OpenMPI. You can also specify the compiler: make CC=gcc (or icc) FC=ifort TARGET=CORE2 USE_THREAD=0 I had problems to compile with icc, so I used gcc + ifort 2) Installation of FFTW To compile read supported readme files. ./configure --prefix=/folder/for/fftw make make install I didn't specify any CC=gcc for ./configure, so I used default for me gcc compiler . 3) Installation of OpenMPI To compile OpenMPI read supported readme files. ./configure CC=icc CXX=icc F77=ifort F90=ifort --prefix=/folder/for/openmpi make all install Again I had problems with icc, so I compiled it with gcc, again I used gcc + ifort 4) VASP lib I used makefile.linux_ifc_P4 file the only change you need, it's FC=ifort 5) Compilation of VASP Again I started from makefile.linux_ifc_P4 file. Things I changed: 1) FFLAGS = -FR -names lowercase -assume byterecl 2) If you use GotoBLAS BLAS= /home/alex/VASP/GotoBLAS2/libgoto2.so or you can use MKL, but MKL is slow for parallel version for my case BLAS=-L/opt/intel/composerxe-2011.4.191/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread 3) LAPACK LAPACK= ../vasp.5.lib/lapack_double.o 4) fortran compiler/linker for mpi FC=/home/alex/VASP/openmpi/bin/mpif77 5) FFTW for mpi FFT3D = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o /home/alex/VASP/fft/lib/libfftw3.a INCS = -I/home/alex/VASP/fft/include 6) I tried to set -O3 optimization flag in line OFLAG=-O2 -ip -ftz but I didn't find any advantage and I left it as it is. 7) Probably I forgot something but anyway you can see the makefile. Makefile itself: .SUFFIXES: .inc .f .f90 .F #----------------------------------------------------------------------- # Makefile for Intel Fortran compiler for Pentium/Athlon/Opteron # bases systems # we recommend this makefile for both Intel as well as AMD systems # for AMD based systems appropriate BLAS and fftw libraries are # however mandatory (whereas they are optional for Intel platforms) # # The makefile was tested only under Linux on Intel and AMD platforms # the following compiler versions have been tested: # - ifc.7.1 works stable somewhat slow but reliably # - ifc.8.1 fails to compile the code properly # - ifc.9.1 recommended (both for 32 and 64 bit) # - ifc.10.1 partially recommended (both for 32 and 64 bit) # tested build 20080312 Package ID: l_fc_p_10.1.015 # the gamma only mpi version can not be compiles # using ifc.10.1 # # it might be required to change some of library pathes, since # LINUX installation vary a lot # Hence check ***ALL*** options in this makefile very carefully #----------------------------------------------------------------------- # # BLAS must be installed on the machine # there are several options: # 1) very slow but works: # retrieve the lapackage from ftp.netlib.org # and compile the blas routines (BLAS/SRC directory) # please use g77 or f77 for the compilation. When I tried to # use pgf77 or pgf90 for BLAS, VASP hang up when calling # ZHEEV (however this was with lapack 1.1 now I use lapack 2.0) # 2) more desirable: get an optimized BLAS # # the two most reliable packages around are presently: # 2a) Intels own optimised BLAS (PIII, P4, PD, PC2, Itanium) # http://developer.intel.com/software/products/mkl/ # this is really excellent, if you use Intel CPU's # # 2b) probably fastest SSE2 (4 GFlops on P4, 2.53 GHz, 16 GFlops PD, # around 30 GFlops on Quad core) # Kazushige Goto's BLAS # http://www.cs.utexas.edu/users/kgoto/signup_first.html # http://www.tacc.utexas.edu/resources/software/ # #----------------------------------------------------------------------- # all CPP processed fortran files have the extension .f90 SUFFIX=.f90 #----------------------------------------------------------------------- # fortran compiler and linker #----------------------------------------------------------------------- #FC=ifc # fortran linker #FCL=$(FC) #----------------------------------------------------------------------- # whereis CPP ?? (I need CPP, can't use gcc with proper options) # that's the location of gcc for SUSE 5.3 # # CPP_ = /usr/lib/gcc-lib/i486-linux/2.7.2/cpp -P -C # # that's probably the right line for some Red Hat distribution: # # CPP_ = /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3/cpp -P -C # # SUSE X.X, maybe some Red Hat distributions: CPP_ = ./preprocess $*.F | /usr/bin/cpp -P -C -traditional $*$(SUFFIX) #----------------------------------------------------------------------- # possible options for CPP: # NGXhalf charge density reduced in X direction # wNGXhalf gamma point only reduced in X direction # avoidalloc avoid ALLOCATE if possible # PGF90 work around some for some PGF90 / IFC bugs # CACHE_SIZE 1000 for PII,PIII, 5000 for Athlon, 8000-12000 P4, PD # RPROMU_DGEMV use DGEMV instead of DGEMM in RPRO (depends on used BLAS) # RACCMU_DGEMV use DGEMV instead of DGEMM in RACC (depends on used BLAS) # tbdyn MD package of Tomas Bucko #----------------------------------------------------------------------- CPP = $(CPP_) -DHOST=\"LinuxIFC\" \ -DCACHE_SIZE=12000 -DPGF90 -Davoidalloc -DNGXhalf \ # -DRPROMU_DGEMV -DRACCMU_DGEMV #----------------------------------------------------------------------- # general fortran flags (there must a trailing blank on this line) # byterecl is strictly required for ifc, since otherwise # the WAVECAR file becomes huge #----------------------------------------------------------------------- FFLAGS = -FR -names lowercase -assume byterecl #----------------------------------------------------------------------- # optimization # we have tested whether higher optimisation improves performance # -axK SSE1 optimization, but also generate code executable on all mach. # xK improves performance somewhat on XP, and a is required in order # to run the code on older Athlons as well # -xW SSE2 optimization # -axW SSE2 optimization, but also generate code executable on all mach. # -tpp6 P3 optimization # -tpp7 P4 optimization #----------------------------------------------------------------------- # ifc.9.1, ifc.10.1 recommended OFLAG=-O2 -ip -ftz OFLAG_HIGH = $(OFLAG) OBJ_HIGH = OBJ_NOOPT = DEBUG = -FR -O0 INLINE = $(OFLAG) #----------------------------------------------------------------------- # the following lines specify the position of BLAS and LAPACK # VASP works fastest with the libgoto library # so that's what we recommend #----------------------------------------------------------------------- # mkl.10.0 # set -DRPROMU_DGEMV -DRACCMU_DGEMV in the CPP lines #BLAS=-L/opt/intel/mkl100/lib/em64t -lmkl -lpthread # even faster for VASP Kazushige Goto's BLAS # http://www.cs.utexas.edu/users/kgoto/signup_first.html # parallel goto version requires sometimes -libverbs BLAS= /home/alex/VASP/GotoBLAS2-1.13_bsd/GotoBLAS2/libgoto2.so # LAPACK, simplest use vasp.5.lib/lapack_double LAPACK= ../vasp.5.lib/lapack_double.o # use the mkl Intel lapack #LAPACK= -lmkl_lapack #----------------------------------------------------------------------- LIB = -L../vasp.5.lib -ldmy \ ../vasp.5.lib/linpack_double.o $(LAPACK) \ $(BLAS) # options for linking, nothing is required (usually) LINK = #----------------------------------------------------------------------- # fft libraries: # VASP.5.2 can use fftw.3.1.X ( http://www.fftw.org) # since this version is faster on P4 machines, we recommend to use it #----------------------------------------------------------------------- #FFT3D = fft3dfurth.o fft3dlib.o # alternatively: fftw.3.1.X is slighly faster and should be used if available #FFT3D = fftw3d.o fft3dlib.o /opt/libs/fftw-3.1.2/lib/libfftw3.a #======================================================================= # MPI section, uncomment the following lines until # general rules and compile lines # presently we recommend OPENMPI, since it seems to offer better # performance than lam or mpich # # !!! Please do not send me any queries on how to install MPI, I will # certainly not answer them !!!! #======================================================================= #----------------------------------------------------------------------- # fortran linker for mpi #----------------------------------------------------------------------- FC=/home/alex/VASP/openmpi/bin/mpif77 FCL=$(FC) #----------------------------------------------------------------------- # additional options for CPP in parallel version (see also above): # NGZhalf charge density reduced in Z direction # wNGZhalf gamma point only reduced in Z direction # scaLAPACK use scaLAPACK (usually slower on 100 Mbit Net) # avoidalloc avoid ALLOCATE if possible # PGF90 work around some for some PGF90 / IFC bugs # CACHE_SIZE 1000 for PII,PIII, 5000 for Athlon, 8000-12000 P4, PD # RPROMU_DGEMV use DGEMV instead of DGEMM in RPRO (depends on used BLAS) # RACCMU_DGEMV use DGEMV instead of DGEMM in RACC (depends on used BLAS) # tbdyn MD package of Tomas Bucko #----------------------------------------------------------------------- #----------------------------------------------------------------------- CPP = $(CPP_) -DMPI -DHOST=\"LinuxIFC\" -DIFC \ -DCACHE_SIZE=4000 -DPGF90 -Davoidalloc -DNGZhalf \ -DMPI_BLOCK=8000 # -DRPROMU_DGEMV -DRACCMU_DGEMV #----------------------------------------------------------------------- # location of SCALAPACK # if you do not use SCALAPACK simply leave that section commented out #----------------------------------------------------------------------- #BLACS=$(HOME)/archives/SCALAPACK/BLACS/ #SCA_=$(HOME)/archives/SCALAPACK/SCALAPACK #SCA= $(SCA_)/libscalapack.a \ # $(BLACS)/LIB/blacsF77init_MPI-LINUX-0.a $(BLACS)/LIB/blacs_MPI-LINUX-0.a $(BLACS)/LIB/blacsF77init_MPI-LINUX-0.a SCA= #----------------------------------------------------------------------- # libraries for mpi #----------------------------------------------------------------------- #LIB = -L../vasp.5.lib -ldmy \ # ../vasp.5.lib/linpack_double.o $(LAPACK) \ # $(SCA) $(BLAS) # FFT: fftmpi.o with fft3dlib of Juergen Furthmueller #FFT3D = fftmpi.o fftmpi_map.o fft3dfurth.o fft3dlib.o # alternatively: fftw.3.1.X is slighly faster and should be used if available FFT3D = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o /home/alex/VASP/fft/lib/libfftw3.a INCS = -I/home/alex/VASP/fft/include #----------------------------------------------------------------------- # general rules and compile lines #----------------------------------------------------------------------- BASIC= symmetry.o symlib.o lattlib.o random.o SOURCE= base.o mpi.o smart_allocate.o xml.o \ constant.o jacobi.o main_mpi.o scala.o \ asa.o lattice.o poscar.o ini.o mgrid.o xclib.o vdw_nl.o xclib_grad.o \ radial.o pseudo.o gridq.o ebs.o \ mkpoints.o wave.o wave_mpi.o wave_high.o \ $(BASIC) nonl.o nonlr.o nonl_high.o dfast.o choleski2.o \ mix.o hamil.o xcgrad.o xcspin.o potex1.o potex2.o \ constrmag.o cl_shift.o relativistic.o LDApU.o \ paw_base.o metagga.o egrad.o pawsym.o pawfock.o pawlhf.o rhfatm.o paw.o \ mkpoints_full.o charge.o Lebedev-Laikov.o stockholder.o dipol.o pot.o \ dos.o elf.o tet.o tetweight.o hamil_rot.o \ steep.o chain.o dyna.o sphpro.o us.o core_rel.o \ aedens.o wavpre.o wavpre_noio.o broyden.o \ dynbr.o rmm-diis.o reader.o writer.o tutor.o xml_writer.o \ brent.o stufak.o fileio.o opergrid.o stepver.o \ chgloc.o fast_aug.o fock.o mkpoints_change.o sym_grad.o \ mymath.o internals.o dynconstr.o dimer_heyden.o dvvtrajectory.o vdwforcefield.o \ hamil_high.o nmr.o pead.o mlwf.o subrot.o subrot_scf.o \ force.o pwlhf.o gw_model.o optreal.o davidson.o david_inner.o \ electron.o rot.o electron_all.o shm.o pardens.o paircorrection.o \ optics.o constr_cell_relax.o stm.o finite_diff.o elpol.o \ hamil_lr.o rmm-diis_lr.o subrot_cluster.o subrot_lr.o \ lr_helper.o hamil_lrf.o elinear_response.o ilinear_response.o \ linear_optics.o linear_response.o \ setlocalpp.o wannier.o electron_OEP.o electron_lhf.o twoelectron4o.o \ ratpol.o screened_2e.o wave_cacher.o chi_base.o wpot.o local_field.o \ ump2.o bse_te.o bse.o acfdt.o chi.o sydmat.o dmft.o \ rmm-diis_mlr.o linear_response_NMR.o vasp: $(SOURCE) $(FFT3D) $(INC) main.o rm -f vasp $(FCL) -o vasp main.o $(SOURCE) $(FFT3D) $(LIB) $(LINK) makeparam: $(SOURCE) $(FFT3D) makeparam.o main.F $(INC) $(FCL) -o makeparam $(LINK) makeparam.o $(SOURCE) $(FFT3D) $(LIB) zgemmtest: zgemmtest.o base.o random.o $(INC) $(FCL) -o zgemmtest $(LINK) zgemmtest.o random.o base.o $(LIB) dgemmtest: dgemmtest.o base.o random.o $(INC) $(FCL) -o dgemmtest $(LINK) dgemmtest.o random.o base.o $(LIB) ffttest: base.o smart_allocate.o mpi.o mgrid.o random.o ffttest.o $(FFT3D) $(INC) $(FCL) -o ffttest $(LINK) ffttest.o mpi.o mgrid.o random.o smart_allocate.o base.o $(FFT3D) $(LIB) kpoints: $(SOURCE) $(FFT3D) makekpoints.o main.F $(INC) $(FCL) -o kpoints $(LINK) makekpoints.o $(SOURCE) $(FFT3D) $(LIB) clean: -rm -f *.g *.f90 *.o *.L *.mod ; touch *.F main.o: main$(SUFFIX) $(FC) $(FFLAGS)$(DEBUG) $(INCS) -c main$(SUFFIX) xcgrad.o: xcgrad$(SUFFIX) $(FC) $(FFLAGS) $(INLINE) $(INCS) -c xcgrad$(SUFFIX) xcspin.o: xcspin$(SUFFIX) $(FC) $(FFLAGS) $(INLINE) $(INCS) -c xcspin$(SUFFIX) makeparam.o: makeparam$(SUFFIX) $(FC) $(FFLAGS)$(DEBUG) $(INCS) -c makeparam$(SUFFIX) makeparam$(SUFFIX): makeparam.F main.F # # MIND: I do not have a full dependency list for the include # and MODULES: here are only the minimal basic dependencies # if one strucuture is changed then touch_dep must be called # with the corresponding name of the structure # base.o: base.inc base.F mgrid.o: mgrid.inc mgrid.F constant.o: constant.inc constant.F lattice.o: lattice.inc lattice.F setex.o: setexm.inc setex.F pseudo.o: pseudo.inc pseudo.F poscar.o: poscar.inc poscar.F mkpoints.o: mkpoints.inc mkpoints.F wave.o: wave.F nonl.o: nonl.inc nonl.F nonlr.o: nonlr.inc nonlr.F $(OBJ_HIGH): $(CPP) $(FC) $(FFLAGS) $(OFLAG_HIGH) $(INCS) -c $*$(SUFFIX) $(OBJ_NOOPT): $(CPP) $(FC) $(FFLAGS) $(INCS) -c $*$(SUFFIX) fft3dlib_f77.o: fft3dlib_f77.F $(CPP) $(F77) $(FFLAGS_F77) -c $*$(SUFFIX) .F.o: $(CPP) $(FC) $(FFLAGS) $(OFLAG) $(INCS) -c $*$(SUFFIX) .F$(SUFFIX): $(CPP) $(SUFFIX).o: $(FC) $(FFLAGS) $(OFLAG) $(INCS) -c $*$(SUFFIX) # special rules #----------------------------------------------------------------------- # these special rules are cummulative (that is once failed # in one compiler version, stays in the list forever) # -tpp5|6|7 P, PII-PIII, PIV # -xW use SIMD (does not pay of on PII, since fft3d uses double prec) # all other options do no affect the code performance since -O1 is used fft3dlib.o : fft3dlib.F $(CPP) $(FC) -FR -names lowercase -O2 -c $*$(SUFFIX) fft3dfurth.o : fft3dfurth.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) fftw3d.o : fftw3d.F $(CPP) $(FC) -FR -names lowercase -O1 $(INCS) -c $*$(SUFFIX) wave_high.o : wave_high.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) radial.o : radial.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) symlib.o : symlib.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) symmetry.o : symmetry.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) wave_mpi.o : wave_mpi.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) wave.o : wave.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) dynbr.o : dynbr.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) asa.o : asa.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) broyden.o : broyden.F $(CPP) $(FC) -FR -names lowercase -O2 -c $*$(SUFFIX) us.o : us.F $(CPP) $(FC) -FR -names lowercase -O1 -c $*$(SUFFIX) LDApU.o : LDApU.F $(CPP) $(FC) -FR -names lowercase -O2 -c $*$(SUFFIX)
8691 次阅读|0 个评论
[转载]VASP文档翻译之表面计算
guolingju 2012-3-5 22:26
VASP表面计算 作者: xianggui7895 出处: http://emuch.net/bbs/viewthread.php?tid=2567784 表面计算对精度和技巧要求相当高,所以在进行此类计算时需要非常细心,计算之前应仔细阅读和消化第8章中的基本知识。在下面几节中将介绍表面计算的典型步骤,需要注意的是,即使你严格按照给定步骤进行计算,依然可能会出现错误,得到没有任何物理意义的结果,这就需要你对可能出现的错误(结合第8章)进行仔细的分析,比如,FFT网格大小、K点数目是否足够,计算结果是否收敛,原子位置是否正确等,更一般的来说就是INCAR、POSCAR、KPOINTS、param.inc等输入文件是否正确。还需注意,前一步的计算误差可能导致后面计算中出现更大的错误,比如晶格常数1%的计算误差可能导致表面弛豫结果中3%的误差。因此,在初始计算中(包括体性质计算,确定FFT网格大小和K点的合适数目等)多花点时间是非常值得的。 1. 体性质计算 材料体性质计算的第一步,可以使用四面体方法(ISMEAR=-5或-4)、通过提高K点数目直到计算收敛到预期精度。这里所说的预期精度没有特定标准,一般说来如果表面能计算误差要控制在10 meV以内,可以提高K点数目直到总能收敛到1 meV左右即可。计算材料体性质的slab模型通常含有20-100个原子,因此为得到可靠的表面能结果需要进行非常精确的体能量计算,实际上越精确越好,推荐选择PREC=High。 第二步,将四面体方法改为有限温度方法(ISMEAR=0或N,N为正整数),有两种选择: (1) Gaussian方法(ISMEAR=0),较小的SIGMA值(SIGMA=0.1)。前面计算中多次用到这种方法,但更推荐第二种方法: (2) Methfessel-Paxton方法(ISMEAR=1),SIGMA值要尽量大,但要保证OUTCAR文件中的自由能和总能之差(比如entropy T*S项)可忽略不计。entropy项可以很好的估计可能误差的大小,必须在预期误差范围内(如前例中是1 meV左右) 从现在开始,将无须改变ISMEAR、SIGMA和ENCUT值,而通过逐步提高K点数目来重复体性质计算,此时K点的收敛速率应该和四面体方法基本差不多。 选择一个用在表面计算中合适的K点数目和截断能,计算平衡晶格常数,注意尽量避免包络错误(Wrap around errors,设置PREC=High)。现在得出的晶格常数就是将来表面计算中使用的晶格常数,而自由能是所有后续计算的参考值,此外还要计算entropy值(OUTCAR中的entropy*TS项)或者记下总能和physical能(σ-0)。 2. 表面计算的FFT网格和K点数目 第一步需要确定合理的FFT网格大小,为从根本上杜绝包络错误,可以选择VASP的推荐参数(或者设置PREC=High)。开始尝试计算时,可选择5个原子层和5个真空层的slab模型,取一个合理的不太大的K点数目,在OUTCAR文件中将给出能严格避免包络错误的FFT网格大小值: WARNING: wrap around error must be expected Set NGX to 22 采用这个推荐网格会导致计算时间的延长,但至少应该可以做一次这样精确的计算。如果想减小计算时间,可以尝试使用3/4规则(PREC=Med),将其计算结果与精确收敛结果进行一下对比。 下一步需要确定合适的K点网格数目。体性质计算已经提供了一个参考,在表面计算中,通常含有一个长的晶格矢量和两个短的晶格矢量,在长晶格方向上,一个K点网格一般就足够了,因为在这个方向上色散是由真空层造成的。在短晶格方向上,网格划分数的收敛速度和体材料基本相同,提高K点数目知道自由能足够收敛即可。要再次提醒,避免包络错误! 可能用到的互相检查方法: (1) 每个原子的entropy值应该和体性质计算相同,否则降低SIGMA值重新所有计算。 (2) 总的力偏移量应该足够小,否则原因是FFT网格不够大,应当相应地提高。 (3) 检查力随着K点网格和FFT网格的收敛速度。 3. 原子层和真空层数目 从现在开始,固定K点网格数目和包络错误大小(比如,保持严格杜绝包络错误的FFT网格大小和实际的FFT网格大小的比例为一定值),测试需要多少原子层和真空层,才能得到合理的表面能值,以及表面第一层(或第二层)原子收敛的作用力。 注意:在一次计算和下一次计算中修改的参数不要超过一个,比较k点数目和超胞大小都不同的两次计算结果几乎是不可能的。特别要注意FFT网格:如果增大了超胞尺寸而没有相应地提高FFT网格的尺寸,计算结果不但没有改进反而更糟糕,因为包络错误增大了
个人分类: 第一性原理(vasp)|8186 次阅读|0 个评论
[转载]vasp 功函数
热度 1 shengxianlei06 2011-12-6 08:39
INCAR中参数设置 1.加极化修正 IDIPOL=3 极化修正的方向 LDIPOL= .TRUE. 是否加极化修正 LVTOT = .TRUE. 计算work function (即静电势) 2.如果不加极化,直接用 LVTOT = .TRUE. 计算work function (即静电势) 计算时,可以和DOS一起计算。(如果利用静态计算的chgcar,计算结果有问题) 后期处理 用的程序是 vtotav.f --------------------------------------- INCAR里面加入LVTOT=.T.得到LOCPOT 运行编译好的脚本ifort -O vtotav-v5.2-f 画出z方向的选3 PROGRAM VTOTAV PARAMETER(NGXM=256,NOUTM=1024) CHARACTER*80 HEADER DIMENSION VLOCAL(NGXM*NGXM*NGXM),VAV(NOUTM) I=0 WRITE(*,*) 'Which direction to keep? (1-3 --- 1=X,2=Y,3=Z)' READ(*,*) IDIR IDIR=MOD(IDIR+20,3)+1 OPEN(20,FILE='LOCPOT',STATUS='OLD',ERR=1000) C READ(20,*,ERR=1000,END=1000) NIONS,IDUM1,IDUM2 READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,'(A)',ERR=1000,END=1000) HEADER I=0; II=0; III=0; IIII=0 READ(HEADER,*,ERR=12,END=12) I,II,III,IIII 12 NIONS=I+II+III+IIII C READ(20,*,ERR=1000,END=1000) NIONS READ(20,'(A)',ERR=1000,END=1000) HEADER WRITE(*,*) NIONS DO 10 I=1,NIONS READ(20,*,ERR=1000,END=1000) RDUM1,RDUM2,RDUM3 10 CONTINUE WRITE(*,*) 'positions read' READ(20,'(A)',ERR=1000,END=1000) HEADER READ(20,*,ERR=1000,END=1000) NGX,NGY,NGZ NPLWV=NGX*NGY*NGZ IF (IDIR.EQ.1) NOUT=NGX IF (IDIR.EQ.2) NOUT=NGY IF (IDIR.EQ.3) NOUT=NGZ IF (NPLWV.GT.(NGXM*NGXM*NGXM)) THEN WRITE(*,*) 'NPLWV .GT. NGXM**3 (',NPLWV,').' STOP ENDIF IF (NOUT.GT.NOUTM) THEN WRITE(*,*) 'NOUT .GT. NOUTM (',NOUT,').' STOP ENDIF C READ(20,'(10F8.3)',ERR=1000,END=1000) (VLOCAL(I),I=1,NPLWV) READ(20,*,ERR=1000,END=1000) (VLOCAL(I),I=1,NPLWV) WRITE(*,*) 'charge density read' CLOSE(20) DO 20 I=1,NOUTM 20 VAV(I)=0. SCALE=1./FLOAT(NPLWV/NOUT) WRITE(*,*) SCALE IF (IDIR.EQ.1) THEN DO 150 IX=1,NGX DO 100 IZ=1,NGZ DO 100 IY=1,NGY IPL=IX+((IY-1)+(IZ-1)*NGY)*NGX VAV(IX)=VAV(IX)+VLOCAL(IPL)*SCALE 100 CONTINUE 150 CONTINUE ELSE IF (IDIR.EQ.2) THEN DO 250 IY=1,NGY DO 200 IZ=1,NGZ DO 200 IX=1,NGX IPL=IX+((IY-1)+(IZ-1)*NGY)*NGX VAV(IY)=VAV(IY)+VLOCAL(IPL)*SCALE 200 CONTINUE 250 CONTINUE ELSE IF (IDIR.EQ.3) THEN DO 350 IZ=1,NGZ DO 300 IY=1,NGY DO 300 IX=1,NGX IPL=IX+((IY-1)+(IZ-1)*NGY)*NGX VAV(IZ)=VAV(IZ)+VLOCAL(IPL)*SCALE 300 CONTINUE 350 CONTINUE ELSE WRITE(*,*) 'Hmmm?? Wrong IDIR ',IDIR STOP ENDIF OPEN(20,FILE='VLINE') WRITE(20,*) NOUT,IDIR DO 500 I=1,NOUT WRITE(20,'(I6,2X,E18.11)') I,VAV(I) 500 CONTINUE CLOSE(20) STOP 1000 WRITE(*,*) 'Error opening or reading file LOCPOT.' WRITE(*,*) 'item :',I STOP END
个人分类: VASP|10845 次阅读|2 个评论
[转载]vasp晶体结构优化
swx0789 2011-7-23 16:34
结构优势是我们做计算的的第一步,往往也是最重要的一步,一个不合理的结够优化可能导致错误的结果。在论坛里面也有很多虫子们问关于结构优化的问题,貌似大家对结构优化不是很有把握。我在这里开贴只是抛砖引玉,希望大家积极交流。下面是我的结构优化的一些经验,希望对大家有点用 第一步: 建模我一般都是MS建好之后 修改*.cell文件得到POSCAR具体的方法参考站内的信息(没找到最开始的网页,谁找到了贴上来) 这是*.cell文件的内容 %BLOCK LATTICE_CART 7.365858463230930 0.816888331419153 1.518567634398170 0.000000000000000 7.749147189276010 0.114969347281651 0.000000000000000 0.000000000000000 16.835000015679299 %ENDBLOCK LATTICE_CART %BLOCK POSITIONS_FRAC H 0.1045034131293120 0.0506482790444403 0.1503325580937660 H-0.2037023292911190 0.2015583952382200 0.1604502537744340 H-0.4269999607791240 0.3837162987940400 0.0980194481736503 H-0.3453870956286900 0.4791801646100701-0.0460018173909388 H 0.2784615598004869 0.2515795170279700-0.1346530187895070 H 0.2619963944132780-0.5890935655390530 0.3725661174512691 H 0.2595685601772050-0.5519954246490220 0.1897443712411160 H 0.0767881789054980-0.6048204220967270 0.2666625899874510 H 0.2771409424864049-0.7522385903899170 0.2411634679797081 H 0.5634931211089379-0.7084903644666670 0.2828144510356441 H 0.5814851393159790-0.5287740945641601 0.3433449582781520 H 0.5793331415735910-0.5003094920852541 0.2386888180011851 H 0.4946819829083929-0.2212541120652400 0.3755202742234630 …………………… %ENDBLOCK POSITIONS_FRAC %BLOCK KPOINTS_LIST 0.0000000000000000 0.0000000000000000 0.2500000000000000 1.000000000000000 %ENDBLOCK KPOINTS_LIST %BLOCK CELL_CONSTRAINTS 1 2 3 ……………………………… 把第一行 %BLOCK LATTICE_CART 改成SYSTEM=GRPHENE(你体系的名称 可以随便写) 然后后面填一行1 再把 %ENDBLOCK LATTICE_CART %BLOCK POSITIONS_FRAC 改为 H C N Si(原子的类型) 5242 2 2(原子的数目) Direct (坐标表示的方式,对于这种方法,只能用D) 然后把后面的原子符号H C 等去掉 H-0.0000000000000000-0.0000000000000001 0.7500000000000000 C 0.1666666666666668 0.0833333333333332 0.7500000000000000 把 %ENDBLOCK POSITIONS_FRAC以后的全部删掉就行了 保存为POSCAR 就可以了 此时要 注意保存的格式使用unix格式,ultredit可以选择保存格式,如果用记事本编辑的话,所有的行前不能有空格(从*.cell里面复制过来的空格,自己加的没关系)否则提示找不到原子,论坛里面有很多这样的问题 。 第二步: 开始结构优化了,我们一般使用脚本来实现,这里使用的是侯老师所说的方法,体积与能量的曲线然后拟合去能量最小的体积进行进一步优化。先讲能量与体积的曲线怎么得来的。 INCAR 最主要是设置 PREC =M # medium, high low ISTART = 0 # job : 0-new 1-cont 2-samecut ICHARG =2 # charge: 1-file 2-atom 10-const EDIFF = 0.1E-04 # stopping-criterion for ELM(对于大的体系是设置0.1E-03) NSW = 1000 # number of steps for IOM IBRION = 2 # ionic relax: 0-MD 1-quasi-New 2-CG ISIF = 4 # stress and relaxation 对于大的体系可以设置 IALGO=48 ALGO= Very Fast 如果速度还不行可以设置POTIM= 0.1 KPOINTS A 0 M 4 4 4 (体积大的可以弄小一点,这个没试过,但是感觉一个点可能有点问题) 下面开始POSCAR 侯老师也说过这个方法,在手册里面这也是有的 其实就是通过取不同大小的晶胞分别优化,取能量做图。很多虫子们总是在问怎么建立,还有说对于,有三个轴的怎么取晶格常数,在这里如果你采用我这里的方法就不用了(但是在INCAR里面必须设置ISIF=4),为什么呢?我们通过刚才建立POSCAR 里面晶格常数1来实现,改变晶胞的大小就可以了。 有脚本,POSCAR 就不需要了,但是刚才编辑的POSCAR 还是有用的(其实这就是产生POSCAR 的脚本),这个脚本是vasp的说明书里面的 写脚本 rvasp 内容如下: for i in1.01 1.011.02 0.99 0.98 do cat POSCAR ! SYSTEM=TN-PEN $i 7.365858463230930 0.816888331419153 1.518567634398170 0.000000000000000 7.749147189276010 0.114969347281651 0.000000000000000 0.000000000000000 16.835000015679299 H C N Si 5242 2 2 Direct 0.1045034131293120 0.0506482790444403 0.1503325580937660 -0.2037023292911190 0.2015583952382200 0.1604502537744340 -0.4269999607791240 0.3837162987940400 0.0980194481736503 -0.3453870956286900 0.4791801646100701-0.0460018173909388 0.2784615598004869 0.2515795170279700-0.1346530187895070 0.2619963944132780-0.5890935655390530 0.3725661174512691 0.2595685601772050-0.5519954246490220 0.1897443712411160 0.0767881789054980-0.6048204220967270 0.2666625899874510 0.2771409424864049-0.7522385903899170 0.2411634679797081 0.5634931211089379-0.7084903644666670 0.2828144510356441 0.5814851393159790-0.5287740945641601 0.3433449582781520 0.5793331415735910-0.5003094920852541 0.2386888180011851 0.4946819829083929-0.2212541120652400 0.3755202742234630 …………………… ! echo "a= $i" ;mpirun -np 24vasp E=`tail -1 OSZICAR`; echo $i $E SUMMARY cp CONTCAR CONTCAR$i done 最前面 for i in1.01 1.011.02 0.99 0.98 (设置的体积比例,体积比例是 i 的3次方) do cat POSCAR ! 这里面 SYSTEM=TN-PEN $i 7.365858463230930 0.816888331419153 1.518567634398170 0.000000000000000 7.749147189276010 0.114969347281651 0.000000000000000 0.000000000000000 16.835000015679299 H C N Si 5242 2 2 Direct 0.1045034131293120 0.0506482790444403 0.1503325580937660 -0.2037023292911190 0.2015583952382200 0.1604502537744340 -0.4269999607791240 0.3837162987940400 0.0980194481736503 -0.3453870956286900 0.4791801646100701-0.0460018173909388 0.2784615598004869 0.2515795170279700-0.1346530187895070 0.2619963944132780-0.5890935655390530 0.3725661174512691 0.2595685601772050-0.5519954246490220 0.1897443712411160 0.0767881789054980-0.6048204220967270 0.2666625899874510 0.2771409424864049-0.7522385903899170 0.2411634679797081 0.5634931211089379-0.7084903644666670 0.2828144510356441 0.5814851393159790-0.5287740945641601 0.3433449582781520 0.5793331415735910-0.5003094920852541 0.2386888180011851 0.4946819829083929-0.2212541120652400 0.3755202742234630 …………………… 这些都是刚才制作的POSCAR ,只有那个第二行$i 改了一下 后面这些 ! echo "a= $i" ;mpirun -np 24vasp(24 是核数) E= ` tail -1 OSZICAR ` ; echo $i $E SUMMARY ( 注意那个`是tab键上的那个,非单引号 ) cp CONTCAR CONTCAR$i(这一步是我加的,把优化好的复制出来,为了下一步优化节省时间) done 脚本rvasp写好以后,改变一下权限chmod +x rvasp ,最后运行./rvasp 即可 第三步 : 运行脚本以后在SUNMMRY可以找到体积比例与对应的能量,我们未必一定把体积算出来,用体积比例可以得到拟合曲线,具体做法,把数据放入origin,然后选中数据在analysis里面,选择fiting,一般设置二次项拟合,找到能量最小值 第四步 : 把能量最小值对应的体积比例找出来,把得到的类似CONTCAR1.01(后面那个数据是体积比例,选择一个离你拟合相差最小的一个)放到POSCAR中(cp CONTCAR1.01 POSCAR),(如果你最开始选择的体积比例间隔比较大的大,想得到更加精确的体积比例,就把CONTCAR1.01的内容复制到rvasp脚本,替换掉中间部分,然后再在for i in 后面设置你的体积比例,一般两次都能找到比较好的体积比例) 第五步 : 设置 INCAR 如下 PREC =M # medium, high low ISTART = 0 # job : 0-new 1-cont 2-samecut ICHARG =2 # charge: 1-file 2-atom 10-const EDIFF = 0.1E-05 # stopping-criterion for ELM (对于大的体系是设置0.1E-03) EDIFFG= 0.001 NSW = 1000 # number of steps for IOM IBRION = 2 # ionic relax: 0-MD 1-quasi-New 2-CG ISIF = 3 # stress and relaxation (这里变为3,是因为我们拟合的未必是最合适的,通过这个参数可以适当调节到更好) 后面的可以不要了,如果算不动加上也无妨,但是最后一次优化精确点好。里面的收敛标准看你自己定,上面的可以满足大部分的要求,但是如果对构型要求不严格的话可以适当调低点收敛标准(EDIFF = 0.1E-04 EDIFFG= 0.01),具体的收敛标准可以查看 http://emuch.net/bbs/viewthread.php?tid=2512497 KPOINTS 可以加大数量,但是也没什么太大的必要 A 0 M 4 4 4 POSCAR 就是第四步得到的 输入vasp计算 这一步运行结构优化就可以!但是一定要查看OUTCAR中关于原子受力的信息,如果有个别受力太大的话还是不行的,要继续优化,使用最后一步就行了。 如果有什么意见或者错误,欢迎大家指正!也希望大家能够积极参与讨论! From: http://emuch.net/bbs/viewthread.php?tid=3234667fpage=1
个人分类: VASP|13300 次阅读|0 个评论
[转载]晶格优化中ISIF取值的探究(六方MgO为例)
swx0789 2011-7-23 15:54
一、目的:搞清楚用vasp进行晶格优化中ISIF值的重要性 二、方法:采用分步优化和一次性优化两种方法探究 三、重点参数说明: ISIF:2-relax ions?/Y; || change cell shape?/N; || change cell volume?/N 3-relax ions?/Y; || change cell shape?/Y; || change cell volume?/Y 4-relax ions?/Y; || change cell shape?/Y; || change cell volume?/N 5-relax ions?/N; || change cell shape?/Y; || change cell volume?/N 6-relax ions?/N; || change cell shape?/Y; || change cell volume?/Y 7-relax ions?/N; || change cell shape?/N; || change cell volume?/Y POSCAR: a 0.0 -1.0 0.0 0.8660254037844 0.5 0.0 0.0 0.0 1.6230529595 2 Direct 0.6666666666666667 0.3333333333333333 0.750 0.3333333333333333 0.6666666666666667 0.250 四、实验步骤: A、采用分步优化法: 算法原理: a.先进行一次驰豫优化计算 b.将CONTCAR拷贝成POSCAR c.再进行一次静态计算,求出总能和体积,拟合状态方程,得出晶格常 数 I、取ISIF=2时:(#上下对应。上行为系列缩放系数;下行为相应的总能;所取CONTAR&volume为缩放系数取3.71时的结构情况) 2.91 3.01 3.11 3.21 3.31 3.41 3.51 3.61 3.71 -0.09768706 -2.60381322-2.62609278 -2.62612787 -2.62612791 -2.60064488-2.59725747 -2.59725252 -2.597253 volume of cell : 71.78 CONTCAR: 3.710000000000000 0.0000000000000000 -1.0000000000000000 0.0000000000000000 0.8660254037844000 0.5000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.6230529595000000 II、取ISIF=3时: 2.91 3.01 3.11 3.21 3.31 3.41 3.51 3.61 3.71 -1.47880875 -3.56749270-3.57829654 -3.57830700 -3.57830701 -3.55534231 -3.55344206 -3.55344601 -3.553446 volume of cell : 43.12 CONTCAR: 3.710000000000000 0.0000000000000000 -0.8480309609621116 0.0000000000000000 0.7344163553888973 0.4240154804810558 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3556928126902820 III、取ISIF=4时: 2.91 3.01 3.11 3.21 3.31 3.41 3.51 3.61 3.71 -0.24918897 -2.60258815 -2.63108804 -2.63118786 -2.63118806 -2.60762910 -2.60458644 -2.60459724 -2.604597 volume of cell : 71.78 CONTCAR: 3.710000000000000 0.0000000000000001 -1.0553127846071310 0.0000000000000000 0.9139276804085778 0.5276563923035652 0.0000000000000000 0.0000000000000001 0.0000000000000000 1.4573715661012910 IV、取ISIF=5时: 2.91 3.01 3.11 3.21 3.31 3.41 3.51 3.61 3.71 -0.24918897 -2.60258815 -2.63108804 -2.63118786 -2.63118806 -2.60762910 -2.60458644 -2.60459724 -2.604597 volume of cell : 71.78 CONTCAR: 3.710000000000000 0.0000000000000001 -1.0553127846071310 0.0000000000000000 0.9139276804085778 0.5276563923035652 0.0000000000000000 0.0000000000000001 0.0000000000000000 1.4573715661012910 V、取ISIF=6时: 2.91 3.01 3.11 3.21 3.31 3.41 3.51 3.61 3.71 -1.47880875 -3.56749270 -3.57829654 -3.57830700 -3.57830701 -3.55534231 -3.55344206 -3.55344601 -3.553446 volume of cell : 43.12 CONTCAR: 3.710000000000000 0.0000000000000000 -0.8480309609621116 0.0000000000000000 0.7344163553888973 0.4240154804810558 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3556928126902820 VI、取ISIF=7时: 2.91 3.01 3.11 3.21 3.31 3.41 3.51 3.61 3.71 -1.28296288 -3.56234825 -3.57418319 -3.57419641 -3.57419642 -3.55112710 -3.54922372 -3.54922856 -3.549229 volume of cell : 43.07 CONTCAR: 3.710000000000000 0.0000000000000000 -0.8434465875014347 0.0000000000000000 0.7304461715115043 0.4217232937507173 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.3689584800243790 B:采用一次优化法: 与上面方法不同的是INCAR中取ISIF=3,取定的实验缩放系数a=3.21,计算的精度选得更高,且仅做一次优化。 结果为: TOTEN= -3.549568 eV volume of cell : 43.12 CONTCAR: Mg-hex 3.210000000000000 0.0000000000000000 -0.9801232359458133 0.0000000000000000 0.8488116211684474 0.4900616179729067 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.5669819270266370 2 Direct 0.66666666666666430.33333333333333570.7500000000000000 0.33333333333333570.66666666666666430.2500000000000000 结论: 1、特殊位置的粒子随晶格形状的改变而变化,不论允许驰豫与否。 2、不同ISIF的取值对晶格优化影响不大,本例中缩放系数均在3.21~3.31之范围内 3、采用分步优化法得出的优化晶格比较可靠
个人分类: VASP|7936 次阅读|0 个评论
[转载]VASP能够进行哪些过程的计算?怎样设置?
swx0789 2011-7-23 09:45
我们平时最常用的研究方法是做单点能计算,结构优化、从头计算的分子动力学和电子结构相关性质的计算。 一般我们的研究可以按照这样的过程来进行 如果要研究一个体系的最优化构型问题可以首先进行结构弛豫优化,然后对优化后的结构进行性质计算或者单点能计算。 如果要研究一个体系的热力学变化过程可以首先进行分子动力学过程模拟,然后在某个温度或压强下进行性质计算或者单点能计算。 如果要研究一个体系的热力学结构变化可以首先在初始温度下进行NVT计算,然后进行分子动力学退火,然后在结束温度下进行性质计算研究。 什么是单点能计算(single point energy)?如何计算? 跟其它软件类似,VASP具有单点能计算的功能。也就是说,对一个给定的固定不变的结构(包括原子、分子、表面或体材料)能够计算其总能,即静态计算功能。 单点能计算需要的参数最少,最多只要在KPOINTS文件中设置一下合适的K点或者在INCAR文件中给定一个截断能ENCUT就可以了。还有一个参数就是电子步的收敛标准的设置EDIFF,默认值为EDIFF=1E-4,一般不需要修改这个值。 具体来说要计算单点能,只要在INCAR中设置IBRION=-1也就是让离子不移动就可以了。 什么是结构优化(structure optimization)?如何计算? 结构优化又叫结构弛豫(structure relax),是指通过对体系的坐标进行调整,使得其能量或内力达到最小的过程,与动力学退火不同,它是一种在0K下用原子间静力进行优化的方法。可以认为结构优化后的结构是相对稳定的基态结构,能够在实验之中获得的几率要大些(当然这只是理论计算的结果,必须由实验来验证)。 一般要做弛豫计算,需要设置弛豫收敛标准,也就是告诉系统收敛达成的判据(convergence break condition),当系统检测到能量变化减小到一个确定值时例如EDIFFG=1E-3时视为收敛中断计算,移动离子位置尝试进行下一步计算。EDIFFG这个值可以为负,例如EDIFFG=-0.02,这时的收敛标准是当系统发现所有离子间作用力都小于给定的数值,如0.02eV/A时视为收敛而中断。 弛豫计算主要有两种方式:准牛顿方法(quasi-Newton RMM-DIIS)和共轭梯度法(CG)两种。准牛顿方法计算速度较快,适合于初始结构与平衡结构(势能面上全局最小值)比较接近的情况,而CG方法慢一些,找到全局最小的可能性也要大一些。选择方法为IBRION=1时为准牛顿方法而IBRION=2时为CG方法。 具体来说要做弛豫计算,设置IBRION=1或者2就可以了,其它参数根据需要来设置。NSW是进行弛豫的最大步数,例如设置NSW=100,当计算在100步之内达到收敛时计算自动中断,而100步内没有达到收敛的话系统将在第100步后强制中止(平常计算步数不会超过100步,超过100步可能是计算的体系出了问题)。参数通常可以从文献中发现,例如收敛标准EDIFFG等。 有的时候我们需要一些带限制条件的弛豫计算,例如冻结部分原子、限制自旋的计算等等。冻结部分原子可以在POSCAR文件中设置selective dynamic来实现。自旋多重度限制可以在INCAR中以NUPDOWN选项来设置。另外ISIF选项可以控制弛豫时的晶胞变化情况,例如晶胞的形状和体积等。 费米面附近能级电子分布的smearing是一种促进收敛的有效方法,可能产生物理意义不明确的分数占据态情况,不过问题不大。在INCAR文件中以ISMEAR来设置。一般来说K点只有一两个的时候采用ISMEAR=0,金属体材料用ISMEAR=1或2,半导体材料用ISMEAR=-5等等。不过有时电子步收敛速度依然很慢,还需要设置一些算法控制选项,例如设置ALGO=Very_Fast,减小真空层厚度,减少K点数目等。 弛豫是一种非常有效的分析计算手段,虽然是静力学计算但是往往获得一些动力学得不到的结果。 文来自 : 小木虫论坛 http://emuch.net/bbs/viewthread.php?tid=1428501
个人分类: VASP|4197 次阅读|0 个评论
[转载]VASP参数设置详解
swx0789 2011-7-23 09:33
转自小木虫,略有增减 软件主要功能: 采用周期性边界条件(或超原胞模型)处理 原子 、 分子 、团簇、 纳米线 (或管)、薄膜、 晶体 、准晶和无定性材料,以及表面体系和固体 l 计算材料的结构参数(键长、键角、晶格常数、原子位置等)和构型 l 计算材料的状态方程和力学性质(体弹性模量和弹性常数) l 计算材料的电子结构(能级、电荷密度分布、能带、电子态密度和ELF) l 计算材料的光学性质 l 计算材料的磁学性质 l 计算材料的晶格动力学性质(声子谱等) l 表面体系的模拟(重构、表面态和STM模拟) l 从头分子动力学模拟 l 计算材料的激发态(GW准粒子修正) 计算主要的四个参数文件:INCAR ,POSCAR,POTCAR ,KPOINTS,下面简要介绍,详细权威的请参照手册 INCAR 文件: 该文件控制 VASP 进行何种性质的计算,并设置了计算方法中一些重要的参数,这些参数主要包括以下几类: l 对所计算的体系进行注释: SYSTEM l 定义如何输入或构造初始的电荷密度和波函数: ISTART , ICHARG , INIWAV l 定义电子的优化 – 平面波切断动能和缀加电荷时的切断值: ENCUT , ENAUG – 电子部分优化的方法: ALGO , IALGO , LDIAG – 电荷密度混合的方法: IMIX , AMIX , AMIN , BMIX , AMIX_MAG , BMIX_MAG , WC , INIMIX , MIXPRE , MAXMIX – 自洽迭代步数和收敛标准: NELM , NELMIN , NELMDL , EDIFF l 定义离子或原子的优化 – 原子位置优化的方法、移动的步长和步数: IBRION , NFREE , POTIM , NSW – 分子动力学相关参数: SMASS , TEBEG , TEEND , POMASS , NBLOCK , KBLOCK , PSTRESS – 离子弛豫收敛标准: EDIFFG l 定义态密度积分的方法和参数 – smearing 方法和参数: ISMEAR , SIGMA – 计算态密度时能量范围和点数: EMIN , EMAX , NEDOS – 计算分波态密度的参数: RWIGS , LORBIT l 其它 – 计算精度控制: PREC – 磁性计算: ISPIN , MAGMOM , NUPDOWN – 交换关联函数: GGA , VOSKOWN – 计算 ELF 和总的局域势: LELF , LVTOT – 结构优化参数: ISIF – 等等。 主要参数说明如下: ? SYSTEM :该输入文件所要执行的任务的名字。 取值 :字符串,缺省值: SYSTEM ? NWRITE : 输出内容详细程度。 取值 : 0~4 ,缺省值: 2 如果是做长时间动力学计算的话,最好选 0 或 1( 首末步 / 每步核运动输出 ) ,短时运算用 2 ,选 3 则会在出错的时候给出说明信息。 ? ISTART :决定是否读取 WAVECAR 文件。取值: 0~2 ,缺省 0/1 for 无 / 有 前次计算的 WAVECAR (波函数) 0 : begin 'from scratch' ,根据 INIWAV 初始化波函数 1 : restart with constant energy cut-off , 从 WAVECAR 读取波函数(重定义平面波集) 2 : restart with constant basis set , 从 WAVECAR 读取波函数(平面波集不变) ? ICHARG :决定如何建立初始电荷密度。取值: 0~2 , 缺省值 : if ISTART=0 2 else 0 0 :由初始波函数计算电荷密度 1 :从 CHGCAR 文件读取电荷密度 2 :使用原子电荷密度的叠加 +10 非自洽计算 ? ISPIN :是否进行 spin polarized calculation 。取值: 1 , 2 ( 1-no , 2-yes ), 缺省值: 2 ? MAGMOM :在 ICHARG=2 或在 CHGCAR 中未包含磁化密度( ICHARG=1 )时,指定每个原子的初始磁化时刻。取值:实数数组, 缺省值 : 对 ISPIN=2 NIONS*1.0 ,对非共线型磁化体系 3*NIONS*1.0 ? INIWAV 如何设置初始波函数,只在 ISTART=0 时使用。取值: 0 , 1 ( 0- 最低动能的平面波, 1- 随机数), 缺省值: 1 。 ? IDIPOL 控制计算单极、偶极和四极修正。取值: 1~4 。 1~3 只计算第一 / 二 / 三晶矢方向,适于厚板( slab )的计算 4 所有方向都计算,适于计算孤立分子 ? PREC 进动( precession )。取值: low/medium/high/normal/ accurate/single) , 缺省值 : Normal ( VASP.4.X ); Medium ( VASP.5.X ) VASP4.5+ 采用了优化的 accurate 来替代 high ,所以一般不推荐使用 high 。不过 high 可以确保“绝对收敛”,作为参考值有时也是必要的。同样受推荐的是 normal ,适于作为日常计算选项。 受 PREC 影响的参数有四类: ENCUT ; NGX , NGY , NGZ ; NGXF , NGYF , NGZF ; ROPT 。如果设置了 PREC ,这些参数就都不需要出现了,当然直接设置相应的参数也有同样效果。具体影响效果见 p53~54 。 ? ENCUT 平面波基组的截断能量( eV )。取值:实数,缺省值:受 PREC 设置影响,从 POTCAR 文件中找出相应的 ENMAX/ENMIN 值来设置。 PREC = Low Medium Accurate Normal ENCUT =ENMIN ENMAX ENMAX ENMAX Single High ENMAX ENMAX*1.3 对于多个元素不同的 ENMAX/ENMIN ,都取最大值。 该参数非常重要,最好不要手工去设置,除非文献告诉你要用多少,或者经过结果可靠性的验证。当然,为了测试一下提交的任务,也不妨先设个较小的值。 ? NGX , NGY , NGZ :控制 FFT 网格在三个晶矢方向上的格点数量。 ? NGFX , NGFY , NGFZ :控制第二次更精确的 FFT 网格的格点数量。 也是两类重要的最好不要去动的参数。在未指定的情况下将根据 PREC 的设置从 POTCAR 中自动读取。 PREC=High/Accurate ,基组中向量的 2 倍值,用来避免 wrap around errors ,得到精确解。 PREC=Low/Medium/Normal ,基组中向量的 3/4 倍值(已足够精确到 1 meV/atom )。 ? LREAL: 决定投射是在实空间还是倒易空间进行。取值: .TRUE. (实空间) /.FALSE. (倒易空间),缺省值: .FALSE. 用于求解赝势的非局域部分用到的一个积分,在倒格空间里采用平面波基组求解,在实空间里则采用积分球求解。 其他还有两个选项: O or On , A or Auto 。 On 和 .TRUE. 的差别在于是否使用 King-Smith 算法优化,设为 Auto 则进行自动选择,推荐使用。 ? ROPT: 在 LREAL=Auto or On 时,优化控制每个核周围的积分球内的格点数。取值:实数数组 For LREAL=On PREC=Low, 700 points in the real space sphere (ROPT=0.67) PREC=Med, 1000 points in the real space sphere (ROPT=1.0) PREC=High, 1500 points in the real space sphere (ROPT=1.5) For LREAL=Auto PREC=Low, accuracy 10 -2 (ROPT=0.01) PREC=Med, accuracy 2*10 -3 (ROPT=0.002) PREC=High accuracy 2*10 -4 (ROPT=2E-4) ? NELM, NELMIN and NELMDL :控制电子自洽循环步数。取值:整数 NELM :电子自洽循环最大次数。缺省值: 60 NELMIN :电子自洽循环最小次数。缺省值: 2 NELMDL :弛豫次数。缺省值: if ISTART=0, INIWAV=1, and IALGO=8 , -5 , if ISTART=0, INIWAV=1, and IALGO=48 , -12 , else 0 NELMDL 可以取负值。如果初始波函数采用随机赋值,即 ISTART=0 , INIWAV=1 ,那么很可能开始的值比较离谱,那么在第一步核运动循环之前采用 NELMDL (负值)步的非自洽(保留初始的 H )步计算将减少计算所需的时间。 ? EDIFF :指定电子自洽循环的全局中断条件,用于控制收敛精度。取值:实数,缺省值: 10 -4 注意,即使 EDIFF=0 , NELM 步电子自洽循环也会执行。 ? EDIFFG :指定离子弛豫循环的中断条件,用于控制核运动的收敛精度。取值,实数,缺省值: 10*EDIFF EDIFFG0 在两个离子步的总自由能之差小于 EDIFFG 时停止 EDIFFG0 在所有的力都小于 EDIFFG 时停止。 EDIFFG=0 在 NSW 步弛豫后停止 此参数不支持 MD ,仅用于弛豫。 ? NSW :给出最大离子步数。 取值:整数,缺省值: 0 。 ? NBLOCK , KBLOCK :取值:整数,缺省值: NBLOCK = 1 , KBLOCK = NSW 在 NBLOCK 离子步后对成对相关函数和 DOS 进行计算,并且把离子配置写入 XDATCAR 文件。 在 KBLOCK*NBLOCK 步主循环后平均的成对相关函数和 DOS 被写入 PCDAT 和 DOSCAR 文件。 ? IBRION :决定离子怎样更新和运动。取值: -1~3 , 5~8 ( -1- 无更新, 0-MD , 1-RMM-DIIS , 2- 共轭梯度算法, 3-Damped MD , 5,6 :有限差分, 7,8 :密度函数扰动理论),缺省值: if NSW=0/1 , -1 , else 0 这个参数是和 ISIF, IALGO/ALGO 一起决定怎么算的最重要的参数。 1~3 是三种弛豫的方法,根据 ISIF 决定是否固定离子位置、晶胞大小和形状,在 INCAR 中必须设置参数 POTIM 。 0 是标准的 ab-initio MD ,不受 ISIF 影响,即不改变晶胞大小和形状。 5~8 支持 Hessian Matrix 和 phonon frequency 的计算以及部分固定的 MD 。 ? POTIM : IBRION=0 时,给出 MD 每步步长( fs ), IBRION=1~3 时,给出最小化的度量常量。取值:实数,缺省值: IBRION=0 无缺省,必须指定, IBRION=1,2,3 0.5 ? ISIF :决定是否计算应力张量以及弛豫中晶胞变化的自由度。取值: 0~6 ,缺省值: if IBRION=0(MD) 0 else 2 ISIF │ calculate │ calculate │ relax │ change │ change │ force │ stress tensor │ ions │ cell shape │ cell volume ---- ┼ ------- ┼ ----------- ┼ ------ ┼ --------- ┼ --------- 0 │ yes │ no │ yes │ no │ no 1 │ yes │ trace only │ yes │ no │ no 2 │ yes │ yes │ yes │ no │ no 3 │ yes │ yes │ yes │ yes │ yes 4 │ yes │ yes │ yes │ yes │ no 5 │ yes │ yes │ no │ yes │ no 6 │ yes │ yes │ no │ yes │ yes 7 │ yes │ yes │ no │ no │ yes trace only means that only the total pressure is correct ? IWAVPR :决定波函数和 / 或电荷密度怎样从一个离子配置向下一个离子配置进行推测。取值: 0~3 , 10~13 ( 0- 无推测, 1,11- 用原子电荷密度进行简单推测, 2,12- 二阶推测, 3,13- 混合前两种方法),缺省值: if IBRION=0(MD),1,2(relaxation) 2 else( 静态计算 ) 0 推测 结果保存在外部文件 TMPCAR 中,取值 +10 则全部使用内存,不保存此文件。 ? ISYM :决定是否使用对称性。取值: -1~3 ( -1,0- 不使用, 1,2,3- 使用),缺省值: if 使用 US-PP 1 , if 使用 PAW 2 ISYM=2 使用一种效率更高也更节省内存的电荷密度对称性, ISYM=3 时仅考虑力和应力张量的对称性,而电荷密度是非对称的。 ? SYMPREC :决定 POSCAR 文件中给出的位置的精度。取值:实数,缺省值: 10 -5 ? LCORR :决定是否对非完全自洽计算中的力进行 Harris 修正。取值: .TRUE./.FALSE. ,缺省值: .TRUE. ? TEBEG, TEEND :控制从头分子动力学计算中的起始温度和最终温度( MD 有效)。取值:实数,缺省值: TEBEG = 0 TEEND = TEBEG 注意 VASP 的温度定义与实际温度有细微的差别,所以 TEBEG=T × (N-1)/N , T 为实际要求的温度, N 为原子数。 ? SMASS :控制从头 MD 中的速度。取值: -3~0 ,缺省值: -3 微正则系综(总自由能不变), -2 保持初速度不变, -1 每 NBLOCK 步调整速度,来保证动能连续, =0 Nos é算法模拟正则系综 ? NPACO :成对相关函数的槽数。取值:整数,缺省值: 256 ? APACO :成对相关函数求值中的最大距离( ? )。取值:整数,缺省值: 16 简单说就是在不超过 APACO 的 NPACO 个距离上求成对相关函数 PCF 。 ? RWIGS :给出 Wigner-Seitz 半径, DOS 计算用。取值:实数数组,缺省值:从 POTCAR 文件中读取 ? NELECT :总电子数,如果系统不是电中性的就必须设置,所带电荷作为均一的背景电子气考虑。取值:实数,缺省值: - ( 价电子数),由 POSCAR 和 POTCAR 文件自动决定(通常不必给出)。 ? NUPDOWN 上下自旋成分间的电子数之差。取值:整数,缺省值:未设置(此时将进行完全弛豫) ? EMIN, EMAX : DOS 求值的最小 / 最大能量。取值:实数,缺省值: EMIN = - (lowest KS-eigenvalue - Δ ) , EMAX = - (highest KS-eigenvalue - Δ ) ? ISMEAR :决定每个波函数的部分占位 f nk 如何设置。取值: -5 | -4 | -3 | -2 | 0 | N ( -5- 带有 Blochl 修正的四面体方法 , -4- 不带 Blochl 修正的四面体方法 , -3- 根据 INCAR 文件中提供的 smearing 参数执行循环, -2- 从 WAVECAR 文件中读取 , -1- Fermi-smearing , 0- Gaussian smearing , 0- method of Methfessel-Paxton order N ,缺省值: 1 采用部分占位波函数,用一个函数来平滑积分,尤其是对于金属体系可减少 k 点。 ? SIGMA :决定 smearing 的宽度( eV )。取值:实数,缺省值: 0.2 ? ALGO :指定电子最小化算法。取值: Normal(blocked Davidson block iteration scheme)/VeryFast(RMM-DIIS)/F ast ( 前两个算法的混合 )/All( 波函数的所有带同时更新 )/ Damped( damped velocity friction algorithm ) ,缺省值 : Normal ? IALGO :指定主算法(整数选择算法)。取值: 8( 共轭梯度算法 )/38 (Davidson block iteration scheme) /48(RMM-DIIS) ,缺省值: 38 算法是最重要的参数之一。一般 VASP 推荐使用的是以上三种算法,一般来说 8/38 是初期比较快收敛,在接近平衡时采用 48 较快,在初期或 MD 时使用 48 可能会遇到不收敛的情况。也可以使用 ALGO 参数来替代 IALGO ,设置 Fast , VASP 会先用 38 ,再自动切换到 48 。各种算法只要收敛,结果应该一致。 另一个可能有用的选项是 -1 。不进行实际的计算,只对重要的步骤做计算测试,并将测试得到的各部分耗时输出到 OUTPUT 中。 ? VOSKOWN :决定是否使用 VWN 插值算法。取值: 0( 不使用 )/1( 使用 ) ,缺省值: 0 如果使用了 PW91 泛函或需要计算磁性质时可以设为 1 使用。 ? Mixing-tags : w IMIX :混合的类型,取值:整数,缺省值: 4 w AM IX :线性混合参数。取值:实数,缺省值: 0.8 ( US-PP ), 0.4 ( PAW ) w AMIN :最小混合参数。取值:实数,缺省值: 0.1 w BMIX : Kerker 混合方案的截断波向量。取值:实数,缺省值: 1.0 w AMIX_MAG : 磁化过程的线性混合参数。取值:实数,缺省值: 1.6 w BMIX_MAG : 磁化过程的 Kerker 混合方案的截断波向量。取值:实数,缺省值: 1.0 w WC : Broyden 混合方案中每步的加权因子。取值:实数,缺省值: 1000.0 w INIMIX : Broyden 混合方案中的初始混合类型。取值:整数,缺省值: 1 w MIXPRE : Broyden 混合方案中的预处理类型。取值:整数,缺省值: 1 w MAXMIX : Broyden 混合器中存储的最大步数。取值:整数,缺省值: -45 值得注意的是,在 MD 或者弛豫的时候,设置 MAXMIX ( 0, 一般约 3 倍的电子 SC 步数)可能会大大减少核运动步数,但同时也会增加对内存的要求。 ? LWAVE,LCHARG :决定是否把波函数(或电荷密度)写入外部文件 WAVECAR (或 CHGCAR 和 CHG )中。取值: .TRUE./.FALSE. ,缺省值: .TRUE. ? LVTOT :决定是否把总局域势写入外部文件 LOCPOT 中。取值: .TRUE./.FALSE. ,缺省值: . FALSE. ? LELF :决定是否创建 ELFCAR 文件。取值: .TRUE./.FALSE. ,缺省值: . FALSE. ELFCAR 用于保存 ELF(electron localization function) 。 ? LORBIT :和适当的 RWIGS 一起决定是否创建 PROCAR 或 PROOUT 文件。取值: 0 | 1 | 2 | 5 | 10 | 11 | 12 ,缺省值: 0( 创建 DOSCAR 和 PROCAR 文件 ) ? NPAR :用于控制 VASP 切换到带间并行模式。取值:整数,缺省值:总节点数。 每一个节点计算一个带,可以提高并行效率,减少通讯量,但可能会大幅增加内存的需求。 ? NBANDS :给出计算中实际的总能带数。取值:整数,缺省值: NELECT/2+NIONS/2 (非自旋), 0.6*NELECT + NMAG (自旋) NBANDS 的取值应使计算中包含相当数量的空带。因为计算需要大量的空带,至少要求 1 个空带(否则 VASP 会给出警告)。 NBANDS 对于解决内存需求非常重要。一般 NBANDS 在 NELECT/2+NIONS/2 以上可以得到较为精确的结果,但如果内存不够就只能减少 NBANDS ,在牺牲精度和体系大小之间平衡了。 POTCAR 文件 赝势文件,最重要的输入文件之一。可以理解为分子力学模拟中的力场文件,但包含的信息更多。 VASP 将各元素优化的 INCAR 里的参数也包含在该文件中,作为支持 PREC 的缺省选择。 通常各元素的 POTCAR 文件已经包含在 VASP 软件包中的赝势库里了,用户需要做的是确定自己具体需要哪几种赝势,然后按照 POSCAR 文件里的顺序,将所选择的 POTCAR 文件按顺序连接起来就可以了。如以下命令: cat file1 file2 file3 POTCAR 赝势库中的赝势文件可以分为以下几类: l 根据产生方法的不同有 Ultra-soft 赝势( USPP )和投影扩充波赝势( PAW ); l 根据交换关联函数的不同有 LDA ( local density approximation )和 GGA ( generalized gradient approximation ,又可以再分为 PW91 和 PBE ); l 根据半芯态的不同元素 A 的赝势文件还可以分为 A , A_sv 和 A_pv ; l 根据选取的不同截断能量( ENMAX )元素 A 的赝势文件还可以分为 A , A_s 和 A_h 。 VASP 的赝势文件放在目录 ~/vasp/potentials 下,该目录又包含五个子目录: pot , pot_GGA , potpaw , potpaw_GGA , potpaw_PBE ,其中每个子目录对应一种赝势形式: pot == PP, LDA ; pot_GGA == PP, GGA ; potpaw == PAW, LDA ; potpaw_GGA == PAW, GGA, PW91 ; potpaw_PBE == PAW, GGA, PBE 。每个目录中每种元素根据截断能量和半芯态的不同还会有多个对应的赝势文件存在。 在具体选取时可以参考各版本同目录下的 V_RHFIN 和 PSCTR 文件,这两个文件说明了该版本的赝势是如何生成的。 选好所要使用的赝势之后,进入对应的目录,会看到里面有四个文件: POTCAR.Z , PSCTR.Z , V_RHFIN.Z 和 WS_FTP.LOG 。现在需要用到的是第一个,把各元素的该文件解压( zcat POTCAR.Z file ),然后用 cp 或 mv 命令把这些文件移到工作目录里,再用 cat 命令把它们合并到 POTCAR 中,就得到了我们需要的 POTCAR 。注意要记住这里元素的排列顺序,以后在 POSCAR 文件中各元素的排列就是按照这个顺序。 POSCAR 文件 位置文件。描述所计算体系的晶胞参数、原子个数及晶胞中原子的位置,以及分子动力学计算时原子的初始速度。 POSCAR 文件示例: Si-fcc 5.43 0.0 0.50 0.50 0.50 0.00 0.50 0.50 0.50 0.00 2 Direct 0.0 0.00 0.00 0.25 0.25 0.25 POSCAR 文件的结构: 第 1 行:任意文字注释。 第 2 行:晶格常数( ? ),也是晶矢的缩放系数,后面所有长度值得自原值除以此值。 a=b=c 时取 a 即可,否则一般取三者最大值,若取负值,则为晶胞体积( ? 3 )。 第 3-5 行:定义晶矢。 第 6 行:每种元素的原子个数,特别注意顺序 , 要与下面的坐标顺序以及 POTCAR 中的顺序一致。 第 7 行:可省略,无需空行。 做动力学时,用于指定是否需要固定部分原子的坐标。若是,此行以‘ S ’或者‘ s ’作为首字母即可。 第 8 行开始为原子的坐标位置,格式为 option line coordinate1 of element1 coordinate2 of element1 ... coordinateN of element1 option line coordinate1 of element2 coordinate2 of element2 ... coordinateM of element2 ... 其中, option line 指定输入坐标的格式,除了第一个以外,如果后面的输入格式同前,则都可以无空行省略。 option line 可指定的输入坐标格式有两种: ‘ D ’ or ‘ d ’ for direct mode ‘ C ’ or ‘ c ’ or ‘ K ’ or ‘ k ’ for cartesian mode 顾名思义,前者是定义在三个晶矢方向上的坐标: R=R1×x+ R2×y +R3×z , R1,R2,R3 为前面的晶矢, x,y,z 为输入的三个坐标, R 为原子坐标位矢,是相对于晶矢给出的,而后者则是以笛卡尔坐标系来给出原子的绝对坐标,实际就是将直角坐标除以前面第二行定义的晶胞常数后得到的坐标值。 如果第 7 行设定为 S(Selective Dynamic) ,则可以用以下形式定义各坐标是否可以移动: Selective dynamics Cartesian 0.00 0.00 0.00 T T F 0.25 0.25 0.25 F F F KPOINTS 文件 设置布里渊区 k 点网格取样大小或能带结构计算时沿高对称方向的 k 点。 一般来说, k 点越密越多,计算精度也就越高,但计算成本也会越高。因此,对于原子数较多的体系的计算,需要谨慎的尝试 k 点数目,在避免或者预先评估 wrap-around error 的前提下尽量减少 k 点数目。 KPOINTS 文件示例: k-points along high symmetry lines 11 Reciprocal 0.00 0.00 0.00 1.00 0.05 0.00 0.05 1.00 …… 0.05 0.00 0.50 1.00 KPOINTS 文件结构: 第 1 行:注释行。 第 2 行: k 点总数,或者‘ 0 ’(自动生成网格( Automatic k-mesh generation ))。 如果是前者,给出 k 点总数,又分为两种情况: M :全手动( Entering all k-points explicitly ),手动输入即自定义各个 k 点的坐标和权重,推荐只在能带计算时使用。此时: 第 3 行:输入格式标识。直角坐标( Cartesian )或倒易坐标( Reciprocal )。同样的,‘ c ’、‘ C ’、‘ k ’、‘ K ’ for Cartesian ,其他首字母则自动切换到 Reciprocal 。 第 4~n 行 : 逐个 k 点的坐标描述。格式为“ x y z W ”。其中“ x y z ”是该点的三个坐标, W 是权重。所有 k 点的权重相互之间的比例对了就行, VASP 会自动归一的。 注意 C 坐标和 R 坐标的定义: C : k=(2π/a)(x y z) R : k=x*b1+y*b2+z*b3 ( b1-b3 为倒易晶矢) 这里“ x y z ”只是代表了坐标的顺序,与坐标轴无关。 一般如非必要,可以先用自动模式生成 k 点, VASP 会自动生成一个简约化后的 k 点矩阵,存于 IBZKPT 文件,可以直接复制里面的数据到 KPOINTS 文件中使用,这也是该输入法的主要用途,可以减少重复自动生成格点的时间。另一个用途是为了做精确的 DOS ( Density of status )计算,由于这类计算所需的 k 点数极大,通过全手动尽可能的优化 k 点也就必需了。 L :半手动 / 线形模式( Line-mode ):在计算能带结构时使用,此时需要精确地选取 k 点,在指定的高对称性方向上生成指定数目的 k 点。此时: 第 2 行:指定两点间生成的 k 点数,不同于全自动的总 k 点数。 第 2.5 行:‘ L ’表示是线形模式。 第 3 行:输入格式标识,同前。 第 4~n 行:每行描述一个点,格式为“ x y z ”。每两行的点连成一条直线,在两点间生成指定数目的 k 点。每隔两行间以空行区分,例如: k-points along high symmetry lines 10 Line-mode Reciprocal 0 0 0 0.5 0.5 0 0.5 0.5 0 0.5 0.75 0.25 最常用的方法是让程序自动生成 k 点网格,用户只需定义网格取样大小即可。此时: 第 2 行: 0 第 3 行:生成 k 点的方法。 “ A ”:全自动模式,可以看作以 Г 点为圆心以 l 为半径做圆,当然各晶矢不同时,相应的圆就被拉成了椭圆,以确保三个倒格晶矢方向上覆盖的 k 点数都为 l “ G ”: Г/Gamma 方法 “ M ”: Monkhorst-Pack 方法 其它首字母:高级模式,就是用 C 坐标或 R 坐标直接输入新的晶矢,一般不使用 第 4 行:在各个晶矢方向上分割各晶矢的点数。一般为奇数,使得产生的 k 点是以 Gamma 点为中心的。 第 5 行:是否移动网格点以及移动多少,也即偏移原点的位矢,一般设成“ 0 0 0 ”,表示不移动。 例如: Automatic generation 0 Monhkorst-Pack 9 9 9 0.0 0.0 0.0 VASP 的输出文件 主要包括: l OUTCAR :包含运行 VASP 作业后得到的绝大部分计算结果以及每步迭代的详细情况; l CHG, CHGCAR :给出体系的电荷密度。两个文件内容相同,但前者的数据精度比后者略低一些; l DOSCAR, EIGENVAL :分别给出所计算体系的电子态密度和本征值。两个文件中的能量值都是绝对的; l WAVECAR :给出所计算体系的电子波函数,二进制文件,不可编辑; l OSZICAR :包含每次迭代或离子移动情况的简单汇总; l CONTCAR :给出离子进行弛豫时,每次移动后体系的晶格参数,与 POSCAR 内容相同; l PCDAT, XDATCAR :给出有关分子动力学模拟中的一些结果,如配对相关函数;
个人分类: VASP|4270 次阅读|0 个评论
vasp中HCP结构基矢的书写
swx0789 2011-2-26 14:13
HCP结构的Mg,按实验晶格常数a = 3.21 angstrom, c = 5.21 angstrom来写基矢的话, 简单的方式: a 1.000000 0.000 0.000 -0.5sqrt(3)/20.0000 0.000 0.0000c/a
个人分类: 知识储备|5619 次阅读|0 个评论
[转载]用VASP计算氢分子的能量
热度 2 guolingju 2010-9-19 16:20
氢气分子的解离能,也就是结合能,根据资料中给出的是约4.48eV。(G. Kresse J. Hafner, Surface Sci. 459 (2000) 287) 为此,首先要计算一个氢气分子的孤立能量,再减去两个孤立氢原子能量,将得到氢气分子的结合能。 先计算单个原子能量,选取PAW_PBE文件夹下的H下面的POTCAR 用到的其他输入文件如下: INCAR: SYSTEM = H atom in a box ISMEAR = 0 ! Gaussian smearing SIGMA = 0.01 ENCUT = 350.0 KPOINTS: Automatic mesh 0 Monkhorst Pack 1 1 1 0. 0. 0. POSCAR: H atom in a box 1.0 ! universal scaling parameters 7.0 0.0 0.0 ! lattice vector a(1) 0.0 8.0 0.0 ! lattice vector a(2) 0.0 0.0 9.0 ! lattice vector a(3) 1 ! number of atoms cart ! positions in cartesian coordinates 0 0 0 用上述文件计算得到 TOTEN(H) = +0.000854eV (H atom),用PAW_GGA得到类似结果。 然后计算氢分子能量,用类似的输入文件: INCAR: SYSTEM = H2 dimer in a box ISMEAR = 0 ! Gaussian smearing NSW = 5 ! 5 ionic steps IBRION = 2 ! use the conjugate gradient algorithm ENCUT = 350.0 POTIM = 0.1 KPOINTS: Automatic mesh 0 Monkhorst Pack 1 1 1 0. 0. 0. POSCAR: H2 molecule in a box 1.0 ! universal scaling parameters 8.0 0.0 0.0 ! lattice vector a(1) 0.0 8.0 0.0 ! lattice vector a(2) 0.0 0.0 8.0 ! lattice vector a(3) 2 ! number of atoms cart ! positions in cartesian coordinates 0 0 0 ! first atom 0 0 0.5 ! second atom 根据定义,E=-(TOTEN(H2)-2*TOTEN(H)) = 6.68eV,键长 = 0.75102 A。比文献中的结合能大了不少。 出现上述结果的原因是在计算单个H原子能量的时候没有指定基态为spin polarized state。为了得到正确的解离能,计算单个H原子能量的时候需要指定ISPIN=2。加上以上的tag后,TOTEN(H atom )=-1.10351 eV,用公式重新计算解离能: E_binding=-(TOTEN(H2)-2*TOTEN(H )) = 4.48eV 和文献吻合。另外,文献 中详细讨论了氢分子的解离能的计算方法和结果。 原文地址 http://new.quantumchemistry.net/Experience/CommonSoftwares/VASP/ConcereteExample/200512/259.html
个人分类: 第一性原理(vasp)|5459 次阅读|3 个评论
VASP学习笔记(1)
jizw0704 2010-5-31 22:46
内容:什么是VASP、优点、主要输入文件 一 VASP is acomplex package for performing ab-initio quantum-mechanical molecular dynamics (MD) simulations using pseudopotentials or the projector-augmented wave method and aplane wave basis set. The approach imple-mentedin VASP is based on the (?nite-temperature) local-density approximation with the free energy as variationa l quantity and anexact evaluationof the instantaneous electronic ground state at each MD time step. (译文:) 二 计算的体系十余第一行元素和过渡金属;体系计算快;基于Linux/Unix等平行计算;自动对称分析;加速收敛 三 一个最简单的VASP计算体系,应该包括四个输入文件: INCAR(计算细节);POSCAR(体系坐标);POTCAR(赝势);KPONITS(k空间描述)。 吉宗威
个人分类: 观点|5018 次阅读|0 个评论
关于VASP中光学optics.F程序的编译(ifort+mkl)
Irene 2009-4-13 15:35
从VASP4.4.4和VASP.4.4.5开始,VASP支持简单的光学性质的计算。其具体实现程序是optics.F。其中一些必需的后处理程序,可以向JürgenFurthmüller发信要。 此程序可以使用ifort和mkl编译出来,用pgi编译它说optics.f语法错,不知道为什么。然后用编译成功的程序处理已经得出OPTIC文件的一个目录,满心欢喜,结果给我了这些东西: scanningPOSCAR,KPOINTSandOPTIC readingKPOINTSandOPTIC setuptransitionenergiesandamplitudes DOSandjointDOS forrtl:severe(174):SIGSEGV,segmentationfaultoccurred ImagePCRoutineLineSource optics0804A8DEUnknownUnknownUnknown optics080502A7UnknownUnknownUnknown optics0804A594UnknownUnknownUnknown libc.so.600314E33UnknownUnknownUnknown optics0804A4A1UnknownUnknownUnknown forrtl:severe(174):SIGSEGV,segmentationfaultoccurred ImagePCRoutineLineSource libc.so.600360ECEUnknownUnknownUnknown libc.so.6003614BAUnknownUnknownUnknown optics08086FFDUnknownUnknownUnknown optics0806A899UnknownUnknownUnknown optics0806C183UnknownUnknownUnknown optics0806B296UnknownUnknownUnknown optics0806D634UnknownUnknownUnknown libpthread.so.00054A8A0UnknownUnknownUnknown optics080502A7UnknownUnknownUnknown optics0804A594UnknownUnknownUnknown libc.so.600314E33UnknownUnknownUnknown optics0804A4A1UnknownUnknownUnknown 貌似段错误。 具体编译方法是先编译optics上一级目录中的文件,得到prec.oconstant.oerror.otet.o ,并把它们拷贝到optics目录下。 然后再到optics目录下编译optics 其中makefile的头几行修改成如下: #THISISANEXAMPLEFORINTEL-LINUXPLATFORMSRUNNINGPGFCOMPILERS.CUSTOMIZE! .SUFFIXES:.inc.f.F MAKE=/usr/bin/make CPP_=/usr/bin/cpp-P-C CPP=$(CPP_)\ -Dkind8-DNGXhalf-DCACHE_SIZE=1000-DPGF90-Davoidalloc $*.f FC=pgf90-Mfree DEBUG=-g-O0 OFLAG=-O2-tpp6 DOUBLE=-r8 SINGLE= TIMING= #TIMING=-pg #binding BIND= LIB=-L../../vasp.4.lib-ldmy-L/usr/local/lib-llapack-lblas ----------------------------------------------------------------------- optics.F与vasp的版本无关,我4.5.5到3.6.25都可以编译的过去。因为它link时,需要的 只是vasp.4.lib中的文件,而vasp.4.lib中的文件基本是不升级或更新的。 原文地址http://new.quantumchemistry.net/Experience/CommonSoftwares/VASP/CompileInstallation/200512/187.html
个人分类: 生活点滴|9476 次阅读|0 个评论
如何用VASP计算单个原子的能量[权威版]
Irene 2009-4-13 15:30
这是VASP作者给出的解答,所以算是权威了.原文如下: Theenergyzero .. inVASPallenergiesarereferredtothethereferencestateforwhich thepotentialwasgenerated! thisisinmostcasesnottherealgroundstateoftheatom .. todeterminedtheenergyofthegrounstateoftheatomplacetheatom inalargernoncubicboxtobreakinitialsymmetry(i.e. 11Ax10Ax9A) usetheGpointonly INCAR: ISPIN=2!spinpolarized ISMEAR=0;SIGMA=0.2!forsmallsigmaconv.forTMisdiff. MAGMOM=2!initialmagneticmoment oneshouldusetheenergyvalueenergywithoutentropyoftheOUTCARfile sincethiscovergesmostrapidlytothecorrectenergyforsigma0 .. Ecoh=E_total-n*Eatom 大约翻译如下: 在VASP中,所有的能量是相对于产生赝势的组态来说的,所以并不能将计算得到的能量当成真正的原子的基态能量。 为了得到原子的基态能量,将原子放在一个非正方体的晶格内,比如说11Ax10Ax9A的晶格(这样做是为了消除简并)。 KPOINTS只用G撒点 大概的INCAR文件可以如下: ISPIN=2!spinpolarized ISMEAR=0;SIGMA=0.2!forsmallsigmaconv.forTMisdiff. MAGMOM=2!initialmagneticmoment 计算结束后,应该用OUTCAR中不含entropy的那一项能量,因为它通常更快的收敛到sigma=0的正确值。最后计算结合能的公式应该为 Ecoh=E_total-n*Eatom 原文地址http://new.quantumchemistry.net/Experience/CommonSoftwares/VASP/ConcereteExample/200512/250.html
个人分类: 生活点滴|15409 次阅读|0 个评论
VASP电荷密度差的计算
Irene 2009-4-13 15:20
在文献中,经常见到利用电荷密度差(chargedensitydifference)来分析成键的过程或是结构弛豫前后电荷的转移,当然,也有人用来分析基态和激发态的电荷分布差别等情况。不过,尽管似乎都叫电荷密度差,但具体的定义是不大一样的。 这里主要是讨论在VASP中如何得到用来分析成键前后电荷转移的电荷密度差。 此时电荷密度差定义为: delta_RHO=RHO_sc-RHO_atom 其中RHO_sc为自洽的面电荷密度,而RHO_atom为相应的非自洽的面电荷密度,是由理想的原子周围电荷分布堆彻得到的,即为原子电荷密度的叠加(asuperpositionofatomicchargedensities)。 不同晶面的RHO_sc可由自洽计算的CHG或CHGCAR得到; 而计算RHO_atom所需的CHG或CHGCAR可由下述非自洽计算得到: 仍使用原来自洽计算时的四个输入文件,但INCAR中需要设置ICHARG=12和NELM=0,其他设置不变。 需要特别注意的,应保持前后两次计算(自洽和非自洽)中的FFT-mesh一致。因为,只有维数一样,我们才能对两个RHO作相应的矩阵相减。不过,只要按上一段提到的设置方法做就行了,无须特别增加别的设置。 数据处理: 矩阵相减:使用MatLab或是自已写个小程序。 作图:Origin或MatLab。 原文地址http://new.quantumchemistry.net/Experience/CommonSoftwares/VASP/ConcereteExample/200512/91.html
个人分类: 生活点滴|12659 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-23 09:41

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部