5.2. Useful Tips

Examples in this page assume that mp-22862 (NaCl) has been computed using auto-kappa. Please also see auto-kappa/examples/6_parser/basic.

Make DFSET file for Alamode

#!/usr/bin/env python3
# Filename: make_dfset.py
import argparse

from auto_kappa.io.vasp import get_dfset

def main(options):
    
    from plot_bandos import get_formula
    formula = get_formula(options.base_dir)    
    dir_force = f"{options.base_dir}/cube/force_fd"
    offset_xml = dir_force + '/prist/vasprun.xml'
    
    outfile = 'DFSET.cube'
    disps, force = get_dfset(dir_force, offset_xml=offset_xml, outfile=outfile)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Input parameters')
    parser.add_argument('--base_dir', dest='base_dir', type=str,
                        default="./mp-22862", help="directory of auto-kappa output")
    args = parser.parse_args()    
    main(args)
    
# Filename: ./mp-22862/cube/force_fd/1/vasprun.xml, Snapshot: 1, E_pot (eV): -223.9017635
 0.0566916869058  0.0000000000000  0.0000000000000   -2.4432377095235e-03  0.0000000000000e+00 -0.0000000000000e+00 
 0.0000000000000  0.0000000000000  0.0000000000000    5.8858366632325e-05  2.3052079147308e-04 -0.0000000000000e+00 
 0.0000000000000  0.0000000000000  0.0000000000000    5.8858366632325e-05  0.0000000000000e+00  2.3052079147308e-04 
 0.0000000000000  0.0000000000000  0.0000000000000   -6.4676878139020e-05 -7.5998472487173e-07 -7.5998472487173e-07 
 0.0000000000000  0.0000000000000  0.0000000000000   -1.9478011781769e-06  0.0000000000000e+00  0.0000000000000e+00 
 0.0000000000000  0.0000000000000  0.0000000000000   -1.3134434062906e-06 -3.0123243061062e-06  0.0000000000000e+00 
 0.0000000000000  0.0000000000000  0.0000000000000    5.8858366632325e-05  0.0000000000000e+00 -2.3052079147308e-04 
 0.0000000000000  0.0000000000000  0.0000000000000   -6.4676878139020e-05 -7.5998472487173e-07  7.5998472487173e-07 
 0.0000000000000  0.0000000000000  0.0000000000000   -1.9478011781769e-06  0.0000000000000e+00 -0.0000000000000e+00 

Make BORNINFO file for ALAMODE

#!/usr/bin/env python3
# File: make_borninfo.py
import os
import argparse
import glob

from auto_kappa.io import BORNINFO

def main(options):
    
    from plot_bandos import get_formula
    formula = get_formula(options.base_dir)
    file_vasprun = f"{options.base_dir}/nac/vasprun.xml"
    file_fc2 = f"{options.base_dir}/harm/force/{formula}.xml"
    
    # BORNINFO object creats BORNINFO file from vasprun.xml 
    # adjusting the order of atoms for ALAMODE force constants file.
    born = BORNINFO(file_vasprun, file_fcs=file_fc2)
    born.write(outfile="BORNINFO")
    
    print("Primitive cell from vasprun.xml")
    print("===============================")
    print(born.prim_vasp)
    print()
    print("Primitive cell from ALAMODE force constants file")
    print("================================================")
    print(born.prim_fcs)
    
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Input parameters')
    parser.add_argument('--base_dir', dest='base_dir', type=str,
                        default="./mp-22862", help="directory of auto-kappa output")
    args = parser.parse_args()    
    main(args)
    

Plot phonon dispersion and DOS

#!/usr/bin/env python3
# Filename: plot_bandos.py
import os
import argparse
import glob

from auto_kappa.io import Band, Dos, BandPR
from auto_kappa.plot.initialize import set_matplot, set_axis

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

def get_formula(base_dir):
    line = f"{base_dir}/harm/bandos/*.bands"
    fns = glob.glob(line)
    if len(fns) == 0:
        raise ValueError(" No band file found")
    fn = fns[0]
    return os.path.basename(fn).split(".")[0]

def main(options):
    
    fontsize = 7
    fig_width = 3.5
    aspect = 0.5
    dpi = 600
    
    ## Prepare figure frame
    set_matplot(fontsize=fontsize)
    fig = plt.figure(figsize=(fig_width, aspect*fig_width))
    plt.subplots_adjust(wspace=0.05)
    gs = gridspec.GridSpec(1, 2, width_ratios=[3,1])
    ax1 = fig.add_subplot(gs[0])
    ax2 = fig.add_subplot(gs[1])
    
    ## Get file names
    formula = get_formula(options.base_dir)
    # file_band = f"{options.base_dir}/harm/bandos/{formula}.bands"
    file_band_pr = f"{options.base_dir}/harm/bandos/{formula}.band.pr"
    file_dos = f"{options.base_dir}/harm/bandos/{formula}.dos"
    figname = "fig_bandos.png"
    
    ## Make Band and Dos objects
    # band = Band(file_band)
    band_pr = BandPR(file_band_pr)
    dos = Dos(file_dos)
    
    ## Plot band and DOS
    # band.plot(ax1, plot_G2G=False)
    band_pr.plot(ax1, plot_G2G=False, cbar_location='upper left')
    dos.plot(ax2, xlabel=None)
    
    ## Use same y limit
    ax2.set_ylim(ax1.get_ylim())
    
    ## Adjust figure
    ax2.tick_params(labelleft=False)
    set_axis(ax1)
    set_axis(ax2)
    
    fig.savefig(figname, dpi=dpi, bbox_inches='tight')
    print(" Output", figname)
    

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Input parameters')
    parser.add_argument('--base_dir', dest='base_dir', type=str,
                        default="./mp-22862", help="directory of auto-kappa output")
    args = parser.parse_args()    
    main(args)
    
../_images/fig_bandos.png

Fig. 5.2.1 Phonon dispersion with participation ratio and DOS of Silicon

Plot force constants

#!/usr/bin/env python3
# Filename: plot_fcs.py
import os
import argparse
import glob

from auto_kappa.io import FCSxml
from auto_kappa.plot.initialize import set_matplot, set_axis

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

def main(options):
    
    fontsize = 7
    fig_width = 2.8
    aspect = 1.0
    dpi = 600
    
    ## Prepare figure frame
    set_matplot(fontsize=fontsize)
    fig = plt.figure(figsize=(fig_width, aspect*fig_width))
    plt.subplots_adjust(hspace=0.05)
    axes = []
    for ifig in range(2):
        axes.append(plt.subplot(2, 1, ifig+1))
    
    ## Get file name
    from plot_bandos import get_formula
    formula = get_formula(options.base_dir)
    line = f"{options.base_dir}/cube/*/{formula}.xml"
    try:
        file_fc3 = glob.glob(line)[0]
    except IndexError:
        print(" No FCS file found")
        return
    
    ## Read FCS file
    fcs = FCSxml(file_fc3)
    
    ## Plot FCs
    fcs.plot_fc2(axes[0])
    fcs.plot_fc3(axes[1])
    axes[0].tick_params(labelbottom=False)
    
    ## Save figure
    figname = "fig_fcs.png"
    fig.savefig(figname, dpi=dpi, bbox_inches='tight')
    print(" Output", figname)
    
    print("FC2:", fcs.fc2.shape)
    print("FC3:", fcs.fc3.shape)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Input parameters')
    parser.add_argument('--base_dir', dest='base_dir', type=str,
                        default="./mp-22862", help="directory of auto-kappa output")
    args = parser.parse_args()    
    main(args)
    
../_images/fig_fcs.png

Fig. 5.2.2 Force constants of NaCl