Julia's Physics Ecosystem

Dealing with physical quantities

Differential equations

TODOS here

  • Short tutorial with common physics problems

  • Overview of DiffEqPhysics and FDM with DiffEq

  • how to use ModellingToolkit by @ChrisRackauckas and @HarrisonGrodin if possible...with special reference to constructing systems of diffeq programatically

Dynamical systems

  • JuliaDynamics

    • DynamicalSystems.jl: A Julia software library for nonlinear dynamics: Delay embeddings, recurrence analysis, chaos (e.g. Lyapunov exponents) and interactive applications.
    • DynamicalBilliards.jl: Feature-full library for billiards in two dimensions, with support for plotting/animating
  • PyDSTool.jl: A wrapper for the PyDSTool library

  • CausalityTools.jl : a framework for detecting causal relations between timeseries.

  • Reachability.jl : approximating the reachable states and checking safety properties of affine systems.

  • Agents.jl : Agent-based modelling, cellular automata.

Astronomy

Quantum Physics

  • Yao.jl: Extensible, Efficient Quantum Algorithm Design for Humans.
  • QuantumInformation.jl A Julia package for numerical computation in quantum information theory
  • QuantumInfo.jl
  • QuantumLab.jl A workbench for Quantum Chemistry and Quantum Physics in Julia
  • QuantumOptics.jl: Library for the numerical simulation of closed as well as open quantum systems.
  • QuantumBayesian.jl Julia package for simulating quantum evolution efficiently, including the quantum Bayesian approach to stochastic measurement update and continuous readout.
  • MonteCarlo.jl Classical and quantum Monte Carlo simulations in Julia
  • RandomQuantum.jl sample from various random matrix ensebles associated with quantum information applications.
  • QuantumWalk.jl QuantumWalk.jl is a package for Julia programming language implementing models of quantum continuous and discrete walks used for performing quantum spatial search.

Finite element analysis

  • JuAFEM.jl: Finite element toolbox for Julia
  • JuliaFEM.jl: Framework for the distributed processing of large Finite Element Models across clusters of computers using simple programming models
  • FENiCS.jl: A wrapper for the FEniCS Finite Element library

Solid state

  • JuliaAtoms: Atomic physics
    • AtomicLevels.jl: A library used to define electronic configurations constructed from electronic orbitals in spherical symmetry.
    • Atoms.jl: Data structures for representing atoms in a product space of orbitals and a radial grid. The radial grid can be any implementation of the ContinuumArrays.jl interface.
    • EnergyExpressions.jl: A library for setting up the energy expression of a system built up from a set of configurations. At the moment, the implementation is geared towards atomic systems (in that it uses data structures from AtomicLevels.jl), but it is applicable to other systems as well, such as molecules.
    • SCF.jl: A library for the solution of integro-differential eigenproblems, in a self-consistent manner.
    • AngularMomentumAlgebra.jl: A library for the special case of energy expressions in spherical symmetry.
    • AtomicPotentials.jl Provides structures for modelling the atomic nucleus as a potential.
  • libAtoms: Materials-modelling + FEM orientated libraries
    • JuLIP: library for Interatomic Potentials
    • ASE.jl: Julia Bindings for Atomic Simulation Environment
  • JuLIPMaterials: collection of Julia tools for materials science
  • CarrierCapture.jl: Semi-classical recombination in semiconductors.
  • PolaronMobility.jl: Feynman variational path-integral model for the Fröhlich polaron
  • CoulombIntegrals.jl: A library that implements the calculation of the Coulombic repulsion between pairs of electrons.
  • MatrixFactorizations.jl Wrappers around the solvers from IterativeSolvers.jl that can be used as lazy factorizations.
  • PseudoPotentials.jl: Model potentials used to reduces calculation complexity by representing a core of electrons in a mean-field sense. This can turn a multi-electron problem into an approximate few- or single-electron problem.
  • MonteCarlo.jl: Classical and quantum Monte Carlo simulations in Julia
  • WignerSymbols.jl: Compute Wigner's 3j and 6j symbols, and related quantities such as Clebsch-Gordan coefficients and Racah's symbols.

Tensors

  • ITensors.jl: A Julia library for efficient tensor and tensor network calculations
  • TensorOperations.jl: Julia package for tensor contractions and related operations
  • Einsum.jl: Einstein summation notation in Julia
  • Tullio.jl: Fast, AutoDiff, GPU friendly Einsum with support for convolutions, stencils, scatter/gather, and broadcasting.

Radiation detectors

Plotting

Visualization is one of the most important tools in our toolkit. There are three main plotting packages in Julia:

  • Plots.jl: Very intuitive and convenient, Plots.jl is a wrapper around several plotting backends. Plots tries to figure out what you want it to do, not just what you tell it.
  • Makie.jl: Built around the idea of fast, interactive plotting utilizing the speed of OpenGL and the GPU (and WebGL now), Makie.jl is a next-generation plotting package which offers superior interactivity and speed. It's great for building interactive or animated visualzations with minimal overhead, but the time to first plot is a little slow compared to Plots, and it isn't quite as feature-complete. Written in pure Julia.
  • PyPlot.jl: A wrapper around the PyPlot interface to the popular Python plotting library matplotlib.