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.