AICCM quickstart¶
Status: experimental
Every AICCM variant (run_periodic_job(method="aiccm", variant=...) and the library drivers under vibeqc.periodic.ccm and vibeqc.periodic.chi) is an experimental route. Every Γ-line SCF driver emits vibeqc.AICCM2026DevAExperimentalWarning and every χ-CCM driver emits vibeqc.AICCM2026DevBExperimentalWarning; the .system manifest records method_status = "experimental" for every AICCM job run through run_periodic_job(method="aiccm", variant=...). Its numbers are research output, not validated results, and it is not part of the release gate. The label vocabulary is defined in Methods: theory and status.
Goal. Run the two smallest ab initio cyclic cluster model (AICCM) calculations vibe-qc offers, one on each development line, and read the construction identity each result carries.
Prerequisites. A built vibe-qc with its native core (no optional extras), and the cyclic cluster model tutorial for the Wigner-Seitz weighting these runs rest on. Both scripts finish in well under a minute on a laptop.
The two lines¶
The ab initio CCM ships as two independent development lines that are compared, not identified, with each other:
line |
selector |
construction |
|---|---|---|
Γ-CCM, |
|
the neutral finite-torus construction ( |
χ-CCM, |
|
the finite-translation-group character construction on a Γ-centred character mesh |
The two are compared at a declared common exchange-q=0 convention[1]. A difference between variants is a construction difference, never a convergence artefact; see the AICCM user guide for the selector rules.
Γ-CCM line: the four-centre union-and-weight lineage¶
The library driver builds a cyclic cluster of eight unit cells of an equidistant hydrogen chain (a 4 Å cell with two H atoms 2 Å apart) and runs closed-shell HF on the symmetric Wigner-Seitz four-centre weighting:
import numpy as np
from vibeqc import Atom, PeriodicSystem
from vibeqc.periodic.ccm import CCMSystem
from vibeqc.periodic.ccm.scf import run_ccm_rhf
BOHR = 1.0 / 0.529177210903 # bohr per angstrom
unit = PeriodicSystem(3, np.diag([4 * BOHR, 40.0, 40.0]), # chain along x,
[Atom(1, [0, 0, 0]), Atom(1, [2 * BOHR, 0, 0])]) # 40 bohr vacuum
ccm = CCMSystem(unit, (8, 1, 1), "sto-3g") # 8 cells = 16 H
rhf = run_ccm_rhf(ccm, method="aiccm2026dev-a")
print(f"Γ-CCM RHF E/atom = {rhf.energy_per_atom:.6f} Ha ({rhf.n_iter} iterations)")
Measured with vibe-qc 0.17.15 development build (main, 2026-10-11), on a loaded laptop:
Γ-CCM RHF E/atom = -0.395941 Ha (14 iterations)
The run took 0.4 s of wall time. The chain is declared as a dim=3 cell with
40 bohr of transverse vacuum, the form vibe-qc uses for wires everywhere
else in the manual; CCMSystem with the (8, 1, 1) extension builds the
same one-dimensional cyclic cluster from a PeriodicSystem(1, ...)
declaration, and the energy is identical to the printed digits in both
forms. The result’s backend field reads
ccm-fourcenter-dense-aiccm2026dev-a-rhf: the dense Python four-centre
tensor, which is a small-cluster validation path. run_ccm_rhf_scalable
runs the same weighting through the integral-direct C++ kernel and reaches
real three-dimensional cells.
The same lineage through the study harness, with the test set’s own H-chain geometry (a different cell from the snippet above):
cd studies/aiccm-2026
python run_case.py h-chain aiccm-hf
Recorded harness output (<system>__aiccm-hf.json; not re-measured in this
documentation pass):
{"system": "h-chain", "route": "aiccm-hf", "nrep": [8,1,1],
"energy": -1.116713, "energy_per_atom": -0.558357, "converged": true}
χ-CCM line: the finite-character construction¶
The same thing through the front door, on a 3-D H2 cell with the RI backend and a one-point character mesh:
import numpy as np
import vibeqc as vq
system = vq.PeriodicSystem(3, np.diag([8, 20, 20]),
[vq.Atom(1, [0, 0, 0]), vq.Atom(1, [1.4, 0, 0])],
multiplicity=1)
basis = vq.BasisSet(system.unit_cell_molecule(), "sto-3g")
r = vq.run_periodic_job(system, basis, method="aiccm", variant="chi",
aiccm_lattice_extension=(1, 1, 1),
aiccm_backend="ri",
max_iter=40, progress=False,
citations=False, write_xyz_file=False,
output_qvf=False, output="h2-chi-ri")
print(f"χ-CCM RHF/RI E/cell = {r.energy:.8f} Ha")
print(r.aiccm2026dev_b.finite_torus_convention)
Measured with vibe-qc 0.17.15 development build (main, 2026-10-11), on a loaded laptop (22.5 s of wall time, most of it the fit build):
χ-CCM RHF/RI E/cell = -1.12662561 Ha
The convention record printed on the second line names the construction
beside the number: ccm_approach='chi-ccm',
ccm_construction='finite-translation-group-character',
evaluation_representation='gamma-centred-character-mesh',
coulomb_kernel='3d-periodic-g0' and exchange_q0='bvk-ewald'. The study
harness writes the same record into its result JSON
(python run_case_b.py c-diamond rhf-ri --mesh 1 1 1). This is a
route-and-invariant check; the fitted χ-CCM energies stay
not-qualified in v1 (decision D93), so do not quote the total as a
validated number.
χ-CCM absolute-energy execution is 3-D only. Every 1-D and 2-D backend fails closed before SCF pending one shared wire/slab Coulomb convention.
What the output means¶
energy_per_atomon the Γ-CCM result is the total cyclic-cluster energy divided by the number of atoms in the cluster;energyis the whole cluster, divide byccm.n_cellsfor a per-cell value.r.energyon the front-door result is per unit cell. The.out“J/K method” line readsaiccm (chi) ...; experimentaland the.systemmanifest recordsmethod_status = "experimental",aiccm_variant = "chi"and the convention record above.Neither number is converged with respect to the cluster size. The cyclic cluster (or character mesh) is the convergence parameter, the real-space dual of a k mesh; grow it and watch the energy per atom settle.
Theory in brief¶
A cyclic cluster is a supercell of \(N = N_1 N_2 N_3\) unit cells closed into a Born-von Karman torus. Each atom interacts with its surroundings out to the boundary of its own Wigner-Seitz supercell (WSSC), and an atom that sits on that boundary is shared between equidistant images with the weight
where \(n_{\nu'}\) counts the translationally equivalent images of \(\nu\) inside the WSSC of \(\mu\) (Bredow, Thomas, Geudtner, Gerald, and Jug, Karl (2001). *Development of the cyclic cluster approach for ionic systems.* Journal of Computational Chemistry, **22**(1), 89–101. doi:[10.1002/1096-987X(20010115)22:1<89::AID-JCC9>3.0.CO;2-7](https://doi.org/10.1002/1096-987X(20010115)22:1<89::AID-JCC9>3.0.CO;2-7), Peintinger, Michael F. and Bredow, Thomas (2014). *The cyclic cluster model at Hartree-Fock level.* Journal of Computational Chemistry, **35**(11), 839–846. doi:[10.1002/jcc.23550](https://doi.org/10.1002/jcc.23550)). The three- and four-centre terms of the ab initio Fock operator extend this rule with averaged two-centre weights over the union of the participating WSSCs; the resulting Fock matrix is formally molecular, which is what lets the molecular SCF and post-HF kernels run on it unchanged. The finite-character χ-CCM line reaches the same torus from the other side: it minimises the energy over translation-commuting densities on the complete Γ-centred character mesh of the finite translation group. The cyclic cluster model tutorial derives the weights with their equations and the Madelung embedding of the semiempirical lineage (Noga, Jozef, Banacky, Pavol, et al. (1999). *Approaching bulk limit for three-dimensional solids via the cyclic cluster approximation: Semiempirical INDO study.* Journal of Computational Chemistry, **20**(2), 253–261. doi:[10.1002/(SICI)1096-987X(19990130)20:2<253::AID-JCC7>3.0.CO;2-9](https://doi.org/10.1002/(SICI)1096-987X(19990130)20:2<253::AID-JCC7>3.0.CO;2-9), Janetzko, Florian, Bredow, Thomas, and Jug, Karl (2002). *Effects of long-range interactions in cyclic cluster calculations of metal oxides.* The Journal of Chemical Physics, **116**(20), 8994-9004. doi:[10.1063/1.1473802](https://doi.org/10.1063/1.1473802), Janetzko, Florian, Köster, Andreas M., and Salahub, Dennis R. (2008). *Development of the cyclic cluster model formalism for Kohn-Sham auxiliary density functional theory methods.* The Journal of Chemical Physics, **128**(2), 024102. doi:[10.1063/1.2817582](https://doi.org/10.1063/1.2817582)).
Variations¶
Pick a formulation through the front door. Replace
variant="chi"with"real-gamma","neutral-bloch"or"four-center"; omittingvariantfails closed listing the four values.kpoints=stays an alias for the torus mesh but never both.Choose the SCF reference explicitly.
scf_reference="rhf"or"uhf"selects Hartree-Fock on every variant (and rejects afunctional=);"uhf"on a closed-shell singlet is the case the parity rule cannot express. Kohn-Sham is selected byfunctional=.Add correlation.
correlation="mp2"or"ccsd"onfour-centerand the two neutral variants,"dlpno-mp2"/"dlpno-ccsd"on the neutral variants, and"mp2"onchiunder its explicit fitted-source contract. The AICCM user guide lists what each arm cites.Reproduce the 2012 program.
run_ccm_rhf(ccm, method="p2014")andrun_ccm_rhf_scalable(ccm, method="p2014")run the four-centre construction as the 2014 paper’s program actually ran it, with its own nuclear attraction (nuclear_attraction="program-union", the default, or"printed-eq13"). It reproduces Table 2 of the paper to the printed digits and is diagnosis lineage, not a production route; the runner does not expose it.Size the cluster by a radius.
CCMSystem.from_interaction_range(unit, R_c, "sto-3g")derives the smallestnrepwhose WSSC encloses a sphere of radiusR_caround every atom;ccm_interaction_range_scanis the CCM analogue of a k-point convergence study.
Pitfalls¶
The library drivers default to
method="union12", the historical product weight whose Coulomb supermatrix carries a negative subspace on any basis with more than one function per centre (issue #242). Passmethod="aiccm2026dev-a"explicitly, as above; the front door always does.four-center,real-gammaandneutral-blochare not one method: the bare four-centre operator and the neutral torus differ by a Madelung-scale background on ionic cells, so never compare afour-centerenergy with a neutral one as if it were a fitting error.The two neutral producers refuse a cell declared 3-D whose transverse directions measure as pure vacuum (a gap above 25 bohr and above four times the shortest lattice vector), because the neutral construction then corrects for images that do not exist. The H-chain cell above passes through the dense four-centre driver, which carries no such guard; the neutral variants need
aiccm_allow_vacuum_padding=True, which warns and records the padded axes.χ-CCM fitted results stay
not-qualified(D93) whatever the SCF convergence; the convention record and the.systemmanifest are the evidence to keep, not the bare total.
What next?¶
you want to… |
go here |
|---|---|
Walk through step by step |
|
See every route and backend |
|
Select by variant, reference and correlation |
|
Run open-shell |
|
Debug a problem |
|
Run the full 28-system benchmark |