Work in progress

We apologize for the inconvenience as we continue improving the documentation.


A package providing a common interface to integration algorithms intended for applications including Brillouin-zone integration and Wannier interpolation. Its design is influenced by high-level libraries like Integrals.jl, and it makes use of Julia's multiple dispatch to provide the same interface for integrands with optimized inplace, batched, and Fourier series evaluation.


As a first example, we integrate sine over [0,1] as a function of its period.

julia> using AutoBZCore

julia> f = IntegralSolver((x,p) -> sin(p*x), 0, 1, QuadGKJL());

julia> f(0.3) # solves the integral of sin(p*x) over [0,1] with p=0.3

Notice that we construct an IntegralSolver object that we can evaluate at different parameters with a function-like interface. For more examples, see the documentation.


Special integrand interfaces

  • ParameterIntegrand: allows user integrand to use keyword arguments
  • InplaceIntegrand: allows an integrand to write its result inplace to an array
  • BatchIntegrand: allows user-side parallelization on e.g. shared memory, distributed memory, or the gpu
  • FourierIntegrand: efficient evaluation of Fourier series for cubatures with hierachical grids

Quadrature algorithms:


Extended help

If you experience issues with AutoBZCore.jl, please report a bug on the GitHub page to contact the developers.