The cyclic cluster model (CCM)¶
The cyclic cluster model is vibe-qc’s signature approach to periodic systems, the feature the whole project was built around. Where the k-point routes (GDF, BIPOLE, GPW/GAPW) sample the Brillouin zone in reciprocal space, CCM stays in real space: it treats a crystal as a single finite cyclic cluster and recovers the infinite solid as that cluster grows. The two pictures are the same physics seen from opposite sides, the cluster-size \(\leftrightarrow\) k-mesh-density equivalence made concrete in the H-chain ancestor tutorial.
Status: experimental
The semiempirical cyclic cluster model (SECCM) is an experimental route
overall, and every ab initio CCM variant is experimental. The MSINDO route
run on this page is the most mature: its closed-shell CCM energies are
validated against reference MSINDO within the documented scope, and
run_job(method="seccm") (legacy spelling "ccm") is how you reach it. The
other SECCM adapters (DFTB0, SCC-DFTB, GFN2-xTB, PM6, OM2/OM3) are gated
experimental and library-only: they run full Wigner-Seitz weighted supercells
for closed-shell clusters, reproduce their molecular driver in the 1x1x1
limit, and their envelopes and call shapes are in the
semiempirical user guide; OM1-SECCM fails
closed because its analytic core-valence ECP is not implemented. The ab
initio CCM (AICCM) is experimental in all four variants: method="aiccm"
with variant="real-gamma" or "neutral-bloch" (Gamma-CCM, the neutral
finite-torus construction), variant="four-center" (the 2014
union-and-weight / Wigner-Seitz lineage in the same aiccm2026dev-a line)
and variant="chi" (chi-CCM, aiccm2026dev-b). Every AICCM run emits
AICCM2026DevAExperimentalWarning or AICCM2026DevBExperimentalWarning and
the .system manifest records method_status = "experimental"; Gamma-CCM and
chi-CCM are compared at a declared common exchange-q=0
convention[1], and no cross-approach delta is reportable yet.
Experimental numbers are research output, not validated results, and are not
part of the release gate. The label vocabulary is defined in
Methods: theory and status.
What a cyclic cluster is¶
Take a finite cluster carved from the crystal, a supercell of \(N\) atoms. In an ordinary cluster the atoms at the edge have the wrong environment (they face vacuum). CCM fixes this by giving every atom a Wigner-Seitz (WS) cell of its periodic surroundings (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)): each other atom of the cluster contributes through its single nearest translational image that falls inside that WS cell. Atoms sitting exactly on a WS face are shared between neighbours with a fractional weight, and the long-range electrostatics that a finite sum would miss are restored by a classical Ewald (Madelung) embedding (Ewald, Paul Peter (1921). *Die Berechnung optischer und elektrostatischer Gitterpotentiale.* Annalen der Physik, **369**(3), 253-287. doi:[10.1002/andp.19213690304](https://doi.org/10.1002/andp.19213690304), 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)).
The construction has one defining validity rule: for every atom, the WS weights of all the images inside its cell must sum to \(N-1\): every other atom appears exactly once, counting fractional shares. A cluster that violates this is simply not a valid cyclic cluster, and vibe-qc says so rather than returning a wrong number. As the cluster grows, the WS environment of each atom converges and the CCM energy approaches the true periodic limit (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)).
This is what makes CCM attractive for defects and surfaces: the cluster is the system, there is no Brillouin-zone sampling to converge, and a local perturbation (a vacancy, an adsorbate) is treated directly in real space against a correctly embedded periodic background.
Running CCM: bulk MgO¶
A bulk calculation passes three lattice vectors (so CCM3D). Coordinates and
lattice vectors are in Angstrom; madelung=True switches on the Ewald
embedding (recommended for ionic systems):
from vibeqc.semiempirical.methods.msindo_ccm import run_ccm
a = 4.21 # MgO lattice constant (Angstrom)
fcc = [(0, 0, 0), (0.5, 0.5, 0), (0.5, 0, 0.5), (0, 0.5, 0.5)]
Z = [12]*4 + [8]*4 # Mg4 O4 conventional cell
C = ([[fx*a, fy*a, fz*a] for fx, fy, fz in fcc]
+ [[(fx+0.5)*a, fy*a, fz*a] for fx, fy, fz in fcc])
trans = [(a, 0, 0), (0, a, 0), (0, 0, a)] # 3 vectors -> CCM3D (bulk)
res = run_ccm(Z, C, trans, madelung=True)
print(res.total_energy, res.n_iter, res.converged)
bulk MgO rocksalt CCM3D: E = -66.20383741 Ha (11 cycles) converged=True
The number of lattice vectors selects the dimensionality: 1 vector \(\to\) CCM1D (a polymer), 2 \(\to\) CCM2D (a surface), 3 \(\to\) CCM3D (bulk). Every MSINDO CCM energy vibe-qc reports here is validated out-of-process against reference MSINDO to better than 1 µHa.
The same job through the high-level run_job entry point, where the
cluster atoms live in a Molecule and the lattice rides in CCMOptions:
import vibeqc as vq
from vibeqc.semiempirical.methods.msindo_ccm import CCMOptions
res = vq.run_job(
mol, # Molecule with the Mg4 O4 cluster
method="ccm",
ccm_options=CCMOptions(
translations=[[a, 0, 0], [0, a, 0], [0, 0, a]],
madelung=True,
),
)
The flagship: surfaces and adsorption¶
CCM’s real strength is surface chemistry, vibe-qc’s flagship workflow. A two-vector cluster is a periodic slab (CCM2D), and an adsorption energy is just the difference of three CCM/MSINDO single points,
For a water molecule on the MgO(100) surface:
from vibeqc.semiempirical.methods import msindo
from vibeqc.semiempirical.methods.msindo_ccm import run_ccm
trans = [(2*a, 0, 0), (0, 2*a, 0)] # 2 vectors -> CCM2D (surface)
e_slab = run_ccm(Z_slab, C_slab, trans, madelung=True).total_energy
e_sysw = run_ccm(Z_slab + [8, 1, 1], C_slab + water_xyz, trans, madelung=True).total_energy
e_gas = msindo.run_msindo([8, 1, 1], water_gas_xyz).total_energy
e_ads = e_sysw - e_slab - e_gas
slab E = -66.439593 Ha
slab+H2O E = -83.468520 Ha
gas H2O E = -17.018209 Ha
E_ads = -0.010718 Ha = -6.73 kcal/mol (fixed geometry)
The forces that relax the adsorbate come from ccm_gradient_fd, and
ccm_optimize relaxes the adsorbate on a frozen slab to the relaxed
binding energy. The complete worked script (bulk, the MgO(100) slab, the
adsorption energy, the gradient, and a relaxed adsorbate) is
examples/semiempirical/11_msindo_ccm.py.
Scope today¶
The validated CCM route is the semi-empirical MSINDO (Ahlswede, Bernd and Jug, Karl (1999). *Consistent modifications of SINDO1: I. Approximations and parameters.* Journal of Computational Chemistry, **20**(6), 563–571. doi:[10.1002/(SICI)1096-987X(19990430)20:6<563::AID-JCC1>3.0.CO;2-2](https://doi.org/10.1002/(SICI)1096-987X(19990430)20:6<563::AID-JCC1>3.0.CO;2-2)) one, and each boundary is a clean error rather than a silent wrong answer:
Closed-shell (RHF) only, a cell with
multiplicity != 1raises.Single point through
run_job, relax geometries withccm_optimize(finite-difference forces, fixed Wigner-Seitz cells).Elements H to Xe (Z 1 to 54), the MSINDO engine’s INDO parameter scope; the analytic CCM gradient uses the native C++ kernels for H to Kr and the Python reference path for Rb to Xe.
How the ab-initio CCM works¶
The semi-empirical engine above and the ab-initio track share one idea: impose the cyclic Born-von-Kármán boundary conditions (the same conditions derived in k-points, the Brillouin zone, and Bloch phase) directly on a finite cluster, and evaluate every interaction in real space at the single point \(\Gamma\). What changes between the semi-empirical and the ab-initio case is which integrals appear and how far the cyclic sum has to reach.
The cyclic arrangement. The \(N = N_1 N_2 N_3\) atoms carved from the crystal are the real atoms of the cluster, the unit cell; the translation vectors \(\mathbf{t}\) generate virtual images of them. Closing the cluster into a ring (1D), a torus (2D), or a hypertorus (3D) replaces each atom’s open environment with the periodic one it would have in the solid. Because translational symmetry survives, the atomic-orbital basis maps onto a Bloch basis (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)),
and at \(\mathbf{k}=0\), keeping only the reference cell, \(\phi_\mu^{\mathbf{k}} \approx \mu^{0}\): a cyclic-cluster basis is directly comparable to a molecular one, which is what lets molecular post-HF machinery carry over unchanged. The \(N_j\) are odd, since translation always adds matched \(+\mathbf{t}_j\) and \(-\mathbf{t}_j\) images.
The Wigner-Seitz weighting (the heart of the method). Each atom interacts only out to the boundary of its own Wigner-Seitz supercell, a hard cutoff at \(\pm\tfrac12\mathbf{t}\). An atom sitting exactly on that boundary is shared between equidistant images, so a naive sum counts its interaction more than once. The fix that keeps the model exact is to weight every such interaction by the number \(n_{\nu'}\) of translationally equivalent images of that atom inside the Wigner-Seitz supercell (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)),
This one rule does two things at once: it enforces charge neutrality and it preserves the point symmetry of the cluster. It is the integral-level form of the \(N-1\) validity rule stated above, every other atom contributes exactly once, counting fractional shares.
Why the ab-initio reach is longer. In the semi-empirical CCM only one- and two-center terms appear, and the \(\pm\tfrac12\mathbf{t}\) reach suffices. The ab-initio Fock operator adds three-center (nuclear attraction) and four-center (Coulomb and exchange) integrals, whose weights are built by averaging the two-center weights over the union of the participating atoms’ Wigner-Seitz cells (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); an earlier three-center weighting for Kohn-Sham auxiliary DFT is that of 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)). The three-center term needs a full \(\pm\mathbf{t}\) translation of the cluster; the four-center term reaches \(\pm\tfrac32\mathbf{t}\) and needs translations out to \(\pm2\mathbf{t}\). This growth of the interaction radius from \(\pm\tfrac12\mathbf{t}\) to \(\pm\tfrac32\mathbf{t}\) is the central complication the ab-initio CCM has to solve and that the semi-empirical model never faced.
With the weighted integrals in hand, the cyclic Hartree-Fock-Roothaan equations and the total energy take their familiar molecular form,
and are solved self-consistently exactly as for a molecule. That structural identity, a molecular SCF over a set of weight-corrected integrals, is precisely why the v2.x track can climb from HF to MP2 to coupled cluster: each correlated method is applied to what is, formally, a molecular reference. The full derivation, including the three- and four-center weighting tables, is in the project author’s dissertation (see the references below).
The road to ab-initio CCM¶
The semi-empirical engine is the proving ground; the ab-initio CCM is now implemented as two independent, actively developed lines that are being compared head-to-head:
Γ-CCM /
aiccm2026dev-a, the neutral finite-torus construction, produced byvariant="real-gamma"andvariant="neutral-bloch"; the 2014 union-and-weight / Wigner-Seitz integral-weighting construction is kept in the same development line asvariant="four-center". Ships with HF, KS-DFT (any libxc functional), MP2, UMP2, CCSD(T), analytic gradients, and a suite of properties (gap, charges, dipole, forces). The same Python namespace also exposes neutral fitted-torus UCCSD(T) and DLPNO controls; their module location does not assign them the Γ-CCM construction.χ-CCM /
aiccm2026dev-b,variant="chi", the finite-translation-group character (Γ-centred character-mesh) CCM. Ships with RHF/RKS/UHF/UKS via four-center, RI, and RIJCOSX backends in 3D, plus finite-torus RI-MP2, DLPNO-MP2, DLPNO-CCSD, and DLPNO-CCSD(T) in 3D, with explicit finite-torus convention recording. Every 1D/2D absolute-energy backend fails closed pending a shared wire/slab Coulomb convention.
Both lines are experimental (see the status box at the top of this page)
and under active head-to-head study, but no Γ-CCM/χ-CCM approach delta is
currently reportable. Their separate routes are
benchmarked
against CRYSTAL23 on the 28-system AICCM-2026 benchmark test set
(studies/aiccm-2026/).
The full track is in the roadmap.
References¶
The cyclic cluster model in vibe-qc follows:
Bredow, Geudtner and Jug, J. Comput. Chem. 22, 89 (2001), the semi-empirical CCM that the current engine ports.
Peintinger and Bredow, J. Comput. Chem. 35, 839 (2014), doi:10.1002/jcc.23550, the cluster-choice problem and the ab-initio CCM foundation.
The ab-initio derivation above, the Wigner-Seitz weighting of the two-, three-, and four-center integrals, is worked out in full in the primary source: M. F. Peintinger, Elektronenstruktur von Molekülkristallen (dissertation, Rheinische Friedrich-Wilhelms-Universität Bonn, 2013), of which the 2014 paper is the published account.
A method="ccm" run writes the two papers into the .bibtex sidecar
automatically; see auto_citations.
See also¶
CCM reference, the conceptual and API reference (keywords, defaults, and the theory in depth).
The H-chain CCM ancestor, the cyclic-cluster \(\leftrightarrow\) Born-von-Karman / k-points equivalence on a 1D chain.
MSINDO, the semi-empirical engine CCM is built on.
k-points, the Brillouin zone, and Bloch phase, the reciprocal-space alternative to CCM.
Choosing a periodic method, the k-point production routes (GDF, BIPOLE, GPW/GAPW).