problem with boundaries
import tkwant import kwant import kwantspectrum
import functools import numpy as np import scipy import cmath import sys import pickle
import logging #tkwant.logging.level = logging.INFO # possible levels (increasing verbosity): WARNING, INFO, DEBUG
u = 0
dim = 12 nsweep = 4
--- MPI helper routines
def am_master(): """Return true for the MPI master rank""" return tkwant.mpi.get_communicator().rank == 0
def print_master(*args, **kwargs): if am_master(): print(*args, **kwargs) sys.stdout.flush()
--- Non-interacting Kwant system
def gaussian(time, t0=40, A=1.57, sigma=24): return A * (1 + scipy.special.erf((time - t0) / sigma))
time dependent coupling with gaussian pulse
def coupling_nn(site1, site2, time): return - cmath.exp(- 1j * gaussian(time))
def make_system(L=400):
# system building
lat = kwant.lattice.square(a=1, norbs=1)
syst = kwant.Builder()
# central scattering region
syst[(lat(x, 0) for x in range(L))] = 1
syst[lat.neighbors()] = -1
# time dependent coupling between two sites in the center
syst[lat(L // 2, 0), lat(L // 2 - 1, 0)] = coupling_nn
# add leads
sym = kwant.TranslationalSymmetry((-1, 0))
lead_left = kwant.Builder(sym)
lead_left[lat(0, 0)] = 1
lead_left[lat.neighbors()] = -1
syst.attach_lead(lead_left)
syst.attach_lead(lead_left.reversed())
return syst, lat
syst, lat = make_system() syst = syst.finalized() idx = tkwant.system.siteId(syst, lat)
sites = [site.pos[0] for site in syst.sites] times = [40, 80, 120, 160]
calculate the spectrum E(k) for all leads
spectra = kwantspectrum.spectra(syst.leads)
set the chemical potential in the leads
occupations = tkwant.manybody.lead_occupation(chemical_potential=-1) emin, emax = tkwant.manybody.calc_energy_cutoffs(occupations)
define boundary conditions
bdr = tkwant.leads.automatic_boundary(spectra, tmax=max(times), emin=emin, emax=emax)