yafanzhao

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

 &PRINT

 &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中找到

 https://groups.google.com/forum/?fromgroups#!searchin/cp2k/XC_SMOOTH_RHO|sort:date/cp2k/v32E3xXmgaY/-TygNY7t2msJ 

 使用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

 &PRINT

 &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部分开启选项:

 &PRINT

 &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

 

评论

热度(24)

  1. 共2人收藏了此文字
只展示最近三个月数据