Dear Adel and Joe,
thanks again for your useful reply.
If I understand correctly, then I am not sure
how to simulate the physics of disorder.
Indeed, that task requires to create various
(in principle infinite in number) configurations,
measure some physical quantity on each of them, and then
to take the average of all these measurements on the created configurations.
How can I create the different configurations ?
Starting e.g. from the piece of code
------------------------------------------------------------------------------------------------
t = 1
Delta = 1
L = 50
W = 1
(salta = ?)
mub = 3
systb = kitaev(L,t,mub,Delta,W,salt)
systb = systb.finalized()
hamatb = systb.hamiltonian_submatrix(sparse = False)
evalsb, evecsb = la.eigh(hamatb)
------------------------------------------------------------------------------------------------
is it sufficient to add a For cycle on the value of salt ?
Say, from 1 to Nmax, where Nmax is the number of configurations
that I want to consider ?
Thank you very much again
L.
Il giorno lun 3 feb 2020 alle ore 11:48 Abbout Adel
<abbout.adel@gmail.com> ha scritto:
>
> Dear Luca,
>
> With the parameter salt (which can be a number or a string), you will be sure that each time you call your system (or hamiltonian) with the same parameter salt, you will have the same configuration: this means that the potential is random from one site to another, but the overall configuration does not change when you call your system many times. If you use the usual random function from numpy, you will have a different random configuration each time you call your system.
>
> I hope this helps,
> Adel
>
> On Mon, Feb 3, 2020 at 12:00 AM Luca Lepori <llepori81@gmail.com> wrote:
>>
>> Dear Joe,
>>
>> thank you very much for your fast and compelling reply.
>>
>> Exploiting your advice, that means writing
>>
>> -----------------------------------------------------------------------------------------------
>>
>> def onsite(site, salt):
>>
>> return uniform(repr(site))
>>
>>
>> def kitaev(L ,t, mu, Delta, W, salt) :
>>
>> syst = kwant.Builder()
>> lat = kwant.lattice.chain(norbs=2)
>>
>> syst[lat(0)] = -(1/2)*(mu + W*(2*onsite(lat(0), salt) - 1))*pauli3
>>
>> for i in range(1,L):
>>
>> syst[lat(i)] = -(1/2)*(mu + W*(2*onsite(lat(i), salt) - 1))*pauli3
>>
>>
>> syst[lat(i), lat(i - 1)] = -(t/2)*pauli3 + 1j*(Delta/2)*pauli2
>>
>>
>> return syst
>>
>> -----------------------------------------------------------------------------------------------
>>
>> the code actually works, in the sense that no errors occur in the output
>> of the calling string
>>
>> -----------------------------------------------------------------------------------------------
>>
>> t = 1
>> Delta = 1
>> L = 50
>> W = 1
>> salt = 1
>>
>> mub = 3
>> systb = kitaev(L,t,mub,Delta,W,salt)
>> systb = systb.finalized()
>> hamatb = systb.hamiltonian_submatrix(sparse = False)
>> evalsb, evecsb = la.eigh(hamatb)
>>
>> -----------------------------------------------------------------------------------------------
>>
>> However, I still do not get the role of the parameter "salt" (here
>> above I defined it conventionally
>> salt = 1): how do I have to set it ?
>>
>> In the previous discussion page
>>
>> https://www.mail-archive.com/kwant-discuss@kwant-project.org/msg01497.html
>>
>> you claim that
>>
>> "the 'salt' parameter does not have any physical meaning; it's like
>> the 'seed' that you typically specify to a random number generator."
>>
>> Then does it mean that the physical numbers must not to change with
>> the set value for salt ?
>>
>> Last question: the string
>>
>> mub = 3
>> systb = kitaev(L,t,mub,Delta,W,salt)
>> systb = systb.finalized()
>> hamatb = systb.hamiltonian_submatrix(sparse = False)
>> evalsb, evecsb = la.eigh(hamatb)
>>
>> creates the Kitaev code with just one specific configuration for
>> the random onsite offset, right ?
>>
>> Thank you very much again and best
>>
>> L.
>
>
>
> --
> Abbout Adel