CP2K入门教程-4:使用CP2K进行DFT计算
很多参数都可以影响CP2K的计算精度。下面我将介绍我所知道的参数。
3.1.1 晶胞的大小
CP2K只支持Gamma点的计算,没有K点。因此,计算中必须使用足够大的晶胞。如果晶胞太小,部分基组函数就会超过晶胞的边界,导致重叠矩阵求逆过程出现问题,计算就会不可靠。不能直接使用VASP中的小晶胞来进行CP2K的计算。
3.1.2 CUTOFF以及REL_CUTOFF
CUTOFF和REL_CUTOFF两个参数用来控制网格的精度。CP2K中的网格从粗糙到精细分为4个级别。CUTOFF参数控制整体网格精度的最高值,REL_CUTOFF参数控制有多少网格点落到最精细的级别。CUTOFF的设置取决于体系中元素的种类,默认值为280 Ry,但对有些原子需要设置到500 Ry甚至更高。
CP2K论坛中建议给不同的原子使用不同的CUTOFF。下图给出了对不同原子建议使用的CUTOFF大小。可见,对包含Na,N,O,F,Ne,Ni,Ga等元素的计算,需要设置高达1000 Ry的CUTOFF来确保计算精度。在计算中包含这些元素时,需要额外小心。
REL_CUTOFF默认值为50 Ry,一般设置到60 Ry时精度就已经足够了。
除此以外,还有USE_FINER_GRID参数等,用于提高网格的精细程度。
3.1.3 基组和泛函
CP2K中可以使用的泛函很多,但并非每个基组都为相应的泛函进行了优化。经常使用的泛函有LDA(PADE),BLYP以及PBE,在CP2K的tests目录中有相应的优化基组。此外,CP2K中也可以使用B3LYP、HSE等杂化泛函,可以使用DFT-D3等色散校正。在CP2K中使用B3LYP泛函时,关键输入文件如下:
&DFT
BASIS_SET_FILE_NAME ./BASIS_MOLOPT
POTENTIAL_FILE_NAME ./POTENTIAL
CHARGE 0
MULTIPLICITY 1
&SCF
SCF_GUESS ATOMIC
EPS_SCF 1.0E-6
MAX_SCF 50
&OUTER_SCF
MAX_SCF 10
&END OUTER_SCF
&OT
# My scheme
PRECONDITIONER FULL_SINGLE_INVERSE
MINIMIZER DIIS
N_DIIS 7
&END OT
&RESTART
&EACH
MD 20
&END EACH
&END RESTART
&RESTART_HISTORY OFF
&END RESTART_HISTORY
&END PRINT
&END SCF
&QS
METHOD GAPW
# My scheme
EPS_DEFAULT 1.0E-12
EPS_PGF_ORB 1.0E-32
EPS_FILTER_MATRIX 0.0E+0
&END QS
&MGRID
COMMENSURATE
CUTOFF 300
&END MGRID
&POISSON
POISSON_SOLVER MULTIPOLE
PERIODIC NONE
&MULTIPOLE
RCUT 40
&END MULTIPOLE
&END POISSON
&XC
#&XC_FUNCTIONAL BLYP
#&END XC_FUNCTIONAL
&XC_FUNCTIONAL
&LYP
SCALE_C 0.81
&END
&BECKE88
SCALE_X 0.72
&END
&VWN
FUNCTIONAL_TYPE VWN3
SCALE_C 0.19
&END
&XALPHA
SCALE_X 0.08
&END
&END XC_FUNCTIONAL
&HF
&SCREENING
EPS_SCHWARZ 1.0E-10
&END
&MEMORY
MAX_MEMORY 512
EPS_STORAGE_SCALING 1.0E-1
&END
FRACTION 0.20
&END
&XC_GRID
XC_SMOOTH_RHO NN10
XC_DERIV SPLINE2_SMOOTH
&END XC_GRID
&END XC
&END DFT
完整的输入文件可以在Google Group中找到
使用HSE泛函的输入文件例子:
&XC_FUNCTIONAL
&XWPBE
SCALE_X -0.25
SCALE_X0 1.0
OMEGA 0.11
&END
&PBE
SCALE_X 0.0
SCALE_C 1.0
&END PBE
&END XC_FUNCTIONAL
&HF
EPS_SCHWARZ 1.0E-10
MAX_MEMORY 10
FRACTION 0.25
SCREENING_TYPE SHORTRANGE
OMEGA 0.11
&END
基组的大小也有很多种,如SZ,DZVP以及TZVP。一般计算中使用DZVP基组就足够了。
3.1.4 SCF收敛精度
对于一般的测试性结算,SCF收敛到1E-5就可以得到相对准确的结果。如果要进行比较高精度的计算,可以将SCF收敛精度设置为1E-6。对于频率计算等精度要求更高的计算,SCF收敛精度可以设置为1E-7。
3.1.5 收敛算法的选择
CP2K中主要有两种SCF的收敛算法,一种是基于轨道变换(OT)的算法,一种是基于对角化(DIAG)的算法。如果体系有较大带隙的,如为半导体或者绝缘体等,推荐使用OT算法,收敛速度比较快。如果体系中HOMO-LUMO 带隙很小或者几乎没有,如金属体系,则建议使用对角化的方法进行计算,并使用smear方法。
下面是一个对Rh(1 1 1)表面进行计算使用的输入文件的例子:
&SCF
SCF_GUESS RESTART
EPS_SCF 5.0E-7
MAX_SCF 500
ADDED_MOS 500
CHOLESKY INVERSE
&SMEAR ON
METHOD FERMI_DIRAC
ELECTRONIC_TEMPERATURE [K] 300
&END SMEAR
&DIAGONALIZATION
ALGORITHM STANDARD
&END DIAGONALIZATION
&MIXING
METHOD BROYDEN_MIXING
ALPHA 0.1
BETA 1.5
NBROYDEN 8
&END MIXING
&RESTART
&EACH
QS_SCF 50
&END
ADD_LAST NUMERIC
&END RESTART
&END PRINT
&END SCF
注意使用对角化方法必须使用ADDED_MOS 关键词。另外,设置正确的MIXING方案也是加速收敛的关键。
实际上,即使是对于非金属体系,有时候对角化方法也会比OT算法速度更快。
所以,在进行大规模的计算之前最好进行充分的测试。
使用OT算法时,优化算法也有多重选择。常用的有CG,DIIS以及BROYDEN。其中,CG算法是最为稳定的算法,一般的计算都可以使用CG算法。DIIS算法速度比较快,但不够稳定。如果CG算法和DIIS算法收敛都有问题时,可以尝试使用BROYDEN算法。下面是使用BROYDEN算法的输入文件例子。
&OT T
MINIMIZER BROYDEN
N_HISTORY_VEC 4
BROYDEN_BETA 6.9999999999999996E-01
BROYDEN_SIGMA 1.4999999999999999E-01
LINESEARCH 2PNT
PRECONDITIONER FULL_SINGLE_INVERSE
&END OT
3.1.6 EPS_DEFAULT的设置
QS部分使用的EPS_DEFAULT为1.0E-10。根据Google Group中的建议,在进行比较高精度计算时,需要将EPS_DEFAULT设为1.0E-14。
CP2K中有多个参数依赖EPS_DEFAULT,包括EPS_CORE_CHARGE,EPS_GVG_RSPACE,EPS_PGF_ORB,EPS_KG_ORB。各个参数的精度以及含义如下:
名称
含义
默认精度
EPS_CORE_CHARGE
核电荷映射精度
EPS_DEFAULT/100.0
EPS_GVG_RSPACE
实空间KS矩阵元积分精度
SQRT(EPS_DEFAULT)
EPS_PGF_ORB
重叠矩阵元精度
SQRT(EPS_DEFAULT)
EPS_KG_ORB
使用Kim-Gordon方法时的精度
SQRT(EPS_DEFAULT)
更多信息,可以参考:
https://developer.berlios.de/forum/message.php?msg_id=35587
https://groups.google.com/forum/?fromgroups#!topic/cp2k/IIp-D6AA7ME
3.2 使用CP2K进行能量计算 3.2.1 OUTER_SCF
计算能量,需要设置RUN_TYPE为ENERGY;如果还要进行梯度(受力)计算,则设置为ENERGY_FORCE。
使用DFT方法进行能量计算,使用OT算法,并开启OUTER_SCF,示例如下:
&SCF
EPS_SCF 1.0E-6
SCF_GUESS RESTART
MAX_SCF 100
&OT T
PRECONDITIONER FULL_ALL
MINIMIZER DIIS
LINESEARCH 3PNT
&END OT
&OUTER_SCF ON
MAX_SCF 5
EPS_SCF 5.0E-6
&END OUTER_SCF
&END SCF
其中,OUTER_SCF为加速收敛的一种方法。以上面的输入文件为例,计算过程中,如果SCF经过100次优化依然没有收敛,则进入OUTER_SCF过程,对前一次计算的波函数进行调整,重新进行SCF迭代。每次OUTER_SCF中优化的次数依然是100次,最多可以进行5次OUTER_SCF。所以,最多可以进行500次SCF计算。
更多的细节请参考:
https://groups.google.com/forum/?fromgroups=#!topic/cp2k/6cikFLKeN34
3.2.2 输出每个原子上的受力
要输出每个原子上的受力,GLOBAL部分的RUN_TYPE必须设置为ENERGY_FORCE或者GEO_OPT。要输出受力,需要在FORCE_EVAL部分开启选项:
&FORCES ON
Filename ForceFileName
&END FORCES
&END PRINT
如果要将受力信息存储到文件中,则需要设定文件的名称;否则受力信息将会打印到out文件中。输出的受力格式如下:
ATOMIC FORCES in [a.u.]
# Atom Kind Element X Y Z
1 1 O 0.08722700 -0.04704030 0.08194080
2 2 H -0.07829459 0.00721899 -0.00996929
3 2 H -0.01049003 0.03981616 -0.06774948
SUM OF ATOMIC FORCES -0.00155761 -0.00000516 0.00422203 0.00450019
评论