Hello everyone, I'm klarc. I recently discovered Tkwant, and the part about
obtaining the green lesser function of a system seemed interesting to me.
Using the tutorial available in section 2.7 I increased the onsite energies
of a potential using a Heaviside step. But for some strange reason I got an
error. Here's the code:
def onsite_C(site, time):
(x,) = site.pos
return (V/2) if time >= 0 else 0
def make_double_impurity_system(gamma_L, gamma_C, gamma_R, eps_L, eps_R):
# system building
lat = kwant.lattice.chain(a=1, norbs=1)
syst = kwant.Builder()
# central scattering region
syst[(lat(x) for x in [-1, 2])] = 0
syst[lat(0)] = onsite_C
syst[lat(1)] = onsite_C
syst[(lat(0), lat(-1))] = -gamma_L
syst[(lat(1), lat(0))] = -gamma_C
syst[(lat(2), lat(1))] = -gamma_R
# add leads
sym1 = kwant.TranslationalSymmetry((-1,))
lead_left = kwant.Builder(sym1)
lead_left[lat(0)] = onsite_L
lead_left[lat.neighbors()] = -1
syst.attach_lead(lead_left)
sym2 = kwant.TranslationalSymmetry((1,))
lead_right = kwant.Builder(sym2)
lead_right[lat(2)] = onsite_R
lead_right[lat.neighbors()] = -1
syst.attach_lead(lead_right)
return syst, lat occupations =
[tkwant.manybody.lead_occupation(chemical_potential=mu_L),
tkwant.manybody.lead_occupation(chemical_potential=mu_R)]
green = tkwant.manybody.GreenFunction(syst, max(times), occupations)
idx = tkwant.system.siteId(syst, lat)
site_0 = idx(0)
site_1 = idx(2) green_lesser = []
for time in tqdm(times, desc='Calculando'):
green.evolve(time, 0)
green.refine_intervals()
green_lesser.append(green.lesser(site_0, site_1))
and error:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[299], line 9
6 green.evolve(time, 0)
7 green.refine_intervals()
----> 9 green_lesser.append(green.lesser(site_0, site_1))
File
~/anaconda3/envs/tkwant_env/lib/python3.10/site-packages/tkwant/greenfunctions.py:378,
in GreenFunction.lesser(self, i, j, root)
376 if self._green_lesser is None:
377 self._init_lesser()
--> 378 self._do_jobs(self._jobs_lesser)
379 return self._green_lesser.evaluate(i, j, root)
File
~/anaconda3/envs/tkwant_env/lib/python3.10/site-packages/tkwant/greenfunctions.py:477,
in GreenFunction._do_jobs(self, joblist)
475 logger.debug('jobname={}, args={}, kwargs={}'.format(jobname,
args, kwargs))
476 job = getattr(self, jobname)
--> 477 job(*args, **kwargs)
478 joblist.clear()
File
~/anaconda3/envs/tkwant_env/lib/python3.10/site-packages/tkwant/greenfunctions.py:490,
in GreenFunction._evolve_lesser(self, time0, time1, **kwargs)
488 def _evolve_lesser(self, time0, time1, **kwargs):
489 logger.debug('evolve G^<')
--> 490 self._green_lesser.evolve(time0, time1)
File
~/anaconda3/envs/tkwant_env/lib/python3.10/site-packages/tkwant/greenfunctions.py:53,
in _GreenGeneric.evolve(self, time0, time1)
...
File tkwant/onebody/kernels.pyx:361, in
tkwant.onebody.kernels.Interpolation.eval()
File tkwant/onebody/kernels.pyx:416, in
tkwant.onebody.kernels.Interpolation._estimate_stepsize()
TypeError: Cannot convert 'complex' with non-zero imaginary component to
'double' (this most likely comes from the '**' operator; use
'cython.cpow(True)' to return 'nan' instead of a complex number).
Output is truncated. View as a scrollable element or open in a text editor.
Adjust cell output settings...