Source code for wannierberri.w90files.eig

from .w90file import W90_file
import numpy as np


[docs] class EIG(W90_file): def __init__(self, seedname="wannier90", **kwargs): self.npz_tags = ["data"] super().__init__(seedname=seedname, ext="eig", **kwargs)
[docs] def from_w90_file(self, seedname): data = np.loadtxt(seedname + ".eig") NB = int(round(data[:, 0].max())) NK = int(round(data[:, 1].max())) data = data.reshape(NK, NB, 3) assert np.linalg.norm(data[:, :, 0] - 1 - np.arange(NB)[None, :]) < 1e-15 assert np.linalg.norm(data[:, :, 1] - 1 - np.arange(NK)[:, None]) < 1e-15 self.data = data[:, :, 2]
def to_w90_file(self, seedname): file = open(seedname + ".eig", "w") for ik in range(self.NK): for ib in range(self.NB): file.write(f" {ib + 1:4d} {ik + 1:4d} {self.data[ik, ib]:17.12f}\n")
[docs] def select_bands(self, selected_bands): if selected_bands is not None: self.data = self.data[:, selected_bands]
# def get_disentangled(self, v_left, v_right): # data = np.einsum("klm,km...,kml->kl", v_left, self.data, v_right).real # return self.__class__(data=data)