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()