Hi Kwant Users ! I was trying to plot the band structure of the SSH model using kwant.continuum. I could do it when the hopping terms are constant. Now let say the hoppings are linearly varying along x direction (t*x) or say I want to add a chemical potential like (\mu*x). In that case, how should I introduce this potential in the code ?
I have attached my code below. It will be a great help if anyone kindly tells me where I need to modify the code and how to insert this (\mu*x term) in the code. The code is attached herewith. _______________________________________ import kwant import kwant.continuum import scipy.sparse.linalg import scipy.linalg import numpy as np # For plotting import matplotlib as mpl from matplotlib import pyplot as plt def ssh(): hamiltonian = "m*sigma_x + alpha * k_x * sigma_y" def plot(ax, a=1): params = dict(m=.5, alpha=.5) h_k = kwant.continuum.lambdify(hamiltonian, locals=params) k_cont = np.linspace(-1, 1, 201) e_cont = [scipy.linalg.eigvalsh(h_k(k_x=ki)) for ki in k_cont] template = kwant.continuum.discretize(hamiltonian, grid=a) syst = kwant.wraparound.wraparound(template).finalized() def h_k(k_x): p = dict(k_x=k_x, **params) return syst.hamiltonian_submatrix(params=p) ax.plot(k_cont, e_cont, 'r-') ax.plot([], [], 'r-', label='continuum') ax.set_xlim(-1, 1) ax.set_ylim(-2, 2) ax.set_title('a={}'.format(a)) ax.set_xlabel('Momentum k_x') ax.set_ylabel('energy E') ax.grid() ax.legend() _, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(12, 4)) plot(ax1, a=1) plot(ax2, a=.25) plt.show() def main(): ssh() if __name__ == '__main__': main() _______________________________________________________ *_Thanks in advance,*
import kwant import kwant.continuum import scipy.sparse.linalg import scipy.linalg import numpy as np # For plotting import matplotlib as mpl from matplotlib import pyplot as plt def ssh(): hamiltonian = "m*sigma_x + alpha * k_x * sigma_y" def plot(ax, a=1): params = dict(m=.5, alpha=.5) h_k = kwant.continuum.lambdify(hamiltonian, locals=params) k_cont = np.linspace(-1, 1, 201) e_cont = [scipy.linalg.eigvalsh(h_k(k_x=ki)) for ki in k_cont] template = kwant.continuum.discretize(hamiltonian, grid=a) syst = kwant.wraparound.wraparound(template).finalized() def h_k(k_x): p = dict(k_x=k_x, **params) return syst.hamiltonian_submatrix(params=p) ax.plot(k_cont, e_cont, 'r-') ax.plot([], [], 'r-', label='continuum') ax.set_xlim(-1, 1) ax.set_ylim(-2, 2) ax.set_title('a={}'.format(a)) ax.set_xlabel('Momentum k_x') ax.set_ylabel('energy E') ax.grid() ax.legend() _, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(12, 4)) plot(ax1, a=1) plot(ax2, a=.25) plt.show() def main(): ssh() if __name__ == '__main__': main()