Moving from ORCA¶
vibe-qc’s molecular SCF stack validates against ORCA 6.1.1 for parity at the 0.26 mHa level on glycine / def2-TZVP / RIJCOSX (see RIJCOSX SCF and analytic gradients on glycine and the authoritative numbers in Features). The chemistry maps cleanly; the input idiom is different, ORCA takes a keyword-driven plain-text deck while vibe-qc takes a Python script. This page is a side-by-side crosswalk.
For users coming from PySCF instead, see from_pyscf. For CRYSTAL users, see from_crystal.
Input file shape¶
ORCA .inp¶
! RKS PBE0 D3BJ DEF2-TZVP RIJCOSX TIGHTSCF OPT
%scf
MaxIter 200
KDIIS true
CNVDIIS 1.0e-7
end
%pal
nprocs 4
end
* xyz 0 1
O 0.000000 0.000000 0.117790
H 0.000000 0.755453 -0.471160
H 0.000000 -0.755453 -0.471160
*
vibe-qc Python¶
import vibeqc as vq
mol = vq.Molecule.from_xyz("h2o.xyz") # Å in file, bohr internal
vq.run_job(
mol,
method="rks",
functional="PBE0",
basis="def2-tzvp",
dispersion="d3bj", # D3BJ keyword
density_fit=True, cosx=True, # RIJCOSX
optimize=True, # OPT
num_threads=4, # %pal nprocs 4
output="output-h2o-pbe0",
options=vq.RKSOptions(
max_iter=200,
scf_accelerator=vq.SCFAccelerator.KDIIS, # KDIIS
conv_tol_energy=1e-9, # ~ TIGHTSCF
),
)
ORCA’s compact ! keyword line trades concision for grammar
constraints (every keyword has to be recognised by the parser).
vibe-qc’s Python input trades concision for sweep-friendliness,
the same script can loop over functionals / basis sets in plain
Python without a templating layer.
Keyword crosswalk¶
Method + basis (the ! line)¶
ORCA |
vibe-qc |
|---|---|
|
|
|
|
|
|
|
|
|
Same plus |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Not a separate flag, set |
Important
B3LYP convention. vibe-qc and ORCA both mean the VWN5
flavor by the bare name (libxc id 475), so bare B3LYP matches
across the two codes with no translation, and the keyword pairs
mirror each other exactly:
ORCA
! B3LYP↔ vibe-qcfunctional="b3lyp"(explicit spelling:"b3lyp5").ORCA
! B3LYP/G↔ vibe-qcfunctional="b3lyp/g"(PySCF-style spelling:"b3lypg"), the Gaussian / VWN-RPA flavor, ~10-15 mHa per heavy atom apart from the default.
Measured on H₂/STO-3G at 1.4 bohr: ORCA B3LYP −1.158669 vs
vibe-qc b3lyp −1.1586001; ORCA B3LYP/G −1.165470 vs vibe-qc
b3lyp/g −1.1654009. The ~69 µHa residual is not the grid:
it is ORCA’s default Coulomb approximation (see the next
paragraph). With ! NORI in the ORCA input the two B3LYP
energies agree to 3 nHa; the DFT grid (ORCA DefGrid2 vs vibe-qc
orca-defgrid3) accounts for 0.01 µHa of the difference. See
functionals.md § B3LYP.
RI-J / RIJCOSX is on by default in ORCA, off by default in
vibe-qc. ORCA ≥ 5 silently turns on Split-RI-J for pure
functionals and RIJCOSX for hybrids (its output says “RI-
approximation to the Coulomb term is turned on”), with the
def2/J fitting basis auto-attached. vibe-qc’s run_job
computes the exact four-index J and exact K unless you ask for
density fitting (density_fit=True plus a fitting basis). The
resulting offset is the Weigend RI-J error, up to ~50 µHa per
atom (0.02 to 0.04 mHa/atom measured on the H₂, CH₄, H₂O and NH₃
def2-SVP pairs; issue #567), so an unmatched comparison
disagrees at the tens-of-µHa level while the HF pair agrees to
1e-10 Ha. To compare like with like, either add ! NORI to the
ORCA input (exact J and K on both sides) or run vibe-qc with
density_fit=True and the same fitting basis (def2-universal- jfit matches ORCA’s def2/J).
%scf block¶
ORCA |
vibe-qc |
|---|---|
|
|
|
(vibe-qc returns a result object with |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Manual SAD with custom multiplicity per fragment + MOM (Phase 17h). Not a one-liner today. |
|
|
|
Force |
%basis block¶
ORCA |
vibe-qc |
|---|---|
|
Build a record carrying the override element ( |
|
|
|
|
|
|
%method block¶
ORCA |
vibe-qc |
|---|---|
|
|
|
implicit by calling |
|
|
|
call |
%pal block¶
ORCA |
vibe-qc |
|---|---|
|
|
%output block¶
ORCA |
vibe-qc |
|---|---|
|
Default, vibe-qc always prints the orbital table (up to |
|
Not directly, |
|
Always-on as of v0.8.x. The final geometry lands in |
|
|
|
Default, vibe-qc always reports Mulliken + Löwdin + Mayer in the post-SCF properties block. See properties. |
RIJCOSX in detail¶
ORCA’s flagship hybrid-DFT recipe is !PBE0 D3BJ DEF2-TZVP RIJCOSX TIGHTSCF. The vibe-qc equivalent is:
opts = vq.RKSOptions()
opts.conv_tol_energy = 1e-9 # TIGHTSCF
vq.run_job(
mol, basis="def2-tzvp", method="rks", functional="PBE0",
dispersion="d3bj",
density_fit=True, cosx=True,
aux_basis="def2-tzvp-jk", # default; auto-picked by basis name
rks_options=opts, # cosx_grid_level -1 auto-selects ORCA's GridX tier
output="rijcosx_pbe0",
)
The RIJCOSX SCF energy matches ORCA 6.1.1 to 0.26 mHa on glycine / def2-TZVP. The RIJCOSX analytic gradient matches finite differences of vibe-qc’s own RIJCOSX energy up to the neglected grid-motion band (about 2e-4 Ha/bohr on H2O/def2-TZVP); against ORCA’s EnGrad on glycine / def2-TZVP the componentwise RMS deviation is 3.3e-3 and the maximum 1.1e-2 Ha/bohr (|grad| 0.08696 versus 0.08703 Ha/bohr), the residual being the fitted-Fock response term plus grid-motion and weight derivatives that the COSX gradient omits. See Features for the current numbers and RIJCOSX SCF and analytic gradients on glycine for the walkthrough.
ECPs¶
ORCA’s ! DEF2-TZVP automatically loads the matching ECPs for
heavy atoms. vibe-qc keeps the orbital basis and the ECP as two
separate fields so you can mix-and-match (e.g. def2-TZVP orbital
with ecp46mdf if you want the Stuttgart MDF instead of the
def2-bundled SDD). The shipped vq.auto_ecp_centers(mol, basis_name)
helper covers the common “use the matching ECP for this bundled basis”
case:
# Manual recipe (always works):
opts.ecp_centers = [
vq.ECPCenter(Z=78, xyz=[0.0, 0.0, 0.0]),
]
opts.ecp_library = "ecp46mdf" # or "lanl2dz" for HW pseudopotential
# Auto recipe:
opts.ecp_centers, opts.ecp_library = vq.auto_ecp_centers(mol, "def2-tzvp")
What ORCA does that vibe-qc doesn’t (yet)¶
Most of the gaps listed in earlier editions of this guide have closed across v0.9.0–v0.15.x. The items below track the current state (August 2026, v0.15.x):
Coupled-cluster (DLPNO-CCSD(T)). Available since v0.14.0 (closed-shell) and v0.15.x (open-shell DLPNO-UCCSD(T)). Both routes carry the full truncation-control surface (PAO, PNO, weak-pair, occupied-coupling, TNO). See CCSD and coupled-cluster methods.
MR-CI / CASSCF / NEVPT2. CASSCF shipped in v0.11.0; CASPT2 / NEVPT2 / MS-CASPT2 with analytic gradients in v0.12.0. State-averaged CASSCF, selected-CI backends, and IC-CASPT2 gradients are available. See non-HF solvers.
TD-DFT and excited states. Shipped in v0.12.0 (Casida + TDA for RHF / RKS / UHF / UKS) with NTO analysis and spectra output. See the TD-DFT tutorial.
Range-separated hybrids beyond ωB97X / ωB97X-D. Shipped. ωB97X-V and ωB97M-V landed in v0.14.0 with VV10 nonlocal correlation. HSE06, CAM-B3LYP, and the RSH machinery shipped in v0.9.0. See functionals.
Meta-GGAs (some). TPSS, TPSSh, M06-L, M06-2X, SCAN, r²SCAN, and r²SCAN01 shipped in v0.9.0–v0.14.0 with τ-density analytic gradients. See functionals.
Composite “3c” methods. All seven composites (HF-3c, PBEh-3c, B97-3c, B3LYP-3c, r²SCAN-3c, ωB97X-3c, HSE-3c) shipped in v0.9.0. Use
method="hf-3c"etc. viarun_job. See composites.Periodic SCF in ORCA-style. ORCA does molecular only, but if you’re moving from ORCA to do solids, vibe-qc’s periodic stack is what you want (see periodic_systems).
What vibe-qc does that ORCA doesn’t (or does differently)¶
Things you gain by switching:
Auto-citations. Every job writes a
.bibtex/.referencespair; ORCA prints the citation list to the.outbut doesn’t give you the BibTeX file. See citations.Python scripting. Sweep over functionals / basis / k-mesh in a
forloop, not by maintaining N input files. The PySCF guide elaborates on the workflow shape.Periodic SCF. ORCA is molecular only; vibe-qc has 1D / 2D / 3D periodic HF and KS-DFT today.
MPL-2.0 license. Drop into any project, including closed-source software.
vqqueue. Submit jobs to a remote box with a vibe-qc-aware preflight; ORCA users typically run on SLURM/PBS viasbatch. See Submitting a job to a remote machine withvq.Pre-flight memory estimator. Aborts before the SCF starts if the dense-ERI / DFT-grid / MP2 working set exceeds available RAM. See memory.
Validating vibe-qc against ORCA¶
ORCA is the cross-validation reference for vibe-qc’s molecular
hybrid-DFT + RIJCOSX surface. The
parity_matrix_orca/
suite runs the same Atoms through vibe-qc and out-of-process
ORCA, parses both .out files, and produces a side-by-side
comparison artefact.
Quick parity check on your own system:
# 1. Run in ORCA:
orca my-input.inp > my-input.orca.out
# 2. Run in vibe-qc:
python my-input.py # writes my-input.out / .bibtex / etc.
# 3. Compare the two total energies:
grep "FINAL SINGLE POINT ENERGY" my-input.orca.out
grep "Total energy:" my-input.out
Expected agreement after the v0.8.0 B3LYP-convention alignment: ~µHa per atom for closed-shell HF / DFT; a few tenths of a mHa in total for RIJCOSX hybrids (0.26 mHa on glycine / def2-TZVP, the grid and fitting difference between the two COSX implementations); ~10 µHa per atom for D3(BJ) corrections (the dispersion is bit-identical because both codes use Grimme’s reference implementation).
See also¶
from_pyscf, migration guide for the other most-common starting code.
from_crystal, migration guide for the CRYSTAL family (solid-state focus).
user_guide/external_codes § ORCA, the out-of-process ORCA runner the parity suite uses.
user_guide/density_fitting, RIJCOSX, RIJK, four-index reference paths.
RIJCOSX SCF and analytic gradients on glycine
RIJCOSX SCF + gradient parity check against ORCA 6.1.1.
Cross-validating against ORCA, Psi4, and PySCF
full end-to-end same-Atoms-through-N-codes recipe.