Modify the onsite energy of the majorana fermions (example D6 in the paper)
Dear Professors, I want to put a transverse electric field on this example. So Imodify the onsite energy as follows, def onsite(site, p): x, y = site.pos E = 0.15 # the magnitude of electrical field in y direction return tau_z * (p.mu - 2 * p.t) + sigma_z * p.B + tau_x * p.Delta + E* y* s_0 s_0 = numpy.identity(2). However, the program crashed to UserCodeError: Error occurred in user-supplied value function "onsite". The same error also occur when I put a perpendicular magnetic field and modify the hopping energy as def hopping(sitei, sitej, phi, salt): xi, yi = sitei.pos xj, yj = sitej.pos return t0 * exp(-0.5j * phi * (xi - xj) * (yi + yj)) where t0 is the hopping matrix before put magnetic field. Would you like help me in this issue? Happy Kwant! QC HNIE __________The full code _____________________ from matplotlib import pyplot import kwant from kwant.digest import gauss import numpy import tinyarray import scipy.sparse.linalg # Python >= 3.3 provides SimpleNamespace in the # standard library so we can simply import it: # >>> from types import SimpleNamespace # (Kwant does not yet support Python 3.) class SimpleNamespace(object): """A simple container for parameters.""" def __init__(self, **kwargs): self.__dict__.update(kwargs) s_0 = numpy.identity(2) s_z = numpy.array([[1, 0], [0, -1]]) s_x = numpy.array([[0, 1], [1, 0]]) s_y = numpy.array([[0, -1j], [1j, 0]]) tau_z = tinyarray.array(numpy.kron(s_z, s_0)) tau_x = tinyarray.array(numpy.kron(s_x, s_0)) sigma_z = tinyarray.array(numpy.kron(s_0, s_z)) tau_zsigma_x = tinyarray.array(numpy.kron(s_z, s_x)) def onsite(site, p): x, y = site.pos Electric = 0.15 # the magnitude of electrical field in y direction return tau_z * (p.mu - 2 * p.t) + sigma_z * p.B + tau_x * p.Delta + Eeletric * y* s_0 def hopping(site0, site1, p): return tau_z * p.t + 1j * tau_zsigma_x * p.alpha def make_system(l=70): sys = kwant.Builder() lat = kwant.lattice.chain() sys[(lat(x) for x in range(l))] = onsite sys[lat.neighbors()] = hopping return sys.finalized() sys = make_system() # Calculate and plot lowest eigenenergies in B-field. B_values = numpy.linspace(0, 0.6, 80) energies = [] params = SimpleNamespace( t=1, mu=-0.1, alpha=0.05, Delta=0.2) for params.B in B_values: H = sys.hamiltonian_submatrix( args=[params], sparse=True) H = H.tocsc() eigs = scipy.sparse.linalg.eigsh(H, k=20, sigma=0) energies.append(numpy.sort(eigs[0])) pyplot.plot(B_values, energies) pyplot.show()
Hi,
def onsite(site, p): x, y = site.pos E = 0.15 # the magnitude of electrical field in y direction return tau_z * (p.mu - 2 * p.t) + sigma_z * p.B + tau_x * p.Delta + E* y* s_0
s_0 = numpy.identity(2). However, the program crashed to UserCodeError: Error occurred in user-supplied value function "onsite".
An error occurred in the onsite function that you provided. Kwant can't do anything about this, so it raises an error. If you look at the traceback it will show you what error was raised by your function, and you can fix it. Happy Kwanting, Joe
participants (2)
-
cqhy1127
-
Joseph Weston