Dear Shicheng,
Sorry for sending two emails: I forgot to forward the reply to the
mailing list and to mention another way to manipulate the hoppings
that may be useful to you.
Another thing which you may find useful is the method
There are several ways to add hoppings in Kwant. All of them are shown
in the tutorials, however the one that you want specifically is adding
all the hoppings on a multipartite lattice that are related to each
other by translations. This is done in
http://kwant-project.org/doc/1.0/tutorial/tutorial4, using the
HoppingKind (http://kwant-project.org/doc/1.0/reference/generated/kwant.builder.HoppingKind#kwant.builder.HoppingKind)
object.
lattice.neighbors(n) of the lattices: it returns all the HoppingKind
objects that correspond to n-th nearest neighbors in a lattice. I've
made a short script shown below that prints all the nearest and
next-nearest hoppings in your lattice, adds them to the system and
plots the result.
import kwant
import tinyarray as ta
from matplotlib import pyplot
(0,0.5,0.5), (0.5,0.5,0.5)], ['a', 'c1',
lat = kwant.lattice.general([(0, 0, 1),(0, 1, 0), (1, 0, 0)],
[(0, 0, 0), (0.5, 0.5, 0),(0.5, 0, 0.5),
'c2', 'c3', 'b'])
a, c1, c2, c3, b = lat.sublattices
def site_color(site):
if site.family.name[0] == 'c':
return 'green'
elif site.family.name == 'a':
return 'red'
else:
return 'blue'
def hop_lw(site2, site1):
r = site1.pos - site2.pos
return .01/ta.dot(r, r)
def print_hop_kind(hop_kind):
print 'HoppingKind(' + hop_kind.delta.__str__() + ', ' +
hop_kind.family_a.name + ', ' + hop_kind.family_b.name +')'
print 'Nearest neighbors:'
for i in lat.neighbors(1):
print_hop_kind(i)
print 'Next-nearest neighbors:'
for i in lat.neighbors(2):
print_hop_kind(i)
sys = kwant.Builder()
sys[lat.shape((lambda pos: all(abs(i) < 0.9 for i in pos)), (0, 0, 0))] = 4
sys[lat.neighbors(1)] = 1
sys[lat.neighbors(2)] = 2
kwant.plot(sys, site_color=site_color, site_size=0.1, site_lw=0, hop_lw=hop_lw)
> Hi,
>
> I am trying to construct a 3D SrTiO3 structure, however there is only one
> example in online document that is 3D. I can create the structure and attach
> two leads, but I am not sure how to define the hopping energy between atoms.
> Here is how I create the 3D structure by using lattice.general:
>
> lat = kwant.lattice.general([(0, 0, 1),(0, 1, 0), (1, 0, 0)],
> [(0, 0, 0),(0.5,0.5,0),(0.5,0,0.5),(0,0.5,0.5),
> (0.5,0.5,0.5)])
> a,c1,c2,c3,b = lat.sublattices
> sys = kwant.Builder()
> sys[lat.shape(cuboid_shape, (0, 0, 0))] = 4 * t
> The last code is how I define the energy for the atoms, but I am not sure how
> to define the hopping energy between atoms here, because there are 8 1/8 Ti, 6
> 1/2 O and 1 Sr in this unit cell, what kind of function should I use here?
> Best,
>
> Shicheng Lu
> Department of Physics & Astronomy
> University of Pittsburgh
>