zoukankan      html  css  js  c++  java
  • 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!
    ')
    50     print ('    total files: %d
    '%(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.
    "
    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
    
  • 相关阅读:
    通过串口工具下发指令的Python脚本
    启动app-inspector报Internal Server Error
    IOS版App的控件元素定位
    Webview页面的控件元素定位
    Android版App的控件元素定位
    将Xcode升级到10.0以上版本,Appium启动报错的问题
    IOS版DesiredCapabilities参数配置
    Android版DesiredCapabilities参数配置
    Cannot instantiate the type AppiumDriver,AppiumDriver升级引发的问题
    持续集成-jenkins 环境搭建
  • 原文地址:https://www.cnblogs.com/zjyx/p/6614383.html
Copyright © 2011-2022 走看看