Hi all,

Sergio, if you want to create a Polyatomic lattice you have to pass all
the basis vectors and orbital numbers in a single call to
'kwant.lattice.general', otherwise there's no way Kwant can know that
you want the 3 sublattices to be considered as a single Polyatomic lattice!

    prim_vecs = [...]  # Bravais lattice vectors

    basis [ [...], [...], [...]]  # position vectors of the 3 basis atoms

    norbs = [3, 6, 3]

    lat = general(prim_vecs, basis=basis, norbs=norbs)

    a, b, c = lat.sublattices

    ...

    syst[a(0, 0, 0), b(0, 0, 0)] =  [...] # a-b hopping in same unit cell
    syst[a(0, 0, 0), c(1, 0, 0)] =  [...] # a-c hopping in between unit
cells

This is covered briefly in the tutorial [1]; do you think we can
improved that section of the tutorial in some way?

Happy Kwanting,

Joe


[1]: https://kwant-project.org/doc/1/tutorial/graphene



On 06/07/2018 12:05 PM, alexandre.berna...@u-psud.fr wrote:
> Hello,
>
> First of all, I am new to kwant, so I hope I will give you relevant
> insights.
>
> It seems to me that:
>
> 1) There are some mistakes in the syntax you are using, so you should
> check again the examples available in the doc :
> https://kwant-project.org/doc/1/
>
> 2) Since you consider different numbers of orbitals for your atoms, I
> think you should use only one "superatom" with 12 orbitals per unit cell.
> Then Kwant allows to define 12x12 matrices both for the on-site terms
> (your matrix elements within the superatom) and for the hopping terms
> (your matrix elements between superatoms).
>
> I hope this is a bit helpfull.
>
> Best regards,
>
> Alexandre BERNARD
>
> ------------------------------------------------------------------------
> *De: *"Sergio Castillo Robles" <sergio.casti...@uabc.edu.mx>
> *À: *kwant-discuss@kwant-project.org
> *Envoyé: *Mercredi 6 Juin 2018 03:54:21
> *Objet: *[Kwant] Defining orbitals in a 3D structure with 3 basis atoms.
>
> Hello everyone, i would appreciate any suggestion you could give me to
> solve this.
>
> Well, im trying to create a structure with 3 basis atoms in the unit
> cell, each atom has a different number of orbitals a=3, b=6 and c=3. I
> have tried with polyatomic module and creating one lattice for each
> atom with no success
>
> The thing is that i cant figure it out how to create a lattice with
> different orbitals in each site. I have the on-site and hopping
> energies matrix so i need to be able to introduce this values.
>
> Im pretty new using kwant so any advice is appreciated.
>
> Here is the code i've working on (ignore the matrix elements for the
> moment):
>
> import kwant
> import tinyarray
> import numpy
> from matplotlib import pyplot
>
> VecPrim = [(3.176, 0, 0), (1.588, 2.7504, 0), (0, 0, 17.49)]
> base =  [(0, 0, 0), (1.588, 0.9168, 0.8745), (0, 0, 1.749)]
>
>            ### This is the part that i cant get it right, i have tried
> kwant.lattice.polyatomic
>            ### and defining 3 lattices one for each atom, but no success
>    
> a = kwant.lattice.general(prim_vecs = VecPrim, basis = (0, 0, 0))
> Cpx, Cpy, Cpz, = a.sublattices
> b = kwant.lattice.general(prim_vecs = VecPrim, basis = (1.588, 0.9168,
> 0.8745))
> xy, xz, yz, x2y2, z2, s = b.sublattices
> c = kwant.lattice.general(prim_vecs = VecPrim, basis = (0, 0, 1.749))
> Npx, Npy, Npz = c.sublattices
>
>             ### Ignore from here ###
>
> def make_cuboid(t=1.0, a=15, b=10, c=5):
>     def cuboid_shape(pos):
>         x, y, z = pos
>         return 0 <= x < a and 0 <= y < b and 0 <= z < c 
>     syst = kwant.Builder()
>     syst[lat.shape(cuboid_shape, (0, 0, 0))] = 4 * t
>    
>     syst[lat(0, 0, 0)] = numpy.array([[-1.888842, -0.014064-0.000409j,
> 0.026908+0.003422j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [-0.014064+0.000409j, -1.784936,
> -0.031384+0.021565j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0.026908-0.003422j,
> -0.031384-0.021565j, 0.710443, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0],  
>                                      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0]])
>    
>     syst[lat(0, 1, 0)] = numpy.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 7.168134,
> -0.005189-0.047376j, 0.001352+0.000103j, -0.001189-0.00095j,
> -0.048166-0.007663j, 0.429882+0.00052j, 0, 0, 0],
>                                          [0, 0, 0,
> -0.005189+0.047376j, 0.245358, 0.113162-0.072937j, 0.660849-0.06348j,
> -0.017571+0.035587j, 0.020961-0.017679j, 0, 0, 0],
>                                          [0, 0, 0, 0.001352-0.000103j,
> 0.113162+0.072937j, 1.338059, -0.003126-0.016285j,
> -0.624702-0.065652j, 0.002353+0.001639j, 0, 0, 0],
>                                          [0, 0, 0, -0.001189+0.00095j,
> 0.660849+0.06348j, -0.003126+0.016285j, 1.325337, 0.110694+0.01548j,
> 0.009041+0.004483j, 0, 0, 0],
>                                          [0, 0, 0,
> -0.048166+0.007663j, -0.017571-0.035587j, -0.624702+0.065652j,
> 0.110694-0.01548j, 0.362102, -0.030934+0.002401j, 0, 0, 0],
>                                          [0, 0, 0, 0.429882-0.00052j,
> 0.020961+0.017679j, 0.002353-0.001639j, 0.009041-0.004483j,
> -0.030934-0.002401j, -0.650839, 0, 0, 0]
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0]])
>
>     syst[lat(0, 0, 1)] = numpy.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> -3.398186, 0.001839+0.001631j, -0.117366+0.00498j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0.001839-0.001631j, -3.401815, 0.023339+0.009067j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> -0.117366-0.00498j, 0.023339-0.009067j, -0.637207]])
>    
>     syst[lat(0, 0, 1), lat (0, 0, 0)] = ([[0, 0, 0, 0, 0, 0, 0, 0, 0,
> -1.852931+0.147524j, 0.274586-0.034451j, -0.015051-0.001677j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> -0.274338-0.015064j, -1.796449-0.055331j, -0.034396+0.019407j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> -0.103127+0.001438j, 0.004816-0.00237j, 3.410475+0.001248j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [-1.852931-0.147524j,
> -0.274338+0.015064j, -0.103127-0.001438j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [0.274586+0.034451j,
> -1.796449+0.055331j, 0.004816+0.00237j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [-0.015051+0.001677j,
> -0.034396-0.019407j, 3.410475-0.001248j, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>    
>     syst[lat(0, 1, 0), lat(0, 0, 0)] = ([[0, 0, 0, 0.003644+0.00088j,
> -0.305706-0.050514j, 0.638425-0.083597j, -1.105645+0.086829j,
> 1.463462-0.012994j, -0.01338-0.00264j, 0, 0, 0],
>                                          [0, 0, 0, -0.046131+0.04229j,
> -1.963829-0.280977j, -1.171301-0.088146j, -1.112788-0.056971j,
> 0.174769+0.106872j, -0.058159-0.007987j, 0, 0, 0],
>                                          [0, 0, 0, 0.23188+0.001924j,
> -0.597505-0.078772j, -0.146976-0.012943j, -0.210584+0.002248j,
> 0.177022+0.031485j, 0.953363-0.001855j, 0, 0, 0],
>                                          [0.003644-0.00088j,
> -0.046131-0.04229j, 0.23188-0.001924j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [-0.305706+0.050514j,
> -1.963829+0.280977j, -0.597505+0.078772j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [0.638425+0.083597j,
> -1.171301+0.088146j, -0.146976+0.012943j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [-1.105645-0.086829j,
> -1.112788+0.056971j, -0.210584-0.002248j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [1.463462+0.012994j,
> 0.174769-0.106872j, 0.177022-0.031485j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [-0.01338+0.00264j,
> -0.058159+0.007987j, 0.953363+0.001855j, 0, 0, 0, 0, 0, 0, 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0]])
>    
>     syst[lat(0, 0, 1), lat(0, 1, 0)] = ([[0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0.184152+0.002778j, 0.321743-0.010571j, 0.183538-0.00067j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0.275145+0.007691j, -0.54144+0.012815j, 0.045847+0.015379j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0.47922+0.015775j, 1.256012+0.007326j, -0.523174+0.00585j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 1.255561-0.002255j, 1.903063+0.010647j, -0.876392+0.010246j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 1.282837-0.091022j, -0.54898+0.001161j, 0.057341-0.004095j],
>                                          [0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0.02765-0.001793j, -0.002902-0.001866j, -0.746426-0.000748j],
>                                          [0, 0, 0, 0.184152-0.002778j,
> 0.275145-0.007691j, 0.47922-0.015775j, 1.255561+0.002255j,
> 1.282837+0.091022j, 0.02765+0.001793j, 0, 0, 0],
>                                          [0, 0, 0, 0.321743+0.010571j,
> -0.54144-0.012815j, 1.256012-0.007326j, 1.903063-0.010647j,
> -0.54898-0.001161j,-0.002902+0.001866j, 0, 0, 0],
>                                          [0, 0, 0, 0.183538+0.00067j,
> 0.045847-0.015379j, -0.523174-0.00585j, -0.876392-0.010246j,
> 0.057341+0.004095j,-0.746426+0.000748j, 0, 0, 0]])
>                                          
>                ### 'Till here #####
>    
>     syst[[kwant.builder.HoppingKind(*hopping) for hopping in
> hoppings]] = -6
>     lead = kwant.Builder(kwant.TranslationalSymmetry((-3.176, 0, 0)))
>     def lead_shape(pos):
>         return 0 <= pos[1] < b and 0 <= pos[2] < c
>     lead[lat.shape(lead_shape, (0, 0, 0))] = 4 * t
>     lead[[kwant.builder.HoppingKind(*hopping) for hopping in
> hoppings]] = -6
>     syst.attach_lead(lead)
>     syst.attach_lead(lead.reversed())
>     return syst
>
> def plot_conductance(syst, energies):
>     data = []
>     for energy in energies:
>         smatrix = kwant.smatrix(syst, energy)
>         data.append(smatrix.transmission(1, 0))
>     pyplot.figure()
>     pyplot.plot(energies, data)
>     pyplot.xlabel("energy [t]")
>     pyplot.ylabel("conductance [e^2/h]")
>     pyplot.show()
>    
> def main():   
>     syst = make_cuboid()
>     kwant.plot(syst)
>     syst = make_cuboid(a=100, b=28, c=4)   
>     def family_colors(site): 
>         if site.family == d:
>             return 'yellow'
>         elif site.family == e:
>             return 'gray'
>         else:
>             return 'blue'
>     kwant.plot(syst, site_size=0.25, site_lw=0.025, hop_lw=0.05,
>                site_color=family_colors)
>     syst = syst.finalized()
>     plot_conductance(syst, energies=[0.01 * i - 0.3 for i in range(100)])
>
>
> if __name__ == '__main__':
>     main()
>
>

Reply via email to