From 242d62a9982146d36b3a5727028c15438dc57aa1 Mon Sep 17 00:00:00 2001
From: Anton Akhmerov <anton.akhmerov@gmail.com>
Date: Fri, 15 Feb 2013 17:52:37 -0500
Subject: [PATCH] fix lattices with less vectors than the spatial dimension

---
 kwant/lattice.py            | 8 +++++---
 kwant/tests/test_lattice.py | 5 +++++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/kwant/lattice.py b/kwant/lattice.py
index 4834f664..5a661470 100644
--- a/kwant/lattice.py
+++ b/kwant/lattice.py
@@ -99,12 +99,13 @@ class PolyatomicLattice(object):
         Site = builder.Site
 
         dim = len(start)
+        num_vecs = len(self.prim_vecs)
         if dim != self.prim_vecs.shape[1]:
             raise ValueError('Dimensionality of start position does not match'
                              ' the space dimensionality.')
         sls = self.sublattices
-        deltas = [ta.array(i * (0,) + (1,) + (dim - 1 - i) * (0,))
-                  for i in xrange(dim)]
+        deltas = [ta.array(i * (0,) + (1,) + (num_vecs - 1 - i) * (0,))
+                  for i in xrange(num_vecs)]
         deltas += [-delta for delta in deltas]
 
         # Check if no sites are going to be added, to catch a common error.
@@ -187,10 +188,11 @@ class MonatomicLattice(PolyatomicLattice, builder.SiteGroup):
 
         builder.SiteGroup.__init__(self)
         self.dim = dim
+        self._lattice_dim = len(prim_vecs)
 
     def normalize_tag(self, tag):
         tag = ta.array(tag, int)
-        if len(tag) != self.dim:
+        if len(tag) != self._lattice_dim:
             raise ValueError("Dimensionality mismatch.")
         return tag
 
diff --git a/kwant/tests/test_lattice.py b/kwant/tests/test_lattice.py
index 9c8a5495..5e93e577 100644
--- a/kwant/tests/test_lattice.py
+++ b/kwant/tests/test_lattice.py
@@ -15,6 +15,11 @@ def test_make_lattice():
             site = sl(*tag)
             assert_equal(tag, sl.closest(site.pos))
 
+    # Test 2D lattice with 1 vector.
+    lat = lattice.make_lattice([[1, 0]])
+    site = lat(0)
+    assert_raises(ValueError, lat, 0, 1)
+
 
 def test_shape():
     def in_circle(pos):
-- 
GitLab