EXPERIMENTS.md · lines 5706–5802E98 — The ordering energy from the expansion itself
E97 failed because the hull's 401 bcc orderings are all binary, so a ternary solid solution
was compared against a competitor worse than its own ground state. The expansion does not
have that problem: it gives an energy for any occupation of the lattice at any composition.
So the ordered state is built rather than looked up.
For a composition, partition the species into two groups, put one group on the corner
sublattice and the other on the body centres in the proportions the composition allows, and
evaluate with the expansion. That is the A2 to B2 ordering, the one this system actually
makes. Enumerating the partitions - 2^(n-1) - 1 of them - and taking the lowest gives the
ordering energy:
dE_ord = E_random - min over partitions of E_ordered
and the mean-field ordering temperature follows from the entropy given up, dS_ord, which for
a two-sublattice split is the difference between the random and sublattice-resolved ideal
mixing entropies.
This costs cluster vectors, not Monte Carlo, and it covers every composition because it
constructs the competitor instead of fetching it.
Predicted:
- It ranks the four measured compositions correctly - the thing E97 could not do. This
is the whole test; a gate that scrambles a known order is useless.
- It overestimates T_od, as mean-field does on bcc, by 10 to 60 per cent. Direction
matters more than magnitude for a gate: too high is conservative.
- Under 40 ms for compositions of six elements or fewer, which is where the search
lives. Twelve elements is 2047 partitions and will be slower; if it is intolerable the
enumeration is capped and that is recorded rather than hidden.
Falsified as a gate if the ranking is wrong, in which case rung 0 cannot carry the
ordering question at all and it stays at rung 1, with the generator rewarded on a driving
force that must then exclude the ordering margin some other way.
Outcome. It works well enough to gate, my falsification criterion did not, and the one
miss is a composition whose truth straddles the boundary.
Prediction 3 holds and by a wide margin: one to four milliseconds, against forty
predicted, because constructing an ordered occupation and taking one cluster vector is
cheaper than anything that samples.
Prediction 2 is falsified: the ratios run 0.71 to 1.23, so it does not uniformly
overestimate. Mean-field reasoning said it would; it does for the two binaries and not for
the ternary and quaternary.
Prediction 1 is falsified and the criterion was mine to get wrong. The two compositions
whose order it swaps are 914 +/- 104 and 844 +/- 138 K - a separation of 69 K against
uncertainties of 104 and 138. The reference does not order them either. I set a test the
data cannot answer and then recorded the estimator as failing it. E82 measured those bars and
I quoted them in the same file.
On the test that a gate is actually for, it is 3 of 4, and the miss is Mo0.62Ta0.38,
whose measured 991 +/- 106 K straddles the 1000 K boundary it is being asked about. There is
no estimator that gets that one right, because the truth does not.
So rung 0 can carry the ordering question after all, at one to four milliseconds, using
the expansion that was built for exactly this and no new data. What it cannot do is resolve
two compositions seventy kelvin apart - and neither can rung 1.
Deployed. The ladder now asks the whole requirement at rung 0.
forager/ordering.py constructs the ordered competitor from the expansion at any
composition, and Verifier.attach_ordering gives it to the screen. The screen reports
T_order, whether it falls inside the window, and the ordering advantage in meV/atom so it
can be added to a driving force rather than compared with one. The service window is now read
from FORAGER_T_LO/FORAGER_T_HI rather than written into the code, because the requirement
belongs to whoever is asking, not to this file.
Nb-Ta comes back with no ordering tendency at all, which is the right answer for a
near-ideal solid solution and the discrimination rung 0 previously lacked. Mo0.62Ta0.38
orders above the window, so it carries no penalty for a transition inside it - but
orders_in_window is false for the reason that it is ordered throughout, which makes it a
compound and not the solid solution that was asked for. Reporting the temperature rather
than a verdict is what lets that distinction survive.
Screen cost 17.8 ms, up from 14.5. 222 tests pass.
A slip worth naming because it is the second time: atoms * (n,) * 3 binds left to right
and hands ASE a one-tuple. It surfaces as an IndexError from inside ase.atoms that names
nothing. Same bug, same symptom, months apart.