Open-shell systems (UHF, UKS, UMP2)

The doublet OH radical:

from vibeqc import Atom, Molecule, BasisSet, UHFOptions, run_uhf

mol = Molecule(
    [Atom(8, [0, 0, 0]), Atom(1, [0, 0, 1.832])],
    charge=0,
    multiplicity=2,
)
basis = BasisSet(mol, "6-31g*")

opts = UHFOptions()
opts.conv_tol_energy = 1e-10
opts.conv_tol_grad = 1e-8
result = run_uhf(mol, basis, opts)

print(f"E_UHF  = {result.energy:.10f}")
print(f"<S^2>  = {result.s_squared:.6f}  (doublet → 0.75)")

UKS — open-shell DFT

from vibeqc import UKSOptions, run_uks

opts = UKSOptions()
opts.functional = "PBE"
result = run_uks(mol, basis, opts)

Same functional library as RKS.

UMP2 — second-order correlation on a UHF reference

from vibeqc import run_ump2

ump2 = run_ump2(mol, basis, result_uhf)   # pass a converged UHF result
print(f"E_UMP2 total  = {ump2.e_total:.10f}")
print(f"E_correlation = {ump2.e_correlation:.10f}")
print(f"  αα same-spin = {ump2.e_aa:.10f}")
print(f"  ββ same-spin = {ump2.e_bb:.10f}")
print(f"  αβ opposite  = {ump2.e_ab:.10f}")

Closed-shell MP2 on an RHF reference is run_mp2.

What about ROHF?

Not yet — see the roadmap.