HyperAI

VASP 教程:1-1. 孤立氧原子的 DFT 计算

一、教程简介

本教程以 VASP 为例,介绍如何从 0 开始在高性能计算上进行计算。


VASP 全称 Vienna Ab-initio Simulation Package,是维也纳大学 Hafner 小组开发的进行电子结构计算和量子力学-分子动力学模拟软件包。它是目前材料模拟和计算物质科学研究中最流行的商用软件之一,其高准确性和强大的功能使其成为研究者进行材料性质预测和设计的重要工具,被广泛用于固体物理学、材料科学、化学、分子动力学等领域。 VASP 使用赝势 (pseudopotentials) 和平面波基组 (plane wave basis sets) 来模拟电子结构,特别适合于处理周期性边界条件的系统,如晶体、表面和纳米结构。

通过本教程的学习,您将能够:

* 在伪代码层面解释密度泛函理论 (DFT) 计算
* 创建输入文件以运行孤立原子的 DFT 计算
* 识别 stdout 和 OUTCAR 的基本结构
* 提取分子和原子的相关能量
* 从之前的 Kohn-Sham (KS) 轨道重新开始 DFT 计算

教程目标

本教程是 VASP 官方教程的实现,通过 VASP 进行 DFT 计算,学习如何创建输入文件,理解输出文件的基本结构,并提取相关能量数据。

DFT 是一个框架,其中处理了电子的自由度。在伪代码层面,包括以下步骤:

  1. 给定电子电荷密度,可以定义哈密顿量。
  2. 计算哈密顿量的本征函数和本征值。
  3. 更新电子电荷密度。
  4. 重复步骤 1-3,直到收敛。有关 VASP 中实现的详细信息,请参考 VASP 用于计算电子基态的算法

二、运行步骤

1. 准备输入文件及脚本(该教程已经准备完毕)

进行 VASP 优化计算时,需要准备 4 个关键文件 (本教程文件仅供参考,如需使用请在官网申请许可):POSCARINCARKPOINTS  和 POTCAR,示例文件已经全部放到 /home/Oatom  下:

POSCAR:文件提供了计算模型的原子结构信息,包括晶胞参数和各原子的坐标位置,是 VASP 进行结构分析和优化的主体。

POSCAR

O atom 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)
1             ! number of atoms
cart          ! positions in cartesian coordinates
 0 0 0

我们使用单原子的 POSCAR 文件。选择足够大的晶格参数,这样相邻晶胞中的原子之间就不会发生(显著的)相互作用。

INCAR:文件定义了 VASP 计算的任务类型及计算参数,指导 VASP 进行何种物理性质的计算以及如何执行这些计算。

SYSTEM = O atom in a box
ISMEAR = 0  ! Gaussian smearing

KPOINTS:文件包含了计算所需的 K 点网格信息,K 点是在布里渊区内对电子态进行采样的点。

Gamma-point only
 0
Monkhorst Pack
 1 1 1
 0 0 0

对于原子或分子,单个 k 点就足够了。当使用更多 k 点时,只有原子之间的相互作用(应为零)才能更准确地描述。

POTCAR:文件包含了计算过程中每个原子所使用的赝势信息。

提交脚本:命令行运行 VASP 计算,需要编写一个提交脚本(job.sh),该脚本包含了调用计算所需资源和环境、运行 VASP 可执行文件等相关内容,可使用该脚本投递作业到脚本中指定的计算资源。

#
# To run VASP this script calls $vasp_std
# (or posibly $vasp_gam and/or $vasp_ncl).
# These variables can be defined by sourcing vaspcmd
. vaspcmd 2> /dev/null

#
# When vaspcmd is not available and $vasp_std,
# $vasp_gam, and/or $vasp_ncl are not set as environment
# variables, you can specify them here
[ -z "`echo $vasp_std`" ] && vasp_std="mpirun --allow-run-as-root -np 8 /data/app/vasp/6.3.0/gcc-mkl-openmpi/vasp_std"
[ -z "`echo $vasp_gam`" ] && vasp_gam="mpirun --allow-run-as-root -np 8 /data/app/vasp/6.3.0/gcc-mkl-openmpi//vasp_gam"
[ -z "`echo $vasp_ncl`" ] && vasp_ncl="mpirun --allow-run-as-root -np 8 /data/app/vasp/6.3.0/gcc-mkl-openmpi//vasp_ncl"

#
# The real work starts here
#

$vasp_std

如果环境变量 vasp_std 、 vasp_gam 、 vasp_ncl 未设置,则将其设置为一个运行 VASP 程序的命令。这样可以确保在需要时,始终有一个默认值,以便后续使用。 这里的 -np 1 指定运行一个进程。

2. 开始计算

使用 VASP 版本 6.3.0 获得 O 原子的示例输出 (stdout) 。初始电荷对应于孤立重叠原子的电荷(POTCAR 文件)。对于前 4 个步骤,电荷保持不变,然后更新电荷(rms(c) 列)。

* 具体步骤:
新建一个终端,输入下面命令
cd Oatom/
vasp_std

3. 标准输出 (stdout):终端显示计算结果

running on    8 total cores
distrk:  each k-point on    8 cores,    1 groups
distr:  one band on    1 cores,    8 groups
using from now: INCAR     
vasp.6.3.0 05Feb16 (build Aug 22 2016 16:46:23) complex                        
POSCAR found :  1 types and       1 ions
scaLAPACK will be used
LDA part: xc-table for Pade appr. of Perdew
POSCAR, INCAR and KPOINTS ok, starting setup
WARNING: small aliasing (wrap around) errors must be expected
FFT: planning ...
WAVECAR not read
entering main loop
N       E                     dE             d eps       ncg     rms          rms(c)
DAV:   1     0.384469664751E+02    0.38447E+02   -0.96726E+02    16   0.293E+02
DAV:   2     0.345965628955E+01   -0.34987E+02   -0.34942E+02    32   0.450E+01
DAV:   3    -0.244485866931E+00   -0.37041E+01   -0.34307E+01    16   0.308E+01
DAV:   4    -0.312557021227E+00   -0.68071E-01   -0.66914E-01    16   0.508E+00
DAV:   5    -0.313520305300E+00   -0.96328E-03   -0.96311E-03    32   0.506E-01    0.286E-01
DAV:   6    -0.314540466589E+00   -0.10202E-02   -0.17853E-03    16   0.332E-01    0.142E-01
DAV:   7    -0.314637222361E+00   -0.96756E-04   -0.22710E-04    16   0.134E-01
1 F= -.31463722E+00 E0= -.16037490E+00  d E =-.308525E+00
writing wavefunctions

OSZICAR 和 stdout 文件中符号的简要解释:

4. 查看运行结果

执行完毕后,结果将被保存到 ./Oatom/OUTCAR,输入命令 cat OUTCAR  来查看结果。

下面分别介绍 OUTCAR 文件的几个部分,各部分之间用横线分割:

  • 阅读 INCAR , POTCAR , POSCAR
  • 最近邻距离和对称性分析
  • 详细的职位信息
  • 关于晶格、 k 点和位置的信息
  • 基组信息(平面波的数量)
  • 非局部伪势信息
  • 每个电子步骤的信息(OSZICAR 中一行)
  • 时间和能源信息
  • 有关特征值的信息
   POTLOK:  cpu time    0.0878: real time    0.0877
   SETDIJ:  cpu time    0.0015: real time    0.0014
    EDDAV:  cpu time    0.0267: real time    0.0434
      DOS:  cpu time    0.0001: real time    0.0001
   --------------------------------------------
     LOOP:  cpu time    0.1165: real time    0.1346
   
eigenvalue-minimisations :    16
total energy-change (2. order) : 0.3844697E+02  (-0.9672571E+02)
number of electron       6.0000000 magnetization
augmentation part        6.0000000 magnetization
    
Free energy of the ion-electron system (eV)      
 ---------------------------------------------------
 alpha Z        PSCENC =         0.27135287
 Ewald energy   TEWEN  =       -91.92708002
 -Hartree energ DENC   =      -281.84385691
 -exchange      EXHF   =         0.00000000
 -V(xc)+E(xc)   XCENC  =        26.11948841
 PAW double counting   =       245.99840262     -247.84808825
 entropy T*S    EENTRO =        -0.08636665
 eigenvalues    EBANDS =       -44.50008162
 atomic energy  EATOM  =       432.26319604
 Solvation  Ediel_sol  =         0.00000000
 ---------------------------------------------------
 free energy    TOTEN  =        38.44696648 eV
    
 energy without entropy =       38.53333313  energy(sigma->0) =       38.49014980
  • 应力张量信息
E-fermi :  -8.8431     XC(G=0):  -0.8043     alpha+bet : -0.1463
k-point     1 :       0.0000    0.0000    0.0000
band No.  band energies     occupation
1     -23.8439      2.00000
2      -8.9040      1.33333
3      -8.9040      1.33333
4      -8.9040      1.33333
5      -0.4676      0.00000
6       1.8633      0.00000
7       1.8633      0.00000
8       1.8633      0.00000
  • 能源信息
The O atom (Example: Oatom)
FORCE on cell =-STRESS in cart. coord.  units (eV):
Direction    XX          YY          ZZ          XY          YZ          ZX
--------------------------------------------------------------------------------------
Alpha Z     0.27135     0.27135     0.27135
Ewald     -30.64236   -30.64236   -30.64236     0.00000     0.00000     0.00000
Hartree    93.90244    93.90244    93.90244    -0.00000    -0.00000    -0.00000
E(xc)     -27.93035   -27.93035   -27.93035    -0.00000    -0.00000    -0.00000
Local    -147.86211  -147.86211  -147.86211     0.00000     0.00000     0.00000
n-local   -20.54942   -20.54942   -20.54942    -0.00000    -0.00000    -0.00000
augment     5.55366     5.55366     5.55366     0.00000    -0.00000     0.00000
Kinetic   126.50998   126.50998   126.50997    -0.00000     0.00000    -0.00000
Fock        0.00000     0.00000     0.00000     0.00000     0.00000     0.00000
-------------------------------------------------------------------------------------
Total      -0.74681    -0.74681    -0.74681     0.00000    -0.00000    -0.00000
in kB      -2.33695    -2.33695    -2.33695     0.00000    -0.00000    -0.00000
external pressure =       -2.34 kB  Pullay stress =        0.00 kB
  • 有关特征值的信息
FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV)
---------------------------------------------------
free  energy   TOTEN  =        -0.31463722 eV
energy  without entropy=       -0.00611258  energy(sigma->0) =       -0.16037490

5. 重新计算

如果需要重新计算可以重新输入命令 vasp_std,即可从新开始计算。 当 VASP 重新启动时,将读取 WAVECAR 文件并从先前的波函数继续运行(快速收敛)。

6. 清理先前计算

运行命令 bash cleanup.sh,将会清空先前的波函数,完全重新开始计算。

三、总结

该教程专注于孤立氧原子的 DFT 计算。我们学习了如何为单个氧原子设置 DFT 计算,以计算孤立原子的能量。这个过程涉及到定义哈密顿量、计算哈密顿量的本征函数和本征值,以及更新电子电荷密度,直至系统收敛。输入文件的准备包括 POSCAR 、 INCAR 、 KPOINTS 和 POTCAR,每个文件都有其特定的格式和作用。计算完成后,我们可以通过分析 stdout 和 OUTCAR 文件来理解计算过程和结果。