Examples

This section contents examples of the face-centered square tight-binding lattice. These examples illustrate the conditions under which a zero energy exists, the shape of the zero-mode, its robustness to disorder, and how to amplify it.

Note

Throughout these examples, the A sublattice displays a positive imaginary onsite energy while the B and C sublattices have a negative imaginary onsite energy, such that \bar{\epsilon}_a=-\bar{\epsilon}_b=-\bar{\epsilon}_c. The zero-mode, if any, is actually the only state localized uniquely on the A sublattice. By choosing such onsite energies, the zero-mode will amplified while all the other states get absorbed.

Identical hoppings

Even number of sites along x and y

_images/lat_ea0j_eb-0,2j_ec-0,2j_t(1+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
t = 1.
eig_lieb.set_hop([t])
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
eig_lieb.get_ham()
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True, c=5.)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_dispersion = plt_lieb.plt_dispersion(ta=1., tb=1., tc=1., td=1., nn=0.)
plt.show()
# save
save_lieb = saveFigTB(sys=eig_lieb, params={'t': t}, dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'lat')
save_lieb.save_fig(fig_spec, 'spec')
save_lieb.save_fig(fig_dispersion, 'dispersion')
_images/dispersion_ea0j_eb-0,2j_ec-0,2j_t(1+0j).png _images/spec_ea0j_eb-0,2j_ec-0,2j_t(1+0j).png

In the case of an even number of sites along x and y, no zero-mode is encountered. Note that the spectrum is composed of one flat band and two parabolic branches.The spectrum and the polarization on the A sublattice reveal that the flat band states are not localized on the A sublattice. One can actually show that the states are equally distributed on the B and C sublattice \langle B | B \rangle = \langle C | C \rangle = 1/2. The states belonging to the parabolic branches are distributed on three sublattice \langle A | A \rangle = 2\langle B | B \rangle = 2\langle C | C \rangle = 1/2.

Odd number of sites along x and y

_images/lat_ea0j_eb-0,2j_ec-0,2j_t(1+0j)1.png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
t = 1.
eig_lieb.set_hop([t])
eig_lieb.get_ham()
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True, c=5.)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
save_lieb = saveFigTB(sys=eig_lieb, params={'t': t}, dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'lat')
save_lieb.save_fig(fig_spec, 'spec')
save_lieb.save_fig(fig_zm, 'zero_mode')
_images/spec_ea0j_eb-0,2j_ec-0,2j_t(1+0j)1.png _images/zero_mode_ea0j_eb-0,2j_ec-0,2j_t(1+0j).png

Zero-mode is only on the A sublattice and uniformly distributed. Zero-mode located in the flat band.

Identical hoppings with an impurity

The impurity is modeled by changing the nearest neighbor hoppings of a given site.

Odd number of sites x and y

_images/lat_ind_ea0j_eb-0,2j_ec-0,2j_t(2+0j).png _images/lat_ea0j_eb-0,2j_ec-0,2j_t(2+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
t = 2.
eig_lieb.set_hop([t])
eig_lieb.set_hop_def([[31, 32] ,[32, 33], [25, 32] ,[32, 39]], [1., 1., 1., 1.])
eig_lieb.get_ham()
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat_ind = plt_lieb.plt_lattice(ms=20, plt_index=True, c=5)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True,  c=5)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
# save
plt.show()
save_lieb = saveFigTB(sys=eig_lieb, params={'t': t}, dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat_ind, 'lat_ind')
save_lieb.save_fig(fig_lat, 'lat')
save_lieb.save_fig(fig_spec, 'spec')
save_lieb.save_fig(fig_zm, 'zero_mode')
_images/spec_ea0j_eb-0,2j_ec-0,2j_t(2+0j).png _images/zero_mode_ea0j_eb-0,2j_ec-0,2j_t(2+0j).png

The zero-mode has an maximal amplitude at the impurity site.

Alternative hoppings

_images/lat_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True,  c=5)
fig_dispersion = plt_lieb.plt_dispersion(ta=ta, tb=tb, tc=tc, td=td)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'lat')
save_lieb.save_fig(fig_dispersion, 'dispersion')
save_lieb.save_fig(fig_spec, 'spec')
save_lieb.save_fig(fig_zm, 'zero_mode')
_images/dispersion_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/spec_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/zero_mode_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png

Zero-mode localized at the top left corner ending with weak hoppings along x and y.

Dimerization defect along x

_images/latX_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4)
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True,  c=5)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'lat')
save_lieb.save_fig(fig_spec, 'spec')
save_lieb.save_fig(fig_zm, 'zero_mode')
_images/specX_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/zero_modeX_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png

Zero-mode localized in the edge with two weak adjacent hoppings along:math:x and one weak coupling and y.

Dimerization defect along x and y

_images/latXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4, dim_y=4)
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True,  c=5)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'lat')
save_lieb.save_fig(fig_spec, 'spec')
save_lieb.save_fig(fig_zm, 'zero_mode')
_images/specXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/zero_modeXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png

Zero-mode localized in the bulk, centered on the site with two adjacent weak hoppings along x and two adjacent weak hoppings along y.

Diagonal hopping

_images/latXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_nn(0,6+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4, dim_y=4)
eig_lieb.set_hop_alt_nn(nn=.6)  # diagonal hoppings
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=20, plt_hop=True,  c=5)
fig_dispersion = plt_lieb.plt_dispersion(ta=ta, tb=tb, tc=tc, td=td, nn=.6)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td), ('nn', .6)]), dir_name='lieb', ext='png')
save.save_fig(fig_dispersion, 'dispersion')
save.save_fig(fig_lat, 'latXY')
save.save_fig(fig_spec, 'specXY')
save.save_fig(fig_zm, 'zero_modeXY')
_images/dispersion_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_nn(0,6+0j).png _images/specXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_nn(0,6+0j).png _images/zero_modeXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_nn(0,6+0j).png

In presence of intracell diagonal hopping, the flat band is destroyed but the zero-mode remains.

Hopping disorder

Generic disorder

_images/lat_hopXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_gen(0,9+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4, dim_y=4)
alpha = .9
eig_lieb.set_disorder(alpha=alpha)
eig_lieb.set_hop_alt_nn(nn=.6)  # diagonal hoppings
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat_hop = plt_lieb.plt_lattice_hop(ms=20, lw=2)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td), ('nn', .6)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat_hop, 'lat_hopXY')
save_lieb.save_fig(fig_spec, 'specXY')
save_lieb.save_fig(fig_zm, 'zero_modeXY')
_images/specXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_gen(0,9+0j).png _images/zero_modeXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_gen(0,9+0j).png

In the presence of generic disorder, the localized state remains strongly localized on the A sublattice (\langle A| A \rangle \geq 0.95), and becomes slightly localized on the B and C sublattice. Note that, even though the real part of the eigenenergy remains zero, its imaginary part is now non zero.

“Uniform disorder”

_images/lat_hopXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_uni(0,95+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4, dim_y=4)
alpha = .95
eig_lieb.set_disorder_uniform(alpha=alpha)
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat_hop = plt_lieb.plt_lattice_hop(ms=20, lw=2)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td), ('uni', alpha)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat_hop, 'lat_hopXY')
save_lieb.save_fig(fig_spec, 'specXY')
save_lieb.save_fig(fig_zm, 'zero_modeXY')
_images/specXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_uni(0,95+0j).png _images/zero_modeXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_uni(0,95+0j).png

The zero-mode is robust to the uniform disorder.

“Pair disorder”

_images/lat_hopXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_pair(0,7+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4, dim_y=4)
alpha = .7
eig_lieb.set_disorder_placket(alpha=alpha)
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat_hop = plt_lieb.plt_lattice_hop(ms=20, lw=2)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td), ('pair', alpha)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat_hop, 'lat_hopXY')
save_lieb.save_fig(fig_spec, 'specXY')
save_lieb.save_fig(fig_zm, 'zero_modeXY')
_images/specXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_pair(0,7+0j).png _images/zero_modeXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_pair(0,7+0j).png

The zero-mode is robust to the pair disorder.

“Placket disorder”

_images/lat_hopXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_plack(0,6+0j).png
from liebTB import *
# lattice
nx, ny = 5, 5
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
# eigenvalue problem
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=4, dim_y=4)
alpha = .7
eig_lieb.set_disorder_placket(alpha=alpha)
eig_lieb.get_ham(compl_trans=True)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
# plots
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice_hop(ms=10, lw=2)
fig_spec = plt_lieb.plt_spec(pola_tag=b'a')
fig_zm = plt_lieb.plt_intensity(zero_mode, s=500)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td), ('plack', alpha)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'lat_hopXY')
save_lieb.save_fig(fig_spec, 'specXY')
save_lieb.save_fig(fig_zm, 'zero_modeXY')
_images/specXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_plack(0,6+0j).png _images/zero_modeXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)_plack(0,6+0j).png

The zero-mode is robust to the placket disorder.

Adiabatic pumping

Change hoppings continuously to obtain the three different configurations:

_images/latXY_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j)1.png _images/latXY0_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/latXY1_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/latXY2_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/latXY3_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png
Configurations:
  • Initial configuration: zero mode localized at the bottom left of the lattice.
  • Second configuration: localized state at the bottom right of the lattice.
  • Thrird configuration: localized state at the top right of the lattice.
  • Last configuration: localized state at the center of the lattice.
from liebTB import *
# lattice
nx, ny = 8, 8
ri = [[0, 0], [1, 0], [0, 1]]
tags = [b'a', b'b', b'c']
lat_lieb = latticeTB(tags=tags, ri=ri, nor=2, ang=pi/2)
lat_lieb.get_lattice(nx=nx, ny=ny)
lat_lieb.remove_dangling(nor_bond=1)
ta, tb, tc, td = 2, 1, 2, 1
# first configuration
eig_lieb = eigLieb(lat_lieb)
on = [0j, -.2j, -.2j]
eig_lieb.set_onsite(on=on)
ta, tb, tc, td = 2., 1., 2., 1.
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=2, dim_y=2)
eig_lieb.get_ham(compl_trans=True)
ham0 = np.copy(eig_lieb.ham)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
plt_lieb = plotLieb(eig_lieb)
fig_lat = plt_lieb.plt_lattice(ms=10, plt_index=True, fs=14)
fig_lat0 = plt_lieb.plt_lattice(ms=10, plt_hop=True)
fig_zm0 = plt_lieb.plt_intensity(zero_mode)
# second configuration
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=12, dim_y=2)
eig_lieb.get_ham(compl_trans=True)
ham1 = np.copy(eig_lieb.ham)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
fig_lat1 = plt_lieb.plt_lattice(ms=10, plt_hop=True)
fig_zm1 = plt_lieb.plt_intensity(zero_mode)
# third configuration
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=12, dim_y=12)
eig_lieb.get_ham(compl_trans=True)
ham2 = np.copy(eig_lieb.ham)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
fig_lat2 = plt_lieb.plt_lattice(ms=10, plt_hop=True)
fig_zm2 = plt_lieb.plt_intensity(zero_mode)
# fourth configuration
eig_lieb.set_hop_alt(ta=ta, tb=tb, tc=tc, td=td)
eig_lieb.set_dim_defect(dim_x=7, dim_y=7)
eig_lieb.get_ham(compl_trans=True)
ham3 = np.copy(eig_lieb.ham)
eig_lieb.get_eig(eigenvec=True)
zero_mode = eig_lieb.get_state_pola(b'a')
fig_lat3 = plt_lieb.plt_lattice(ms=10, plt_hop=True)
fig_zm3 = plt_lieb.plt_intensity(zero_mode)
# adiabatic pumping
psi_init = np.zeros(eig_lieb.sites) / eig_lieb.sites
psi_init[25] = 1.
hams = np.array([ham0, ham1, ham2, ham3])
prop_lieb = propTB(lat_lieb, steps=300, dz=.15)
prop_lieb.get_pump(hams, psi_init=psi_init, norm=True)
ani = prop_lieb.get_ani(s=180, fs=20)
plt.show()
# save
from collections import OrderedDict
save_lieb = saveFigTB(sys=eig_lieb, params=OrderedDict([('ta', ta), ('tb', tb), ('tc', tc), ('td', td)]), dir_name='lieb', ext='png')
save_lieb.save_fig(fig_lat, 'latXY')
save_lieb.save_fig(fig_lat0, 'latXY0')
save_lieb.save_fig(fig_lat1, 'latXY1')
save_lieb.save_fig(fig_lat2, 'latXY2')
save_lieb.save_fig(fig_lat3, 'latXY3')
save_lieb.save_fig(fig_zm0, 'zm0')
save_lieb.save_fig(fig_zm1, 'zm1')
save_lieb.save_fig(fig_zm2, 'zm2')
save_lieb.save_fig(fig_zm3, 'zm3')
save_lieb.save_ani(ani, 'pump3')
_images/zm0_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/zm1_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/zm2_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png _images/zm3_ea0j_eb-0,2j_ec-0,2j_ta(2+0j)_tb(1+0j)_tc(2+0j)_td(1+0j).png