AICCM aiccm2026dev-a follow-on - derivation document¶
D89 construction-boundary notice (2026-07-15). Γ-CCM (
aiccm2026dev-a) is the union-and-weight/Wigner-Seitz integral-weighting construction; χ-CCM (aiccm2026dev-b) is the distinct finite-translation-group character construction. Neutral GDF/Bloch and real-Gamma routes are same-Hamiltonian representation controls only after a block-circulant finite Hamiltonian has been specified. They are not Γ-CCM production routes and do not prove Γ-CCM equals χ-CCM. In the historical text below,CCM == SCM-Γand Fourier/Wannier statements apply only within the explicitly chosen Hamiltonian and occupied space. The geometry, localization, symmetry, and local-correlation measurements remain route-specific validation records; they are not cross-construction equivalence evidence.D90 binding clarification (2026-07-16). The neutral-only UCCSD(T) and DLPNO implementations described below are A-namespace neutral fitted-torus correlation controls. Their API names, module location, and solver ancestry assign neither Γ-CCM nor χ-CCM construction identity. Historical uses of “CCM UCCSD(T)” or “CCM DLPNO” below name that cyclic-cluster control stack, not the union-and-weight construction.
Math + validation record for the three follow-on features on the
aiccm2026dev-a cyclic-cluster line: (1) localization, (2) DLPNO natural
orbitals, (3) space-group symmetry. Each sits behind its own option and
does not change existing behavior. Decisions + open-questions log:
handovers/HANDOVER_AICCM_FOLLOWON.md.
Every numerical claim here is grounded in a real run (test file named per section). SI/atomic units (bohr, hartree).
Interaction-range parameterization - the real-space dual of k-point sampling¶
A.1 The object¶
Historically the cluster is given as an explicit supercell mesh
nrep = (N₁, N₂, N₃). The physically meaningful knob, however, is how far the
interactions reach - a real-space cutoff R_c. The finite translation group
for a cluster of size nrep has a geometrically dual Γ-centred
(N₁,N₂,N₃) character mesh. Choosing the cluster by a real-space radius is
therefore a mesh-density parameterization, without asserting that two different
construction maps produce the same Hamiltonian. We let the user supply the unit
cell + R_c and derive the minimal nrep.
A.2 What “reach R_c” means geometrically - the WS inscribed sphere¶
In the CCM, atom A interacts with the minimum image of atom B inside A’s
Wigner-Seitz supercell (WSSC). The set of displacements captured at full weight,
in every direction is the largest sphere inscribed in the WS cell. So “the
interactions reach R_c around every atom” is precisely
r_in(L_c) ≥ R_c , L_c = {N_i a_i} the cluster lattice.
The inscribed-sphere radius equals half the shortest lattice vector,
r_in = λ₁/2. Proof: x lies in the WS (Voronoi) cell iff x·R ≤ |R|²/2 for
every lattice vector R; for |x| = r the binding constraint is along R̂,
giving r ≤ |R|/2, minimised by the shortest R. The nearest Voronoi face is
the perpendicular bisector of the shortest lattice vector. Hence the condition is
λ₁(L_c) ≥ 2 R_c .
A.3 The per-direction formula and why it is rigorous (not a guess)¶
Let d_i = V/|a_j × a_k| be the unit-cell interplanar spacing along a_i (the
spacing between successive (a_j,a_k) planes; d_i = 1/|b_i| with b_i the
2π-free reciprocal vector). The cluster interplanar spacing is D_i = N_i d_i.
Project any nonzero cluster vector R = Σ_i m_i N_i a_i onto the unit reciprocal
direction b̂_i: since a_i·b̂_i = d_i and a_j·b̂_i = 0 (j≠i),
|R| ≥ |R·b̂_i| = |m_i| D_i ⟹ λ₁(L_c) = min_{R≠0}|R| ≥ min_i D_i .
Therefore choosing
N_i = ⌈ 2 R_c / d_i ⌉ ⟹ D_i ≥ 2R_c ∀i ⟹ λ₁ ≥ 2R_c ⟹ r_in ≥ R_c . ✓
The bound λ₁ ≥ min_i D_i makes the per-direction formula a sufficient
condition for the inscribed-sphere guarantee - it can never under-shoot. It is
tight (equality λ₁ = min_i D_i) for orthogonal cells, and conservative for
oblique cells (where λ₁ can exceed min_i D_i, so the achieved r_in is
slightly larger than R_c - never smaller). This is the rigorous content behind
the heuristic N_i ≈ ⌈2R_c/d_i⌉.
A.4 The duality constant¶
A cyclic cluster of WS “diameter” 2 R_c is a BvK torus, so its allowed k-points
are spaced by Δk = 2π/(2R_c) = π/R_c (2π reciprocal convention). Equivalently,
per direction, N_i = ⌈2R_c/d_i⌉ = ⌈|b_i|/(π/R_c)⌉ = ⌈|b_i|/Δk⌉ - exactly the
uniform-k-density rule. So:
real-space cutoff R_c ⟺ k-spacing Δk = π/R_c ⟺ cluster (N₁,N₂,N₃) ≡ MP mesh (N₁,N₂,N₃).
Larger R_c ⇔ denser k-mesh. A radius scan is the CCM analogue of a k-point
convergence study.
A.5 Implementation + validation¶
Geometry (vibeqc.periodic.ccm.wigner_seitz): interplanar_spacings,
shortest_lattice_vector_length, wsc_inscribed_radius,
nrep_for_interaction_range, kspacing_for_interaction_range. API
(CCMSystem): interaction_range= (bohr) / interaction_range_ang= (Å), the
from_interaction_range(unit, R_c, basis, units=...) constructor, and the stored
diagnostics interaction_range, wsc_inscribed_radius, kspacing_equiv;
explicit nrep remains the advanced override. Scan helper
(ccm_interaction_range_scan) → InteractionRangeScan (radius → energy/atom,
with converged_radius(tol) and JSON as_records()).
Validated (tests/test_ccm_interaction_range.py):
shortest_lattice_vector_length/wsc_inscribed_radiusmatch a brute-force ±6-shell oracle to ≤1e-9 on cubic / ortho / tetragonal / fcc-prim / bcc-prim / hexagonal / triclinic / vacuum-chain lattices.Inscribed-sphere gate
r_in(L_c) ≥ R_cand the per-direction boundmin_i N_i d_i ≥ 2R_chold for every (lattice, R_c) in the battery above - the numerical proof of A.3, not an assertion.Orthogonal bound is tight: ortho(3,5,7) at R_c=7 →
nrep=(5,3,2).from_interaction_rangeand explicitnrepgive bit-identicalS^CCMand HF energy; the Å convenience matches bohr; ambiguous specs raise.H₂-chain (6-bohr cell, STO-3G) radius scan converges monotonically; the dual k-mesh per point equals the cluster mesh.
Task 1 - Localization of the canonical crystalline orbitals (Wannier)¶
1.1 The object¶
A converged Γ-CCM SCF returns occupied orbitals ψ for its selected finite
Hamiltonian on the N = N₁N₂N₃-cell supercell. They are
S^CCM-orthonormal:
Σ_{μν} C†_{μi} S^CCM_{μν} C_{νj} = δ_{ij}.
1.2 Localization is a unitary rotation within the occupied space¶
The textbook cell-periodic Wannier construction is the discrete back-transform over the cluster net,
w_n(r − R) = (1/N) Σ_k e^{−i k·R} ψ_{n,k}(r), k ∈ equivalent net, R ∈ L_c,
which produces N translationally-equivalent Wannier functions per band. The
block-Fourier matrix U_{(nk),(mR)} = (1/√N) e^{−ik·R} δ_{nm} is unitary, so
the Wannier set spans the same occupied space as {ψ_{n,k}}. For one already
specified block-circulant finite Hamiltonian, the real-supercell occupied set
and its character blocks are related by that unitary. Localizing the
real-supercell occupieds therefore chooses a localized gauge within the same
specified occupied space, with no explicit k-sum. This conditional same-H
statement does not equate Γ-CCM with χ-CCM or a neutral GDF control.
Because the rotation C_loc = C_occ U stays inside the occupied space, the
one-particle density P = Σ_i^{occ} C_i C_i† is invariant, and with it every
ground-state observable, including the total energy. This is the hard
correctness gate.
1.3 Gauge fixing (spread minimization)¶
The Marzari-Vanderbilt spread functional is
Ω = Σ_i [⟨w_i|r²|w_i⟩ − ⟨w_i|r|w_i⟩²]. Two gauges are offered, reusing the
validated molecular/periodic localizer
(vibeqc.periodic_localise.localise_periodic_gamma):
Pipek-Mezey - maximize
Σ_i Σ_A (Q_i^A)²(Mulliken populations). No position operator ⇒ PBC-safe in every regime, including orbitals that wrap the cluster boundary. Default.Foster-Boys - maximize
Σ_i ⟨w_i|r|w_i⟩²via the home-cell dipole integrals. Faithful (with the reported centroids/spreads) only for orbitals that do not wrap the boundary (molecule-in-a-box / dilute / large cell).
The reported centroids = ⟨w_i|r|w_i⟩ and spreads = ⟨w_i|r²⟩ − ⟨w_i|r⟩² use
the plain (home-cell) position operator, so for a dense cell they fold into the
home cell (a Wannier on cell R reports its in-cell center). The Resta
periodic operator ⟨μ|e^{−iG·r}|ν⟩ that would unwrap them is an open item
(§ decisions log); Pipek-Mezey localization itself is unaffected.
1.4 Implementation + validation¶
vibeqc.periodic.ccm.localise_ccm(ccm_result, ccm, method=...) →
PeriodicWannierResult (C_loc, U, centers, centroids, spreads,
charges, localization). localization_density_residual(ccm_result, w) is the
gate ‖P_loc − P_canonical‖_F.
Validated (tests/test_ccm_localize.py), dense 1-D H₂ chain (6-bohr cell,
STO-3G, nrep (3,1,1), 3 occupied):
quantity |
Pipek-Mezey |
Boys |
|---|---|---|
density residual |
2.4e-16 |
3.0e-16 |
unitarity |
6.7e-16 |
4.9e-16 |
objective (initial → final) |
0.644 → 1.500 |
109.5 → 181.5 |
spreads Ω_i (bohr²) |
~2.39 |
~2.39 |
Wannier center z (bohr) |
0.7 (H₂ bond midpoint) |
0.7 |
real |
yes |
yes |
So the rotation is exactly density/energy-preserving (machine ε), genuinely localizes, gives real orbitals for the centrosymmetric cell, and places the Wannier centers on the H₂ bond midpoint - the expected Wyckoff/bond position.
1.5 Open (M2-M4, see decisions log)¶
Explicit multi-k U(k)/M(k,b) route; Resta operator (unwrapped
centroids/spreads for dense crystals); IAO/IBO path (Knizia); aliasing
diagnostics + spread-vs-cluster-size convergence; emit in the exact rep Task 2
(DLPNO) consumes.
Task 3 - Space-group symmetry (spglib)¶
3.1 The cluster-invariant subgroup¶
spglib analyzes the crystal (unit cell) space group G, giving operations
{W|w} (integer rotation W in the unit-cell fractional basis + fractional
translation w). Each op is converted to Cartesian, R = L_u W L_u⁻¹,
t = L_u w (L_u = unit lattice, columns aⱼ). The operations usable on the
cyclic cluster are the cluster-invariant subgroup G_c ⊆ G: those (R,t)
that map the cluster lattice L_c = {N_j a_j} onto itself modulo L_c. For a
point op, R(N_j a_j) = N_j Σ_k W_{kj} a_k ∈ L_c iff N_j W_{kj}/N_k ∈ ℤ - so
for equal nrep in symmetry-related directions all crystal point ops survive;
unequal nrep keeps the compatible subset. Tested operationally by
symmetry_ao.atom_permutation_under_op on the supercell (it raises iff (R,t)
is not a cluster symmetry).
3.2 AO representation¶
For each g ∈ G_c the AO matrix is P = (atom permutation) × (Wigner-D blocks)
from symmetry_ao.build_ao_permutation_matrix(basis, R, perm) - real solid
harmonics, wigner_d_real(ℓ, R) per shell, with improper rotations factored
through the ℓ-parity. At Γ the fractional translation contributes phase 1, so
P (permutation + rotation) is the full cluster-AO representation.
3.3 Validation + a proven finding (tests/test_ccm_symmetry.py)¶
The AO maps are correct: S^CCM and T^CCM are invariant Pᵀ M P = M to
machine precision under every g ∈ G_c, including the non-symmorphic glide/screw
ops of diamond (Fd-3m):
system |
SG |
crystal/cluster order |
‖PᵀSP−S‖ |
‖PᵀTP−T‖ |
‖PᵀVP−V‖ (rel) |
|---|---|---|---|---|---|
MgO (Fm-3m) |
225 |
48 / 48 |
2e-15 |
1e-14 |
0.077 (4.6e-4) |
C-diamond (Fd-3m, non-symmorphic) |
227 |
48 / 48 |
2e-15 |
2e-15 |
0.44 (7.9e-3) |
NaCl (Fm-3m) |
225 |
48 / 48 |
5e-15 |
- |
0.044 |
Finding. The union three-center V^CCM (bare-1/r, weight
ω_μν·½(ω_μC+ω_νC)) is not crystal-symmetric - ~5e-4 (MgO) → ~8e-3
(C-diamond) relative. S and T being exactly invariant isolate V as the sole
culprit (the maps are validated); the anchor-bridge breaks spatial symmetry
just as eq-18 broke permutation symmetry.
Resolution (proven). The neutral Ewald V_ne IS crystal-symmetric
(‖PᵀVP−V‖/‖V‖ ≈ 2e-8, lattice-sum tolerance) - last rows below:
nuclear operator |
MgO rel breaking |
C-diamond rel breaking |
|---|---|---|
union three-center (bare-1/r) |
4.6e-4 |
7.9e-3 |
neutral Ewald |
2.3e-8 |
5.0e-9 |
This is the spatial analogue of the Madelung gap (#16): bare-1/r union
weights break both permutation symmetry (four-center, fixed by §13’s
ccm_eri_symmetric) and spatial symmetry (three-center V), and the neutral Ewald
kernel fixes both. So the symmetric Hamiltonian already exists - h = T + V_ne
with the neutral cderi four-center - and is the natural target for symmetry
exploitation.
3.4 Plan (M2-M3, decisions log)¶
Symmetry exploitation rides the neutral / GDF route (symmetric h): petite-
list symmetry-unique shell pairs/quartets → representative integrals → scatter
via P + symmetrize Fock; fold the k-net to the IBZ with weights; the exact
E/Fock == symmetry-off gate then holds because h is symmetric. (The bare-union
route stays available but its h is not crystal-symmetric, so its symmetrized
energy would differ - a documented limitation, not a target.)
Task 2 - DLPNO natural orbitals (PAO → PNO)¶
Foundations now in place: localized occupieds (Task 1), the symmetric neutral route + symmetry-unique pair orbits (Task 3).
2.1 Projected atomic orbitals (M1)¶
The local virtual basis is the AO space projected out of the occupied space (Pulay; Riplinger-Neese §II.D):
C_PAO = (I − C_occ C_occᵀ S^CCM) · A ,
canonical-orthogonalized within a domain (eigenvectors of Q S Q above a
linear-dependence floor). The occupied space projector C_occ C_occᵀ is
invariant under occupied rotations, so the full-cell PAO set is identical whether
the canonical or the localized (Task 1) occupieds are used - the localized
occupieds enter at the pair-domain stage (M2). ccm_pao(ccm_result, ccm) reuses
vibeqc.dlpno.pao.
Validated (tests/test_ccm_dlpno.py), dense 1-D H₂ chain (STO-3G, nrep (3,1,1)):
PAOs S^CCM-orthogonal to the occupied space (max|C_occᵀ S C_pao| = 2.9e-16);
n_pao = 3 = nbf − n_occ (full virtual, no linear dependence); occupieds + PAOs
span the full space (rank 6/6).
2.2 DLPNO-MP2 (M2, DONE)¶
ccm_dlpno_mp2(ccm, scf_result, *, cderi=, localize=, tcut_pno=, tcut_mkn=, …)
→ CCMDLPNOMP2Result. It mirrors the validated molecular DLPNO-MP2
(vibeqc.dlpno.mp2), reusing its component functions (build_atom_basis_map,
build_projection_matrix, select_domain_atoms_mulliken,
semicanonical_pao_basis) with S^CCM / F^CCM injected and the (ia|jb)
integrals density-fit from the neutral cderi L[P,μν] (B_half[P,i,ν] = Σ_μ C_loc[μ,i] L[P,μν], so K_ab = Σ_P B[P,i,a] B[P,j,b]).
Pipeline per pair (i,j): Mulliken domain (tcut_mkn) → semicanonical PAOs
(eigh of F in the domain, S^CCM-orthonormal) → first-order amplitudes
T_ab = K_ab/(f_ii+f_jj−ε_a−ε_b) → PNOs (eigvecs of the pair density
½(TTᵀ+TᵀT), occupation-threshold tcut_pno) → quasi-canonicalize → coupled
LMP2 residual R_ij = K_ij + (ε_a+ε_b)T_ij − Σ_k[F_ik P(T_kj) + F_kj P(T_ik)]
with neighbour amplitudes projected via S_pq = V_pᵀ S^CCM V_q. For canonical
occupieds F_oo is diagonal and the residual converges in one step; for
localized occupieds the S^CCM-link coupling restores the canonical sum.
Reference = neutral (per the -b-critique correction). The Madelung
background shifts the occ-virt denominators, so bare-vs-neutral correlation do
not agree (§ decision log): the DLPNO-MP2 reference is the neutral SCF
(run_ccm_rhf(ccm, eri=ccm_eri_neutral(ccm))) + neutral cderi. No
Madelung-robustness is claimed.
Validated (tests/test_ccm_dlpno_mp2.py, 11/11; H₂-chain STO-3G).
gate |
result |
|---|---|
no-truncation, canonical occupieds |
|
no-truncation, Pipek-Mezey occupieds |
|
no-truncation, Boys occupieds |
|
no-truncation, (4,1,1) = 10 pairs |
|
PNO truncation |
monotone error 5e-6 → <1e-7; |
The no-truncation limit reproducing canonical CCM MP2 to machine ε - for canonical and localized occupieds - is the hard correctness proof (not an assertion).
2.3 DLPNO-CCSD(T) (M3, DONE)¶
ccm_dlpno_ccsd(ccm, scf_result, *, cderi=, g_neutral=, localize=, tcut_pno=, tcut_mkn=, compute_triples=, n_frozen=) → CCMDLPNOCCSDResult
(vibeqc.periodic.ccm.dlpno_ccsd). Subspace-projected DLPNO-CCSD(T): the
per-pair PNOs (_build_ccm_pno_pairs, shared with MP2) are merged into a single
union virtual space V_trunc, and vibe-qc’s own CCM CCSD engine
(ccsd.py _ccsd_iterate + _triples) runs in {occ, V_trunc}.
Union space. Stack the pair PNO coefficients into
W, canonical-orthogonalize againstS^CCM(eigvecs ofWᵀS^CCM Wabovepno_lindep), then semicanonicalize (diagonalize the Fock within the space) →V_trunc,ε_v.Why exact at no truncation. The CCSD engine assumes a diagonal Fock, so we use the canonical occupieds (occ-occ block diagonal) and the semicanonical
V_trunc. Every PNO is built from PAOs projected out of the full occupied space, soV_trunc ⊥_S occand the occ-virt Fock block vanishes: the MO setC_sub = [C_occ | V_trunc]is orthonormal with a block-diagonal Fock. Attcut_pno = tcut_mkn = 0each pair’s PNOs span the full virtual block, so the union does too -V_truncis then a unitary rotation of the canonical virtuals, and CCSD(T) (invariant to occ/virt unitary rotations) equals the canonical CCM CCSD(T).Reference = neutral (the
g_eff = Σ_P L⊗Lfour-center, per the decision log): both the SCF reference and the CCSD MO integrals.
Validated (tests/test_ccm_dlpno_ccsd.py, 9/9; H₂-chain STO-3G).
gate |
result |
|---|---|
no-truncation, canonical occupieds |
|
no-truncation, Pipek-Mezey |
|
no-truncation, Boys |
|
no-truncation, (4,1,1) |
|
PNO truncation |
|
The no-truncation == canonical CCM CCSD(T) limit (CCSD + (T), all gauges) is the hard correctness proof.
Scope note (honest). The union-PNO space truncates the global virtual space, so it shrinks only when a virtual direction is unimportant to every pair; on the small, well-coupled validation chains the union stays full-dimensional (correct, not a bug). Per-pair-coupled DLPNO-CCSD (separate per-pair PNO spaces, the more aggressive truncation) is the M3b refinement.
2.4 Open (M3b-): per-pair-coupled DLPNO-CCSD; symmetry-unique pairs¶
(i, jR) from Task 3’s orbit reduction; open-shell U-DLPNO (Task D). Refs:
Nejad et al. 2025; periodic DLPNO literature.
Task C - Derivable properties on the BvK torus¶
vibeqc.periodic.ccm.properties. Which one-particle observables are well defined
on a neutral finite Born-von-Karman torus, and which need care - implemented in
priority order of how cleanly they are defined.
C.1 HOMO-LUMO / fundamental gap (well defined)¶
ccm_homo_lumo_gap(scf_result, ccm) → CCMGap. It reports
gap = ε[n_occ] − ε[n_occ−1] for the selected finite Hamiltonian. A
block-circulant Hamiltonian has the same spectrum in its real-supercell and
character representations, but a bulk-gap interpretation requires
route-specific convergence. Validated: equals the raw-spectrum gap to machine
ε; H₂-chain (3,1,1) finite-cluster gap 1.14 Ha.
C.2 Mulliken / Löwdin populations (well defined)¶
ccm_mulliken_charges / ccm_lowdin_charges → CCMPopulation. Basis-local
partitions of the cluster density with the cyclic overlap S^CCM:
q_A = Z_A − Σ_{μ∈A}(D S^CCM)_μμ (Mulliken) and the S^{1/2} D S^{1/2}
analogue (Löwdin). Charges sum to the cluster charge (≤1e-9). The per-cell charge
is the translational image-average; translational_spread (max image-to-image
variation) is a symmetry diagnostic - ≈ 6e-4 for the homonuclear H₂ chain, but
~0.3 for the ionic LiH chain on the bare four-center, concrete evidence that
ionic systems need the neutral reference (the bare-1/r four-center breaks cyclic
symmetry for ionic cells; § 2.0 decision log). LiH per-cell charges have the
correct sign (Li⁺ / H⁻).
C.3 Electric dipole (care needed - Resta)¶
ccm_dipole(scf_result, ccm) returns the finite-cluster electric dipole
μ = Σ_A Z_A R_A − Tr(D ⟨r⟩). This is not the bulk polarization: the position
operator is not legitimate on a torus (Resta 1998) and the plain home-cell
⟨μ|r|ν⟩ wraps for boundary-crossing orbitals (the Wannier-centroid aliasing of
§ 1.3). Faithful only for non-wrapping (dilute) clusters; for a dense crystal it
is a symmetry indicator (≈ 0 for centrosymmetric/neutral - verified ≤1e-8 on the
H₂ chain). Bulk polarization needs the Berry-phase / Resta operator (open item).
C.4 Nuclear gradient / forces (numerical; analytic deferred)¶
ccm_numerical_gradient(ccm, *, runner=, method=, h=) → (n_cell_atoms, 3)
central-difference dE_total/dR. Displacing a unit-cell atom propagates to every
image (the supercell is built by replication), so this is the gradient under the
cyclic constraint; the force is −gradient. Well defined and tractable (no
analytic WSSC-integral derivatives), 6·n_cell_atoms SCF evaluations.
Validated: (i) the per-cell forces sum to ≈ 0 (translational invariance, exact);
(ii) in the isolated limit ((1,1,1), 80-bohr box) it reproduces vibe-qc’s
molecular analytic RHF gradient to 8.9e-8 (finite-difference accuracy). The
analytic WSSC-weighted gradient (differentiating S^CCM, h^CCM, the neutral
four-center) is the open follow-on.
C.5 Open¶
Resta periodic position operator (bulk polarization + unwrapped dipoles, shared with Task 1 M4); analytic CCM gradient; open-shell (UHF/UKS) gap + populations (Task D - populations/dipole already accept an unrestricted density via the total-density accessor; only the spin-resolved gap needs wiring).
Task D - Open-shell parity¶
The unrestricted analogues of the RHF-path methods, on the neutral reference.
D.1 UCCSD(T) (run_ccm_uccsd, DONE)¶
vibeqc.periodic.ccm.uccsd.run_ccm_uccsd(ccm, uhf_result=, *, cderi=, compute_triples=) → CCMUCCSDResult. The open-shell sibling of run_ccm_ccsd:
it runs vibe-qc’s own spin-orbital UCCSD(T) engine
(vibeqc.dlpno._ccsd_ref.run_ref_uccsd, the in-repo anchor for cpp/uccsd.cpp)
on the UHF-CCM reference, fed the CCM neutral cderi transformed into the α / β
MO bases (B^σ[P,p,q] = Σ_μν C^σ[μ,p] L[P,μν] C^σ[ν,q], so
(pq|rs)^{σσ'} = Σ_P B^σ_pq B^{σ'}_rs) plus the diagonal canonical UHF Fock.
The neutral route is the natural one: run_ref_uccsd needs an RI factorization
of the four-center, and the neutral g_eff = Σ_P L⊗L is exactly that (the
bare-1/r four-center is non-separable) and, per § 2.0, is the required
correlation reference for ionic systems.
Validated (tests/test_ccm_uccsd.py):
Closed-shell consistency - on an even-electron closed-shell cluster
run_ccm_uccsdreproduces the closed-shellrun_ccm_ccsdon the same neutral four-center to ≤1e-8 (CCSD and (T) each; the UHF collapses to RHF, αα = ββ). This exercises the full spin-orbital machinery + the α/β B-tensor transform.Open-shell - a genuine doublet cluster (3-H chain,
n_α ≠ n_β) converges with negative correlation.
D.2 Unrestricted properties (DONE)¶
The population (ccm_mulliken_charges / ccm_lowdin_charges) and dipole
(ccm_dipole) routines already consume an unrestricted density (the total-density
accessor sums density_alpha + density_beta). The spin-resolved gap is now
wired in ccm_homo_lumo_gap: for a UHF/UKS result it returns
LUMO − HOMO with HOMO = max(ε^α[n_α−1], ε^β[n_β−1]),
LUMO = min(ε^α[n_α], ε^β[n_β]) (spin="unrestricted"). Validated on the
doublet 3-H chain (tests/test_ccm_properties.py).
D.3 U-DLPNO (DONE - DLPNO-UMP2 + DLPNO-UCCSD(T))¶
The open-shell local-correlation analogue of ccm_dlpno_mp2 / ccm_dlpno_ccsd,
on the neutral-reference UHF-CCM wavefunction. Both reuse the molecular
open-shell DLPNO PNO machinery (vibeqc.dlpno.ump2._pnos) and the spin-orbital
UCCSD(T) engine (vibeqc.dlpno._ccsd_ref.run_ref_uccsd, the same one
run_ccm_uccsd runs) with the CCM neutral B-tensors injected.
DLPNO-UMP2 - ccm_dlpno_ump2(ccm, uhf_result=, *, cderi=, tcut_pno=, tcut_mkn=, n_frozen=, ss_scale=, os_scale=) -> CCMDLPNOUMP2Result
(dlpno_ump2.py).
The correlation is resolved into the three unrestricted-MP2 spin channels (Szabo &
Ostlund Sec. 6.7, as in run_ccm_ump2):
same-spin (αα, ββ):
E_σσ = Σ_{i<j} Σ_ab ½ |⟨ij||ab⟩|² / D, antisymmetrised exchange⟨ij||ab⟩ = (ia|jb) − (ib|ja), one PNO set per pair;opposite-spin (αβ):
E_ab = Σ_{ij} Σ_ab (ia|jb)² / D, Coulomb only, separate α-PNO and β-PNO set per pair.
Every (ia|jb) is density-fit from the neutral cderi (g_eff = Σ_P L⊗L); each
pair carries PNOs built from its pair density and truncated by occupation number
(tcut_pno).
DLPNO-UCCSD(T) - ccm_dlpno_uccsd(ccm, uhf_result=, *, cderi=, tcut_pno=, tcut_mkn=, n_frozen=, compute_triples=) -> CCMDLPNOUCCSDResult
(dlpno_uccsd.py).
The per-channel PNO pairs are merged into a per-spin union PNO virtual space
(V_trunc^α from the αα pairs + the α side of the αβ pairs; V_trunc^β
symmetrically), each S^CCM-orthonormal and semicanonical (the Fock diagonalised
within the union), so [occ^σ | V_trunc^σ] is orthonormal with a diagonal Fock
(the occ-virt block vanishes - every PNO is a rotation of the canonical virtuals,
which are S^CCM-orthogonal to the occupieds). run_ref_uccsd then solves the
unrestricted CC within {occ^σ, V_trunc^σ}. One implementation detail: the
spin-orbital engine indexes α/β spatial MOs by a single shared range, so the
smaller per-spin truncated MO set is padded with extra (real, semicanonical)
complement virtuals - exact-safe, since enlarging a truncated space only reduces
truncation.
Why it is exact at no truncation. At tcut_pno = 0 every PNO set spans its
full virtual space, so each per-spin union is a unitary rotation of the canonical
σ-virtuals; UMP2 reproduces the canonical channels term-by-term, and UCCSD(T) -
invariant to rotations within the occupied/virtual blocks - equals the canonical
CCM UCCSD(T). With tcut_mkn > 0, each occupied pair selects atoms from its
S^CCM Mulliken populations. Separate alpha and beta virtual projectors remove
the complete occupied space of each spin, and the selected projected atomic
orbitals are canonical-orthogonalized and semicanonicalized with the
corresponding converged UHF Fock matrix. Pair densities and PNOs are then built
inside those bounded spaces and mapped back into canonical virtual coordinates
for the UCCSD union. tcut_mkn = 0 bypasses PAO construction exactly.
Validated (tests/test_ccm_dlpno_ump2.py 13/13, tests/test_ccm_dlpno_uccsd.py
8/8): the no-truncation limit (tcut_pno = 0) reproduces
canonical CCM UMP2 (
run_ccm_ump2on the neutral four-center) to machine ε (≤2e-17 on the closed-shell (2,1,1) H₂ chain; ≤1e-17 on the genuine doublet (3,1,1) H chain, n_α ≠ n_β), per spin channel; andcanonical CCM UCCSD(T) (
run_ccm_uccsd) - CCSD to machine ε (closed-shell ≤4e-17; doublet ≤8e-14), (T) to ≤6e-21.
Truncation recovers canonically: on a 6-31g doublet the UMP2 error falls
monotonically (1.2e-3 → 1.0e-5 → 4.4e-7 → ε) as tcut_pno → 0, and the
unequal-per-spin padding path is exercised (β padded back to full when the
α union needs the larger common MO count) and stays exact-safe.
Reference = neutral (per § 2.0 / the -b-critique correction): the SCF
reference and the four-center are the neutral kernel - the Madelung background
shifts the occ-virt denominators and the bare-1/r four-center has no consistent
cderi. Reference: Saitow, Becker, Riplinger, Valeev & Neese, J. Chem. Phys. 146,
164105 (2017) (open-shell DLPNO); Pinski et al. 2015 (DLPNO-MP2); Riplinger et al.
2013 (DLPNO-CCSD(T)); Stanton et al. 1991 (spin-orbital UCCSD) - all already in
the citation DB and routed for the reused molecular components.
Remaining locality follow-ons: localized occupied orbitals require the coupled LMP2 residual rather than the present canonical occupied denominators. Per-pair-coupled DLPNO-UCCSD and symmetry-unique pairs also remain Task 3 work.