VASP+FDM+Phonopy 计算声子过程
以Ammonia为例,基本翻译自:https://atztogo.github.io/phonopy/procedure.html#tutorial.
1. 结构优化. 输入文件如下:
INCAR !System settings SYSTEM = Ammonia PREC = accurate low, normal, accurate ISTART = 0 job : 0-new 1-cont 2-samecut ICHARG = 2 charge: 0-INIWAV 1-CHGCAR 2-atom 10-nonself ISPIN = 1 spin polarized? 1:no 2:yes INIWAV = 1 0-jellium 1-rand !Electronic Relaxation ENCUT = 200.0 eV NELM = 1000 max e SC NELMIN = 2 min e SC NELMDL = -5 non-SC +:every -:first EDIFF = 1.0E-6 stopping-criterion for ELM LREAL = Auto real-space projection ALGO = fast normal:38(D) fast:38-48(RMM) all:58 damped:53 !IMIX = 4 !AMIX = 0.1 !BMIX = 0.0001 !WC = 1000 !INIMIX = 1 !MIXPRE = 1 !MAXMIX = -45 !Ionic relaxation EDIFFG = -0.0005 stopping-criterion for IOM +:energy -:force NSW = 500 number of steps for IOM !NBLOCK = 1 inner block ionic cfg-XDATCAR, scale T !KBLOCK = 1000 outer block PCF-PCDAT,DOS-DOSCAR IBRION = 2 ionic relax: 0-MD 1-static 2-CG 3-dampedMD ISIF = 2 POTIM = 1.0 time-step for ionic-motion !TEBEG = 600.0 !TEEND = 600.0 temperature during run SMASS = -1 -3:micro -2:const -1:scaled >=0:Nose mass !DOS related values: !EMIN = 10.00 !EMAX = -10.00 energy-range for DOS !NEDOS = 300 ISMEAR = 0 1,2:metal -5,0:sem/ins SIGMA = 0.05 broadening in eV !RWIGS = -1.0 -1.0 -1.0 !NBANDS = 10 actual number of bands in calculation !Write flags !NWRITE = 2 long runs use 0 or 1 LWAVE = .FALSE. write WAVECAR LCHARG = .FALSE. write CHGCAR LVTOT = .FALSE. write LOCPOT, local potential LELF = .FALSE. write electronic localiz. function (ELF) !LORBIT = 11 !LAECHG = .TRUE. !LADDGRID = .TRUE. !Parallel flags NPAR = 8 # of nodes LPLANE = .FALSE. LSCALU = .FALSE. LSCALAPACK = .FALSE. POSCAR Ammonia_rlx 1.0 5.1305 0.0 0.0 0.0 5.1305 0.0 0.0 0.0 5.1305 N H 4 12 Cart 1.0789441 1.0789441 1.0789441 1.4863058 4.0515558 3.6441941 3.6441941 1.4863058 4.0515558 4.0515558 3.6441941 1.4863058 1.9095721 1.3477823 0.5710246 1.9942253 3.2209279 3.9130323 3.1362746 0.6556779 3.7827176 4.5594753 4.4748221 1.2174676 1.3477823 0.5710246 1.9095721 1.2174676 4.5594753 4.4748221 3.2209279 3.9130323 1.9942253 0.5710246 1.9095721 1.3477823 0.6556779 3.7827176 3.1362746 4.4748221 1.2174676 4.5594753 3.9130323 1.9942253 3.2209279 3.7827176 3.1362746 0.6556779 KPOINTS Automatic mesh 0 MP 5 5 5 0 0 0 --------------------------------------------------------------------------------
由于声子对结构优化比较敏感,这儿的 PREC=accurate.
2. 构建优化过的单胞
1 cp CONTCAR POSCAR
Ammonia_rlx 1.00000000000000 5.1304999999999996 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.1304999999999996 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.1304999999999996 N H 4 12 Direct 0.2173355638189437 0.2173355638189437 0.2173355638189437 0.2826644166897822 0.7826644166897819 0.7173355638189437 0.7173355638189437 0.2826644166897822 0.7826644166897819 0.7826644166897819 0.7173355638189437 0.2826644166897822 0.3844041525928144 0.2739307062557181 0.1256929444364981 0.3743070360722207 0.6155958474071853 0.7739307062557181 0.6256929444364983 0.1155958474071856 0.7260692742530075 0.8743070360722203 0.8844041525928147 0.2260692742530077 0.2739307062557181 0.1256929444364981 0.3844041525928144 0.2260692742530077 0.8743070360722203 0.8844041525928147 0.6155958474071853 0.7739307062557181 0.3743070360722207 0.1256929444364981 0.3844041525928144 0.2739307062557181 0.1155958474071856 0.7260692742530075 0.6256929444364983 0.8844041525928147 0.2260692742530077 0.8743070360722203 0.7739307062557181 0.3743070360722207 0.6155958474071853 0.7260692742530075 0.6256929444364983 0.1155958474071856 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
3. 构建超胞
1 python /home/zjyx/softwares/phonopy-1.10.10/bin/phonopy --vasp -c POSCAR-unitcell -d --dim="4 4 4"
在这一步后,将会产生若干个POSCAR-??? 文件,可以用以下script将其移动到对应的文件夹内以方便后续计算。同时,也需在当前文件夹内准备好待用的其他输入文件。需要改的参数有INCAR里的IBRION, NSW和KPOINTS里的mesh points.
script:
1 #! /usr/bin/env python 2 3 ''' 4 mv all POSCAR-??? files to a new created disps directories, and 5 copy other inputs files to the all subdirectries 6 ''' 7 8 import os 9 import sys 10 from shutil import copy, move 11 12 other_inp = ['INCAR', 'KPOINTS', 'POTCAR'] 13 14 n_disp = 1 15 while True: 16 if os.path.isfile('POSCAR-%03d'% n_disp): 17 n_disp += 1 18 else: 19 break 20 21 if not os.path.isdir('disps'): 22 os.mkdir('disps') 23 24 for i in range(n_disp): 25 ''' disps-000 to store perfect supercell without perturbations''' 26 crt_dir = 'disps'+'/'+'disp-%03d'%i 27 if not os.path.isdir(crt_dir): 28 os.mkdir(crt_dir) 29 for _file in other_inp: 30 copy(_file, crt_dir) 31 if i != 0: 32 copy('POSCAR-%03d'%i, crt_dir+'/'+'POSCAR') 33 else: 34 copy('SPOSCAR', crt_dir+'/'+'POSCAR')
INCAR:
!System settings SYSTEM = Ammonia PREC = normal low, normal, accurate ISTART = 0 job : 0-new 1-cont 2-samecut ICHARG = 2 charge: 0-INIWAV 1-CHGCAR 2-atom 10-nonself ISPIN = 1 spin polarized? 1:no 2:yes INIWAV = 1 0-jellium 1-rand !Electronic Relaxation ENCUT = 200.0 eV NELM = 1000 max e SC NELMIN = 2 min e SC NELMDL = -5 non-SC +:every -:first EDIFF = 1.0E-6 stopping-criterion for ELM LREAL = Auto real-space projection ALGO = fast normal:38(D) fast:38-48(RMM) all:58 damped:53 !IMIX = 4 !AMIX = 0.1 !BMIX = 0.0001 !WC = 1000 !INIMIX = 1 !MIXPRE = 1 !MAXMIX = -45 !Ionic relaxation EDIFFG = -0.0005 stopping-criterion for IOM +:energy -:force !NSW = 1 number of steps for IOM !NBLOCK = 1 inner block ionic cfg-XDATCAR, scale T !KBLOCK = 1000 outer block PCF-PCDAT,DOS-DOSCAR IBRION = -1 ionic relax: 0-MD 1-static 2-CG 3-dampedMD ISIF = 2 POTIM = 1.0 time-step for ionic-motion !TEBEG = 600.0 !TEEND = 600.0 temperature during run SMASS = -1 -3:micro -2:const -1:scaled >=0:Nose mass !DOS related values: !EMIN = 10.00 !EMAX = -10.00 energy-range for DOS !NEDOS = 300 ISMEAR = 0 1,2:metal -5,0:sem/ins SIGMA = 0.05 broadening in eV !RWIGS = -1.0 -1.0 -1.0 !NBANDS = 10 actual number of bands in calculation !Write flags !NWRITE = 2 long runs use 0 or 1 LWAVE = .FALSE. write WAVECAR LCHARG = .FALSE. write CHGCAR LVTOT = .FALSE. write LOCPOT, local potential LELF = .FALSE. write electronic localiz. function (ELF) !LORBIT = 11 !LAECHG = .TRUE. !LADDGRID = .TRUE. !Parallel flags !NPAR = 8 # of nodes LPLANE = .FALSE. LSCALU = .FALSE. LSCALAPACK = .FALSE.
KPOINTS:
Automatic mesh 0 MP 1 1 1 0 0 0
4. 用VASP做超胞计算.
5. 计算Force Sets
1 #! /usr/bin/env python 2 3 # calculate force costant matrix 4 5 import os 6 import sys 7 8 i = 1 9 width = 3 10 11 if os.path.isfile('qe.in'): 12 mode = 'pwscf' 13 post_filename = '.00.out' 14 pre_pathname = "supercell" 15 supercell_dir = "supercells" 16 elif os.path.isfile('rmg.in'): 17 mode = 'rmg' 18 post_filename = '.in.00.log' 19 pre_pathname = "supercell" 20 supercell_dir = "supercells" 21 elif os.path.isfile('SPOSCAR'): 22 mode = 'vasp' 23 post_filename = 'vasprun.xml' 24 pre_pathname = "disp" 25 supercell_dir = "disps" 26 else: 27 print "Error: unitcell not found, exit." 28 sys.exit(1) 29 30 force_cmd = 'python /home/zjyx/softwares/phonopy-1.10.10/bin/phonopy --%s -f'% mode 31 32 while True: 33 path_tmp = '{pre_pathname}-{0:0{width}}'.format(i, 34 pre_pathname=pre_pathname, 35 width=width) 36 pathname = supercell_dir + ('/%s'% path_tmp) 37 if os.path.exists(pathname): 38 i += 1 39 force_cmd += ' %s/%s'%(pathname, post_filename) 40 else: 41 break 42 43 try: 44 os.system('%s'% force_cmd) 45 except: 46 print "Error: cannot operate command, exit." 47 sys.exit(1) 48 else: 49 print ('Force sets done!\n') 50 print (' total files: %d\n'%(i-1))
这样当前目录下会出现FORCE_SETS文件。
6. 计算Band structure
1 #!/bin/bash 2 3 # plot band structure 4 5 if [ -e rmg.in ]; then 6 mode=rmg 7 input=rmg.in 8 elif [ -e qe.in ]; then 9 mode=pwscf 10 input=qe.in 11 elif [ -e POSCAR-unitcell ]; then 12 mode=vasp 13 input=POSCAR-unitcell 14 else 15 echo -e "No default unitcell file found.\n" 16 exit 1 17 fi 18 19 python /home/zjyx/softwares/phonopy-1.10.10/bin/phonopy --$mode -c $input -s -p band.conf 20 21 exit 0
其中band.conf 文件如下:
DIM = 4 4 4 PRIMITIVE_AXIS = 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 BAND = 0.0 0.0 0.0 0.0 0.5 0.0 0.5 0.5 0.0 0.5 0.5 0.5 BAND_LABELS = \Gamma X M R