Cyclic-symmetry analysis#
When to use#
Cyclic-symmetry analysis exploits N-fold rotational symmetry to recover the full-rotor spectrum from a single base-sector model. Use it when:
The structure has identical sectors arranged around an axis (impellers, vaned diffusers, cylinder arrays, reciprocating-engine blocks).
You’d otherwise be solving an N-times-larger problem on the full geometry — cyclic reduces the DOF count by a factor of \(N\) while recovering exactly the same spectrum.
The full-rotor problem doesn’t fit in RAM / wall-time budget but a sector does.
For non-cyclic geometries use the standard Modal analysis (free vibration) path. Cyclic doesn’t apply if the rotor has any deviation from N-fold symmetry (mistuning, intentional asymmetry, broken-blade analysis).
Boundary conditions and loads#
Dirichlet constraints on the sector — pin the hub / shaft attachment as you would in a regular modal solve.
Cyclic-pairing constraint — auto-applied by
CyclicModelfrom the rotation axis + sector angle. No manual DOF-pair list.No applied loads. Like Modal analysis (free vibration), cyclic-symmetry modal analysis is unforced free vibration.
The math (one paragraph)#
Cyclic-symmetry modal solves the per-harmonic eigenproblem
where \(\mathbf{K}_k\) and \(\mathbf{M}_k\) are the sector matrices augmented with the harmonic-\(k\) cyclic-pairing constraint \(\mathbf{u}_\text{high} = e^{i\, k\, \alpha}\, \mathbf{R}(\alpha)\, \mathbf{u}_\text{low}\). The Grimes-Lewis-Simon real-2n augmentation (Modal eigenvalue problem and shift-invert Lanczos) keeps each per- harmonic eigenproblem real-symmetric. Sweeping \(k\) from 0 to \(\lfloor N/2 \rfloor\) recovers the full- rotor spectrum.
Running the solve#
cyc = femorph_solver.CyclicModel(
m, n_sectors=16, axis="z",
)
results = cyc.solve_modal(n_modes=4)
results is a list of
CyclicModalResult
instances, one per harmonic 0 … N/2. Each carries:
res.harmonic_index— the \(k\) value.res.frequency—(n_modes,)frequencies at this harmonic.res.mode_shapes— sector-sized eigenvectors (the full-rotor mode is reconstructed via the cyclic-pairing rule).
For a focused recipe, see Cyclic-symmetry modal on a rotor sector.
Travelling-wave mode pairs#
At every \(k > 0\) the eigensolver returns mode shapes in pairs at the same frequency. Real and imaginary parts of the complex eigenvector are quarter-period travelling-wave snapshots — the standing-wave / travelling- wave decomposition of Crandall & Mark 1963 §3.5. See Cyclic-symmetry travelling-wave pair — bladed rotor for the visualisation.
Engine-order resonance check#
For a rotor running at angular speed \(\Omega\), only mode shapes with harmonic index \(k\) matching the engine order \(m\) (modulo N) couple to the excitation (Wildheim 1979). The Campbell-diagram clearance check walks every \((m, k)\) pair and flags resonances within a design-margin band. See Tutorial 5 — Cyclic-symmetry rotor design check for the full design check.
Common gotchas#
Cyclic-face auto-detection failure. The
CyclicModelconstructor auto-detects the low / high cyclic faces from the rotation axis + sector angle. If the geometry is mis-aligned with the axis (off-axis centroid) or the sector angle doesn’t match the geometry, the auto-detector raises. Pass explicitlow_face/high_facenode-set arrays as a manual override.Mistuned rotors — cyclic-symmetry assumes exactly identical sectors. Real rotors have manufacturing variation that breaks the symmetry; the cyclic spectrum is an idealisation. Mistuning analysis is on the planned roadmap.
Forgetting harmonic 0.
k = 0modes are the axisymmetric / breathing-mode family. The clearance check must include them — engine-orderm = N, 2N, 3N, …excitek = 0modes.
End-to-end tutorial#
Tutorial 5 walks the cyclic-symmetry workflow end-to-end: Tutorial 5 — Cyclic-symmetry rotor design check.
Verification + gallery#
Cyclic-symmetry modal on a rotor sector — sector-only modal
Cyclic-symmetry travelling-wave pair — bladed rotor — travelling-wave pair
Cyclic-symmetry mode family across every harmonic — mode-family classification
Solver mechanics + performance#
For Grimes-Lewis-Simon augmentation details, per-harmonic
factor reuse, and the sector-DOF reduction maths, see
Cyclic-symmetry modal analysis — that page is the solver-engineering
deep-dive on the same CyclicModel.solve_modal()
invocation.