def hse_get_eigenval(): num_kpt_all, num_kpt_hk = hse_get_kpt_bandnum() num_high_k_num, high_kpt_point = hse_get_num_high_symmetry_points("KPATH.in") num_remove = num_kpt_all - num_kpt_hk fermi = initial.get_fermiLevel() nbd = initial.get_NBANDS() + 2 ispin = initial.get_ispin() eigenval_lines = open('EIGENVAL', 'r').read().splitlines() if ispin == 1: energy_kpt = np.zeros(shape=(num_kpt_hk, nbd - 2)) for flag_index_k_num in range(0, num_kpt_hk): for flag_index_orbital in range(0, nbd-2): energy_kpt[flag_index_k_num][flag_index_orbital] = \ float(eigenval_lines[int(8 + (num_remove + flag_index_k_num) * nbd + flag_index_orbital)].split()[1])-fermi return energy_kpt elif ispin == 2: energy_kpt_up = np.zeros(shape=(num_kpt_hk, nbd - 2)) energy_kpt_dw = np.zeros(shape=(num_kpt_hk, nbd - 2)) for flag_index_k_num in range(0, num_kpt_hk): for flag_index_orbital in range(0, nbd-2): energy_kpt_up[flag_index_k_num][flag_index_orbital] = \ float(eigenval_lines[int(8 + (num_remove + flag_index_k_num) * nbd + flag_index_orbital)].split()[1])-fermi energy_kpt_dw[flag_index_k_num][flag_index_orbital] = \ float(eigenval_lines[int(8 + (num_remove + flag_index_k_num) * nbd + flag_index_orbital)].split()[2])-fermi return energy_kpt_up, energy_kpt_dw else: return "No Ispin Information Obtained !"
def hse_output_band(): bd.output_klines("KPATH.in") num_kpt_all, num_kpt_hk = hse_get_kpt_bandnum() num_high_k_num, high_kpt_point = hse_get_num_high_symmetry_points("KPATH.in") kpt = hse_cal_klength(hse_get_kpt_coordinate()) num_remove = num_kpt_all - num_kpt_hk fermi = initial.get_fermiLevel() nbd = initial.get_NBANDS() ispin = initial.get_ispin() if ispin == 1: energy_kpt = hse_get_eigenval() with open("band.dat", "w", encoding='utf-8') as band: band.write("Band Data for HSE" + "\n") for k_num in range(0, num_kpt_hk): band.write(str(kpt[k_num])[:8].ljust(8, '0') + " ") for flag_nbd in range(0, nbd): band.write(str(energy_kpt[k_num][flag_nbd])[:10].ljust(10, '0') + " ") band.write("\n") band.close() elif ispin ==2: energy_kpt_up, energy_kpt_dw = hse_get_eigenval() with open("band.dat", "w", encoding='utf-8') as band: band.write("Band Data for HSE" + "\n") for k_num in range(0, num_kpt_hk): band.write(str(kpt[k_num])[:8].ljust(8, '0') + " ") for flag_nbd in range(0, nbd): band.write(str(energy_kpt_up[k_num][flag_nbd])[:10].ljust(10, '0') + " ") band.write(str(energy_kpt_dw[k_num][flag_nbd])[:10].ljust(10, '0') + " ") band.write("\n") band.close() print("Wait !") else: print("Wait !")
def output_band(): output_klines() ispin = initial.get_ispin() if ispin == 1: num_kpt, length, high_kpt_point, kpoints = get_kpt() nbd = initial.get_NBANDS() kpt = np.transpose(np.array(kpoints)) # kpt = kpoints.astype(np.float) eng = np.array(get_eigenval()) energy = eng.reshape(nbd, num_kpt) # reverse the sequence # rev_kpt = kpt[::-1] with open("band.dat", "w", encoding='utf-8') as band: band.write("Band Data" + "\n") for k_num in range(0, num_kpt): band.write(str(kpt[k_num])[:10].ljust(10, ' ') + " ") for flag_nbd in range(0, nbd): band.write(str(energy[flag_nbd][k_num])[:10].ljust(10, ' ') + " ") band.write("\n") band.close() elif ispin == 2: num_kpt, length, high_kpt_point, kpoints = get_kpt() nbd = initial.get_NBANDS() kpt = np.transpose(np.array(kpoints)) eng_up, eng_dw = get_eigenval() eig_up = np.array(eng_up) eig_dw = np.array(eng_dw) energy_up = eig_up.reshape(nbd, num_kpt) energy_dw = eig_dw.reshape(nbd, num_kpt) with open("band_up.dat", "w", encoding='utf-8') as band_up: band_up.write("Band Data" + "\n") for k_num in range(0, num_kpt): band_up.write(str(kpt[k_num])[:10].ljust(10, ' ') + " ") for flag_nbd in range(0, nbd): band_up.write(str(energy_up[flag_nbd][k_num])[:10].ljust(10, ' ') + " ") band_up.write("\n") band_up.close() with open("band_dw.dat", "w", encoding='utf-8') as band_dw: band_dw.write("Band Data" + "\n") for k_num in range(0, num_kpt): band_dw.write(str(kpt[k_num])[:10].ljust(10, ' ') + " ") for flag_nbd in range(0, nbd): band_dw.write(str(energy_dw[flag_nbd][k_num])[:10].ljust(10, ' ') + " ") band_dw.write("\n") band_dw.close() else: print("No Ispin Information Obtained !")
def get_eigenval(): num_kpt, length, high_kpt_point, kpt = get_kpt() fermi = initial.get_fermiLevel() eig = [] eig_up = [] eig_dw = [] energy_kpt = [] energy_kpt_up = [] energy_kpt_dw = [] # energy = [] nbd = initial.get_NBANDS() + 2 ispin = initial.get_ispin() eigenval_lines = open('EIGENVAL', 'r').read().splitlines() if ispin == 1: for flag_nbd_num in range(0, nbd-2): for flag_k_num in range(0, int(num_kpt)+1): if flag_k_num < int(num_kpt): flag_orbital = 8 + flag_nbd_num + flag_k_num * nbd eig = float(eigenval_lines[flag_orbital].split()[1]) - fermi round(float(eig), 6) energy_kpt.append(eig) return energy_kpt elif ispin == 2: for flag_nbd_num in range(0, nbd-2): for flag_k_num in range(0, int(num_kpt)+1): if flag_k_num < int(num_kpt): flag_orbital = 8 + flag_nbd_num + flag_k_num * nbd eig_up = float(eigenval_lines[flag_orbital].split()[1]) - fermi eig_dw = float(eigenval_lines[flag_orbital].split()[2]) - fermi round(float(eig_up), 6) round(float(eig_dw), 6) energy_kpt_up.append(eig_up) energy_kpt_dw.append(eig_dw) return energy_kpt_up, energy_kpt_dw else: return "No Ispin Information Obtained !"
def bandplot(eng_r = [-10, 6, 2], color_noispin = "black", color_ispin = "red"): output_band() ispin = initial.get_ispin() if ispin == 1: num_kpt, length, high_kpt_point, kpoints = get_kpt() nbd = initial.get_NBANDS() banddata = np.loadtxt("band.dat", skiprows=1, dtype=np.float64) kpt = banddata[:, 0] len_high_k = 0 for j in range(0, len(length) - 1): length[j] = length[j] + len_high_k len_high_k = length[j] fig, ax = plt.subplots() for i in range(1, nbd + 1): plt.plot(kpt, banddata[:, i], color=color_noispin) plt.xlim(0, max(length)) x_group_label = [] x_start = 0 x_group_label.append(x_start) for k in range(0, len(length) - 1): x_group_label.append(length[k]) plt.xticks(x_group_label) ax.set_xticklabels(high_kpt_point, rotation=0, fontsize=12, fontname='arial') # plt.yticks(eng_r[0], eng_r[1], eng_r[2]) plt.ylim(eng_r[0], eng_r[1]) plt.ylabel("E - " + "E$_\mathrm{{F}}$" + " (eV)", fontsize=14, fontname='arial') ytick = np.arange(eng_r[0], eng_r[1] + 1, eng_r[2]) a = int(len(ytick) / 2) plt.yticks(np.insert(ytick, a, 0), fontsize=12, ) ax.axhline(y=0, xmin=0, xmax=1, linestyle='--', linewidth=0.5, color='0.5') for i in length[0:-1]: ax.axvline(x=i, ymin=0, ymax=1, linestyle='--', linewidth=0.5, color='0.5') plt.savefig("band.png", dpi=300) plt.show() elif ispin == 2: num_kpt, length, high_kpt_point, kpoints = get_kpt() nbd = initial.get_NBANDS() banddata_up = np.loadtxt("band_up.dat", skiprows=1, dtype=np.float64) banddata_dw = np.loadtxt("band_dw.dat", skiprows=1, dtype=np.float64) kpt = banddata_up[:, 0] len_high_k = 0 for j in range(0, len(length) - 1): length[j] = length[j] + len_high_k len_high_k = length[j] fig, ax = plt.subplots() for i in range(1, nbd + 1): plt.plot(kpt, banddata_up[:, i], color=color_noispin) plt.plot(kpt, banddata_dw[:, i], color=color_ispin) plt.xlim(0, max(length)) ax.legend(("Spin_UP", "Spin_DW"), loc='best') x_group_label = [] x_start = 0 x_group_label.append(x_start) for k in range(0, len(length) - 1): x_group_label.append(length[k]) plt.xticks(x_group_label) ax.set_xticklabels(high_kpt_point, rotation=0, fontsize=12, fontname='arial') # plt.yticks(eng_r[0], eng_r[1], eng_r[2]) plt.ylim(eng_r[0], eng_r[1]) plt.ylabel("E - " + "E$_\mathrm{{F}}$" + " (eV)", fontsize=14, fontname='arial') ytick = np.arange(eng_r[0], eng_r[1] + 1, eng_r[2]) a = int(len(ytick) / 2) plt.yticks(np.insert(ytick, a, 0), fontsize=12, ) ax.axhline(y=0, xmin=0, xmax=1, linestyle='--', linewidth=0.5, color='0.5') for i in length[0:-1]: ax.axvline(x=i, ymin=0, ymax=1, linestyle='--', linewidth=0.5, color='0.5') plt.savefig("band.png", dpi=300) plt.show() else: print("No Ispin Information Obtained !")