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

Reply via email to