Quantica.jl

Simulation of quantum systems on a lattice
Author pablosanjose
Popularity
68 Stars
Updated Last
4 Months Ago
Started In
April 2020

banner_small

Dev DOI Build Status Coverage GitHub commits since last release

The Quantica.jl package provides an expressive API to build arbitrary quantum systems on a discrete lattice, and a collection of algorithms to compute some of their properties.

Quantica.jl requires Julia v1.9 or later.

Some current features

  • Build and visualize Hamiltonians on discrete lattices of arbitrary dimensions, using tight-binding models with arbitrary number of orbitals
  • Compute and visualize band structures of periodic systems
  • Couple arbitrary Hamiltonians and compute non-interacting Green functions
  • Compute transport and spectral observables, such as local density of states, current densities, conductance and Josephson currents

Some of this functionality, particularly visualization, requires loading some plot backend from the Makie repository, such as GLMakie (GPU-accelerated interactive visualization), CairoMakie (for pdf/svg output) or WGLMakie (Web-GL backend for use inside browsers)

Example

A step-by-step construction and visualization of a Kane-Mele model (parametrized by spin orbit strength α)and of its bandstructure, encoding the pseudospin orientation in the color of the subbands.

julia> using Quantica, GLMakie

julia> SOC(dr) = ifelse(iseven(round(Int, atan(dr[2], dr[1])/(pi/3))), im, -im); # Kane-Mele spin-orbit coupling

julia> model = hopping(1, range = 1/√3) + @hopping((r, dr; α = 0) -> α * SOC(dr); sublats = :A => :A, range = 1) - @hopping((r, dr; α = 0) -> α * SOC(dr); sublats = :B => :B, range = 1);

julia> h = LatticePresets.honeycomb(a0 = 1) |> hamiltonian(model)
ParametricHamiltonian{Float64,2,2}: Parametric Hamiltonian on a 2D Lattice in 2D space
  Bloch harmonics  : 7
  Harmonic size    : 2 × 2
  Orbitals         : [1, 1]
  Element type     : scalar (ComplexF64)
  Onsites          : 0
  Hoppings         : 18
  Coordination     : 9.0
  Parameters       : []

julia> qplot(h= 0.02))

julia> b = bands(h= 0.05), range(0, 2pi, length=60), range(0, 2pi, length = 60))
Bandstructure{Float64,3,2}: 3D Bandstructure over a 2-dimensional parameter space of type Float64
  Subbands  : 2
  Vertices  : 7200
  Edges     : 21122
  Simplices : 13924

julia> qplot(b, color = (psi, e, k) -> angle(psi[1] / psi[2]), colormap = :cyclic_mrybm_35_75_c68_n256, hide = :wireframe)

Kane-Mele Hamiltonian Kane-Mele bandstructure

Citations

If you find Quantica.jl useful for your work, please cite it using the following BibTeX entry

@software{Quantica,
  author       = {Pablo San-Jose},
  title        = {pablosanjose/Quantica.jl},
  month        = apr,
  year         = 2024,
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.11068257},
  url          = {https://doi.org/10.5281/zenodo.11068257}
}

or using the Citation tool at Quantica's Zenodo

Used By Packages

No packages found.