注:本文来源于知乎用户孟青廷的原创教程,链接如下:
https://zhuanlan.zhihu.com/p/399991979使用CP2K计算声子谱的起因是要计算的体系较大,用VASP计算扩胞后GAMMA点附近存在少量虚频,再次扩胞计算量太大(本来就很大了),因此打算使用CP2K计算再次扩胞后的声子谱。主要参考CP2K官网的教程,高手可直接看文末链接。CP2K,Phonopy,cp2k-input-tools,Multiwfn。2. 根据这一结构扩胞并根据声子模式对原子进行位移。了解了基本流程,接下来简单说一下VASP与CP2K输入文件的不同,VASP的输入文件有四个:POSCAR、POTCAR、INCAR、KPOINTS。其中POSCAR储存结构信息。而CP2K的所有输入信息都包含在.inp文件里。因此使用VASP+Phonopy时会在下会生成若干个POSCAR-001、POSCAR-002……文件,而CP2K+Phonopy则是生成若干个*-supercell-001.inp、*-supercell-002.inp……文件。第一步得到一个充分优化的结构,这一步不作赘述,方法很多,可以参考天玑算视频教程。此处给出一个官方教程的输入文件例子供大家练习。&GLOBAL
PROJECT Si
RUN_TYPE ENERGY_FORCE
PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep
&DFT
BASIS_SET_FILE_NAME BASIS_MOLOPT
POTENTIAL_FILE_NAME POTENTIAL
&POISSON
PERIODIC XYZ
&END POISSON
&SCF
SCF_GUESS ATOMIC
MAX_SCF 300
ADDED_MOS 100
&DIAGONALIZATION
ALGORITHM STANDARD
EPS_ADAPT 0.01
&END DIAGONALIZATION
&SMEAR ON
METHOD FERMI_DIRAC
ELECTRONIC_TEMPERATURE [K] 300
&END SMEAR
&MIXING
METHOD BROYDEN_MIXING
ALPHA 0.2
BETA 1.5
NBROYDEN 8
&END MIXING
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&END DFT
&SUBSYS
&CELL
ABC [angstrom] 5.4661639157319968 5.4661639157319968 5.4661639157319968
PERIODIC XYZ
&END CELL
&COORD
SCALED
Si 0.875 0.875 0.875
Si 0.875 0.375 0.375
Si 0.375 0.875 0.375
Si 0.375 0.375 0.875
Si 0.125 0.125 0.125
Si 0.125 0.625 0.625
Si 0.625 0.125 0.625
Si 0.625 0.625 0.125
&END COORD
&KIND Si
ELEMENT Si
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE
&END KIND
&END SUBSYS
&END FORCE_EVAL
第二步对输入文件中的结构进行扩胞与位移,用到Phonopy软件。phonopy --cp2k -c Si.inp -d --dim="2 2 2"
如出错:ModuleNotFoundError: No module named 'cp2k_input_tools'pip install cp2k-input-tools
phonopy_disp.yaml Si-supercell.inp Si-supercell-001.inp
其中不带数字的supercell文件仅扩胞,带数字的做了位移,有限位移方法仅用到后者此处使用Phonopy2.11,不同版本可能有所差异第三步对生成的不同声子模文件进行自洽计算,此处由于只生成了一个文件,可在该目录下直接计算,若声子模较多,使用脚本提交任务较为方便,此处给出笔者所用脚本供参考,其中cp2k_slurm.sh是提交作业的脚本,超算用的是slurm作业管理系统。#!/bin/bash
for j in {001..099}
do
mkdir $j
cp ./cp2k_slurm.sh $j/
cp ./2-supercell-"$j".inp $j/
cd $j/
sed -i "3s/cp2k/"$j"/g" cp2k_slurm.sh
sed -i "11s/1.inp/2-supercell-"$j".inp/g" cp2k_slurm.sh
sbatch cp2k_slurm.sh
cd ../
done
计算完成后除了一般的CP2K输出文件外还将获得.xyz文件,如例子将给出Si-supercell-001-forces-1_0.xyz文件。第四步读取计算结果,生成二阶力常数文件FORCE_SETSphonopy --cp2k -f Si-supercell-001-forces-1_0.xyz
phonopy --cp2k -c Si.inp -p --dim="2 2 2" --pa="0 1/2 1/2 1/2 0 1/2 1/2 1/2 0" --band="1/2 1/2 1/2 0 0 0 1/2 0 1/2"
计算无误的话可获得下图,如作图发生错误Phonopy也会将计算结果储存在phonopy.yaml文件中phonopy-bandplot --gnuplot >> p1.dat
也可以使用band.conf文件进行更精细的设置,如使用以下band.confATOM_NAME = Si
DIM = 2 2 2
BAND = 1/2 1/2 1/2 0 0 0 1/2 0 1/2
PRIMITIVE_AXES = 0 1/2 1/2 1/2 0 1/2 1/2 1/2 0
BAND_POINTS = 101
FORCE_SETS = READ
phonopy --cp2k -c Si.inp -p --factor=521.471 band.conf
另外,如果有与笔者一样是从VASP迁移到CP2K的用户,可以非常方便地通过Multiwfn软件用已有的结构生成输入文件,需要注意把POSCAR命名为POSCAR_miku以供识别,具体可参考下方文章https://phonopy.github.io/phonopy/cp2k.html