Source code for jarvis.io.wanniertools.outputs

"""Class for analyzing  WT.out file."""

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

plt.switch_backend("agg")


[docs]class WTOut(object): """Construct WT.out related object.""" def __init__(self, path=""): """Initialize with path to WT.out file.""" self.path = path
[docs] def get_z2_index(self): """Get Z2 index.""" f = open(self.path, "r") lines = f.read().splitlines() f.close() strng = 0 for ii, i in enumerate(lines): if "# z2 number for 6 planes" in i: for j in range(6): tmp = lines[ii + j + 1].split() if ( tmp[0] == "k1=0.0," or tmp[0] == "k2=0.0," or tmp[0] == "k3=0.0," or tmp[0] == "k3=0.5," or tmp[0] == "k2=0.5," or tmp[0] == "k1=0.5," ): val = tmp[3] strng = strng + float(val) if tmp[0] == "k1=0.5,": weak1 = tmp[3] if tmp[0] == "k2=0.5,": weak2 = tmp[3] if tmp[0] == "k3=0.5,": weak3 = tmp[3] index = ( str(int(strng % 2)) + str(";") + str(weak1) + str(",") + str(weak2) + str(",") + str(weak3) ) return index
[docs] def get_chern_number(self): """Get Chern index.""" f = open(self.path, "r") lines = f.read().splitlines() f.close() chrn = [] try: for j, jj in enumerate(lines): if "# Chern number for 6 planes" in jj: for k in range(1, 7): tmp = float(lines[j + k].split(":")[1]) if tmp not in chrn: chrn.append(tmp) except Exception: pass return chrn
[docs]def parse_chern_dat( chern_dat="wanniercenter3D_Chern.dat", filename="mychern.png" ): """Plot wanniercenter3D_Chern.dat file.""" x = np.loadtxt(chern_dat) if filename is not None: the_grid = GridSpec(3, 2) plt.rcParams.update({"font.size": 18}) plt.figure(figsize=(12, 12)) plt.subplot(the_grid[0, 0]) plt.title("(a) k$_1$=0.0") plt.xlabel("k$_2$") plt.plot(x[:, 0], x[:, 1], ".") plt.subplot(the_grid[0, 1]) plt.title("(b) k$_1$=0.5") plt.xlabel("k$_2$") plt.plot(x[:, 0], x[:, 2], ".") plt.subplot(the_grid[1, 0]) plt.xlabel("k$_1$") plt.title("(c) k$_2$=0.0") plt.plot(x[:, 0], x[:, 3], ".") plt.subplot(the_grid[1, 1]) plt.xlabel("k$_1$") plt.title("(d) k$_2$=0.5") plt.plot(x[:, 0], x[:, 4], ".") plt.subplot(the_grid[2, 0]) plt.title("(e) k$_3$=0.0") plt.xlabel("k$_2$") plt.plot(x[:, 0], x[:, 5], ".") plt.subplot(the_grid[2, 1]) plt.title("(f) k$_3$=0.5") plt.xlabel("k$_2$") plt.plot(x[:, 0], x[:, 6], ".") plt.tight_layout() plt.savefig(filename) plt.close() return x
[docs]def parse_nodes_dat(fname="Nodes.dat"): """Parse Nodedat file.""" f = open(fname, "r") lines = f.read().splitlines() f.close() nodes = [] for i in lines: if "#" not in i: nodes.append(i.split()) nodes = np.array(nodes, dtype="float") return nodes
""" if __name__ == "__main__": wt = "WT.out" z2 = WTOut(path=wt).get_z2_index() print(z2) chrn = WTOut(path=wt).get_chern_number() print(chrn) """