update
This commit is contained in:
		| @@ -0,0 +1,89 @@ | |||||||
|  | """ | ||||||
|  | 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/27605 | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | import guan | ||||||
|  | import numpy as np | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # one dimensional chain model | ||||||
|  | unit_cell = 0 | ||||||
|  | hopping = 1 | ||||||
|  | hamiltonian_function_1 = guan.one_dimensional_fourier_transform_with_k(unit_cell, hopping) | ||||||
|  | k_array_1 = np.linspace(-np.pi, np.pi, 520) | ||||||
|  | eigenvalue_array_1 = guan.calculate_eigenvalue_with_one_parameter(k_array_1, hamiltonian_function_1) | ||||||
|  | # guan.plot(k_array_1, eigenvalue_array_1, xlabel='k', ylabel='E', style='k', title='one dimensional chain model') | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # n times band folding | ||||||
|  | n = 7 | ||||||
|  | unit_cell = np.zeros((n, n)) | ||||||
|  | for i0 in range(int(n)): | ||||||
|  |     for j0 in range(int(n)): | ||||||
|  |         if abs(i0-j0)==1: | ||||||
|  |             unit_cell[i0, j0] = 1 | ||||||
|  | hopping = np.zeros((n, n)) | ||||||
|  | hopping[0, n-1] = 1 | ||||||
|  | k_array_2 = np.linspace(-np.pi, np.pi, 500) | ||||||
|  | hamiltonian_function_2 = guan.one_dimensional_fourier_transform_with_k(unit_cell, hopping) | ||||||
|  | eigenvalue_array_2 = guan.calculate_eigenvalue_with_one_parameter(k_array_2, hamiltonian_function_2) | ||||||
|  | # guan.plot(k_array_2, eigenvalue_array_2, xlabel='k', ylabel='E', style='k', title='%i times band folding'%n) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ### 以下通过速度和能量查找能带折叠前后的对应关系 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # 获取速度 | ||||||
|  | velocity_array_1 = [] | ||||||
|  | for i0 in range(k_array_1.shape[0]-1): | ||||||
|  |     velocity_1 = (eigenvalue_array_1[i0+1]-eigenvalue_array_1[i0])/(k_array_1[i0+1]-k_array_1[i0]) | ||||||
|  |     velocity_array_1.append(velocity_1) | ||||||
|  |  | ||||||
|  | # 获取速度 | ||||||
|  | velocity_array_2 = [] | ||||||
|  | for i0 in range(k_array_2.shape[0]-1): | ||||||
|  |     velocity_2 = (eigenvalue_array_2[i0+1]-eigenvalue_array_2[i0])/(k_array_2[i0+1]-k_array_2[i0]) | ||||||
|  |     velocity_array_2.append(velocity_2*n) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | plt_1, fig_1, ax_1 = guan.import_plt_and_start_fig_ax() | ||||||
|  | plt_2, fig_2, ax_2 = guan.import_plt_and_start_fig_ax() | ||||||
|  | for i00 in range(n): | ||||||
|  |     k_array_new_2 = [] | ||||||
|  |     k_array_new_1 = [] | ||||||
|  |     index_array_new_2 = [] | ||||||
|  |     index_array_new_1 = [] | ||||||
|  |     for i0 in range(k_array_2.shape[0]-1): | ||||||
|  |         for j0 in range(k_array_1.shape[0]-1): | ||||||
|  |             if  abs(eigenvalue_array_2[i0][i00]-eigenvalue_array_1[j0])<1e-2 and abs(velocity_array_2[i0][i00]-velocity_array_1[j0])<1e-2: | ||||||
|  |                 k_array_new_2.append(k_array_2[i0]) | ||||||
|  |                 k_array_new_1.append(k_array_1[j0]) | ||||||
|  |                 index_array_new_2.append(i0) | ||||||
|  |                 index_array_new_1.append(j0) | ||||||
|  |     if i00 == 0: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*r') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*r') | ||||||
|  |     elif i00 == 1: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*b') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*b') | ||||||
|  |     elif i00 == 2: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*g') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*g') | ||||||
|  |     elif i00 == 3: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*c') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*c') | ||||||
|  |     elif i00 == 4: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*m') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*m') | ||||||
|  |     elif i00 == 5: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*y') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*y') | ||||||
|  |     else: | ||||||
|  |         guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1], style='*k') | ||||||
|  |         guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*k') | ||||||
|  | guan.plot_without_starting_fig(plt_1, fig_1, ax_1, [], [], xlabel='k', ylabel='E', title='one dimensional chain model') | ||||||
|  | guan.plot_without_starting_fig(plt_2, fig_2, ax_2, [], [], xlabel='k', ylabel='E', title='%i times band folding'%n) | ||||||
|  | plt_1.show() | ||||||
|  | plt_2.show() | ||||||
| @@ -0,0 +1,96 @@ | |||||||
|  | """ | ||||||
|  | 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/27605 | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | import guan | ||||||
|  | import numpy as np | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # double chain model with different potentials | ||||||
|  | unit_cell = np.array([[0, 0], [0, 0.5]]) | ||||||
|  | hopping = np.eye(2) | ||||||
|  | hamiltonian_function_1 = guan.one_dimensional_fourier_transform_with_k(unit_cell, hopping) | ||||||
|  | k_array_1 = np.linspace(-np.pi, np.pi, 600) | ||||||
|  | eigenvalue_array_1 = guan.calculate_eigenvalue_with_one_parameter(k_array_1, hamiltonian_function_1) | ||||||
|  | # guan.plot(k_array_1, eigenvalue_array_1, xlabel='k', ylabel='E', style='k', title='double chain model with different potentials') | ||||||
|  |  | ||||||
|  | # n times band folding | ||||||
|  | n = 2 | ||||||
|  | unit_cell = np.zeros((2*n, 2*n)) | ||||||
|  | for i0 in range(int(n)): | ||||||
|  |     for j0 in range(int(n)): | ||||||
|  |         if abs(i0-j0)==1: | ||||||
|  |             unit_cell[i0, j0] = 1 | ||||||
|  | for i0 in range(int(n)): | ||||||
|  |     unit_cell[n+i0, n+i0] = 0.5 | ||||||
|  |     for j0 in range(int(n)): | ||||||
|  |         if abs(i0-j0)==1: | ||||||
|  |             unit_cell[n+i0, n+j0] = 1 | ||||||
|  | hopping = np.zeros((2*n, 2*n)) | ||||||
|  | hopping[0, n-1] = 1 | ||||||
|  | hopping[n, 2*n-1] = 1 | ||||||
|  | hamiltonian_function_2 = guan.one_dimensional_fourier_transform_with_k(unit_cell, hopping) | ||||||
|  | k_array_2 = np.linspace(-np.pi, np.pi, 620) | ||||||
|  | eigenvalue_array_2 = guan.calculate_eigenvalue_with_one_parameter(k_array_2, hamiltonian_function_2) | ||||||
|  | # guan.plot(k_array_2, eigenvalue_array_2, xlabel='k', ylabel='E', style='k', title='%i times band folding'%n) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ### 以下通过速度和能量查找能带折叠前后的对应关系 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # 获取速度 | ||||||
|  | velocity_array_1 = [] | ||||||
|  | for i0 in range(k_array_1.shape[0]-1): | ||||||
|  |     velocity_1 = (eigenvalue_array_1[i0+1]-eigenvalue_array_1[i0])/(k_array_1[i0+1]-k_array_1[i0]) | ||||||
|  |     velocity_array_1.append(velocity_1) | ||||||
|  |  | ||||||
|  | # 获取速度 | ||||||
|  | velocity_array_2 = [] | ||||||
|  | for i0 in range(k_array_2.shape[0]-1): | ||||||
|  |     velocity_2 = (eigenvalue_array_2[i0+1]-eigenvalue_array_2[i0])/(k_array_2[i0+1]-k_array_2[i0]) | ||||||
|  |     velocity_array_2.append(velocity_2*n) | ||||||
|  |  | ||||||
|  | dim = 2  # 维度为两倍 | ||||||
|  |  | ||||||
|  | plt_1, fig_1, ax_1 = guan.import_plt_and_start_fig_ax() | ||||||
|  | plt_2, fig_2, ax_2 = guan.import_plt_and_start_fig_ax() | ||||||
|  | for j00 in range(dim): | ||||||
|  |     for i00 in range(n*dim): | ||||||
|  |         k_array_new_2 = [] | ||||||
|  |         k_array_new_1 = [] | ||||||
|  |         index_array_new_2 = [] | ||||||
|  |         index_array_new_1 = [] | ||||||
|  |         for i0 in range(k_array_2.shape[0]-1): | ||||||
|  |             for j0 in range(k_array_1.shape[0]-1): | ||||||
|  |                 if  abs(eigenvalue_array_2[i0][i00]-eigenvalue_array_1[j0][j00])<1e-2 and abs(velocity_array_2[i0][i00]-velocity_array_1[j0][j00])<1e-2: | ||||||
|  |                     k_array_new_2.append(k_array_2[i0]) | ||||||
|  |                     k_array_new_1.append(k_array_1[j0]) | ||||||
|  |                     index_array_new_2.append(i0) | ||||||
|  |                     index_array_new_1.append(j0) | ||||||
|  |         if i00 == 0 and j00 == 0: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*r') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*r') | ||||||
|  |         elif i00 == 0 and j00 == 1: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*b') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*b') | ||||||
|  |         elif i00 == 1 and j00 == 0: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*g') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*g') | ||||||
|  |         elif i00 == 1 and j00 == 1: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*c') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*c') | ||||||
|  |         elif i00 == 2 and j00 == 0: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*m') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*m') | ||||||
|  |         elif i00 == 2 and j00 == 1: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*y') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*y') | ||||||
|  |         else: | ||||||
|  |             guan.plot_without_starting_fig(plt_1, fig_1, ax_1, k_array_new_1, eigenvalue_array_1[index_array_new_1, j00], style='*k') | ||||||
|  |             guan.plot_without_starting_fig(plt_2, fig_2, ax_2, k_array_new_2, eigenvalue_array_2[index_array_new_2, i00], style='*k') | ||||||
|  | guan.plot_without_starting_fig(plt_1, fig_1, ax_1, [], [], xlabel='k', ylabel='E', title='one dimensional chain model') | ||||||
|  | guan.plot_without_starting_fig(plt_2, fig_2, ax_2, [], [], xlabel='k', ylabel='E', title='%i times band folding'%n) | ||||||
|  | plt_1.show() | ||||||
|  | plt_2.show() | ||||||
		Reference in New Issue
	
	Block a user