Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
    • Help
    • Support
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
kwant
kwant
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 113
    • Issues 113
    • List
    • Boards
    • Labels
    • Milestones
  • Merge Requests 17
    • Merge Requests 17
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Packages
    • Packages
    • Container Registry
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • kwant
  • kwantkwant
  • Issues
  • #50

Closed
Open
Opened Sep 06, 2016 by Anton Akhmerov@anton-akhmerov
  • Report abuse
  • New issue
Report abuse New issue

Modes: resolving crossings with high velocity

Right now crossing resolution in modes accounts for numerical precision in an inconsistent manner, which may result in false identification of propagating modes as evanescent or vice versa. This is in particular important when the user works in physical units, and absolute values of matrix elements are large.

Example reproducing the bug (in a notebook, comment out the first line for running from a script):

%matplotlib inline
from matplotlib import pyplot
import kwant
import tinyarray as ta

W = 10
mu = 1
scale = 100000
sz = ta.array([[1, 0], [0, -1]])
syst = kwant.Builder(kwant.TranslationalSymmetry((1, 0)))
lat = kwant.lattice.square()
syst[(lat(0, j) for j in range(10))] = scale * mu * sz
syst[lat.neighbors()] = scale * sz
syst = syst.finalized()

kwant.plotter.bands(syst, momenta=401)
len(syst.modes()[0].momenta)  # prints "0"

The system here is designed to have a lot of crossings at zero energy. Check that setting scale = 1 results in modes finding 28 propagating modes, while scale shouldn't change the number of propagating modes.

@michaelwimmer any ideas for workaround? Rescale h and t inside the modes function?

PS credit for discovering goes to @basnijholt

Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
3
Labels
bug difficulty: medium priority: normal
Assign labels
  • View project labels
Reference: kwant/kwant#50