To use the notebooks here, create a conda
environment using qgraph_env.yml.
Instructions for creating a conda
environment from a yaml file are located here. This will automatically create an conda
environment named qgraph
, which you should use as your Jupyter kernel.
This project implements the tight binding model for an electron on an arbitrary graph structure.
By varying disorder and random parameters, Anderson Localization can be demonstrated.
There are interfaces for generating graphs that represent 1D and 2D lattices and for generating Erdős–Rényi random graphs.
There is direct support for calculating the inverse participation ratio (IPR), a measure of locality.
An electron can exist in finitely many discrete sites numbered
The state of the electron is denoted
The Hamiltonian for the tight binding model for a single electron can be written as follows:
where
Anderson localization can be demonstrated on this model when the diagonal of the Hamiltonian
The system can be time evolved using the following equation:
The inverse participation ratio is a measure of locality defined as the sum of the fourth power of the magnitude of the wave function of each site in the lattice. Explicitly,
IPR takes a range of
AndersonGraph.py
contains the AndersonGraph
class which implements the tight binding model on a graph, with the input graph being a NetworkX graph object.
Multiple code examples can be found in summary.ipynb.
plotting.py has functions for plotting states of the graph. animations.py has functions for generating animations graphs. plot_ipr.py has functions for plotting the IPR of a graph. Most of these functions take an AndersonGraph
object and a few visual parameters.
To create an instance of an AndersonGraph
object, the constructor takes as arguments a NetworkX graph object (a simple graph), an array of wave functions at each site, a range of values on which
Here is a basic example creating an 80-site 1D ring with
import AndersonGraph as ag # The exact form of this may change based on the relative location of AndersonGraph.py
N = 80 # Define number of sites
psi_0 = np.zeros(N)
psi_0[N//2] = 1 # Create wave function
ring = nx.grid_graph(dim=[N], periodic=True) # Create ring
anderson_ring = ag.AndersonGraph(graph=ring, psi_0=psi_0, eps_range=[-1, 1], t_hop=1) # Construct AndersonGraph object
anderson_ring.plot_density(t=17) # Plot the time evolution of the system
And here is the plot output:
Many example plots and animations can be found in the "plots" folder here.
The basic setup here of allowing an electron to exist in discrete, finite spaces can be applied to some interesting quantum mechanical systems. A non-exhaustive list of applications is given below.
- Anderson Localization: This project can be used to show Anderson localization on graphs.
- Quantum Dot Cellular Automata: A computing paradigm that is an alternative to standard transistor-based computing, based on cellular automata. Encodes information in charges localized in quantum dots.
- Many-Body Localization: Anderson localization can be extended to the localization of many bodies, something thermodynamically interesting.
This started as a project for PHY 381C (Computational Physics) at UT Austin (class website). Here is a link to a presentation given in-class on this repository, which is provided in case anyone finds it useful. It is also available as a PDF (which precludes animationes) here.
- Generalize to Many-Body Case: Our single-electron approach allows for a closed-form solution for the wave function at any point in time. Introducing multiple electrons would necessitate making a choice about iterative and approximate solution methods and would introduce more complex quantum mechanical behaviors.
- Introduce Different Boundary Conditions: Every connection on the graph here behaves as a periodic boundary condition — that is, the electron is free to travel between any node unhindered by reflective, absorptive, or other effects.
- Add Graph Directionality and Weight: Extensions past simple graph structures may be able to realize more complex physical phenomena, inclding transport phenomena and variable site spacing.
This project makes extensive use of NetworkX for representing graph structures.
Special thanks to Dr. William Gilpin ([email protected]), Edoardo Luna ([email protected]), and Anthony Bao ([email protected]) for such good course instructors.