5.1. Preparation of ALAMODE input files

The following Python scripts can be found in auto-kappa/examples/6_parser/alamode_inputs.

Force constants

Script to suggest displacement patterns:

#!/usr/bin/env python
# File:    mksuggest.py
import ase.io
from auto_kappa.io import AlmInput

def get_cutoff_for_FC3(elems, cutoff3=4.3):
    cutoff3_bohr = cutoff3 * 1.88973
    cutoffs = {}
    for i1 in range(len(elems)):
        for i2 in range(len(elems)):
            lab = "%s-%s" % (elems[i1], elems[i2])
            cutoffs[lab] = [None, cutoff3_bohr]
    return cutoffs

def main():
    filename = './FILES/POSCAR-supercell'
    supercell = ase.io.read(filename, format='vasp')
    elems = list(dict.fromkeys(supercell.get_chemical_symbols()))
    
    ## 1. suggest for FC2 (norder=1)
    alminp = AlmInput.from_structure(
        supercell,
        mode='suggest',
        norder=1,
    )
    
    outfile = "suggest_fc2.in"
    alminp.to_file(filename=outfile)
    print(" Output", outfile)
    
    ## 2. suggest for FC3 (norder=2)
    norder = 2
    alminp.update({'norder': norder})
    alminp.update({'nbody': [2, 3]})
    
    cutoff_radii = get_cutoff_for_FC3(elems, cutoff3=4.3)
    alminp.update({'cutoff': cutoff_radii})
    
    outfile = "suggest_fc3.in"
    alminp.to_file(filename=outfile)
    print(" Output", outfile)

if __name__ == '__main__':
    main()

Script to calculate force constants after force calculations:

#!/usr/bin/env python
# File:    mkoptimize.py
import ase.io
from auto_kappa.io import AlmInput
from auto_kappa.units import AToBohr

def get_cutoff_for_FC3(elems, cutoff3=4.3):
    cutoff3_bohr = cutoff3 * AToBohr
    cutoffs = {}
    for i1 in range(len(elems)):
        for i2 in range(len(elems)):
            lab = "%s-%s" % (elems[i1], elems[i2])
            cutoffs[lab] = [None, cutoff3_bohr]
    return cutoffs

def main():
    filename = './FILES/POSCAR-supercell'
    dfset = "./FILES/DFSET.cube"
    fc2xml = "./FILES/FC2.xml"
    borninfo = "./FILES/BORNINFO"

    supercell = ase.io.read(filename, format='vasp')
    elems = list(dict.fromkeys(supercell.get_chemical_symbols()))

    cutoff_radii = get_cutoff_for_FC3(elems, cutoff3=4.3)

    alminp = AlmInput.from_structure(
        supercell,
        mode='optimize',
        norder=2,
        cutoff=cutoff_radii,
        dfset=dfset,
        fc2xml=fc2xml,
        nonanalytic=1,
        borninfo=borninfo,
    )

    outfile = 'fc3.in'
    alminp.to_file(filename=outfile)
    print(" Output", outfile)

if __name__ == '__main__':
    main()

Phonon dispersion

#!/usr/bin/env python
# File:    mkband.py
import ase.io
from auto_kappa.structure import get_primitive_structure_spglib
from auto_kappa.io import AnphonInput

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

def main():
    
    filename = './FILES/POSCAR-supercell'
    fc2xml = "./FILES/FC2.xml"
    borninfo = "./FILES/BORNINFO"
    
    supercell = ase.io.read(filename, format='vasp')
    primitive = get_primitive_structure_spglib(supercell)
    
    anpinp = AnphonInput.from_structure(
        primitive,
        mode='phonons',
        kpmode=1,
        fcsxml=fc2xml,
        nonanalytic=2,
        borninfo=borninfo,
    )
    anpinp.set_kpoint(deltak=0.01)
    
    outfile = 'band.in'
    anpinp.to_file(outfile)
    print(" Output", outfile)

if __name__ == '__main__':
    main()

Thermal conductivity

#!/usr/bin/env python
# File:    mkkappa.py
import ase.io
from auto_kappa.io import AnphonInput
from auto_kappa.structure import get_primitive_structure_spglib
from auto_kappa.cui.suggest import klength2mesh

def main():
    filename = './FILES/POSCAR-supercell'
    fcsxml = "./FILES/FC3_lasso.xml"
    borninfo = "./FILES/BORNINFO"
    k_length = 20
    
    structure = ase.io.read(filename, format='vasp')
    primitive = get_primitive_structure_spglib(structure)
    
    kpts = klength2mesh(k_length, primitive.cell.array)
    
    anpinp = AnphonInput.from_structure(
        primitive,
        mode='rta',
        kpmode=2,
        fcsxml=fcsxml,
        nonanalytic=2,
        borninfo=borninfo,
        kpts=kpts,
        dt=50,
        tmin=50,
        tmax=1000,
        kappa_coherent=1,
    )
    
    outfile = 'kappa.in'
    anpinp.to_file(outfile)
    print(" Output", outfile)

if __name__ == '__main__':
    main()