When Physics Intuition Meets ISO Standards: Debugging My Understanding of Rotor Runout
Something didnât add up.
I was staring at simulation results for our flywheel energy storage system, watching rotor runout values climb as the state of charge increased. My gut said this was wrong. A well-balanced rotor shouldnât wobble more just because itâs spinning faster, right?
Turns out, my gut was confidently incorrect. The path to understanding why taught me more about debugging mental models than any compiler error ever has.
The Setup: Why Runout Matters
A flywheel energy storage system stores kinetic energy in a spinning rotorâessentially a mechanical battery. Charge it by spinning the rotor up, discharge it by letting it slow down through a generator. The state of charge maps directly to rotational speed: higher RPM means more stored energy.
Rotor runout is the deviation of the rotorâs center of mass from its geometric center as it spins. Even precision-manufactured rotors have some residual eccentricityâa tiny offset between where the mass center is and where it should be. This eccentricity causes vibration, and excessive vibration damages bearings, creates noise, and limits safe operating speeds.
When I saw runout increasing with speed, I assumed our model was broken. The physical eccentricity doesnât change just because you spin faster. The metal is the same shape at 10,000 RPM as at 5,000 RPM.
What I Thought I Knew
My mental model went like this:
- Residual unbalance creates an eccentricity e (in millimeters)
- The unbalance force is F = m Ă e Ă Ď², where m is rotor mass and Ď is angular velocity
- Force grows with the square of speed, but eccentricity stays constant
This suggested that while force increases with speed, the geometric displacement should remain fixed. The rotor doesnât physically relocate its center of mass by spinning faster.
Yet our model showed increasing runout. We were using an ISO G2.5 balance grade, which I vaguely knew was âa good balance specification.â I hadnât thought through what that specification actually meant.
The ISO Standard That Changes Everything
I finally pulled up ISO 1940-1, the international standard for balance quality of rotating rigid bodies. There it wasâthe insight Iâd been missing.
The ISO balance grade G is defined as:
G = e Ă Ď
Where G is the balance grade (mm/s), e is permissible eccentricity (mm), and Ď is angular velocity (rad/s).
For G2.5:
e = 2.5 / Ď
This was the aha moment. The ISO standard doesnât define a constant eccentricity. It defines a constant product of eccentricity and speed. As speed increases, permissible eccentricity decreases proportionally.
Connecting Standard to Physics
When you specify a rotor balanced to G2.5, youâre saying the residual unbalance satisfies e Ă Ď â¤ 2.5 at maximum operating speed. Our model used the G value directly, setting e = G/Ď. As Ď increases, eccentricity decreasesâcorrect behavior for a rotor balanced to a given G grade.
What about the unbalance force?
F = m Ă e Ă Ď² = m Ă (G/Ď) Ă Ď² = m Ă G Ă Ď
The force grows linearly with Ď, not quadratically. Decreasing eccentricity partially compensates for increasing speed.
And dynamic displacement at the bearing? That depends on both force and the systemâs dynamic stiffness at the excitation frequency. At synchronous frequencyâthe rotorâs spin speedâwe evaluate stiffness at exactly that frequency, not some static value.
Hereâs where runout increase comes from. As speed climbs:
- Unbalance force grows linearly (not quadratically, thanks to the G-grade relationship)
- Dynamic stiffness at synchronous frequency changes with speed
- Near resonances, stiffness drops dramatically
- The net effect can be increasing runout, even with decreasing eccentricity
Our model was correct. My understanding wasnât.
Validation Through Cross-Comparison
Another team had implemented their own rotor dynamics model. Comparing approaches helped validate this insight.
They parameterized differentlyâinputting the unbalance mass-eccentricity product directly rather than deriving it from ISO grade. When we aligned inputs to represent the same physical rotor, our results converged. Both models showed increasing runout near resonance frequencies.
The comparison confirmed our physics was consistent and highlighted how different-but-equivalent formulations can make the same behavior more or less intuitive.
The Broader Lesson
When simulation results surprise you, the instinct is to debug code. Check for off-by-one errors, unit mismatches, sign flips. These are real failure modes.
But sometimes the bug isnât in the code. Itâs in your head.
I spent longer than Iâd like to admit hunting for numerical errors before asking: âWhat if the model is right and Iâm wrong?â That questionâgenuinely entertaining the possibility that my intuition had failedâunlocked the solution.
Mental model bugs donât throw exceptions. They donât highlight line numbers in red. They quietly filter how you interpret everything, making correct output look broken because your expectations are miscalibrated.
A Better Debugging Process
The specific failure: I assumed eccentricity was a fixed geometric property, independent of speed. I didnât consider that engineering standards might define allowable eccentricity as a function of operating conditions.
Going forward, when results surprise me:
- Write down my prediction. What exactly do I expect, and why?
- Surface the assumptions. What physical relationships am I invoking? What am I treating as constant?
- Audit those assumptions. Are there standards, specifications, or constraints that invalidate my mental model?
Only after that audit do I look for code bugs.
Takeaways
If you work with rotating machinery or any domain where specifications interact with physics in non-obvious ways:
-
ISO balance grades define a constant velocity product (G = e Ă Ď), not constant eccentricity. For G2.5, eccentricity decreases with speed.
-
Unbalance force under a constant-G spec grows linearly with speed, not quadratically. The Ď² from centripetal acceleration is partially cancelled by 1/Ď from decreasing eccentricity.
-
Dynamic response depends on stiffness at excitation frequency. For synchronous vibration, thatâs the spin speedânot static stiffness.
-
When results surprise you, audit your mental model before your code. The bug might be in your assumptions.
The flywheel is spinning correctly. It just took my understanding a while to catch up.