Skip to content

Symmetrization: recover symmetries for same-site orbital swap case - #374

Open
tylersax wants to merge 1 commit into
CompFUSE:masterfrom
tylersax:symm-derive-p
Open

Symmetrization: recover symmetries for same-site orbital swap case#374
tylersax wants to merge 1 commit into
CompFUSE:masterfrom
tylersax:symm-derive-p

Conversation

@tylersax

@tylersax tylersax commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Background: I was running FeAs against the derived-symmetry report we just landed in #369, and it came back with 4 ops vs the expected 8. The solver was rejecting C4, C4^3 and the two diagonal mirrors.

Problem: FeAs's two orbitals (d_xz, d_yz) both sit at a_vec = 0. set_symmetry_matrices builds the band image by transforming r + a_b and looking for an orbital at the image position with the same flavor. That test isn't meaningful for two orbitals on one site -- it matches every band equally. The "flavor" breaks the tie, and that pins each band to itself. The band image comes out the identity for every op. solveSignsForOp took the image on faith and solved only the signs. Signs can flip an entry, but they cannot move it to another band. So the solver falsely rejected real symmetries.

The (small) fix: treat the geometric image as a candidate rather than an oracle. solveSignsForOp splits into tryPermutation (same function we had before, returning false where it used to throw) and deriveOrbitalOpForOp, which checks the geometric candidate first and otherwise walks the remaining permutations. Throw only when none of them works.

Result 1: FeAs goes from 4 derived ops to 8, and is added as a characterization fixture to pin the number.

Result 2: A Kagome win falls out of the same change. Kagome labels its three symmetry-equivalent sublattices with distinct flavors, so its matching finds no admissible image at all and records the -1 that #369 added a guard for. Deriving P from H0 does more than dodge the out-of-bounds read -- it recovers the ops geometry could not place, and Kagome goes from 2 derived ops to 12.

@tylersax
tylersax marked this pull request as ready for review July 21, 2026 15:37
@PDoakORNL

PDoakORNL commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

I read over your indicated significant commit, looks good to me but lets get this cleaned up so @maierta can also take a look. By which I mean lets get #369 merged so this PR gets reduced to something easy to look at.

@PDoakORNL

Copy link
Copy Markdown
Contributor

@tylersax I don't want to force the update here, can you take a look at doing the update?

Background: I was running FeAs against the derived-symmetry report we
just landed in CompFUSE#369, and it came back with 4 ops vs the expected 8.
The solver was rejecting C4, C4^3 and the two diagonal mirrors.

Problem: FeAs's two orbitals (d_xz, d_yz) both sit at a_vec = 0.
set_symmetry_matrices builds the band image by transforming r + a_b and
looking for an orbital at the image position carrying the same flavor.
Two orbitals on one site make the position test uninformative -- it
matches every band equally. The "flavor" breaks the tie, and that pins
each band to itself. The band image comes out the identity for every op,
unconditionally. solveSignsForOp took the image on faith and solved only
the signs. Signs can flip an entry, but they cannot move it to another
band. So the solver falsely rejected real symmetries.

The (small) fix: treat the geometric image as a candidate rather than an
oracle. solveSignsForOp splits into tryPermutation (same function we had
before, returning false where it used to throw) and
deriveOrbitalOpForOp, which checks the geometric candidate first and
otherwise walks the remaining permutations. Throw only when none of them
works.

Result 1: FeAs goes from 4 derived ops to 8, and is added as a
characterization fixture to pin the number.

Result 2: A Kagome win falls out of the same change. Kagome labels its
three symmetry-equivalent sublattices with distinct flavors, so its
matching finds no admissible image at all and records the -1 that
c401448 added a guard for. Deriving P from H0 does more than dodge the
out-of-bounds read -- it recovers the ops geometry could not place, and
Kagome goes from 2 derived ops to 12.
@tylersax

tylersax commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

Rebased and ready to go 👍

@PDoakORNL
PDoakORNL requested a review from maierta August 5, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants