c++ program for high-precision atomic structure calculations of single-valence systems

Atomic Many-body Perturbation theory in the Screened Coulomb Interaction

ampsci is a c++ program for high-precision atomic structure calculations of one and two valence atomic systems, developed and maintained by Benjamin M. Roberts, University of Queensland, Australia

It solves the correlated Dirac equation using the Hartree-Fock + correlation potential method (based on Dzuba-Flambaum-Sushkov method) to produce a set of atomic wavefunctions and energies. For two-valence systems, uses the CI+MBPT (Configuration Interaction with many-body perturbation theory) method. The method is fully relativistic, includes electron correlations, all-orders screening and hole-particle interaction, finite-nuclear size, Breit interaction, radiative QED effects, RPA for matrix elements, and structure radiation/renormalisation. QED is included via the Flambaum-Ginges radiative potential method. Can solve for continuum states with high energy, and calculate ionisation cross sections with large energy/momentum transfer.

Designed to be fast, accurate, and easy to use. The "modules" system (see doc/ makes it simple to add your own routines to use the atomic wavefunctions to calculate whatever properties you may be interested in.

  • The code is on GitHub:
  • See for full documentation
  • A full description of the physics methods and approximations, including references, is given in the physics documentation: ampsci.pdf.
  • Important: this is a pre-release version of the code: not fully tested or documented, and should not be used for publishable calculations (without consultation)

github doxygen manual

tests build macOS cov

Compilation and usage

Quick start

  • The bash script should compile and build ampsci (uses Make)
    • It uses only defaults, and may not work on all systems. See documentation for full guide to compilation.
    • It assumes dependencies have already been installed. If not, see next:
  • The bash script should install all required dependencies.
    • It uses only defaults, and may not work on all systems.
    • As upsream repositories update, this may fall out-of-date
  • See which ampsci input options are available: ./ampsci -a
    • See available input options for each input block by following with its name
    • e.g., ./ampsci -a HartreeFock
  • Check which Modules are aviable: ./ampsci -m
    • See available input options for each module by following with its name
    • e.g., ./ampsci -m MatrixElements
  • Check which operators are aviable: ./ampsci -o
    • See available input options for each operator by following with its name
    • e.g., ./ampsci -o hfs

Looking for atomic ionisation form-factors for dark-matter-electron scattering?

  • See Kionisation module (./ampsci -m Kionisation)


  • The fastest way to get familiar with ampsci is to follow the tutorials
  • A basic step-by-step tutorial: doc/
  • More advanced tutorials follow: doc/, doc/
    • See also: doc/examples/ – an example/template input file
    • In doc/examples/ there are several example input files, with the expected output; use these to test if everything is working


Full documentation available online: Divided into sections:

  1. Usage intructions, input options
  2. Physics documentation:
    • Description of physics/methods used in the code
    • Includes many references to the works where the methods implemented here were developed.
  3. Modules
    • The modules system allows the easy calculation of any atomic properties after the wavefunction has been calculated. See doc/ for description
    • The code is designed so that you can easily create your own modules. See doc/ for details
  4. Code documentation – details on classes/functions in the code
    • Available online:
    • This should only be required if you plan to edit the code or add new modules

A selection of publications resulting from ampsci