Skip to content

Basis Sets

Everything generated, nothing tabulated

A basis set is the list of single-particle functions the Hamiltonian is written in — and since every spin-orbital costs one qubit, its size is the qubit count. Mandacaru generates all of them at run time.

From basis functions to qubits

How a basis becomes a qubit register: M basis functions give 2M spin-orbitals and 2M qubits, reduced by the frozen core and by the parity-reduced mapping. M functions the basis 2M spin-orbitals α and β 2M qubits one per spin-orbital minus the frozen core, minus 2 with mapping="parity_reduced"

Water in the FAO basis is 7 functions — 14 qubits, or 12 with the oxygen 1s frozen. The dry run reports the number before anything is computed.

Twelve families, one argument

Family How you ask for it How it is generated
HAO basis="HAO" Analytic hydrogen-like orbitals at the true nuclear charge
NAO basis={"name": "NAO", "size": "DZP"} Numerical orbitals confined by an energy shift, SIESTA-style
NAO-AE basis={"name": "NAO-AE", "tier": 1} The LDA atom's own shells, core included, inside a smooth wall
STO-nG basis="STO-3G" n Gaussians fitted to each occupied Slater orbital, up to STO-6G
Pople basis="6-311+G(2df,2p)" The contraction, split valence and polarization the name encodes
Dunning basis="cc-pVTZ" Correlation-consistent, including aug- and cc-pCVXZ
Karlsruhe basis="def2-TZVPP" def2-SV(P) through def2-QZVPPD, by the same recipe engine
Plane waves basis={"name": "PW", "energy_cutoff": 300} A periodic reciprocal-space basis, cut off in eV
NCPP basis="NCPP" Troullier–Martins, Kleinman–Bylander, one projector per channel
ONCVPSP basis="ONCVPSP" Hamann's optimized norm-conserving, two projectors per channel
PAW-LCAO basis={"name": "PAW-LCAO", "size": "DZP"} Blöchl partial waves, augmented overlap, compensation charges
UPAW-LCAO basis="UPAW-LCAO" PAW whose pseudo partial waves stay orthonormal

A named Gaussian set is a native recipe, not published data: Mandacaru parses the structure the name encodes and generates the exponents itself. Function counts match the literature — cc-pVTZ carbon is 4s3p2d1f.

Pseudopotentials are chosen as a basis name

A pseudopotential removes an atom's core electrons and the singular −Z/r potential, leaving a smooth valence problem a grid can resolve at a practical spacing. Four families ship, every dataset generated by Mandacaru's own LDA radial solver.

  • size="SZ" / "DZ" / "DZP" builds the zetas from the pseudized orbital itself
  • PAW and UPAW also take energy_shift, polarization="gaussian", and tail_norm or split_norm
  • A per-element mapping gives each atom its own size within one family
  • Datasets cover H–U; clone them once and run mandacaru --link-paw
Two panels for oxygen. Left: all-electron and pseudized 2s and 2p radial orbitals, identical outside the cutoff radius and nodeless inside it. Right: the all-electron minus-Z-over-r potential diverging, against a pseudopotential finite and flat at the origin.
A Troullier–Martins pseudopotential for oxygen, generated from scratch. The valence orbitals are unchanged outside the cutoff; the −Z/r singularity a grid cannot resolve is gone.
Log-scale plot of the spurious force on an isolated oxygen atom against grid spacing, finer to the right. The all-electron curve stays near 6000 eV per angstrom and rises slightly; the norm-conserving pseudopotential falls from 80 to under 10.
The exact force on an isolated atom is zero. With a pseudopotential the spurious force falls as the grid is refined; all-electron it does not, because the −Z/r cusp is never resolved.

Multiple zeta and polarization

SZ, DZ, DZP, TZP, QZP and the rest are one option. Extra zetas use the SIESTA split-valence construction; a polarization shell is solved in the same confining sphere. The integral engine sees both as ordinary tabulated orbitals.

  • DZP is the default for NAO, and the practical sweet spot
  • High zetas are short-ranged — the grid must resolve them before they pay
Two panels. Left: four radial functions for the hydrogen 1s orbital, each successive zeta shorter-ranged than the last. Right: a bar chart of the energy lowering of DZ, TZ and DZP relative to SZ, at two grid spacings.
Split-valence zetas for hydrogen 1s, each strictly shorter-ranged than the last — and what they buy on H₂ at two grid spacings.

All-electron numerical orbitals

NAO-AE solves the self-consistent LDA atom, core shells included, inside a smooth exponential wall, then adds tiers of hydrogen-like functions whose effective charge comes from the atom's own valence radius.

  • Tier 0 is every occupied shell; tiers 1 and 2 add correlation room
  • Core functions are as sharp as FAO's — use frozen_core beyond the first row
Two panels for hydrogen. Left: the atomic 1s orbital plus the tier-1 polarization and diffuse functions, all going to zero inside a shaded wall ramp. Right: the confining exponential wall potential, flat and then rising steeply past its onset.
NAO-AE tier 1 on hydrogen: the LDA atom's own shells re-solved inside a smooth exponential wall, plus polarization and diffuse functions.

Around the basis

Frozen core

Freezing the chemically inert core folds it into a constant plus an effective one-body potential and drops it from the active space, so the ansatz, the pool and the register all shrink.

frozen_core=True · frozen_core=2 · frozen_orbitals=[0, 1]

Virtual orbitals

Appends the k lowest unoccupied subshells of each atom — hydrogen gains 2s, carbon 3s — giving a correlated method room above the occupied levels. The default 0 is the minimal basis.

basis={"name": "FAO", "virtual_orbitals": 1}

A basis-agnostic integral engine

Integrals are evaluated on real-space grids — cubic, anisotropic or non-orthogonal — by a C/OpenMP backend that sees only sampled values, with a NumPy fallback. Any basis that can be sampled drops in.

Mandacaru(h=0.20) — grid spacing in Å; the box is atoms.cell, centered on the molecule

One basis per element

A dict keyed by chemical symbol gives each element its own basis, with "*" as the default. The dry run, BlochCalculator and the pseudopotential path read the same mapping.

basis={"O": {"name": "NAO", "size": "DZP"}, "*": "FAO"}

Keep reading

ADAPT-VQE, VQE, excited states, phase estimation and periodic systems — one driver under all of them.

Qiskit, Braket and Cirq, the registered devices, and what a real QPU actually returned.