Hello Kwant community,

I write since I am trying to simulate a Kitaev chain with disorder,
here distributed uniformly in the range [1,-1],
and I am experiencing troubles to implement the disorder itself.

In the absence of disorder,
the function that defines the tight-binding (open) Hamiltonian can be written
e.g. as follows:

def kitaev(L ,t, mu, Delta) :

    syst = kwant.Builder()
    lat = kwant.lattice.chain(norbs=2)

    syst[lat(0)] = - (mu/2)*pauli3

    for i in range(1,L):

        syst[lat(i)] = -(mu/2)*pauli3


        syst[lat(i), lat(i - 1)] = -(t/2)*pauli3 + 1j*(Delta/2)*pauli2


    return syst

where the Pauli matrices have been previously defined, t is the hopping,
mu is the chemical potential, and Delta is the gap.

Now, I want to add disorder, proportional to W and uniformly
distributed in [-1,1]. The tutorial online for Kwant states that the
function kwant.digest.uniform(input, salt='') creates a random offset
in the interval [0,1]. Therefore I thought that the Hamiltonian could
be changed e.g. as follows:

def kitaev(L ,t, mu, Delta, W) :

    syst = kwant.Builder()
    lat = kwant.lattice.chain(norbs=2)

    syst[lat(0)] = -(1/2)*(mu + W*(2*onsite - 1))*pauli3

    for i in range(1,L):

        syst[lat(i)] = -(1/2)*(mu + W*(2*onsite - 1))*pauli3


        syst[lat(i), lat(i - 1)] = -(t/2)*pauli3 + 1j*(Delta/2)*pauli2


    return syst

after that the onsite function has been defined as

def onsite(site, phi, salt):
    return uniform(repr(site), salt)

(I am still trying to follow the tutorial).

However, when trying to calculate eigenvalues and eigenvectors,
via the code

L = 50
W = 0

mub  = 3
systb = kitaev(L ,1, mub, 1, W)
systb = systb.finalized()
hamatb = systb.hamiltonian_submatrix(sparse = False)
evalsb, evecsb = la.eigh(hamatb)

I encountered the problem

-----------------------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-12a574eefcd0> in <module>
      3
      4 mub  = 3
----> 5 systb = kitaev(L ,1, mub, 1, W)
      6 systb = systb.finalized()
      7 hamatb = systb.hamiltonian_submatrix(sparse = False)

<ipython-input-9-661d5ddb539a> in kitaev(L, t, mu, Delta, W)
      4     lat = kwant.lattice.chain(norbs=2)
      5
----> 6     syst[lat(0)] = -(1/2)*(mu + W*(2*onsite - 1))*pauli3
      7
      8     for i in range(1,L):

TypeError: unsupported operand type(s) for *: 'int' and 'function'

—————————————————————————————------

that instead does no occur in the absence of disorder (then when the
first definition above for the Kitaev chain is assumed).

Probably I did not understand properly how to use the
function uniform(repr(site), salt).

Can you help me ?

Thank you very much in advance and best regards

L. L.

Reply via email to