From 3ce6f1d5474b4be08c99b424c6a3247debff3a39 Mon Sep 17 00:00:00 2001 From: Christoph Groth <christoph.groth@cea.fr> Date: Thu, 29 Aug 2013 17:03:02 +0200 Subject: [PATCH] add test for ModesLead and SelfEnergyLead --- kwant/tests/test_builder.py | 51 ++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/kwant/tests/test_builder.py b/kwant/tests/test_builder.py index e9b6a4e..c68435d 100644 --- a/kwant/tests/test_builder.py +++ b/kwant/tests/test_builder.py @@ -10,7 +10,7 @@ from __future__ import division import warnings from random import Random from nose.tools import assert_raises -from numpy.testing import assert_equal +from numpy.testing import assert_equal, assert_almost_equal import tinyarray as ta import kwant from kwant import builder @@ -558,3 +558,52 @@ def test_HoppingKind(): assert b.family == gb assert sym.to_fd(a) == a assert_equal(a.tag - b.tag, delta) + + +def test_ModesLead_and_SelfEnergyLead(): + lat = builder.SimpleSiteFamily() + hoppings = [builder.HoppingKind((1, 0), lat), + builder.HoppingKind((0, 1), lat)] + rng = Random(123) + L = 5 + t = 1 + energies = [0.9, 1.7] + + sys = builder.Builder() + for x in xrange(L): + for y in xrange(L): + sys[lat(x, y)] = 4 * t + rng.random() - 0.5 + sys[hoppings] = -t + + # Attach a lead from the left. + lead = builder.Builder(VerySimpleSymmetry(-1)) + for y in xrange(L): + lead[lat(0, y)] = 4 * t + lead[hoppings] = -t + sys.attach_lead(lead) + + # Make the right lead and attach it. + lead = builder.Builder(VerySimpleSymmetry(1)) + for y in xrange(L): + lead[lat(0, y)] = 4 * t + lead[hoppings] = -t + sys.attach_lead(lead) + + fsys = sys.finalized() + ts = [kwant.smatrix(fsys, e).transmission(1, 0) for e in energies] + + # Replace lead with it's finalized copy. + lead = fsys.leads[1] + interface = [lat(L-1, lead.site(i).tag[1]) for i in xrange(L)] + + # Re-attach right lead as ModesLead. + sys.leads[1] = builder.ModesLead(lead.modes, interface) + fsys = sys.finalized() + ts2 = [kwant.smatrix(fsys, e).transmission(1, 0) for e in energies] + assert_almost_equal(ts2, ts) + + # Re-attach right lead as SelfEnergyLead. + sys.leads[1] = builder.SelfEnergyLead(lead.selfenergy, interface) + fsys = sys.finalized() + ts2 = [kwant.greens_function(fsys, e).transmission(1, 0) for e in energies] + assert_almost_equal(ts2, ts) -- GitLab