Cyclic-symmetry reduction#
A rotor built from \(N\) geometrically-identical sectors
spanning \(360°\) admits a cyclic-symmetry modal reduction:
the full-rotor eigenproblem decouples into \(\lfloor N/2
\rfloor + 1\) smaller eigenproblems, one per harmonic index.
This page derives the reduction from the rotational-symmetry
property of \(K\) and \(M\), shows how femorph-solver
maps it onto the real, base-sector linear-algebra primitives the
femorph_solver.solvers.cyclic backend works with, and lists
the references the kernel cites.
The driving API (sector mesh → cyclic faces → per-harmonic
modal results) lives in CyclicModel;
see Cyclic-symmetry modal analysis for the user-facing
walk-through.
Setting#
A rotor with \(N\) identical sectors has assembled matrices \(K, M \in \mathbb{R}^{Nn \times Nn}\), where \(n\) is the per-sector free-DOF count. Index the sectors \(j = 0, 1, \dots, N-1\) and partition each matrix accordingly:
with \(K_{ij} = 0\) whenever \(|i - j| > 1 \pmod{N}\) — i.e. each sector only couples to its two cyclic neighbours through the shared cyclic face.
Cyclic symmetry of the geometry implies
— every diagonal block is the same self-stiffness \(A \equiv K_{00}\), and every off-diagonal block is the same inter-sector coupling \(B \equiv K_{01}\). The same structure holds for \(M\); call its blocks \(A^M, B^M\).
Block-circulant decomposition#
Matrices of the form
are block circulant. The discrete Fourier transform on the sector index block-diagonalises them — exactly, not approximately. Define the per-sector phase shift \(\theta_k = 2\pi k / N\) for \(k \in \{0, 1, \dots, N-1\}\) and the harmonic basis vectors
The block-Fourier projection
gives \(N\) reduced \(n \times n\) complex-Hermitian problems, each independent of the others:
with \(\tilde{M}_k = A^M + e^{i \theta_k} B^M + e^{-i \theta_k} {B^M}^\top\) defined identically.
The full-rotor mode is recovered by re-expansion:
— the same base-sector mode shape repeated around the rotor with a per-sector phase advance \(\theta_k\).
Physical harmonic indices#
The \(N\) Fourier indices \(\{0, 1, \dots, N-1\}\) contain redundancy: the spectrum at \(k\) is the complex conjugate of the spectrum at \(N - k\). For a real rotor, this collapses to the physical harmonic indices
\(k = 0\) — every sector moves in phase; axisymmetric (umbrella) modes; mode shape is real.
\(k = N/2\) (only when \(N\) is even) — adjacent sectors move \(180°\) out of phase; mode shape is real.
\(0 < k < N/2\) — travelling-wave modes that come in forward / backward pairs of identical frequency, often called the standing-wave doublets. The two members of a doublet are the real and imaginary parts of a single complex eigenvector.
The “nodal diameter” terminology used in turbomachinery (forward / backward \(k\)-nodal-diameter modes) is exactly this harmonic index.
The number of distinct frequencies a cyclic modal solve returns is therefore not \(N \cdot n_\text{modes}\) but \((\lfloor N/2 \rfloor + 1) \cdot n_\text{modes}\), counting each \(0 < k < N/2\) mode once with multiplicity two.
Real \(2n\) augmentation#
The reduced problem \(\tilde{K}_k\, \tilde{\boldsymbol{\varphi}}_k = \omega_k^2\, \tilde{M}_k\, \tilde{\boldsymbol{\varphi}}_k\) is complex-Hermitian. Most mature sparse eigensolvers (ARPACK, LOBPCG, PRIMME) ship a real-symmetric path optimised for the SPD case; the complex- Hermitian path is less mature and slower per iteration.
Grimes, Lewis & Simon (1994) pointed out that any complex- Hermitian generalised eigenproblem can be lifted to a real-symmetric \(2n \times 2n\) problem with the same spectrum. Write \(\tilde{K}_k = K_R + i K_I\), \(\tilde{M}_k = M_R + i M_I\) (with \(K_R, M_R\) symmetric and \(K_I, M_I\) antisymmetric since the original \(A, B\) are real) and form
Both lifted matrices are real symmetric (and SPD, when the original sector matrices are SPD on the constraint quotient). Their generalised eigenvalues are exactly the eigenvalues of the complex-Hermitian problem, each with double multiplicity that mirrors the real / imaginary part decomposition.
femorph-solver uses this real-\(2n\) lift on every reduced harmonic-index problem so the same shift-invert ARPACK / SPD- direct path the standard modal solve uses applies unchanged.
Practical mapping in femorph-solver#
The user-facing path is:
Author the base-sector mesh as a regular
Modelcarrying one wedge of the rotor. No need to assemble the full rotor.Identify the cyclic faces — the two θ-bounding surfaces of the wedge. Either supply them explicitly via the
low_face/high_facekeyword arguments, or letCyclicModelauto-detect them by matching every node on the low face to its rotated image on the high face within a \(pair\_tol\) tolerance.Call
CyclicModel.solve_modalwith the harmonic indices of interest (default: every physical index \(0 \le k \le N/2\)). One per-\(k\) reduced eigenproblem runs internally, on the \(2n\)-lifted real-symmetric system.Each
CyclicModalResultcarries the harmonic index \(k\), the per-mode frequencies, and the base-sector mode shapes. Full-rotor mode-shape recovery is handled by the result’s expansion helpers.
The compute saving over assembling the full rotor scales as \(O((\lfloor N/2 \rfloor + 1) \cdot n^p / N \cdot n^p) = O((\lfloor N/2 \rfloor + 1) / N^p)\) for an \(O(n^p)\) solver — close to the obvious “factor of \(N\)” speedup, plus an extra factor \(p-1\) from the better factorisation cost on the smaller system. For a typical \(N = 36\)-sector turbine rotor this is ~50× faster than the full-rotor solve.
Validity assumptions#
Cyclic-symmetry reduction is exact when:
The sector geometry repeats identically under the per-step rotation — no mistuning, no per-sector mass / stiffness variation. Real turbomachinery is mistuned at the 0.1-1 % level, which the cyclic reduction cannot capture; mistuned analysis requires a separate technique (component mode synthesis or full-rotor solve).
The cyclic faces of adjacent sectors mate one-to-one. Mesh generators sometimes produce slightly-misaligned faces that the femorph-solver auto-pairing can match within tolerance, but mismatch beyond that fails the pairing check explicitly.
The boundary conditions on the non-cyclic faces of every sector are identical. A bracket bolted to the rotor at one sector position breaks cyclic symmetry.
Violations of these assumptions don’t produce a wrong answer silently — the pairing check catches the geometry mismatch, the modal-solve sanity check catches BC asymmetry, and the mistuning case is intercepted by the user reading these constraints up front.
References#
D. L. Thomas, “Dynamics of rotationally periodic structures,” International Journal for Numerical Methods in Engineering 14 (1979), 81–102 — the foundational paper for cyclic-symmetry FE reduction in modal analysis.
A. Wildheim, “Excitation of rotationally periodic structures,” Journal of Applied Mechanics 46 (1979), 878–882 — companion paper covering the harmonic-excitation case.
R. Grimes, J. Lewis, H. Simon, “A shifted block Lanczos algorithm for solving sparse symmetric generalized eigenproblems,” SIAM J. Matrix Anal. Appl. 15 (1994), 228–272 — origin of the real-\(2n\) augmentation that lets a real-symmetric Lanczos drive the complex-Hermitian per-harmonic problem.
R. R. Craig & A. J. Kurdila, Fundamentals of Structural Dynamics, 2nd ed., 2006, §16.3 — accessible textbook treatment of cyclic / dihedral group representations applied to FE eigenproblems.
A. V. Srinivasan, “Flutter and resonant vibration characteristics of engine blades,” Journal of Engineering for Gas Turbines and Power 119 (1997), 742–775 — application to bladed-disc / rotor problems with mistuning.
See also#
Modal eigenvalue problem and shift-invert Lanczos — the underlying generalised eigenproblem theory.
Cyclic-symmetry modal analysis — driving API.
Known limitations — mistuning and per-sector variation are explicitly out of scope.
femorph_solver.CyclicModel— the user-facing cyclic wrapper.