From b9f43ec416709d57366027cdde34668124a535ad Mon Sep 17 00:00:00 2001 From: Anton Akhmerov <anton.akhmerov@gmail.com> Date: Mon, 18 Feb 2013 18:15:12 -0500 Subject: [PATCH] fix bug in TranslationalSymmetry.reversed --- kwant/lattice.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/kwant/lattice.py b/kwant/lattice.py index 4b1b67d3..c0069ad1 100644 --- a/kwant/lattice.py +++ b/kwant/lattice.py @@ -245,6 +245,7 @@ class TranslationalSymmetry(builder.Symmetry): # A dictionary containing cached data required for applying the # symmetry to different site groups. self.site_group_data = {} + self.is_reversed = False def add_site_group(self, gr, other_vectors=None): """ @@ -326,7 +327,8 @@ class TranslationalSymmetry(builder.Symmetry): def which(self, site): det_x_inv_m_part, det_m = self._get_site_group_data(site.group)[-2:] - return ta.dot(det_x_inv_m_part, site.tag) // det_m + result = ta.dot(det_x_inv_m_part, site.tag) // det_m + return -result if self.is_reversed else result def act(self, element, a, b=None): m_part = self._get_site_group_data(a.group)[0] @@ -335,6 +337,8 @@ class TranslationalSymmetry(builder.Symmetry): except ValueError: msg = 'Expecting a {0}-tuple group element, but got `{1}` instead.' raise ValueError(msg.format(self.num_directions, element)) + if self.is_reversed: + delta *= -1 if b is None: return builder.Site(a.group, a.tag + delta, True) elif b.group is a.group: @@ -348,6 +352,8 @@ class TranslationalSymmetry(builder.Symmetry): msg = 'Expecting a {0}-tuple group element, ' + \ 'but got `{1}` instead.' raise ValueError(msg.format(self.num_directions, element)) + if self.is_reversed: + delta2 *= -1 return builder.Site(a.group, a.tag + delta, True), \ builder.Site(b.group, b.tag + delta2, True) @@ -357,20 +363,12 @@ class TranslationalSymmetry(builder.Symmetry): def reversed(self): """Return a reversed copy of the symmetry. - The result is identical to creating a new symmetry with all the - period vectors opposite to the original but with the same fundamental - domain. + The resulting symmetry has all the period vectors opposite to the + original and an identical fundamental domain. """ - periods = [[-i for i in j] for j in self.periods] - result = TranslationalSymmetry(*periods) - for gr in self.site_group_data: - m_part, det_x_inv_m_part, det_m = self.site_group_data[gr] - if self.num_directions % 2: - det_m = -det_m - else: - det_x_inv_m_part = -det_x_inv_m_part - m_part = -m_part - result.site_group_data[gr] = (m_part, det_x_inv_m_part, det_m) + result = TranslationalSymmetry(*self.periods) + result.site_group_data = self.site_group_data + result.is_reversed = not self.is_reversed return result -- GitLab