Source code for masci_tools.io.kkr_read_shapefun_info

# -*- coding: utf-8 -*-
###############################################################################
# Copyright (c), 2018 Forschungszentrum Jülich GmbH, IAS-1/PGI-1, Germany.    #
#                All rights reserved.                                         #
# This file is part of the Masci-tools package.                               #
# (Material science tools)                                                    #
#                                                                             #
# The code is hosted on GitHub at https://github.com/judftteam/masci-tools    #
# For further information on the license, see the LICENSE.txt file            #
#                                                                             #
###############################################################################


[docs]def read_shapefun(path='.'): """ Read vertices of shapefunctions with Zoom into shapefun of a single atom :author: Philipp Ruessmann :param path: path where voronoi output is found (optional, defaults to './') :returns pos: positions of the centers of the shapefunctions :returns out: dictionary of the vertices of the shapefunctions """ from masci_tools.io.parsers.common_functions import search_string from numpy import array path += '/' # first read vertices file with open(path+'vertices.dat') as f: out = {} face, face_old = -1,-1 for line in f: if '# serial:' in line[:9]: # skip line with serial number pass else: if 'representative' in line: atm = int(line.split()[-1]) i_newat = 1 elif 'Face' in line: i_newat = 0 face = int(line.split()[-1]) i_newface = 1 tmp = [] else: i_newface = 0 tmp2 = line.split() if tmp2<>[]: tmp2 = [float(i) for i in tmp2] tmp.append(tmp2) atm_old, face_old = atm,face if face_old<>face: out[atm,face] = tmp # then read positions from inputcard with open('inputcard') as file: inp = file.readlines() # convert to uppercase for iline in range(len(inp)): inp[iline] = inp[iline].upper() # search number of atoms in inputcard iline = search_string('NAEZ', inp) if iline<0: iline = search_string('NATYP', inp) if iline==-1: raise ValueError("Error reading NAEZ or NATYP from inputcard.") naez = int(inp.pop(iline).split('=')[1].split()[0]) # read rbasis positions iline = search_string('RBASIS', inp) if iline>=0: pos = [] for iatom in range(naez): pos.append(inp.pop(iline+1)) # finally convert to float arrays pos = array([[float(j) for j in i.split()[:3]] for i in pos]) else: raise ValueError("Error reading RBASIS from inputcard.") return pos, out