Hi Adel,

It was very helpful, thank you for the comments!

Regards
Patrik

On 9 July 2017 at 10:39, Abbout Adel <abbout.a...@gmail.com> wrote:

> Dear Patrik,
>
> Your program has some mistakes:
>
> 1) When you define a site, you need to use its coordinates, so no need to
> multiply by the lattice constant
>     ie      sys[lat(0,0,11)]=3      and  not sys[lat(0,0,11*a]=3
> 2) You should not use the loop "for" when you define the lead. This means
> that you added more than one  site to your cell. Just define one site.
>
> 3) No need to add 2 extra sites to your system in order to attach the
> leads. one site is sufficient. This is not a mistake but it makes your
> program simpler.
>
> 4) You are using a 1D lead and your energies are starting from 0. So, in
> order  to have a conducting mode, you need to change the potential from 4t
> to 2t.
>
> 5) Avoid energy 0 (the bottom of the band) when you calculate the
> scattering matrix otherwise you will get an error  ValueError: Input a
> needs to be a square matrix.
> start from 0.0001 for example.
>
> Now I want to make a comment on your problem. In kwant, the hamiltonian is
> a graph. The position of the sites in your case are not important. only the
> onsite potentials and the hoppings are relevent. In your case, you can put
> all the sites in a line and this will change nothing since you do not have
> a field which depend on space. Your geometry is not relevent. So, if you do
> not intend to put an electric field or magnetic field which will add a
> space dependence to your hoppings, your problem boils down to 1D uniform
> chain and you will get conductance equal to 1 for all the energies (check
> the program below.)
>
> Here is your program with the corrections:
> I hope this helps.
> Adel
> ------------------------------------------------------------
> -----------------------------------
>
>
> import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D
> from scipy.spatial import * from matplotlib import rcParams from numpy
> import * from numpy.linalg import * import pickle import sys import os
> import string import heapq import kwant import tinyarray
> #pb.pltutils.use_style() from matplotlib import pyplot cl_1dl3=True if
> cl_1dl3: a = 0.34 t = 1.0 N = 31 class 
> Amorphous(kwant.builder.SimpleSiteFamily):
> def normalize_tag(self, tag): return tinyarray.array(tag, float) def
> pos(self, tag): return tag atoms = Amorphous() syst = kwant.Builder()
> #coordinates of a chiral chain imported manually sites=atoms(0.0, 0.0,
> 0.0), atoms(-0.1336881039, 0.4114496766, 0.3400000000),
> atoms(-0.4836881039, 0.6657395614, 0.6800000000), atoms(-0.9163118961,
> 0.6657395614, 1.0200000000), atoms(-1.2663118961, 0.4114496766,
> 1.3600000000), atoms(-1.4000000000, 0.0000000000, 1.7000000000),
> atoms(-1.2663118961, -0.4114496766, 2.0400000000), atoms(-0.9163118961,
> -0.6657395614, 2.3800000000), atoms(-0.4836881039, -0.6657395614,
> 2.7200000000), atoms(-0.1336881039, -0.4114496766, 3.0600000000),
> atoms(0.0000000000, -0.0000000000, 3.4000000000), atoms(-0.1336881039,
> 0.4114496766, 3.7400000000), atoms(-0.4836881039, 0.6657395614,
> 4.0800000000), atoms(-0.9163118961, 0.6657395614, 4.4200000000),
> atoms(-1.2663118961, 0.4114496766, 4.7600000000), atoms(-1.4000000000,
> 0.0000000000, 5.1000000000), atoms(-1.2663118961, -0.4114496766,
> 5.4400000000), atoms(-0.9163118961, -0.6657395614, 5.7800000000),
> atoms(-0.4836881039, -0.6657395614, 6.1200000000), atoms(-0.1336881039,
> -0.4114496766, 6.4600000000), atoms(0.0000000000, -0.0000000000,
> 6.8000000000), atoms(-0.1336881039, 0.4114496766, 7.1400000000),
> atoms(-0.4836881039, 0.6657395614, 7.4800000000), atoms(-0.9163118961,
> 0.6657395614, 7.8200000000), atoms(-1.2663118961, 0.4114496766,
> 8.1600000000), atoms(-1.4000000000, 0.0000000000, 8.5000000000),
> atoms(-1.2663118961, -0.4114496766, 8.8400000000), atoms(-0.9163118961,
> -0.6657395614, 9.1800000000), atoms(-0.4836881039, -0.6657395614,
> 9.5200000000), atoms(-0.1336881039, -0.4114496766, 9.8600000000),
> atoms(0.0, 0.0, 10.2) #adding the onsite and hopping to the system for i in
> range(N): syst[sites[i]] = 2 * t if i > 0: syst[sites[i], sites[i-1]] = -t
> #syst[sites[N-1], sites[0]] = -t kwant.plot(syst) # If we want to attach to
> vertical 1D chains to the system # we first add a slice of the down lead to
> the scattering region lat=kwant.lattice.cubic(a) syst[lat(0, 0, -1)] = 2 *
> t # now we add the hopping to the chiral chain syst[sites[0], lat(0, 0,
> -1)] = -t # fWe make a regular down lead and attach it to the system
> dn_lead = kwant.Builder(kwant.TranslationalSymmetry((0, 0, -a))) #for i
> in range(2): dn_lead[lat(0, 0, -2)] = 2 * t dn_lead[lat.neighbors()] = -t
> syst.attach_lead(dn_lead) syst[lat(0, 0, N)] = 2 * t syst[lat(0, 0, N),
> sites[N-1]] = -t # finally we make a regular lead and attach it to the top
> up_lead = kwant.Builder(kwant.TranslationalSymmetry((0, 0, a))) #for i in
> range(N, N+2): up_lead[lat(0, 0, 11)] = 2 * t up_lead[lat.neighbors()] = -t
> syst.attach_lead(up_lead) kwant.plot(syst) trans=True if trans: syst =
> syst.finalized() energies = [] data = [] for ie in range(1,100): energy =
> ie * 0.01 smatrix = kwant.smatrix(syst, energy=energy)
> energies.append(energy) data.append(smatrix.transmission(1, 0))
> pyplot.figure() pyplot.plot(energies, data) pyplot.ylim([0,1.2])
> pyplot.xlabel("energy [t]") pyplot.ylabel("conductance [e^2/h]")
> pyplot.show()
>
> On Fri, Jul 7, 2017 at 6:01 PM, Patrik Arvoy <arv...@gmail.com> wrote:
>
>>
>> Hi Anton,
>>
>> Thank you for the reply!
>> I used your suggestion to attach two 1D leads along the z axis to a
>> chiral 1D chain.
>>
>> I inserted my code in the following and added comments to each part.
>>
>> I have two questions:
>> 1- I successfully add a 1D chain to the lower part of the chiral system
>> but
>> when I try to add a 1D chain as the upper lead to the top of the system,
>> it is automatically added
>> somewhere in the middle, which is not clear to me why.
>>
>> 2- How can I avoid zero conductance?
>>
>> Thanks in advance
>> Patrik
>>
>>
>> ----------------------------------------------------------
>> import matplotlib.pyplot as plt
>> from mpl_toolkits.mplot3d import Axes3D
>> from scipy.spatial import *
>> from matplotlib import rcParams
>> from numpy import *
>> from numpy.linalg import *
>> import pickle
>> import sys
>> import os
>> import string
>> import heapq
>> import kwant
>> import tinyarray
>> pb.pltutils.use_style()
>>
>>
>>
>> cl_1dl3=True
>> if cl_1dl3:
>>     a = 0.34
>>     t = 1.0
>>     N = 31
>>
>>
>>     class Amorphous(kwant.builder.SimpleSiteFamily):
>>         def normalize_tag(self, tag):
>>             return tinyarray.array(tag, float)
>>
>>         def pos(self, tag):
>>             return tag
>>
>>
>>     atoms = Amorphous()
>>     syst = kwant.Builder()
>>     #coordinates of a chiral chain imported manually
>>     sites=atoms(0.0, 0.0, 0.0), atoms(-0.1336881039, 0.4114496766,
>> 0.3400000000), atoms(-0.4836881039, 0.6657395614, 0.6800000000),
>> atoms(-0.9163118961, 0.6657395614, 1.0200000000), atoms(-1.2663118961,
>> 0.4114496766, 1.3600000000), atoms(-1.4000000000, 0.0000000000,
>> 1.7000000000), atoms(-1.2663118961, -0.4114496766, 2.0400000000),
>> atoms(-0.9163118961, -0.6657395614, 2.3800000000), atoms(-0.4836881039,
>> -0.6657395614, 2.7200000000), atoms(-0.1336881039, -0.4114496766,
>> 3.0600000000), atoms(0.0000000000, -0.0000000000, 3.4000000000),
>> atoms(-0.1336881039, 0.4114496766, 3.7400000000), atoms(-0.4836881039,
>> 0.6657395614, 4.0800000000), atoms(-0.9163118961, 0.6657395614,
>> 4.4200000000), atoms(-1.2663118961, 0.4114496766, 4.7600000000),
>> atoms(-1.4000000000, 0.0000000000, 5.1000000000), atoms(-1.2663118961,
>> -0.4114496766, 5.4400000000), atoms(-0.9163118961, -0.6657395614,
>> 5.7800000000), atoms(-0.4836881039, -0.6657395614, 6.1200000000),
>> atoms(-0.1336881039, -0.4114496766, 6.4600000000), atoms(0.0000000000,
>> -0.0000000000, 6.8000000000), atoms(-0.1336881039, 0.4114496766,
>> 7.1400000000), atoms(-0.4836881039, 0.6657395614, 7.4800000000),
>> atoms(-0.9163118961, 0.6657395614, 7.8200000000), atoms(-1.2663118961,
>> 0.4114496766, 8.1600000000), atoms(-1.4000000000, 0.0000000000,
>> 8.5000000000), atoms(-1.2663118961, -0.4114496766, 8.8400000000),
>> atoms(-0.9163118961, -0.6657395614, 9.1800000000), atoms(-0.4836881039,
>> -0.6657395614, 9.5200000000), atoms(-0.1336881039, -0.4114496766,
>> 9.8600000000), atoms(0.0, 0.0, 10.2)
>>
>>     #adding the onsite and hopping to the system
>>     for i in range(N):
>>         syst[sites[i]] = 4 * t
>>         if i > 0:
>>             syst[sites[i], sites[i-1]] = -t
>>     syst[sites[N-1], sites[0]] = -t
>>     kwant.plot(syst)
>>
>>     # If we want to attach to vertical 1D chains to the system
>>     # we first add a slice of the down lead to the scattering region
>>     lat=kwant.lattice.cubic(a)
>>
>>     for i in range(2):   #number of atoms added to the bottom of the
>> chiral chain
>>         syst[lat(0, 0, -(i+1)*a)] = 4 * t
>>     syst[lat.neighbors()] = -t
>>     # now we add the hopping to the chiral chain
>>     syst[sites[0], lat(0, 0, -a)] = -t
>>     kwant.plot(syst)
>>
>>     # fWe make a regular down lead and attach it to the system
>>     dn_lead = kwant.Builder(kwant.TranslationalSymmetry((0, 0, -a)))
>>     for i in range(2):
>>         dn_lead[lat(0, 0, -(i+1)*a)] = 4 * t
>>     dn_lead[lat.neighbors()] = -t
>>     syst.attach_lead(dn_lead)
>>     kwant.plot(syst)
>>
>>
>>
>>     #Here is wwhere the problem arises!!!
>>     #I want to add a similar 1D chain to the top of the chiral system
>>     #but instead it is automatically added somewhere in the middle.
>>
>>
>>
>>     for i in range(N, N+2):   #number of atoms added to the top
>>         syst[lat(0, 0, i*a)] = 4 * t
>>     syst[lat.neighbors()] = -t
>>     # now we add the hopping to the systeml
>>     syst[lat(0, 0, N*a), sites[N-1]] = -t
>>     kwant.plot(syst)
>>
>>     # finally we make a regular lead and attach it to the top
>>     up_lead = kwant.Builder(kwant.TranslationalSymmetry((0, 0, a)))
>>     for i in range(N, N+2):
>>         up_lead[lat(0, 0, i*a)] = 4 * t
>>     up_lead[lat.neighbors()] = -t
>>     syst.attach_lead(up_lead)
>>
>>     kwant.plot(syst)
>>
>>     trans=True
>>     if trans:
>>         syst = syst.finalized()
>>         energies = []
>>         data = []
>>
>>         for ie in range(0,100):
>>             energy = ie * 0.01
>>             smatrix = kwant.smatrix(syst, energy)
>>             energies.append(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()
>>
>>
>> On 6 July 2017 at 18:13, Anton Akhmerov <anton.akhmerov...@gmail.com>
>> wrote:
>>
>>> Hi Patrik,
>>>
>>> You can use site coordinates that don't belong to any lattice. For
>>> that you need to define your own SiteFamily, see for example the
>>> script below that achieves this goal.
>>>
>>> -------------------
>>> from matplotlib import pyplot
>>> import kwant
>>> import tinyarray
>>>
>>> class Amorphous(kwant.builder.SimpleSiteFamily):
>>>     def normalize_tag(self, tag):
>>>         return tinyarray.array(tag, float)
>>>
>>>     def pos(self, tag):
>>>         return tag
>>>
>>>
>>> atoms = Amorphous()
>>>
>>> syst = kwant.Builder()
>>> sites = atoms(0.01, 0.05), atoms(1.01, -.5)
>>> syst[sites[0]] = syst[sites[1]] = 2
>>> syst[sites[1], sites[0]] = 1
>>>
>>> kwant.plot(syst)
>>> ---------------------
>>>
>>> Of course it's now your responsibility to specify the Hamiltonian,
>>> leads, attaching leads, etc.
>>>
>>> Best,
>>> Anton
>>>
>>> On Thu, Jul 6, 2017 at 4:12 PM, Patrik Arvoy <arv...@gmail.com> wrote:
>>> >
>>> > Dear users and developers,
>>> >
>>> > I was wondering if I can import the coordinates of a scattering region
>>> > without any particular symmetry and compute the conductance via kwant.
>>> > If yes, how does one do that?
>>> > Let's say the scattering region does not have any symmetry after
>>> optimizing
>>> > the structure via MD or ... and I have a list of coordinates of all the
>>> > sites.
>>> > I appreciate any help.
>>> >
>>> > Regards
>>> > Patrik
>>>
>>
>>
>
>
> --
> Abbout Adel
>

Reply via email to