Source code for pychemia.code.vasp.kpoints

import os
import numpy as _np
import pychemia

__author__ = "Guillermo Avendano-Franco"
__copyright__ = "Copyright 2016"
__version__ = "0.1"
__maintainer__ = "Guillermo Avendano-Franco"
__email__ = "gtux.gaf@gmail.com"
__status__ = "Development"
__date__ = "May 16, 2016"


[docs]def read_kpoints(path='KPOINTS'): """ Load the file KPOINTS in the directory 'path' or read directly the file 'path' and return a kpoints object for pychemia :param path: (str) File path for KPOINTS file :return: """ if os.path.isfile(path): filename = path elif os.path.isdir(path) and os.path.isfile(path + '/KPOINTS'): filename = path + '/KPOINTS' else: print("KPOINTS path not found") return # Reading the KPOINTS file rf = open(filename, 'r') comment = rf.readline() del comment nkpt = int(rf.readline()) mode = rf.readline() if nkpt > 0: if mode[0].lower() in ['c', 'k']: kmode = 'Cartesian' else: kmode = 'Reciprocal' kp = pychemia.crystal.KPoints(kmode=kmode) for i in range(nkpt): line = _np.array([float(x) for x in rf.readline().split()]) pos = line[:3] wgt = line[3] kp.add_kpt(pos, wgt) else: if mode[0].lower() in ['g']: kmode = 'Gamma' elif mode[0].lower() in ['m']: kmode = 'Monkhorst-pack' else: raise ValueError("Kpoints mode must be 'Gamma' or 'Monkhorst-pack'") kp = pychemia.crystal.KPoints(kmode=kmode) line = _np.array([int(x) for x in rf.readline().split()]) grid = line[:3] try: line = _np.array([float(x) for x in rf.readline().split()]) shift = line[:3] except ValueError: shift = _np.zeros(3) kp.set_grid(grid, shift) return kp
[docs]def write_kpoints(kp, filepath='KPOINTS'): """ Takes an object kpoints from pychemia and save the file KPOINTS in the directory 'path' or save the file 'path' as a VASP KPOINTS file :param kp: Kpoints object :param filepath: (str) Filename where the KPOINTS file is created """ if os.path.isdir(filepath): filename = filepath + '/KPOINTS' else: filename = filepath wf = open(filename, 'w') wf.write('Automatic mesh\n') if kp.kmode == 'cartesian' or kp.kmode == 'reciprocal': wf.write(str(kp.nkpt) + '\n') wf.write(kp.kmode.title() + '\n') for i in range(kp.nkpt): wf.write(" %15.7f %15.7f %15.7f %20.7f\n" % (kp.kpoints_list[i, 0], kp.kpoints_list[i, 1], kp.kpoints_list[i, 2], kp.weights[i])) elif kp.kmode == 'gamma' or kp.kmode == 'monkhorst-pack': wf.write('0\n') wf.write(kp.kmode.title() + '\n') wf.write(" %7d %7d %7d\n" % tuple(kp.grid)) wf.write(" %7.4f %7.4f %7.4f\n" % tuple(kp.shifts)) wf.close()