[symmetry]¶
The [symmetry] section controls point-group metadata, the guarded abelian
integral reduction, and optional experimental symmetry tiers. Labeling can be
useful even when reductions are disabled.
Detection is on by default
enabled defaults to true. Detection and labeling are active unless you
turn them off. The two reduction keywords —
use_integral_symmetry and
use_response_symmetry — remain False by
default, so the geometry is not reoriented, the full integral list is still
used, and reference-SCF or ordinary HF/DFT ground-state energies are
unchanged. An MRSF physical S0 remains a response root and can change
when symmetry information repairs response-block coverage.
Detection is not purely cosmetic, though. The detected irreps are what let the excited-state solver reach every symmetry block, so excited-state results can differ from a run with detection off — and where they do, the difference is a correction. See Molecular symmetry.
Keywords¶
enabled¶
| Field | Value |
|---|---|
| Type | string |
| Default | true |
| Values | false, true, auto |
| Used by | symmetry detection |
Controls symmetry detection. When on, OpenQP detects the point group and its Abelian subgroup, labels orbitals, states and normal modes, and makes the per-pair irrep table available to the excited-state solver.
What it does not do: it does not reorient the molecule and does not reduce
the integral list. Those follow use_integral_symmetry only.
Set enabled=false to restore the pre-detection behavior — no labels, no irrep
table, and the excited-state trial vectors chosen purely by orbital-energy gap
(see Molecular symmetry for why that can matter).
point_group¶
| Field | Value |
|---|---|
| Type | string |
| Default | auto |
| Used by | requested point group |
Requested point group, or auto for automatic detection.
subgroup¶
| Field | Value |
|---|---|
| Type | string |
| Default | auto |
| Used by | Abelian subgroup selection |
Requested Abelian subgroup, or auto for automatic choice.
label_mo¶
| Field | Value |
|---|---|
| Type | boolean |
| Default | True |
| Used by | MO labeling |
Prints the molecular-orbital symmetry table. This is a display control
only: setting it to False suppresses the printed table but does not disable
the orbital irreps themselves, which the excited-state solver needs regardless.
label_states¶
| Field | Value |
|---|---|
| Type | boolean |
| Default | True |
| Used by | response-state labeling |
Labels excited states by symmetry where possible. When [tdhf] multiplicity is
set, the labels are reported as spin-resolved terms (1A1, 3B2, ...) rather
than bare irreps.
label_modes¶
| Field | Value |
|---|---|
| Type | boolean |
| Default | True |
| Used by | vibrational-mode labeling |
Labels vibrational modes by symmetry where possible. The labels appear as a
Symmetry column in the printed frequency table:
Mode Symmetry Frequency(cm-1) IR(km/mol) Raman(activity)
1 a1 2043.11 0.492662 104.268372
2 a1 4488.55 1.622292 558.762685
3 b2 4790.80 0.866146 220.085777
The column is present whenever mode labels could be assigned, including for a
Hessian restored with [hess] read=true.
use_integral_symmetry¶
| Field | Value |
|---|---|
| Type | string/boolean-like |
| Default | True |
| Used by | integral symmetry reduction |
Enables the guarded abelian petite-list/skeleton-Fock reduction for supported
energy and grad calculations. The default route verifies the AO operator
against the overlap matrix, verifies density invariance before each reduced
build, and falls back to the complete integral path when a safety condition is
not met. ROHF calculations using pFON also stay on the complete C1 integral
path because fractional-occupation convergence can be sensitive to the changed
summation order. Set this to False to disable integral reduction. The value
full requests the experimental non-abelian tier and should be validated
against a C1 reference run.
move_to_standard_frame¶
| Field | Value |
|---|---|
| Type | boolean |
| Default | False |
| Used by | integral symmetry reduction |
Controls whether a calculation with use_integral_symmetry=true is rotated and
translated to a standard symmetry frame before the integral reduction is
staged. The default False keeps the molecule in its input frame; OpenQP then
uses the corresponding input-frame symmetry operators for the integral and
gradient reductions. The no-move route is available for energy and grad
calculations and uses the abelian integral-symmetry tier. The non-abelian
use_integral_symmetry=full tier requires move_to_standard_frame=true; OpenQP
rejects full together with move_to_standard_frame=false instead of silently
using a smaller group. As with every integral-symmetry calculation, validate new
systems against a run with use_integral_symmetry=false.
[symmetry]
enabled=true
use_integral_symmetry=true
move_to_standard_frame=false
This is the keyword that reorients the molecule into the symmetry standard orientation. Turning symmetry detection on does not.
Accepts true for the Abelian subgroup (machine-exact) or full for the
complete point group (a larger reduction, accurate to roughly 1e-7).
full is declined for DFT
The full tier reduces the two-electron integrals over the complete point
group, while the exchange-correlation grid necessarily stays on the Abelian
operations — Lebedev angular grids are not invariant under C3/C6 rotations.
The two halves would then reduce over different groups, which is a measured
error of about 3e-04 Hartree.
When a functional is set, OpenQP therefore falls back to the exact Abelian
tier and says so in the symmetry log block. You still get the reduction,
just the tier that is exact. Remove the [input] functional if you need
the full group — OpenQP selects DFT with method=hf plus a functional,
so method=hf alone is not what distinguishes the two.
The fallback is never silent: if the reduction is requested but does not engage for any reason, the log states that the run used the full (C1) integral list.
Accepted values are false, true and full. true selects the Abelian
subgroup; full requests the complete point group.
What the reduction covers¶
Enabling this keyword reduces two separate parts of the calculation:
- The two-electron integral list. Symmetry-equivalent shell quartets are computed once and reweighted, and the resulting skeleton Fock matrix is projected back.
- The exchange–correlation quadrature. Grid slices belonging to symmetry-equivalent atoms are computed for one representative atom per orbit and scaled by the size of that orbit; the images are skipped.
The XC reduction engages only when the molecule actually has an orbit to exploit — that is, when at least one atom is a symmetry image of another. For a C1 molecule, or a geometry in which every atom sits on a special position, every atom is its own orbit, so nothing is skipped and the reduction reports itself inactive rather than doing identity work.
The XC reduction is not compatible with the cross-iteration Φ cache. When it
engages, [scf] xc_phi_cache is disabled automatically for that run: a cached
grid block built under the reduction would otherwise be replayed unreduced and
give a silently wrong E_xc.
Geometry and run types¶
Enabling the reduction reorients the molecule into the symmetry standard orientation, and all outputs — geometry, gradients, orbitals — are reported in that frame.
The reduction is applied only to runtype = energy and runtype = grad. Other
run types (optimisation, numerical Hessian, NEB, MEP, properties) are excluded,
because they either displace the geometry themselves or consume an externally
supplied one, and a per-step frame change would be assembled inconsistently.
full with a functional¶
use_integral_symmetry = full is declined for any run that sets [input]
functional, and the exact Abelian tier is used instead. The two halves of the
Fock matrix would otherwise reduce over different groups: Lebedev angular grids
are invariant under the axis-aligned octahedral operations but not under C3 or
C6, so the XC half can only ever be Abelian-symmetric while the JK half would be
forced symmetric under the full group. The mismatch is a measured error rather
than a rounding difference. The log states when this fallback happens; it is not
silent.
Hartree–Fock runs are unaffected and may use full.
use_response_symmetry¶
| Field | Value |
|---|---|
| Type | boolean |
| Default | False |
| Used by | response solver symmetry reduction |
Enables irrep-blocked response updates — the experimental projection that confines Davidson residuals to a single irrep. The checker marks this as experimental and recommends validating excitation energies against an unblocked run.
This is separate from the symmetry-block coverage of the initial trial vectors, which is not experimental and follows detection alone. The symmetry log block distinguishes the two:
response blocking |
Meaning |
|---|---|
pair_table_staged |
Irrep table built for trial-vector coverage; the residual projection is off |
active |
The experimental residual projection is running |
tolerance¶
| Field | Value |
|---|---|
| Type | float |
| Default | 1.0e-5 |
| Used by | symmetry detection |
Geometry tolerance for symmetry detection. Must be positive.
strict¶
| Field | Value |
|---|---|
| Type | boolean |
| Default | False |
| Used by | requested/detected group matching |
Requires stricter agreement between requested and detected symmetry labels.