# VASPTemplate **Repository Path**: xczics/vasptemplate ## Basic Information - **Project Name**: VASPTemplate - **Description**: 快速准备你的VASP输入文件 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-03-26 - **Last Updated**: 2023-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VASPTemplate ### 介绍 快速准备VASP输入文件 ### 软件架构 一些的python或bash脚本 ### 咋用啊 把VASPTemplates整个文件夹下载到随便哪个地方就行,如果想在任何地方都能运行vt.py,需要把这个目录添加到环境变量中。 ### 工作方式 进行VASP计算需要准备4个文件:INCAR、POSCAR、POTCAR、KPOINTS。其中POSCAR一般直接由VESTA或其他软件导出,而INCAR、POTCAR、KPOINTS的编写则相对比较繁琐。 在一个计算过程中,INCAR中往往只有少数的TAG需要修改,所以可以尝试先编写好一些常用的模板,而每次使用时只修改需要变动的参数。 在计算一系列结构时,如果体系中的原子种类不变,POTCAR往往可以直接复制使用,但只要原子种类或出现顺序有细微变化,就需要重新拼接赝势文件。 这个小工具(其实这类工具应该做的人非常多吧)可以帮助我们快速地构造VASP的输入文件。我们可以将除POSCAR外的三个文件所需的信息写在一个文件中,然后利用vt.py脚本来生成这三个文件。 我们姑且把记录了这三个文件所需信息的文件叫做“VT”文件吧。 那VT文件需要哪些信息来生成这三个文件呢? #### 指定结构文件 首先,需要指定这个计算的结构是那个POSCAR文件。当然,默认肯定是POSCAR啦,但如果把结构文件保存成了其他名称的话,也可以加这么一行来表示: %POSCAR=随便建的一个结构.vasp #### 指定计算开始的文件夹 然后,需要指定一个放计算所需的四个输入文件的文件夹。 %PSEUDO_DIR=./随便算算/ 只能是不存在的文件夹,如果已经存在会报错。如果不设置,默认会是“CALC” #### 指定赝势文件的根目录 第三,需要指定存放赝势文件的根目录,这个目录下应该是各个元素所对应的赝势。 例如,我使用的超算系统中,赝势文件存放在`/opt/vasp-psudopotential/`中,而又分几个不同种类的赝势:`paw paw_gga paw_pbe pot pot_GGA` 那么,如果我想用PBE赝势进行计算,我应该这么写: %PSEUDO_DIR=/opt/vasp-psudopotential/paw_pbe/ #### 指定每一个元素所用的赝势 第四,因为往往一个元素会提供好多种赝势,硬的,软的,pv的,sv的,所以需指定每一个元素所使用的具体赝势: %POT-Rb=Rb_sv 格式是`%POT-元素名=对应的赝势文件夹名称` 当然,也可以不设置,默认值是不加后缀的,中规中矩的那个。 #### 指定KPOINTS 当然,KPOINTS也是要给的啦,直接用 `%START KPOINTS` 和 `%END KPOINTS`把你要设置的KPOINTS部分框起来就行了: %START KPOINTS K_Mesh Generated 0 Gamma 1 1 1 0.0 0.0 0.0 %END KPOINTS #### INCAR TAG 当然,该输入的INCAR文件肯定少不了,直接写上去就完事了: #electronic settings SYSTEM=Sui-Bian-Suan-Suan #ProjectName ISTART=0 #A newly calculation task EDIFF=1d-9 #电子迭代收敛标准 NELM=100 #迭代最大步数 ENCUT=600 #平面波截断能 #---------------------------# #ionic settings IBRION=-1 #不更新离子步 #--------------------------# #CPU settings NCORE=8 KPAR=1 #-------------------------# #一些奇奇怪怪的东西都不输出 LWAVE = .FALSE. #whether the wavefunctions are written to the WAVECAR file at the end of a run. LCHARG = .FALSE. #whether the charge densities (files CHGCAR and CHG) are written. #### 完成 在一个VT文件中写了这些东西之后,就可以用`vt.py XiaJiErSuan.vt`来生成输入文件了。 #### 有个鬼用 当然,到这里还只是简单把这几个文件放到一个文件里而已,有个🔨用哦。 不过,这个工具提供了“模板”功能,这也是我建的这个仓库也取名“VASP Templates”的原因。 可以在VT文件中使用`%INCLUDE=模板名`来“引用”一个模板。 模板也是VT文件,任何一个VT文件都可以被当成模板引用。 一个VT文件中可以引用多个模板,被引用的模板中也可以引用其他的模板。 但是注意避免循环引用,我反正是没有写检查代码的,你要是循环引用了你就等着死机吧~ #### 模板放哪里? 当遇到`%INCLUDE=模板名`后,vt.py会先尝试将模板名当成一个带路径的文件名来读取,如果读不到,就会试着在模板名后面加个.vt来读取。 如果直接无脑读读不到,那么vt.py会依次在这几个地方来找模板文件: 1. 系统环境变量“VTPATH”中定义的目录中; 2. 源文件“library/settings.py”中vtlist=[]列出的目录中; 3. 放源码的library文件夹中 #### VT 参数 如果你想写一个通用点的模板,那么你可以在需要改的地方用%{参数名}的方式定义“VT 参数”,然后在引用后使用 %参数名=参数值 的方式来给定值。 例如: #这是被引用的vt文件(这行不在文件里) #scf project #electronic settings SYSTEM=scf-%{ProjectName} #ProjectName ISTART=0 #A newly calculation task EDIFF=1d-9 #电子迭代收敛标准 NELM=100 #迭代最大步数 ENCUT=600 #平面波截断能 #---------------------------# #ionic settings IBRION=-1 #不更新离子步 #--------------------------# #CPU settings NCORE=6 KPAR=4 #-------------------------# #一些奇奇怪怪的东西都不输出 LWAVE = .FALSE. #whether the wavefunctions are written to the WAVECAR file at the end of a run. LCHARG = .FALSE. #whether the charge densities (files CHGCAR and CHG) are written. 这里%{ProjectName}中的值会被下面文件中规定的值替换: #这是引用模板文件的文件(这行不在文件里) %INCLUDE=上面那个文件 %ProjectName=XiaJiErSuan 当然,参数名不能是纯数字或前面提到的 POT-X、INCLUDE、START、END等这些保留字。 如果参数名是纯数字,那么就需要在INCLUDE时指定参数的值: #这是被引用的vt文件(这行不在文件里) %START KPOINTS K_Mesh Generated 0 Gamma %{1} %{2} %{3} 0.0 0.0 0.0 %END KPOINTS 引用时要在模板名后面加上参数值的列表: #这是引用模板文件的文件(这行不在文件里) %INCLUDE=上面那个文件(6,6,6) #### INCAR TAG替换 在模板中定义好的INCAR TAG值,会被后面出现的值给无情的替换掉。 例如,如果在模板文件中定义了一些INCAR TAG的参数: ISTART=0 #A newly calculation task EDIFF=1d-9 #电子迭代收敛标准 NELM=100 #迭代最大步数 ENCUT=600 #平面波截断能 但是引用之后,又定义了一次: %INCLUDE=上面那个文件 NELM=60 那么最终生成的INCAR文件将会是这样: ISTART=0 #A newly calculation task EDIFF=1d-9 #电子迭代收敛标准 NELM=60 ENCUT=600 #平面波截断能 注意:NELM参数的值被替换成了60,但位置还是没有变。 这个机制的设置是为了让强迫症患者(比如说我)可以生成可读性比较强的INCAR文件。 #### 关于注释 VT文件中所有#开头的行都被认为是INCAR文件中的内容而直接写入INCAR中 如果想记录一些只在VT文件中可见的注释,那么用##开头 #这行注释会原封不动地出现在INCAR文件中 ##这行注释会被vt.py无视 #### 可执行的vt文件 所有的vt文件都可以当作可执行文件运行。只要在第一行加上:`#!/放/代码/的/目录/vt.py` #### 一个例子🌰: 展示一个我正在使用的vt文件的例子: #!/home/ubuntu/VASPTemplates/vt.py %INCLUDE=VC_RELAX %INCLUDE=POTCAR-PBE-NORMAL %POT-Rb=Rb_sv %CALCDIR=GGA_sv %ProjectName=Rb2O %INCLUDE=EASY_KPOINTS(6,6,6) %NCORE=6 %KPAR=4 它生成的INCAR文件还是比较好看的: #This INCAR file was generated by VASPTEMPLATES Code provided by Zicong #The POTCAR used in this calculation are: # Rb /opt/vasp-psudopotential/paw_gga/Rb_sv/POTCAR.Z # O /opt/vasp-psudopotential/paw_gga/O/POTCAR #Generated date:2021/03/21-18:12:26 #---------------------------------------# #vc-relax project #------------------------ #electronic settings SYSTEM=Rb2O #ProjectName ISTART=0 #A newly calculation task EDIFF=1d-9 #电子迭代收敛标准 NELM=100 #迭代最大步数 ENCUT=700 #平面波截断能 #------------------------- #ionic settings ISIF=3 #vc-relax IBRION=2 #共轭梯度算法优化离子步 NSW=200 #最大迭代离子步 EDIFFG=-1d-6 #原子弛豫收敛标准,负号表示按力的收敛标准 #------------------------ #CPU settings NCORE=6 KPAR=4 #------------------------ #一些奇奇怪怪的东西都不输出 LWAVE = .FALSE. #whether the wavefunctions are written to the WAVECAR file at the end of a run. LCHARG = .FALSE. #whether the charge densities (files CHGCAR and CHG) are written. # 完 ### 下面这些是gitee自动给我生成的,我也不知道是啥 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)