Cyclic-symmetry modal analysis ============================== Free-vibration modal analysis on a single base sector of an :math:`N`-fold cyclically-symmetric rotor. Driven by :meth:`Model.cyclic_modal_solve `. Algorithm --------- For a rotor of :math:`N` identical sectors, the global spectrum decomposes per **harmonic index** :math:`k \in \{0, 1, \ldots, N/2\}` (Thomas 1979; Wildheim 1979). Each harmonic produces a reduced complex-Hermitian sub-problem on the base sector .. math:: :label: cyclic-gevp \mathbf{K}_k\, \boldsymbol{\phi}_k = \omega^{2}\, \mathbf{M}_k\, \boldsymbol{\phi}_k, with the cyclic boundary condition :math:`\mathbf{u}_\text{high} = e^{\imath\, k\, \alpha}\, \mathbf{R}(\alpha)\, \mathbf{u}_\text{low}`, :math:`\alpha = 2\pi / N`. femorph-solver applies the **Grimes–Lewis–Simon (1994) real 2n-augmentation** to recast each complex-Hermitian sub-problem as a real-symmetric problem of doubled size: .. math:: \tilde{\mathbf{K}}_{k} = \begin{bmatrix} \mathrm{Re}(\mathbf{K}_{k}) & -\mathrm{Im}(\mathbf{K}_{k}) \\ \mathrm{Im}(\mathbf{K}_{k}) & \mathrm{Re}(\mathbf{K}_{k}) \end{bmatrix}, \qquad \tilde{\mathbf{M}}_{k} = \cdots, then dispatches to the same shift-invert Lanczos pipeline as the :doc:`modal` solver. Each eigenvalue appears with multiplicity 2 in the augmented problem; the eigenvectors recombine into a complex pair on the way out. For :math:`k = 0` and (when :math:`N` is even) :math:`k = N/2` the imaginary block is identically zero and the augmentation collapses to two copies of the same real eigenvalue. For :math:`0 < k < N/2` the two halves form a **travelling-wave pair** — the real / imaginary parts of :math:`\boldsymbol{\phi}_k` are 90°-shifted snapshots of a wave travelling around the rotor's circumference. Public API ---------- :meth:`Model.cyclic_modal_solve(low_face=, high_face=, n_sectors=, n_modes=, harmonic_indices=, ...) ` * ``low_face`` / ``high_face`` — node arrays (MAPDL numbers or boolean masks) on the rotor's two cyclic faces, paired in matching order. * ``n_sectors`` — number of sectors :math:`N`. * ``harmonic_indices`` — defaults to all of :math:`0, 1, \ldots, N/2`. * Returns one :class:`CyclicModalResult ` per harmonic index, each carrying ``omega_sq``, ``frequency``, complex ``mode_shapes`` on the base sector, and the ``harmonic_index`` metadata. Verification cross-references ----------------------------- * :ref:`sphx_glr_gallery_analyses_cyclic_example_rotor_sector.py` — 4-sector annular sector full sweep. * :ref:`sphx_glr_gallery_analyses_cyclic_example_cyclic_modes_disk.py` — 12-sector annular disk, lowest mode per harmonic. * :ref:`sphx_glr_gallery_analyses_cyclic_example_cyclic_modes_bladed_rotor.py` — 16-blade rotor, travelling-wave pair render. * :ref:`sphx_glr_gallery_analyses_cyclic_example_cyclic_mode_family.py` — 4×2 viewport grid of the disk mode family classified by harmonic index. Implementation: :mod:`femorph_solver.solvers.cyclic`. References ---------- * Thomas, D. L. (1979) "Dynamics of rotationally periodic structures," *Journal of Sound and Vibration* 66 (4), 585–597. * Wildheim, S. J. (1979) "Vibrations of rotationally periodic structures," Ph.D. dissertation, Linköping University. * Grimes, R. G., Lewis, J. G. and Simon, H. D. (1994) "A shifted block Lanczos algorithm for solving sparse symmetric generalized eigenproblems," *SIAM J. Matrix Analysis and Applications* 15 (1), 228–272 (real 2n augmentation). * Bathe, K.-J. (2014) *Finite Element Procedures*, 2nd ed., §10.3.4 (cyclic-symmetry modal). * Crandall, S. H. and Mark, W. D. (1963) *Random Vibration in Mechanical Systems*, Academic Press, §3.5 (travelling- wave / standing-wave decomposition). * Singh, M. P. and Vakakis, A. F. (1993) "On the dynamics of cyclic-symmetric structures," *Mechanism and Machine Theory* 28 (5), 627–637 (mode classification by harmonic index).