Source code for jarvis.io.wien2k.outputs

"""Module to parse WIEN2k outputs."""
import numpy as np
import matplotlib.pyplot as plt

plt.switch_backend("agg")


[docs]def read_band_energy( energy_file="FeSe.energy", plot=True, band_plot="band.png" ): """Read case.energy file.""" f = open(energy_file, "r") lines = f.read().splitlines() f.close() eigs = [] eig_bands = [] start = True for i in lines: sp = i.split() if len(sp) == 2 and start: tmp = float(sp[1]) eig_bands.append(tmp) if len(sp) == 7: start = True if eig_bands != []: eigs.append(np.array(eig_bands)) eig_bands = [] # print('eigs',eigs) # eigs = np.array(eigs) if plot: for ii, i in enumerate(eigs): plt.plot([ii for j in range(len(i))], i, ".", c="b") plt.savefig(band_plot) plt.close() return eigs
[docs]def read_scf(scf_file="FeSe.scf"): """Read case.scf file.""" f = open(scf_file, "r") lines = f.read().splitlines() f.close() info = {} efermies = [] nelects = [] nkpts = [] totens = [] for i in lines: if ":FER : F E R M I - ENERGY(TETRAH.M.)" in i: efermies.append( float(i.split(":FER : F E R M I - ENERGY(TETRAH.M.)=")[1]) ) if ":ENE : ********** TOTAL ENERGY IN Ry" in i: totens.append( float(i.split(":ENE : ********** TOTAL ENERGY IN Ry =")[1]) ) if ":NOE : NUMBER OF ELECTRONS =" in i: nelects.append( float(i.split(":NOE : NUMBER OF ELECTRONS =")[1]) ) if ":KPT : NUMBER OF K-POINTS:" in i: nkpts.append( float(i.split(":KPT : NUMBER OF K-POINTS:")[1]) ) info["efermi"] = efermies[-1] info["nelect"] = nelects[-1] info["nkpt"] = nkpts[-1] info["tot_en"] = totens[-1] return info
[docs]def band_eigvals(energy_file="FeSe.energy", plot=False, band_file="band.png"): """Get bandstructure eigenvalues.""" f = open(energy_file, "r") lines = f.read().splitlines() f.close() eigs = [] eig_bands = [] start = True for i in lines: sp = i.split() if len(sp) == 2 and start: tmp = float(sp[1]) eig_bands.append(tmp) if len(sp) > 2: # if len(sp) == 7: start = True if eig_bands != []: eigs.append(eig_bands) eig_bands = [] # eigs = np.array(eigs) print("TODO:Fix bug in np.array())") if plot: import matplotlib.pyplot as plt for i in eigs: # for i in eigs.T: plt.plot(i) plt.savefig(band_file) plt.close() return eigs
[docs]def read_spaghetti_ene( filename="ICSD-76748.spaghetti_ene", ): """Obtain data for plotting bandstructure.""" f = open(filename, "r") lines = f.read().splitlines() f.close() k = [] energy = [] for i, ii in enumerate(lines): if "bandindex" not in ii: tmp = [float(j) for j in ii.split()] energy.append(tmp[-1]) k.append(tmp[-2]) k = np.array(k) energy = np.array(energy) return k, energy
""" read_band_energy() x = read_scf() print(x) """