Canonical CCSD(T): the gold-standard reference

Coupled cluster with singles, doubles, and perturbative triples, CCSD(T), is the accuracy reference that every cheaper method (MP2, DFT, and the DLPNO local approximation) is measured against. vibe-qc ships it as a dense O(N^6) molecular pilot on a density-fitting substrate, with closed-shell, open-shell, and spin-pure references all reachable from one call. This page is the worked companion to the CCSD user guide; it walks through each reference type with the validated reference numbers.

Closed-shell CCSD(T) in one call

For a closed-shell molecule, method="ccsd(t)" runs RHF and then the spin-adapted CCSD(T) kernel automatically:

import vibeqc as vq

mol = vq.Molecule([
    vq.Atom(8, [0.000,  0.000,  0.000]),
    vq.Atom(1, [0.000,  1.499, -1.160]),
    vq.Atom(1, [0.000, -1.499, -1.160]),
])

result = vq.run_job(mol, basis="cc-pvdz", method="ccsd(t)", output="h2o_ccsd_t")
cc = result.ccsd
print(f"E(CCSD correlation) = {cc.e_ccsd_correlation:.6f} Ha")
print(f"E((T) increment)    = {cc.e_t:.6f} Ha")
print(f"E(CCSD(T) total)    = {result.energy_total:.6f} Ha")

The post-SCF result is attached as result.ccsd, a CCSDResult carrying e_hf, e_ccsd_correlation, e_ccsd, e_t, e_ccsd_t (= e_total), and the per-iteration cc_trace. The RI auxiliary basis is resolved automatically from the orbital basis name.

For water in cc-pVDZ the (T) increment is about -0.00328 Ha. vibe-qc reproduces ORCA 6.1.1’s conventional CCSD(T) here to under 3e-5 Ha on the (T) increment (which is density-fitting insensitive) and to within roughly 1 mHa on the total (the cc-pVDZ density-fitting error). The all-electron ORCA reference total is E(CCSD(T)) = -76.2406 Ha (tests/test_ccsd.py); note that run_job freezes chemical cores by default, so pass ccsd_options=vq.CCSDOptions(n_frozen_core=0) to match that all-electron total exactly.

CCSD without the triples: the selector

method="ccsd" runs plain CCSD; method="ccsd(t)" adds the Raghavachari perturbative triples. You can also set the triples mode explicitly, which is handy for comparing the two:

for triples in ("none", "(t)"):
    res = vq.run_job(mol, basis="cc-pvdz", method="ccsd", triples=triples)
    print(triples, res.energy_total)

triples="none" disables the correction even when the method keyword is ccsd(t), and the output and citation method label follow the effective choice.

Open-shell radicals: an automatic UHF reference

For an open-shell molecule (multiplicity > 1), the same method="ccsd(t)" call runs UHF and then the spin-orbital UCCSD(T) kernel, with no extra flags:

ch3 = vq.Molecule([
    vq.Atom(6, [ 0.000,  0.000, 0.0]),
    vq.Atom(1, [ 2.039,  0.000, 0.0]),
    vq.Atom(1, [-1.019,  1.766, 0.0]),
    vq.Atom(1, [-1.019, -1.766, 0.0]),
], multiplicity=2)

result = vq.run_job(ch3, basis="cc-pvdz", method="ccsd(t)")
print(f"E(UCCSD(T)) = {result.ccsd.e_ccsd_t:.6f} Ha")

The spin-orbital kernel evaluates the coupled-cluster equations directly on the UHF reference, reproducing canonical UCCSD(T). For the methyl radical in cc-pVDZ the (T) increment is near -0.00262 Ha, matching ORCA to the same tolerances as the closed-shell case; the all-electron ORCA reference total is -39.7182 Ha (tests/test_uccsd.py). If the UHF reference fails to converge, CCSD is skipped (no numbers from an unconverged reference); pass uhf_options=vq.UHFOptions(level_shift=...) for stiff radicals.

Spin-pure open shells: a ROHF reference

The default open-shell path uses UHF, which can carry minor spin contamination. For a spin-pure restricted-open-shell reference, pass ccsd_reference="rohf"; the same spin-orbital kernel runs on ROHF orbitals (identical alpha and beta spatial orbitals, per-spin Fock matrices):

result = vq.run_job(oh_radical, basis="cc-pvdz",
                    method="ccsd(t)", ccsd_reference="rohf")

Cheaper triples: frozen natural orbitals

The (T) cost is dominated by the virtual-space size. Frozen natural orbitals (FNO) keep the dominant virtual natural orbitals of the MP2 density and discard the rest, recovering almost all the correlation at a fraction of the cost. Turn it on through CCSDOptions:

result = vq.run_job(
    mol, basis="cc-pvtz", method="ccsd(t)",
    ccsd_options=vq.CCSDOptions(fno=True, fno_keep_fraction=0.6),
)
print(result.ccsd.n_virtual_kept, "of", result.ccsd.n_virtual_total, "virtuals kept")

Selection is by MP2 occupation threshold (fno_occ_threshold, default 1e-5) or a fixed fno_keep_fraction. The retained virtuals are semicanonicalized so the (T) stays exact in the truncated space, and a delta-MP2 correction (fno_delta_mp2=True, the default) adds back most of the small correlation lost to truncation. With no truncation, FNO-CCSD(T) reproduces canonical CCSD(T) to machine precision (tests/test_ccsd_fno.py). FNO is closed-shell only so far.

Frozen core

The high-level driver freezes chemical cores automatically; the low-level API takes an explicit count:

opts = vq.CCSDOptions(triples="(t)",
                      n_frozen_core=vq.chemical_core_orbital_count(mol))

What is and is not available

Note

The canonical engine is a dense O(N^6) molecular pilot, accurate but not large-scale; for bigger systems use the DLPNO local approximation.

  • References: RHF (closed-shell), UHF (open-shell default), and ROHF (ccsd_reference="rohf") are all supported.

  • Density fitting is the supported and required production path.

  • No analytic CCSD(T) gradient yet, energies are single-point; geometry optimization runs through finite differences.

  • FNO is closed-shell only; open-shell FNO is a roadmap item.

  • The nonstandard triples variants (A-CCSD(T), CCSD[T], CCSD+T(CCSD)) are recognized but raise NotImplementedError.

  • Periodic CCSD is a later-release item.

References

  • The (T) correction. K. Raghavachari, G. W. Trucks, J. A. Pople, M. Head-Gordon, “A fifth-order perturbation comparison of electron correlation theories,” Chem. Phys. Lett. 157, 479 (1989).

  • Frozen natural orbitals for CCSD(T). A. E. DePrince, C. D. Sherrill, “Accuracy and efficiency of coupled-cluster theory using density fitting, frozen natural orbitals, and a t1-transformed Hamiltonian,” J. Chem. Theory Comput. 9, 2687 (2013).

The ccsd / ccsd(t) routes are registered in the bundled citation database, so a run auto-emits the right references in its .bibtex and .references siblings.

Next

  • CCSD user guide, the full API reference (options, result fields, the AutoCI-style citype= selector).

  • DLPNO local correlation, the near-linear-scaling approximation to the CCSD(T) computed here.

  • Natural orbitals, the natural-orbital machinery FNO-CCSD(T) builds on.

  • RI-MP2, the cheaper correlated method that CCSD(T) is the reference for.