Exemplo n.º 1
0
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 !"
Exemplo n.º 2
0
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 !")
Exemplo n.º 3
0
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 !")
Exemplo n.º 4
0
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 !"
Exemplo n.º 5
0
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 !")