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()