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
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. 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.HoppingKi...) object. Another thing which you may find useful is the method 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 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']) 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) Best, Anton On Fri, Apr 11, 2014 at 7:39 PM, Shicheng Lu <shichenglu@levylab.org> wrote:
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
Hi Anton, This instruction helps lot, thanks so much. I try to define the 3D hopping energy by using HoppingKind, and it does work. Thanks again for your help. Shicheng On Mon, Apr 14, 2014 at 11:59 AM, Anton Akhmerov <anton.akhmerov@gmail.com>wrote:
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.
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.HoppingKi... ) object.
Another thing which you may find useful is the method 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
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']) 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)
Best, Anton
On Fri, Apr 11, 2014 at 7:39 PM, Shicheng Lu <shichenglu@levylab.org> wrote:
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
participants (2)
-
Anton Akhmerov
-
Shicheng Lu