Theory ====== This page gives a self-contained mathematical account of the methods VANE implements, in the order the pipeline applies them. Each result is checked against an analytical or reference solution; the :doc:`validation_matrix` links every claim here to an automated test. Symbols: :math:`N_b` is the number of blades (three in VANE), :math:`\Omega` the rotor speed (rad/s), :math:`\psi` the rotor azimuth, and :math:`j=\sqrt{-1}`. .. contents:: Contents :local: :depth: 1 1. Linearized turbine dynamics ------------------------------ OpenFAST linearizes the coupled aero-hydro-servo-elastic equations of motion about a periodic steady operating point, yielding a first-order state-space model .. math:: :label: lti \dot{\mathbf{x}}(t) = \mathbf{A}(\psi)\,\mathbf{x}(t) + \mathbf{B}(\psi)\,\mathbf{u}(t), \qquad \mathbf{y}(t) = \mathbf{C}(\psi)\,\mathbf{x}(t) + \mathbf{D}(\psi)\,\mathbf{u}(t), where the state :math:`\mathbf{x}` collects the structural and actuator degrees of freedom (DOFs) and their rates. For a spinning rotor the system matrices depend on the azimuth :math:`\psi=\Omega t`, so :eq:`lti` is **linear time-periodic** (LTP) with period :math:`T = 2\pi/\Omega`, not time-invariant. The structural block has the second-order form .. math:: \mathbf{M}\ddot{\mathbf{q}} + \mathbf{C}_d\dot{\mathbf{q}} + \mathbf{K}\mathbf{q} = \mathbf{f}, assembled by VANE into the canonical state layout :math:`\mathbf{x} = [\,\mathbf{q}_2;\ \dot{\mathbf{q}}_2;\ \mathbf{q}_1\,]` (second-order displacements, their rates, then first-order states); see :doc:`coordinate_systems`. 2. The multi-blade coordinate (Coleman) transform ------------------------------------------------- A direct eigenanalysis of :math:`\mathbf{A}(\psi)` is azimuth-dependent and the blade DOFs are coupled by rotation. The **multi-blade coordinate** (MBC), or Coleman, transform [Coleman1957]_ [Bir2008]_ projects the :math:`N_b` identical blade DOFs into the non-rotating frame, where an isotropic rotor becomes time-invariant. Let :math:`q^{(b)}` be a blade DOF on blade :math:`b` at azimuth :math:`\psi_b = \psi + 2\pi(b-1)/N_b`. The transform to the collective, cosine-cyclic, and sine-cyclic coordinates is .. math:: :label: mbc q_0 = \frac{1}{N_b}\sum_{b=1}^{N_b} q^{(b)}, \qquad q_{c} = \frac{2}{N_b}\sum_{b=1}^{N_b} q^{(b)}\cos\psi_b, \qquad q_{s} = \frac{2}{N_b}\sum_{b=1}^{N_b} q^{(b)}\sin\psi_b . Collecting :eq:`mbc` into the full-state transform :math:`\mathbf{T}(\psi)` (the blade triplets transformed, the non-rotating tower, drivetrain, and platform DOFs passed through unchanged), the state transforms as :math:`\mathbf{x}_{\mathrm{NR}} = \mathbf{T}(\psi)\,\mathbf{x}`. For any first-order LTP system the exact non-rotating state matrix is .. math:: :label: mbc-A \mathbf{A}_{\mathrm{NR}}(\psi) = \mathbf{T}\mathbf{A}\mathbf{T}^{-1} + \dot{\mathbf{T}}\mathbf{T}^{-1}, \qquad \dot{\mathbf{T}} = \Omega\,\partial_\psi\mathbf{T}. Because VANE applies the blade transform to the **second-order** state :math:`[\,\mathbf{q}_2;\,\dot{\mathbf{q}}_2;\,\mathbf{q}_1\,]`, the term :math:`\dot{\mathbf{T}}\mathbf{T}^{-1}` couples the transformed velocities back to the positions, and its explicit evaluation brings in the first **and** second azimuth derivatives of the blade Coleman matrix: the first contributes the **Coriolis** coupling (:math:`\propto\Omega`) and the second the **centrifugal** coupling (:math:`\propto\Omega^2`), which together produce the regressive/progressive frequency split. The implementation forms these blocks explicitly (terms in :math:`\Omega\,\partial_\psi\mathbf{T}` and :math:`\Omega^2\,\partial_\psi^2\mathbf{T}`). VANE detects the blade triplets automatically from the channel descriptions and applies the multi-blade projection to all four system matrices: the state matrix as in :eq:`mbc-A`, and :math:`\mathbf{B}`, :math:`\mathbf{C}`, :math:`\mathbf{D}` by applying the state coordinate map on the state side of each matrix and the input/output multi-blade maps on their input/output side (so the state map acts on the left of :math:`\mathbf{B}` and on the right of :math:`\mathbf{C}`). The :math:`\dot{\mathbf{T}}\mathbf{T}^{-1}` term arises only from differentiating the state transform and is therefore specific to the state equation; it does not appear in the :math:`\mathbf{B}`, :math:`\mathbf{C}`, :math:`\mathbf{D}` transforms. **Azimuth averaging.** The averaged non-rotating model is .. math:: :label: avg \bar{\mathbf{A}} = \frac{1}{2\pi}\int_0^{2\pi}\mathbf{A}_{\mathrm{NR}}(\psi)\, \mathrm{d}\psi \approx \frac{1}{N_\psi}\sum_{k=1}^{N_\psi}\mathbf{A}_{\mathrm{NR}}(\psi_k), estimated from the available azimuth samples. For an **isotropic** rotor every :math:`\mathbf{A}_{\mathrm{NR}}(\psi)` is identical, so :eq:`avg` is exact and the averaged model represents the periodic system without error; anisotropy introduces an azimuth dependence that §8 quantifies. VANE enforces that the azimuth samples form a coherent sweep (distinct azimuths, constant rotor speed) before averaging. 3. Eigenanalysis and modal parameters -------------------------------------- The modes are the eigenpairs of the averaged state matrix, :math:`\bar{\mathbf{A}}\mathbf{x}_i = \lambda_i\mathbf{x}_i`. Each eigenvalue of an underdamped mode is complex, :math:`\lambda = -\zeta\omega_n \pm j\,\omega_n\sqrt{1-\zeta^2}`, from which .. math:: \omega_n = |\lambda| \ \text{(rad/s)}, \qquad \zeta = -\frac{\operatorname{Re}\lambda}{|\lambda|}, \qquad \omega_d = \operatorname{Im}\lambda = \omega_n\sqrt{1-\zeta^2}. Complex-conjugate pairs are collapsed to the representative with positive imaginary part. The solution separately counts **unstable** (:math:`\operatorname{Re}\lambda>0`) and **over-damped** (real, stable) eigenvalues. **Numerical conditioning.** A first-order perturbation :math:`\delta\mathbf{A}` shifts a simple eigenvalue by [Wilkinson1965]_ .. math:: :label: cond \delta\lambda_i = \frac{\mathbf{y}_i^{\mathsf H}\,\delta\mathbf{A}\,\mathbf{x}_i} {\mathbf{y}_i^{\mathsf H}\mathbf{x}_i}, with :math:`\mathbf{x}_i,\mathbf{y}_i` the right and left eigenvectors. The **eigenvalue condition number** .. math:: \kappa_i = \frac{\lVert\mathbf{y}_i\rVert\,\lVert\mathbf{x}_i\rVert} {|\mathbf{y}_i^{\mathsf H}\mathbf{x}_i|} = \frac{1}{|\mathbf{y}_i^{\mathsf H}\mathbf{x}_i|} \quad(\text{unit-norm eigenvectors}) bounds the sensitivity; :math:`\kappa_i \ge 1` by Cauchy–Schwarz, with :math:`\kappa_i = 1` for a normal matrix and large values flagging a fragile, strongly non-normal mode. A near-repeated eigenvalue is flagged **degenerate**: its mode shape is defined only up to a rotation within the invariant subspace. 4. Mode shapes, correlation, and participation ---------------------------------------------- Mode shapes (the displacement partition of the eigenvectors) are complex and phase-normalized so the dominant component is real and positive; this convention does not affect the correlation measures, which are phase-invariant. The **Modal Assurance Criterion** [Allemang2003]_ between mode shapes :math:`\boldsymbol\phi_i` and :math:`\boldsymbol\phi_j` is .. math:: :label: mac \mathrm{MAC}_{ij} = \frac{|\boldsymbol\phi_i^{\mathsf H}\boldsymbol\phi_j|^2} {(\boldsymbol\phi_i^{\mathsf H}\boldsymbol\phi_i) (\boldsymbol\phi_j^{\mathsf H}\boldsymbol\phi_j)} \in [0,1], equal to one for collinear shapes and zero for orthogonal ones, and invariant to per-mode complex scaling. For state-space modes the pole-weighted **MACXP** variant [Vacher2010]_ additionally accounts for the eigenvalues, improving discrimination near crossings. The per-DOF **participation** of a mode is the normalized contribution of each DOF to its shape, with a phase-based sign, and drives the physical labelling. 5. Blade-mode taxonomy ---------------------- After the MBC transform each blade triplet is exactly :math:`[\,q_0,\ q_c,\ q_s\,]`, so a mode is **collective** when its participation concentrates in the collective coordinates and **cyclic** otherwise. A cyclic mode is classified by its whirl direction from the phase-invariant indicator .. math:: :label: whirl w = \operatorname{Im}\!\big(q_s\,\overline{q_c}\big), which is positive for a **regressive** (backward-whirling) mode and negative for a **progressive** (forward-whirling) one. The sign is calibrated against the Coleman split below, so the lower-frequency :math:`\omega_0-\Omega` line is the regressive one, consistent with :func:`vane.modal.label_solution`. The classification is gated on the cyclic pair being genuinely circular (comparable cosine/sine magnitudes), so a degenerate pair is not mislabelled. For an isotropic rotor the three blade modes appear at the **Coleman frequencies** .. math:: :label: coleman \omega_{\text{collective}} = \omega_0, \qquad \omega_{\text{regressive}} = \omega_0 - \Omega, \qquad \omega_{\text{progressive}} = \omega_0 + \Omega, with :math:`\omega_0` the rotating-frame blade frequency. This template-free derivation (structure + whirl sign, not name matching) is what VANE validates end to end against :eq:`coleman` across a rotor-speed sweep. 6. Cross-operating-point tracking --------------------------------- Modes computed independently at successive operating points (rotor or wind speeds) are linked into the lines of a Campbell diagram. Define the link **affinity** between mode :math:`i` at point :math:`k` and mode :math:`j` at point :math:`k{+}1` as the MAC gated by a frequency-continuity penalty, .. math:: a^{(k)}_{ij} = \begin{cases} \mathrm{MAC}_{ij}\,\big(1 - w_f\,|f_i-f_j|/\Delta f\big), & \mathrm{MAC}_{ij}\ge \tau,\\[2pt] -\infty, & \text{otherwise}, \end{cases} with frequency weight :math:`w_f` and MAC threshold :math:`\tau`. VANE extracts each track as the **globally optimal continuity path** over the not-yet-assigned modes, .. math:: \max_{\text{path } p}\ \sum_{k} a^{(k)}_{p_k,\,p_{k+1}}, by a deterministic dynamic program over the layered mode graph, then removes that path and repeats until every mode is assigned. Each track reports a **confidence** (its weakest-link MAC) and an **ambiguity** flag where a mode had two near-equally correlated continuations — a crossing or veering hotspot. The extraction is a globally optimal *single-path* search applied sequentially; see :doc:`limitations` for the precise optimality caveat. 7. Excitation lines and resonance --------------------------------- A rotor turning at :math:`\Omega` excites the structure at integer multiples of the rotational frequency — the :math:`nP` lines at :math:`f = n\,\mathrm{rpm}/60`. A potential resonance occurs where a mode curve crosses an :math:`nP` line; VANE locates each crossing by sign change of :math:`f_{\text{mode}} - n\,\mathrm{rpm}/60` and linearly interpolates the crossing rotor speed, frequency, and damping. Each crossing carries a **damping-aware severity** (a lightly damped crossing is more dangerous than a well-damped one) and an optional operating-window filter. 8. Uncertainty quantification ----------------------------- The averaged model :eq:`avg` discards the azimuth dependence; the **azimuth spread** quantifies how much. VANE measures how each frozen-time matrix :math:`\mathbf{A}_{\mathrm{NR}}(\psi)` perturbs the *averaged* model: for an isotropic rotor every :math:`\mathbf{A}_{\mathrm{NR}}(\psi)=\bar{\mathbf{A}}` and the spread is zero, while anisotropy makes the per-azimuth matrices differ from the average — and their instantaneous spectra differ — by an amount the spread captures. Applying :eq:`cond` with :math:`\delta\mathbf{A} = \mathbf{A}_{\mathrm{NR}}(\psi)-\bar{\mathbf{A}}`, .. math:: \delta\lambda_i(\psi) = \frac{\mathbf{y}_i^{\mathsf H}\big(\mathbf{A}_{\mathrm{NR}}(\psi)-\bar{\mathbf{A}}\big) \mathbf{x}_i}{\mathbf{y}_i^{\mathsf H}\mathbf{x}_i}, and the standard deviation of the resulting frequency and damping across azimuths is the spread — zero for an isotropic rotor, growing with anisotropy. These are fused into one **unified confidence** in :math:`[0,1]` as a product of independent reliability factors, .. math:: c_i = \underbrace{\kappa_i^{-1}}_{\text{conditioning}}\ \cdot\ \underbrace{d_i}_{\text{degeneracy}}\ \cdot\ \underbrace{\exp\!\big(-\sigma_{f,i}/(f_i\,s)\big)}_{\text{azimuth stability}}\ \cdot\ \underbrace{t_i}_{\text{tracking}}, where :math:`\sigma_{f,i}` is the frequency spread, :math:`s` a scale, and :math:`t_i` the tracking confidence. A low :math:`c_i` inflates the Kalman initial covariance, propagating uncertainty into the digital-twin export. 9. State-space export --------------------- The averaged or modal model is exported as a validated continuous-time LTI system. Zero-order-hold discretization at sample time :math:`\Delta t` uses the augmented matrix exponential, giving discrete eigenvalues :math:`e^{\lambda\Delta t}` and preserving stability. A **real modal realization** places each mode, with eigenvalue :math:`\lambda = \sigma + j\omega` (:math:`\sigma=\operatorname{Re}\lambda`, :math:`\omega=\omega_d`), in a :math:`2\times 2` block acting on the real and imaginary parts of its modal coordinate, .. math:: \begin{bmatrix} \sigma & -\omega \\ \omega & \sigma \end{bmatrix}, whose eigenvalues are exactly :math:`\sigma \pm j\omega`; when mode shapes are supplied the output matrix maps the modal states to physical responses through :math:`[\,2\operatorname{Re}\boldsymbol\phi,\ -2\operatorname{Im}\boldsymbol\phi\,]`. The block-diagonal model therefore reproduces the identified frequencies and damping to machine precision (export fidelity). The Kalman matrices :math:`\mathbf{Q}`, :math:`\mathbf{R}`, :math:`\mathbf{P}_0` are assembled with the per-mode confidence inflating the **initial** state covariance :math:`\mathbf{P}_0` — a less-trusted mode starts with larger variance — while :math:`\mathbf{Q}` and :math:`\mathbf{R}` take their configured process- and measurement-noise levels. References ---------- .. [Coleman1957] Coleman, R. P., & Feingold, A. M. (1957). *Theory of self-excited mechanical oscillations of helicopter rotors with hinged blades.* NACA Report 1351. .. [Bir2008] Bir, G. (2008). Multi-blade coordinate transformation and its application to wind turbine analysis. *AIAA/ASME Wind Energy Symposium.* NREL/CP-500-42553. .. [Wilkinson1965] Wilkinson, J. H. (1965). *The Algebraic Eigenvalue Problem.* Oxford University Press. .. [Allemang2003] Allemang, R. J. (2003). The modal assurance criterion — twenty years of use and abuse. *Sound and Vibration*, 37(8), 14–23. .. [Vacher2010] Vacher, P., Jacquier, B., & Bucharles, A. (2010). Extensions of the MAC criterion to complex modes. *Proceedings of ISMA 2010.*