Function sequant::mbpt::add_ao_basis

Function Documentation

void sequant::mbpt::add_ao_basis(std::shared_ptr<IndexBasisRegistry> &isr, IndexSpace::QuantumNumbers spin_any, bool vbs = false, bool abs = false, IndexBasis::instance_type instance = default_ao_basis_instance)

registers the AO bases as named instances of the orbital spaces they span, with a general metric (the AOs are not orthonormal)

The OBS AO basis μ spans the complete space (p, or m with vbs); with vbs the VBS AO basis Α spans e and Γ = μ + Α spans their union; with abs the ABS AO basis σ spans ‘α’,ρ=μ+σ spans the union of the OBS andα’, and with \p vbs alsoΡ=Γ+σ‘ spans the union of all three. Every space a basis spans must be registered. The extents default to the spaces’ dimensions (populate them with IndexBasisRegistry::extent(label, n) before the registry is given to a Context, which holds it immutable). No spin-cased counterparts (μ↑, μ↓, …) are registered, unlike by add_pao_basis(): the AO bases are the target of csv_transform() after spin tracing, and spin-casing an index in one throws (see make_spinalpha()) unless they are registered by hand.

Parameters:
  • isr – the IndexBasisRegistry to which add the AO bases

  • spin_any – the quantum numbers of the spin-agnostic orbital spaces in the target convention (Spin::null for SpinConvention::Legacy, else Spin::any)

  • vbs – if true, have separate virtual basis

  • abs – if true, have an auxiliary (F12) basis

  • instance – the basis instance of the AO bases

Throws:

Exception – if a label is already registered or a space an AO basis spans is not; the registry is then left untouched