Dear Wilson,
You said *I want to add random potentials on graphene. Within each unit
cell, I want A site have the oppsite value to B site*.
In fact you just need to set in the onsite function the sublattice
dependence (I mean for instance *return +1 if site.family==a else -1.*)

*SO in your case:*
a, b =lat.sublattices
def onsite(site,low, high):
    return *+1**np.random.uniform(low, high) if ifsite.family==*a* else
-1*np.random.uniform(low, high)

*or simply  use the kwant.digest prebuilt function as*
sites =list(syst.sites())
Random_sites = random.choices(sites, k = 10)
def onsite(site):
     return *+*0.5 *kwant.digest.uniform(repr(Random_sites)) + 0.5 if if
site.family==aelse* -* 0.5 * kwant.digest.uniform(repr(Random_sites)) + 0.5

I hope this will help.

Best, Adel

Le mer. 25 mai 2022 à 17:53, <wilson2...@outlook.com> a écrit :

> Dear community,
>
> I want to add random potentials on graphene. Within each unit cell, I want
> A site have the oppsite value to B site.
> That is, random across unit cells, but symmetric respect to zero within
> every unit cell. How to achieve this? I have tried to do so, but cannot
> find a way.
>
> Below is my code:
>
> ```
> import numpy as np
> import kwant
>
> low = 0
> high = 1
> def make_syst(a=1):
>     syst = kwant.Builder()
>     lat = kwant.lattice.honeycomb(a, norbs=1, name=['a', 'b'])
>
>     r = 10
>
>     def circle(pos):
>         x, y = pos
>         return x ** 2 + y ** 2 < r ** 2
>
>     def onsite(site, low, high):
>         return np.random.uniform(low, high)
>
>     # first attempt using function, not working, also cannot gurantee a, b
> are truly opposite in value
> #     syst[lat.a.shape(circle, (0, 0))] = onsite
> #     syst[lat.b.shape(circle, (0, 0))] = -1*onsite  # wrong
>
>     # second attempt, still not right
>     m = np.random.uniform(low, high)
>     syst[lat.a.shape(circle, (0, 0))] = m
>     syst[lat.b.shape(circle, (0, 0))] = -m
>
>     syst[lat.neighbors()] = 1
>     return syst.finalized()
>
>
> fsyst = make_syst()
> # kwant.plot(fsyst)
> H = fsyst.hamiltonian_submatrix(params=dict(high=high, low=low))
> Es = np.linalg.eigvalsh(H)
> plt.plot(Es, '.')
> plt.show()
> ```
>
> Thanks for help!
>

Reply via email to