diff --git a/academic_codes/2021.04.24_Hofstadter_butterfly_of_graphene_ribbon/Hofstadter_butterfly_of_graphene_ribbon.py b/academic_codes/2021.04.24_Hofstadter_butterfly_of_graphene_ribbon/Hofstadter_butterfly_of_graphene_ribbon.py index 43b4b1b..a907875 100644 --- a/academic_codes/2021.04.24_Hofstadter_butterfly_of_graphene_ribbon/Hofstadter_butterfly_of_graphene_ribbon.py +++ b/academic_codes/2021.04.24_Hofstadter_butterfly_of_graphene_ribbon/Hofstadter_butterfly_of_graphene_ribbon.py @@ -7,7 +7,6 @@ import numpy as np from math import * import cmath import functools -import guan def hamiltonian(B, k, N, M, t1, a): # graphene哈密顿量(N是条带的宽度参数) # 初始化为零矩阵 @@ -43,9 +42,58 @@ def main(): a = 1 hamiltonian_function0 = functools.partial(hamiltonian, k=0, N=N, M=0, t1=1, a=a) B_array = np.linspace(0, 1/(3*np.sqrt(3)/2*a*a), 100) - eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(B_array, hamiltonian_function0) BS_array = B_array*(3*np.sqrt(3)/2*a*a) - guan.plot(BS_array, eigenvalue_array, xlabel='Flux (BS/phi_0)', ylabel='E', title='Ny=%i'%N, filename='a', show=1, save=0, style='k.', y_min=None, y_max=None, markersize=3) - + eigenvalue_array = calculate_eigenvalue_with_one_parameter(B_array, hamiltonian_function0) + plot(BS_array, eigenvalue_array, xlabel='Flux (BS/phi_0)', ylabel='E', title='Ny=%i'%N, filename='a', show=1, save=0, style='k.', y_min=None, y_max=None, markersize=3) + + # import guan + # eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(B_array, hamiltonian_function0) + # guan.plot(BS_array, eigenvalue_array, xlabel='Flux (BS/phi_0)', ylabel='E', title='Ny=%i'%N, filename='a', show=1, save=0, style='k.', y_min=None, y_max=None, markersize=3) + +def calculate_eigenvalue_with_one_parameter(x_array, hamiltonian_function, print_show=0): + dim_x = np.array(x_array).shape[0] + i0 = 0 + if np.array(hamiltonian_function(0)).shape==(): + eigenvalue_array = np.zeros((dim_x, 1)) + for x0 in x_array: + hamiltonian = hamiltonian_function(x0) + eigenvalue_array[i0, 0] = np.real(hamiltonian) + i0 += 1 + else: + dim = np.array(hamiltonian_function(0)).shape[0] + eigenvalue_array = np.zeros((dim_x, dim)) + for x0 in x_array: + if print_show==1: + print(x0) + hamiltonian = hamiltonian_function(x0) + eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) + eigenvalue_array[i0, :] = eigenvalue + i0 += 1 + return eigenvalue_array + +def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', format='jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2): + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left) + ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) + ax.grid() + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + if y_min!=None or y_max!=None: + if y_min==None: + y_min=min(y_array) + if y_max==None: + y_max=max(y_array) + ax.set_ylim(y_min, y_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + [label.set_fontname('Times New Roman') for label in labels] + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') + if __name__ == '__main__': main() \ No newline at end of file diff --git a/academic_codes/2021.07.28_bands_of_SSH_model_with_two_kinds_of_fourier_transform/bands_of_SSH_model_with_two_kinds_of_fourier_transform.py b/academic_codes/2021.07.28_bands_of_SSH_model_with_two_kinds_of_fourier_transform/bands_of_SSH_model_with_two_kinds_of_fourier_transform.py new file mode 100644 index 0000000..8a09446 --- /dev/null +++ b/academic_codes/2021.07.28_bands_of_SSH_model_with_two_kinds_of_fourier_transform/bands_of_SSH_model_with_two_kinds_of_fourier_transform.py @@ -0,0 +1,81 @@ +""" +This code is supported by the website: https://www.guanjihuan.com +The newest version of this code is on the web page: https://www.guanjihuan.com/archives/16199 +""" + +import numpy as np +from math import * +import cmath + +def hamiltonian_1(k, v=0.6, w=1): + matrix = np.zeros((2, 2), dtype=complex) + matrix[0,1] = v+w*cmath.exp(-1j*k) + matrix[1,0] = v+w*cmath.exp(1j*k) + return matrix + +def hamiltonian_2(k, v=0.6, w=1): + matrix = np.zeros((2, 2), dtype=complex) + matrix[0,1] = v*cmath.exp(1j*k/2)+w*cmath.exp(-1j*k/2) + matrix[1,0] = v*cmath.exp(-1j*k/2)+w*cmath.exp(1j*k/2) + return matrix + +def main(): + k_array = np.linspace(-pi ,pi, 100) + E_1_array = calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_1) + plot(k_array, E_1_array, xlabel='k', ylabel='E_1') + E_2_array = calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_2) + plot(k_array, E_2_array, xlabel='k', ylabel='E_2') + + # import guan + # E_1_array = guan.calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_1) + # guan.plot(k_array, E_1_array, xlabel='k', ylabel='E_1') + # E_2_array = guan.calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_2) + # guan.plot(k_array, E_2_array, xlabel='k', ylabel='E_2') + +def calculate_eigenvalue_with_one_parameter(x_array, hamiltonian_function, print_show=0): + dim_x = np.array(x_array).shape[0] + i0 = 0 + if np.array(hamiltonian_function(0)).shape==(): + eigenvalue_array = np.zeros((dim_x, 1)) + for x0 in x_array: + hamiltonian = hamiltonian_function(x0) + eigenvalue_array[i0, 0] = np.real(hamiltonian) + i0 += 1 + else: + dim = np.array(hamiltonian_function(0)).shape[0] + eigenvalue_array = np.zeros((dim_x, dim)) + for x0 in x_array: + if print_show==1: + print(x0) + hamiltonian = hamiltonian_function(x0) + eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) + eigenvalue_array[i0, :] = eigenvalue + i0 += 1 + return eigenvalue_array + +def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', format='jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2): + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left) + ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) + ax.grid() + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + if y_min!=None or y_max!=None: + if y_min==None: + y_min=min(y_array) + if y_max==None: + y_max=max(y_array) + ax.set_ylim(y_min, y_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + [label.set_fontname('Times New Roman') for label in labels] + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/academic_codes/2021.07.29_bands_of_SSH_model_with_two_kinds_of_fourier_transform/bands_of_SSH_model_with_two_kinds_of_fourier_transform.py b/academic_codes/2021.07.29_bands_of_SSH_model_with_two_kinds_of_fourier_transform/bands_of_SSH_model_with_two_kinds_of_fourier_transform.py deleted file mode 100644 index 86ad91a..0000000 --- a/academic_codes/2021.07.29_bands_of_SSH_model_with_two_kinds_of_fourier_transform/bands_of_SSH_model_with_two_kinds_of_fourier_transform.py +++ /dev/null @@ -1,31 +0,0 @@ -""" -This code is supported by the website: https://www.guanjihuan.com -The newest version of this code is on the web page: https://www.guanjihuan.com/archives/16199 -""" - -import numpy as np -from math import * -import cmath -import guan - -v=0.6 -w=1 -k_array = np.linspace(-pi ,pi, 100) - -def hamiltonian_1(k): - matrix = np.zeros((2, 2), dtype=complex) - matrix[0,1] = v+w*cmath.exp(-1j*k) - matrix[1,0] = v+w*cmath.exp(1j*k) - return matrix - -def hamiltonian_2(k): - matrix = np.zeros((2, 2), dtype=complex) - matrix[0,1] = v*cmath.exp(1j*k/2)+w*cmath.exp(-1j*k/2) - matrix[1,0] = v*cmath.exp(-1j*k/2)+w*cmath.exp(1j*k/2) - return matrix - -E_1_array = guan.calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_1) -guan.plot(k_array, E_1_array, xlabel='k', ylabel='E_1') - -E_2_array = guan.calculate_eigenvalue_with_one_parameter(k_array, hamiltonian_2) -guan.plot(k_array, E_2_array, xlabel='k', ylabel='E_2') \ No newline at end of file diff --git a/academic_codes/2021.08.09_flat_bands_of_kagome lattice/flat_bands_of_kagome lattice.py b/academic_codes/2021.08.09_flat_bands_of_kagome lattice/flat_bands_of_kagome lattice.py index 22795be..d577ea7 100644 --- a/academic_codes/2021.08.09_flat_bands_of_kagome lattice/flat_bands_of_kagome lattice.py +++ b/academic_codes/2021.08.09_flat_bands_of_kagome lattice/flat_bands_of_kagome lattice.py @@ -5,7 +5,6 @@ The newest version of this code is on the web page: https://www.guanjihuan.com/a import numpy as np from math import * -import guan def hamiltonian(kx, ky): # kagome lattice k1_dot_a1 = kx @@ -20,7 +19,85 @@ def hamiltonian(kx, ky): # kagome lattice h = -t*h return h -kx_array = np.linspace(-pi ,pi, 500) -ky_array = np.linspace(-pi ,pi, 500) -eigenvalue_array = guan.calculate_eigenvalue_with_two_parameters(kx_array, ky_array, hamiltonian) -guan.plot_3d_surface(kx_array, ky_array, eigenvalue_array, xlabel='kx', ylabel='ky', zlabel='E', rcount=200, ccount=200) \ No newline at end of file +def main(): + kx_array = np.linspace(-pi ,pi, 500) + ky_array = np.linspace(-pi ,pi, 500) + eigenvalue_array = calculate_eigenvalue_with_two_parameters(kx_array, ky_array, hamiltonian) + plot_3d_surface(kx_array, ky_array, eigenvalue_array, xlabel='kx', ylabel='ky', zlabel='E', rcount=200, ccount=200) + + # import guan + # eigenvalue_array = guan.calculate_eigenvalue_with_two_parameters(kx_array, ky_array, hamiltonian) + # guan.plot_3d_surface(kx_array, ky_array, eigenvalue_array, xlabel='kx', ylabel='ky', zlabel='E', rcount=200, ccount=200) + +def calculate_eigenvalue_with_two_parameters(x_array, y_array, hamiltonian_function, print_show=0, print_show_more=0): + dim_x = np.array(x_array).shape[0] + dim_y = np.array(y_array).shape[0] + if np.array(hamiltonian_function(0,0)).shape==(): + eigenvalue_array = np.zeros((dim_y, dim_x, 1)) + i0 = 0 + for y0 in y_array: + j0 = 0 + for x0 in x_array: + hamiltonian = hamiltonian_function(x0, y0) + eigenvalue_array[i0, j0, 0] = np.real(hamiltonian) + j0 += 1 + i0 += 1 + else: + dim = np.array(hamiltonian_function(0, 0)).shape[0] + eigenvalue_array = np.zeros((dim_y, dim_x, dim)) + i0 = 0 + for y0 in y_array: + j0 = 0 + if print_show==1: + print(y0) + for x0 in x_array: + if print_show_more==1: + print(x0) + hamiltonian = hamiltonian_function(x0, y0) + eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) + eigenvalue_array[i0, j0, :] = eigenvalue + j0 += 1 + i0 += 1 + return eigenvalue_array + +def plot_3d_surface(x_array, y_array, matrix, xlabel='x', ylabel='y', zlabel='z', title='', fontsize=20, labelsize=15, show=1, save=0, filename='a', format='jpg', dpi=300, z_min=None, z_max=None, rcount=100, ccount=100): + import matplotlib.pyplot as plt + from matplotlib import cm + from matplotlib.ticker import LinearLocator + matrix = np.array(matrix) + fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) + plt.subplots_adjust(bottom=0.1, right=0.65) + x_array, y_array = np.meshgrid(x_array, y_array) + if len(matrix.shape) == 2: + surf = ax.plot_surface(x_array, y_array, matrix, rcount=rcount, ccount=ccount, cmap=cm.coolwarm, linewidth=0, antialiased=False) + elif len(matrix.shape) == 3: + for i0 in range(matrix.shape[2]): + surf = ax.plot_surface(x_array, y_array, matrix[:,:,i0], rcount=rcount, ccount=ccount, cmap=cm.coolwarm, linewidth=0, antialiased=False) + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_zlabel(zlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.zaxis.set_major_locator(LinearLocator(5)) + ax.zaxis.set_major_formatter('{x:.2f}') + if z_min!=None or z_max!=None: + if z_min==None: + z_min=matrix.min() + if z_max==None: + z_max=matrix.max() + ax.set_zlim(z_min, z_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels() + [label.set_fontname('Times New Roman') for label in labels] + cax = plt.axes([0.8, 0.1, 0.05, 0.8]) + cbar = fig.colorbar(surf, cax=cax) + cbar.ax.tick_params(labelsize=labelsize) + for l in cbar.ax.yaxis.get_ticklabels(): + l.set_family('Times New Roman') + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_Wilson_loop.py b/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_Wilson_loop.py index 08d8ba5..921be55 100644 --- a/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_Wilson_loop.py +++ b/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_Wilson_loop.py @@ -6,7 +6,6 @@ The newest version of this code is on the web page: https://www.guanjihuan.com/a import numpy as np import cmath from math import * -import guan def hamiltonian(kx, ky): # BBH model # label of atoms in a unit cell @@ -61,7 +60,33 @@ def main(): nu_x[i0] += 1 nu_x = np.sort(nu_x) nu_x_array.append(nu_x.real) - guan.plot(ky_array, nu_x_array, xlabel='ky', ylabel='nu_x', style='-', y_min=0, y_max=1) + plot(ky_array, nu_x_array, xlabel='ky', ylabel='nu_x', style='-', y_min=0, y_max=1) + # import guan + # guan.plot(ky_array, nu_x_array, xlabel='ky', ylabel='nu_x', style='-', y_min=0, y_max=1) + +def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', format='jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2): + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left) + ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) + ax.grid() + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + if y_min!=None or y_max!=None: + if y_min==None: + y_min=min(y_array) + if y_max==None: + y_max=max(y_array) + ax.set_ylim(y_min, y_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + [label.set_fontname('Times New Roman') for label in labels] + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') if __name__ == '__main__': main() \ No newline at end of file diff --git a/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_bands.py b/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_bands.py index 5ee20b7..0cda1e7 100644 --- a/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_bands.py +++ b/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_bands.py @@ -7,7 +7,6 @@ import numpy as np import cmath from math import * import functools -import guan def hamiltonian(kx, ky): # BBH model # label of atoms in a unit cell @@ -32,13 +31,133 @@ def hamiltonian(kx, ky): # BBH model def main(): kx = np.arange(-pi, pi, 0.05) ky = np.arange(-pi, pi, 0.05) - - eigenvalue_array = guan.calculate_eigenvalue_with_two_parameters(kx, ky, hamiltonian) - guan.plot_3d_surface(kx, ky, eigenvalue_array, xlabel='kx', ylabel='ky', zlabel='E', title='BBH bands') - + eigenvalue_array = calculate_eigenvalue_with_two_parameters(kx, ky, hamiltonian) + plot_3d_surface(kx, ky, eigenvalue_array, xlabel='kx', ylabel='ky', zlabel='E', title='BBH bands') hamiltonian0 = functools.partial(hamiltonian, ky=0) - eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(kx, hamiltonian0) - guan.plot(kx, eigenvalue_array, xlabel='kx', ylabel='E', title='BBH bands ky=0') + eigenvalue_array = calculate_eigenvalue_with_one_parameter(kx, hamiltonian0) + plot(kx, eigenvalue_array, xlabel='kx', ylabel='E', title='BBH bands ky=0') + + # import guan + # eigenvalue_array = guan.calculate_eigenvalue_with_two_parameters(kx, ky, hamiltonian) + # guan.plot_3d_surface(kx, ky, eigenvalue_array, xlabel='kx', ylabel='ky', zlabel='E', title='BBH bands') + # hamiltonian0 = functools.partial(hamiltonian, ky=0) + # eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(kx, hamiltonian0) + # guan.plot(kx, eigenvalue_array, xlabel='kx', ylabel='E', title='BBH bands ky=0') + +def calculate_eigenvalue_with_one_parameter(x_array, hamiltonian_function, print_show=0): + dim_x = np.array(x_array).shape[0] + i0 = 0 + if np.array(hamiltonian_function(0)).shape==(): + eigenvalue_array = np.zeros((dim_x, 1)) + for x0 in x_array: + hamiltonian = hamiltonian_function(x0) + eigenvalue_array[i0, 0] = np.real(hamiltonian) + i0 += 1 + else: + dim = np.array(hamiltonian_function(0)).shape[0] + eigenvalue_array = np.zeros((dim_x, dim)) + for x0 in x_array: + if print_show==1: + print(x0) + hamiltonian = hamiltonian_function(x0) + eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) + eigenvalue_array[i0, :] = eigenvalue + i0 += 1 + return eigenvalue_array + +def calculate_eigenvalue_with_two_parameters(x_array, y_array, hamiltonian_function, print_show=0, print_show_more=0): + dim_x = np.array(x_array).shape[0] + dim_y = np.array(y_array).shape[0] + if np.array(hamiltonian_function(0,0)).shape==(): + eigenvalue_array = np.zeros((dim_y, dim_x, 1)) + i0 = 0 + for y0 in y_array: + j0 = 0 + for x0 in x_array: + hamiltonian = hamiltonian_function(x0, y0) + eigenvalue_array[i0, j0, 0] = np.real(hamiltonian) + j0 += 1 + i0 += 1 + else: + dim = np.array(hamiltonian_function(0, 0)).shape[0] + eigenvalue_array = np.zeros((dim_y, dim_x, dim)) + i0 = 0 + for y0 in y_array: + j0 = 0 + if print_show==1: + print(y0) + for x0 in x_array: + if print_show_more==1: + print(x0) + hamiltonian = hamiltonian_function(x0, y0) + eigenvalue, eigenvector = np.linalg.eigh(hamiltonian) + eigenvalue_array[i0, j0, :] = eigenvalue + j0 += 1 + i0 += 1 + return eigenvalue_array + +def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', format='jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2): + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left) + ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) + ax.grid() + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + if y_min!=None or y_max!=None: + if y_min==None: + y_min=min(y_array) + if y_max==None: + y_max=max(y_array) + ax.set_ylim(y_min, y_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + [label.set_fontname('Times New Roman') for label in labels] + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') + +def plot_3d_surface(x_array, y_array, matrix, xlabel='x', ylabel='y', zlabel='z', title='', fontsize=20, labelsize=15, show=1, save=0, filename='a', format='jpg', dpi=300, z_min=None, z_max=None, rcount=100, ccount=100): + import matplotlib.pyplot as plt + from matplotlib import cm + from matplotlib.ticker import LinearLocator + matrix = np.array(matrix) + fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) + plt.subplots_adjust(bottom=0.1, right=0.65) + x_array, y_array = np.meshgrid(x_array, y_array) + if len(matrix.shape) == 2: + surf = ax.plot_surface(x_array, y_array, matrix, rcount=rcount, ccount=ccount, cmap=cm.coolwarm, linewidth=0, antialiased=False) + elif len(matrix.shape) == 3: + for i0 in range(matrix.shape[2]): + surf = ax.plot_surface(x_array, y_array, matrix[:,:,i0], rcount=rcount, ccount=ccount, cmap=cm.coolwarm, linewidth=0, antialiased=False) + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_zlabel(zlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.zaxis.set_major_locator(LinearLocator(5)) + ax.zaxis.set_major_formatter('{x:.2f}') + if z_min!=None or z_max!=None: + if z_min==None: + z_min=matrix.min() + if z_max==None: + z_max=matrix.max() + ax.set_zlim(z_min, z_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels() + [label.set_fontname('Times New Roman') for label in labels] + cax = plt.axes([0.8, 0.1, 0.05, 0.8]) + cbar = fig.colorbar(surf, cax=cax) + cbar.ax.tick_params(labelsize=labelsize) + for l in cbar.ax.yaxis.get_ticklabels(): + l.set_family('Times New Roman') + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') if __name__ == '__main__': main() \ No newline at end of file diff --git a/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_nested_Wilson_loop.py b/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_nested_Wilson_loop.py index c810f25..bbd6d5d 100644 --- a/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_nested_Wilson_loop.py +++ b/academic_codes/2021.12.09_nested_Wilson_loop_of_BBH_model/BBH_nested_Wilson_loop.py @@ -6,7 +6,6 @@ The newest version of this code is on the web page: https://www.guanjihuan.com/a import numpy as np import cmath from math import * -import guan def hamiltonian(kx, ky): # BBH model # label of atoms in a unit cell @@ -81,7 +80,9 @@ def main(): p_y_for_nu_x += 1 p_y_for_nu_x_array.append(p_y_for_nu_x.real) print('p_y_for_nu_x=', p_y_for_nu_x) - guan.plot(kx2_array, p_y_for_nu_x_array, xlabel='kx', ylabel='p_y_for_nu_x', style='-o', y_min=0, y_max=1) + plot(kx2_array, p_y_for_nu_x_array, xlabel='kx', ylabel='p_y_for_nu_x', style='-o', y_min=0, y_max=1) + # import guan + # guan.plot(kx2_array, p_y_for_nu_x_array, xlabel='kx', ylabel='p_y_for_nu_x', style='-o', y_min=0, y_max=1) # Part II: calculate p_x_for_nu_y p_x_for_nu_y_array = [] @@ -117,7 +118,9 @@ def main(): p_x_for_nu_y_array.append(p_x_for_nu_y.real) print('p_x_for_nu_y=', p_x_for_nu_y) # print(sum(p_x_for_nu_y_array)/len(p_x_for_nu_y_array)) - guan.plot(ky2_array, p_x_for_nu_y_array, xlabel='ky', ylabel='p_x_for_nu_y', style='-o', y_min=0, y_max=1) + plot(ky2_array, p_x_for_nu_y_array, xlabel='ky', ylabel='p_x_for_nu_y', style='-o', y_min=0, y_max=1) + # import guan + # guan.plot(ky2_array, p_x_for_nu_y_array, xlabel='ky', ylabel='p_x_for_nu_y', style='-o', y_min=0, y_max=1) def get_nu_x_vector(kx_array, ky): Num_kx = len(kx_array) @@ -171,5 +174,29 @@ def get_nu_y_vector(kx, ky_array): nu_y_vector_2 = eigenvector[:, np.argsort(np.real(nu_y))[1]] return nu_y_vector_1, nu_y_vector_2 +def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', format='jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2): + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left) + ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize) + ax.grid() + ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman') + ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman') + if y_min!=None or y_max!=None: + if y_min==None: + y_min=min(y_array) + if y_max==None: + y_max=max(y_array) + ax.set_ylim(y_min, y_max) + ax.tick_params(labelsize=labelsize) + labels = ax.get_xticklabels() + ax.get_yticklabels() + [label.set_fontname('Times New Roman') for label in labels] + if save == 1: + plt.savefig(filename+'.'+format, dpi=dpi) + if show == 1: + plt.show() + plt.close('all') + if __name__ == '__main__': - main() + main() \ No newline at end of file