1.1 结构优化1

这里主要分享怎样快速开始第一个结构优化过程。

Linux常用命令

目录操作

1 切换目录(cd)

{.line-numbers}
1
2
3
4
5
6
7
cd /                 //切换到根目录
cd /bin //切换到根目录下的bin目录
cd ../ //切换到上一级目录 或者使用命令:cd ..
cd ~ //切换到home目录
cd - //切换到上次访问的目录
cd xx(文件夹名) //切换到本目录下的名为xx的文件目录,如果目录不存在报错
cd /xxx/xx/x //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全

2 查看目录(ls)

{.line-numbers}
1
2
3
4
ls                   //查看当前目录下的所有目录和文件
ls -a //查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样
ls /bin //查看指定目录下的所有目录和文件

3 创建目录(mkdir)

{.line-numbers}
1
2
mkdir tools          //在当前目录下创建一个名为tools的目录
mkdir /bin/tools //在指定目录下创建一个名为tools的目录

4 删除目录与文件(rm)

{.line-numbers}
1
2
3
4
5
6
rm 文件名              //删除当前目录下的文件
rm -f 文件名 //删除当前目录的的文件(不询问)
rm -r 文件夹名 //递归删除当前目录下此名的目录
rm -rf 文件夹名 //递归删除当前目录下此名的目录(不询问)
rm -rf * //将当前目录下的所有目录和文件全部删除
rm -rf /* //将根目录下的所有文件全部删除【慎用!相当于格式化系统】

5 修改目录(mv)

{.line-numbers}
1
2
3
mv 当前目录名 新目录名        //修改目录名,同样适用与文件操作
mv /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录剪切到 /opt目录下面
mv -r /usr/tmp/tool /opt //递归剪切目录中所有文件和文件夹

6 拷贝目录(cp)

{.line-numbers}
1
2
cp /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录复制到 /opt目录下面
cp -r /usr/tmp/tool /opt //递归剪复制目录中所有文件和文件夹

7 搜索目录(find)

{.line-numbers}
1
find /bin -name 'a*'        //查找/bin目录下的所有以a开头的文件或者目录

8 查看当前目录(pwd)

{.line-numbers}
1
pwd                         //显示当前位置路径

文件操作

1 新增文件(touch)

{.line-numbers}
1
touch  a.txt         //在当前目录下创建名为a的txt文件(文件不存在),如果文件存在,将文件时间属性修改为当前系统时间

2 删除文件(rm)

{.line-numbers}rm 文件名link
1
rm -f 文件名           //删除当前目录的的文件(不询问)

3 编辑文件(vi、vim)

{.line-numbers}
1
vi 文件名              //打开需要编辑的文件

–进入后,操作界面有三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
命令模式
-刚进入文件就是命令模式,通过方向键控制光标位置,
-使用命令”dd”删除当前整行
-使用命令”/字段”进行查找
-按”i”在光标所在字符前开始插入
-按”a”在光标所在字符后开始插入
-按”o”在光标所在行的下面另起一新行插入
-按”:”进入底行模式
插入模式
-此时可以对文件内容进行编辑,左下角会显示 “– 插入 –””
-按”ESC”进入底行模式
底行模式
-退出编辑: :q
-强制退出: :q!
-保存并退出: :wq

操作步骤示例

1.保存文件:按”ESC” -> 输入”:” -> 输入”wq”,回车 //保存并退出编辑
2.取消操作:按”ESC” -> 输入”:” -> 输入”q!”,回车 //撤销本次修改并退出编辑

补充

{.line-numbers}
1
2
vim +10 filename.txt                   //打开文件并跳到第10行
vim -R /etc/passwd //以只读模式打开文件

4 查看文件

{.line-numbers}
1
2
3
4
cat a.txt          //查看文件最后一屏内容
less a.txt //PgUp向上翻页,PgDn向下翻页,"q"退出查看
more a.txt //显示百分比,回车查看下一行,空格查看下一页,"q"退出查看
tail -100 a.txt //查看文件的后100行,"Ctrl+C"退出查看

5 grep

{.line-numbers}
1
2
3
grep -i "the" demo_file              //在文件中查找字符串(不区分大小写)
grep -A 3 -i "example" demo_text //输出成功匹配的行,以及该行之后的三行
grep -r "ramesh" * //在一个文件夹中递归查询包含指定字符串的文

文件权限

1 权限说明

文件权限简介:’r’ 代表可读(4),’w’ 代表可写(2),’x’ 代表执行权限(1),括号内代表”8421法”
##文件权限信息示例:-rwxrw-r–
-第一位:’-‘就代表是文件,’d’代表是文件夹
-第一组三位:拥有者的权限
-第二组三位:拥有者所在的组,组员的权限
-第三组三位:代表的是其他用户的权限

2 文件权限

普通授权 chmod +x a.txt
8421法 chmod 777 a.txt //1+2+4=7,"7"说明授予所有权限

打包与解压

1 说明

{.line-numbers}
1
2
3
4
.zip、.rar        //windows系统中压缩文件的扩展名
.tar //Linux中打包文件的扩展名
.gz //Linux中压缩文件的扩展名
.tar.gz //Linux中打包并压缩文件的扩展名

2 打包文件

tar -zcvf 打包压缩后的文件名 要打包的文件
参数说明:z:调用gzip压缩命令进行压缩; c:打包文件; v:显示运行过程; f:指定文件名;
示例:

{.line-numbers}
1
tar -zcvf a.tar file1 file2,...      //多个文件压缩打包

3 解压文件

{.line-numbers}
1
2
3
4
tar -zxvf a.tar                      //解包至当前目录
tar -zxvf a.tar -C /usr------ //指定解压的位置
unzip test.zip //解压*.zip文件
unzip -l test.zip //查看*.zip文件的内容

原文链接:https://blog.csdn.net/m0_46422300/article/details/104645072

其他准备

安装好VASP、vaspkit,个人电脑安装好VESTA、MS或者qvasp等建模可视化软件中的一个。如果是租用超算,还需要准备好提交任务的脚本文件,一般工程师会帮我们编好,软件安装只需要给他们提供安装包或官网即可。

vaspkit运行的五种方式

方法一 :交换式菜单模式,直接输入vaspkit;

方法二 :命令+参数模式,适合批处理。如vaspkit -task 102 -kpr 0.03,详细介绍见vaspki-help, 注意部分功能不支持这种模式;

方法三 :利用bash管道传递参数,如echo -e “102\n2\n0.04\n”| vaspkit

方法四 :同样利用bash管道传递参数, (echo 102; echo 2; echo 0.04)|vaspkit

方法五 :vi cmd.in(文件名任意,非必须是cmd.in)包含以下三行内容

{.line-numbers}
1
2
3
102
2
0.04

然后运行vaspkit < cmd.in,产生KPOINTS文件,其他命令格式类似。

输入文件

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INCAR      in    **
STOPCAR in
stout out
POTCAR in **
KPOINTS in **
IBZKPT out
POSCAR in **
CONTCAR out
CHGCAR in/out
CHG out
WAVECAR in/out
TMPCAR in/out
EIGENVAL out
DOSCAR out
PROCAR out
OSZICAR out
PCDAT out
XDATCAR out
LOCPOT out
ELFCAR out
PROOUT out

  • 必要的输入文件有四个:INCAR,KPOINTS,POSCAR,POTCAR
    • INCAR 告诉VASP算什么,怎么算。
    • KPOINTS 包含计算的倒空间K点信息。
    • POSCAR 是结构信息,包括元素、晶胞参数及各个原子的坐标信息。
    • POTCAR 元素的赝势文件,描述体系中对应的原子核和电子的相关信息。
    • 提交任务的脚本或者命令,需要你自己准备。

下面由简单到复杂介绍

POSCAR

结构文件信息格式如下:

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Mo S2                  #结构名称,可不写或随便写,不能没有这一行
1.0 # universal scaling parameters,缩放系数
3.1500000954 0.0000000000 0.0000000000 # 晶格矢量 a(1)
-1.5750000477 2.7279801045 0.0000000000 # 晶格矢量 a(2)
0.0000000000 0.0000000000 12.3000001907 # 晶格矢量 a(3)
Mo S # 元素名称,种类
2 4 #对应元素的原子个数,顺序要对应
Direct #
0.333333345 0.666666689 0.250000000
0.666666624 0.333333323 0.750000019
0.333333345 0.666666689 0.620999986
0.666666624 0.333333323 0.379000014
0.666666624 0.333333323 0.121000053
0.333333345 0.666666689 0.878999976
  • 对于自己建模的结构,按照该格式自己写;
  • 对于Materials projiect数据库可以直接下载POSCAR格式;
  • 对于.cif文件,可以导入 VEASTA 等输出为POSCAR的格式,或者用 vaspkit 的411/412功能。

Mind:

POSCAR文件非常重要,大部分报错都是结构不合理导致的。一个好的初始结构不仅可以加快收敛速度,也会增加准确性。文件中元素的顺序非常重要。

KPOINTS

文件一般格式如下:

{.line-numbers}
1
2
3
4
5
K-POINTS      #  第一行随便写或者空着不写,但不能没有这一行
0 # 零,表示自动生成
Gamma # gamma点centered
1 1 1 # 1*1*1格子,K点密度
0 0 0 # S1 S2 S3,shift的值,一般保持 0 0 0 不变。

大家需要修改的是第三行和第四行,其他可不改。

  • 第三行:VASP只认第一个字母,大小写均可。当然这一行也可以直接写字母G或者g。G表示的是以gamma点为中心生成网格。
    另外一种是原始的Monkhorst-Pack 网格,两者的区别是 M 或者 m 在 G的基础上在三个方向上平移了1/(2N)个单位。G,也叫 gamma centered Monkhorst-Pack Grid;所以,gamma centered 只是MP网格的一种特殊情况。
    因此这一行也可以一直用G不变。

  • 第四行,在xyz三个方向上生成对应数目的K点;__这个一般需要测试__。如果开始不想测试,官网也给出了经验方法,

    • d区金属,k*a ~ 30 Å
    • 普通金属,k*a ~ 25 Å
    • 半导体,k*a ~ 20 Å
    • 绝缘体,k*a ~ 15 Å

    其中a对应三个方向的晶胞参数,也就是对应方向的k点与该方向晶胞参数乘积最好在20-30之间。

如果已经安装了vaspkit程序,可以通过102功能自动生成KPOINTS文件。

POTCAR

POTCAR赝势文件相对来说最复杂也最简单。其中有很多信息,大部分信息我们不需要关注,一般只需要关注前几行。特别是赝势的种类信息。以Mo为例:

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PAW_PBE Mo 08Apr2002                   
6.00000000000000
parameters from PSCTR are:
VRHFIN =Mo: 4p5s4d
LEXCH = PE
EATOM = 217.5176 eV, 15.9871 Ry

TITEL = PAW_PBE Mo 08Apr2002
LULTRA = F use ultrasoft PP ?
IUNSCR = 1 unscreen: 0-lin 1-nonlin 2-no
RPACOR = 2.200 partial core radius
POMASS = 95.940; ZVAL = 6.000 mass and valenz
RCORE = 2.750 outmost cutoff radius
RWIGS = 2.750; RWIGS = 1.455 wigner-seitz radius (au A)
ENMAX = 224.584; ENMIN = 168.438 eV

除此之外,一种元素也有很多赝势,例如Mo:

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
[scf1355@ln151%nc-l potpaw_PBE.52]$ ls Mo*
Mo:
POTCAR PSCTR

Mo_pv:
POTCAR PSCTR

Mo_sv:
POTCAR PSCTR

Mo_sv_GW:
POTCAR PSCTR

如果没有特别的需求,直接采用VASP官网推荐的即可。参考链接:
https://cms.mpi.univie.ac.at/vasp/vasp/Recommended_PAW_potentials_DFT_calculations_using_vasp_5_2.html
不知道选哪一个就选第一个,使用方法如下:

{.line-numbers}
1
cat ~/pot/Mo/POTCAR ~/pot/S/POTCAR  > POTCAR

或者用vaspkit的103命令自动生成。

Mind:

该文件看似复杂,使用时只需要查看元素种类和POSCAR是否对应即可。
可以通过grep PBE POTCAR查看顺序是否正确。

{.line-numbers}
1
2
3
4
5
[scf1355@ln151%nc-l 2h]$ grep PBE POTCAR 
PAW_PBE Mo 08Apr2002
TITEL = PAW_PBE Mo 08Apr2002
PAW_PBE S 06Sep2000
TITEL = PAW_PBE S 06Sep2000

INCAR

这个控制计算过程的文件最为复杂,手册上相关参数多达三百多个。因此前期我们记住一点:不知道含义的参数不要加。不加对于有些参数意味着用默认值,一般是合理的。INCAR参数查找参考官方:https://www.vasp.at/wiki/index.php/Category:INCAR_tag

贴一个我的结构优化的INCAR:

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ISTART =  0            (Read existing wavefunction; if there)
ISPIN = 2 (Non-Spin polarised DFT)
ICHARG = 2 (Non-self-consistent: GGA/LDA band structures)
ENCUT = 500 (Cut-off energy for plane wave basis set, in eV)
PREC = A (Precision level)
LWAVE = .F. (Write WAVECAR or not)
LCHARG = .F. (Write CHGCAR or not)
ISMEAR = 0 (Gaussian smearing; metals:1)
SIGMA = 0.05 (Smearing value in eV; metals:0.2
EDIFF = 1E-08 (SCF energy convergence; in eV)
EDIFFG = -1E-02 (Ionic convergence; eV/AA)
NSW = 100 (Max ionic steps)
IBRION = 2 (Algorithm: 0-MD; 1-Quasi-New; 2-CG)
POTIM = 0.1
ISIF = 3 (Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions)

上面参数详细介绍

  • ISTART :初始波函数。WAVECAR存在默认1,不存在默认0。
    0:随机生成波函数
    1:从 WAVECAR 读取波函数,若读取失败则随机生成。
  • ICHARG :初始电荷密度。当ISTART=0默认2,其他默认1。
    0:通过 WAVECAR 生成电荷密度,若读取失败则通过原子电荷密度叠加生成
    1:从 CHGCAR 读取电荷密度
    2:通过原子电荷密度叠加生成电荷密度
    11:从 CHGCAR 读取电荷密度,且在(非自洽)循环中保持不变
  • ISPIN :自旋极化。默认1,关闭。不知道是否打开,可以打开,结果不会有影响。
    1:非自旋极化(每个轨道上自旋向上和自旋向下的电子数量相等,适合非磁性体系)
    2:自旋极化(适合铁磁、反铁磁体系)
  • ENCUT :平面波截断能(单位 eV)
    默认元素中最大的ENMAX。一般为 POTCAR 中 最大ENMAX 参数值的 1.0 到 1.3 倍。500适用大部分体系。
  • PREC :总体计算精度,默认Normal。可设为 Low、Med、High、Normal、Single、Accurate。具体参照手册,设为A或者Accurate足够精确。
  • LWAVE LCHARG :控制WAVECAR和CHGCAR输出,默认输出,在结构优化可以关闭,节省储存空间。
  • ISMEAR :轨道分数占据
    −5:四面体方法(适合半导体和绝缘体)
    0:高斯方法(适合导体、半导体和绝缘体),展宽由 SIGMA 确定
    N:Methfessel-Paxton 方法(适合导体)
  • EDIFF :自洽循环收敛标准(系统能量变化),单位为 eV。默认1E-4,可以设的更精确一些。一般设置为 1E-6或更高。
  • __EDIFFG__:离子位置优化收敛标准。默认EDIFF*10。正值为系统能量变化,负值为原子上残余力。随着体系维数下降,可适当增加原子残余力。
  • NSW :离子位置优化最大步数(IBRION=1、2)。默认0。设为100足够大,也可以继续加大。
    分子动力学开启时代表分子动力学模拟步数(IBRION=0)
  • IBRION :离子位置优化算法。默认NSW=0/1时为-1,其他默认0。
    -1:离子不移动
    0:分子动力学模拟
    1:准牛顿法
    2:共轭梯度法
    5:振动频率计算
    6:弹性常数计算
    7/8:DFPT方法
  • POTIM :有限差分法步长。当IBRION=1/2/3默认值 0.5。当IBRION=0(MD)时必须指定。
  • ISIF :需要结构优化变量。默认IBRION=0时为0,其他默认2。结构优化一般设为3,全部优化。

Mind

  • 上面四个输入文件都是纯文本文件,且文件名不能更改,格式不能错误。
  • vaspkit可以同时产生INCAR、POTCAR、KPOINTS文件。

提交任务

在超算上提交或者集群上提交,只需要把四个输入文件和提交任务的脚本文件放在同一文件夹下,运行脚本即可。
在个人服务器、虚拟机提交可以通过nohup mpirun -np 核数 vasp_std > std.out &提交

Mind

  • 提交后经常查看作业收敛情况,有问题及时暂停,避免浪费时间

查看任务完成

实时查看任务日志tail -f 日志文件
任务停止后,判断任务是否正常结束,输入grep reached 日志文件或者tail 日志文件
如果输出reached required accuracy - stopping structural energy minimisation代表正常结束,否则很可能没有收敛或者出错中断。

输出文件

任务一旦提交,会立刻生成输出文件,不过此时可能是空的。运行片刻大部分文件会产生内容。
https://www.vasp.at/wiki/index.php/Category:Output_files
其中我们先关注几个输出文件。

CONTCAR

优化后的结构文件,与POSCAR相对应。为最后一个离子步的结构。当然如果要提高精度或者续算,可以cp CONTCAR POSCAR继续计算。

OSZICAR

包含自洽计算中能量收敛等信息。

OUTCAR

这个是VASP最主要的输出文件,包含计算过程中大量信息,依次主要包括:
VASP版本;
计算开始时间和并行性CPU数;
赝势信息;
最近邻列表;
对称性信息;
晶格信息和k点坐标;
INCAR中读入的参数和其他大部分的默认参数值;
平面波个数和FFT信息;
每一步离子步数和其中每一个电子自洽的时间、内存、能量等信息;
自洽完成后的费米能和能量本征值;
应力;力;
电荷数和磁矩;
程序运行时间。
总而言之想找而不知道去哪里找,就在这里。

IBZKPT

由VASP自动生成,包含所有不等价k点的坐标和权重以及可能的四面体链接情况,它的格式与KPOINTS文件的格式是完全一样的。

WAVECAR

波函数文件,二进制文件,不能直接用文本编辑器直接打开。
波函数文件较大,可以通过(LWAVE)来控制输出。结构优化不需要输出。
它也可以作为输入文件,为后续计算提供初始波函数。

CHGCAR和CHG

电荷密度文件,包含晶格矢量,原子坐标,总电荷密度以及PAW的单中心占据情况等信息。 该文件既是输出文件(由LCHARG控制),也可以是输入文件。结构优化不需要输出。
在计算能带或者态密度时,需要读入电荷密度进行非自洽计算。

总结

  • 输入文件KPOINTS比较简单,可以手动,注意格式;INCAR参数众多,直接参考,不知道的参数不加;POTCAR文件比较大,我们只关注赝势对应的元素顺序与POSCAR是否一致;POSCAR结构文件VESTA直接输出。提交任务脚本由超算代理提供,不同超算不同。
  • 任务提交后关注是否正常结束,另外关注计算的时间等。