Limitations
VANE states its assumptions explicitly so results are not over-interpreted.
Input format and rotor
Modern ``.lin`` only. The legacy OpenFAST linearization format is rejected.
Three-bladed rotors. The MBC3 transform and the blade collective/regressive/progressive taxonomy assume a three-bladed rotor. Two- or many-bladed rotors are out of scope for the multi-blade coordinate path; purely non-rotating models (no blade triplets) are averaged without the transform.
Averaged-model assumptions
The averaged non-rotating model approximates a linear time-periodic system by its azimuth average. It is exact for an isotropic rotor and degrades with anisotropy; the azimuth-spread uncertainty quantifies how much. A coherent sweep (distinct azimuths, constant rotor speed) is required and enforced.
Adequate azimuth coverage is the user’s responsibility; VANE rejects degenerate sweeps but does not synthesize missing azimuths.
estimate_averaging_error()estimates the error of the averaged model on a delivered azimuth grid (see Azimuth averaging).Hill’s method needs near-uniform azimuths.
floquet_modes()andaveraging_error()require every azimuth interval to equal the mean interval within a relative \(10^{-3}\) and raise aValueErrorotherwise. Delivered OpenFAST grids are often uneven; analyse them withmonodromy_exponents(), which accepts any distinct azimuths (see Floquet analysis of the periodic system).
Excluding the linearization azimuths near tower passage is not a remedy for averaging error. The true average over the revolution includes tower passage, so dropping those samples biases the average rather than correcting it. The recommended practice is an azimuth count that is not a multiple of the blade number, the interval-weighted mean on the delivered grid, and pinning the azimuth direction in a dense average (see Azimuth averaging).
Mode tracking
The cross-operating-point tracker offers two strategies. The default,
strategy="single_path", extracts each Campbell line as the globally optimal
single-path continuity through the sweep, then removes it and repeats. This is
deterministic and avoids greedy adjacent-point errors, but it is a sequential
extraction: in dense spectra or at near-degenerate crossings, an earlier high-scoring
path can still claim a node a later path would have preferred.
strategy="simultaneous" instead resolves each operating-point transition with one
maximum-weight assignment (the Hungarian algorithm), so no early link can strand a
mode a different pairing would have used. It is better suited to dense, crossing-rich
spectra such as floating-platform sweeps.
Passing branch_review=True adds a deterministic branch-review pass that flags
the crossing and veering hotspots where tracking is least certain — the clusters of
tracks whose frequencies approach and whose mode shapes genuinely compete — and
surfaces them (as branch_groups, a diagnostic figure, and a report section with
per-hotspot warnings) for manual review. Adding resolve=True also computes, for an
eligible hotspot of up to four tracks, the smooth (minimum-curvature) alternative —
the non-crossing branch convention — and attaches it as smooth_branches for
comparison. Both passes only report: they never re-draw the tracks, and VANE does
not perform a simultaneous globally optimal assignment over the whole
frequency-vs-parameter grid at once, nor resolve clusters of more than four tracks.
Treat flagged hotspots, ambiguous links (is_ambiguous), and low-confidence
tracks as candidates for manual review.
Resonance detection
Resonance detection reports line crossings between a mode curve and an nP
excitation line, with the crossing rotor speed, frequency, and damping interpolated
linearly, a damping-aware severity (a lightly damped crossing is more dangerous
than a well-damped one), and optional operating-window filtering. The excitation
family defaults to 1P/3P/6P/9P and can be set to any positive-integer harmonics. It
does not provide closest-approach margin bands or uncertainty-propagated crossings.
Physical labels for BeamDyn blades
BeamDyn blade modes are labelled flap, edge, or torsion from the blade-frame direction of their nodal states, and numbered from the spanwise sign pattern of the section rotation and their frequency order (see Mode identification). The remaining limits are:
Flap/edge is the pitch-axis split.
X/Yof the BeamDyn frame follow the blade pitch but not the local structural twist, so a strongly twisted, bend–twist coupled blade can split a mode between the flap and edge families; such a mode is named after the larger one with a correspondingly lower confidence, and flagged ambiguous when the two shares are withinLABEL_AMBIGUITY_RATIOof each other. For the reference blades (root twist up to about 15°) the leakage is below 7 % of a mode’s participation. The linearization file carries no structural twist, so the split is not twist-resolved.Nodal states carry rigid root motion. The linearized nodal states include the motion the blade root carries. Participation keeps the tower and platform modes on their ElastoDyn DOFs, and the shape order is taken from rotation increments, which are blind to a rigid root rotation; a mode whose blades only turn rigidly is not numbered. A rigid collective edgewise mode is reported as Rotor/Generator (BeamDyn turbines with a free generator show the rotor-azimuth mode near 1P).
Drivetrain coupling. With
DrTrDOFenabled the drivetrain-torsion mode’s participation sits in the BeamDyn nodal states rather than the ElastoDyn drivetrain DOF. It is recognized from the blade-root rotation (in phase with the tip for a locked generator, an elastic collective edgewise shape for a free generator; see Mode identification) and labelled Drivetrain Torsion. The rule is calibrated on the NREL 5 MW BeamDyn linearizations of the OpenFAST regression tests; a blade whose first collective edgewise mode itself rotates the hub in phase by more than a quarter of the tip rotation would be misread as drivetrain torsion.Higher modes on coarse meshes. The shape order needs enough nodes to resolve the sign changes; when it under-counts, the frequency order within the family and multi-blade type still numbers the mode correctly, but a missing lower mode can then only be detected up to the resolution of the mesh.
Labels on coupled models
The physical label names a mode after a DOF category only when the classified
(ElastoDyn or BeamDyn) DOFs carry at least min_known_participation (default 0.5) of its
left–right participation. Modes dominated by aerodynamic, hydrodynamic radiation,
mooring, or controller states are reported as Unidentified by design. A genuinely
mixed mode is named after its largest classified category, with a low confidence and
is_ambiguous=True when its runner-up carries at least
LABEL_AMBIGUITY_RATIO (0.75) of the winner’s weight; the
runner-up is given as alternative. For example, the NREL 5 MW
collective-edge/drivetrain mode near 1.7 Hz splits its participation roughly 48/43
between drivetrain torsion and blade edge and is labelled Drivetrain Torsion,
ambiguous, with 1st Blade Edge as the alternative. Read is_ambiguous and the
confidence together with the label; a track’s is_ambiguous, label_agreement
and point_labels show where along a Campbell line the identification is in
doubt.
Driving OpenFAST linearizations
VANE can drive OpenFAST to produce its own .lin data
(run_operating_sweep() and the lower-level vane.run
functions), but the linearization itself is bounded by OpenFAST physics and
configuration, not by VANE:
The rotor-performance schedule must be supplied. VANE never guesses the rotor speed and blade pitch at a wind speed — the sweep requires an operating curve, a rotor-performance CSV, or a controller
settlerun, and raises an error before any OpenFAST run without one. VANE computes no rotor performance itself (it has no aerodynamic-performance or blade-element dependency); the schedule is the user’s input.Floating ``settle`` runs are slow. Deriving the operating point by settling the fully-coupled controller is physics-bound: the lightly-damped platform modes take tens of minutes of simulated time per point to come to rest. A precomputed rotor-performance CSV or curve avoids the settle runs. The opt-in two-stage settle (
settle_platform_damping=) damps the platform temporarily and then confirms the equilibrium without the damping. It shortens the wait for a decaying transient, but it cannot settle a point whose undamped model oscillates without end. Above rated, a pitch-regulated rotor can remove damping from the slow surge mode. The confirmation then reports that the oscillation returns, andsettle_criterion="mean_drift"is the explicit way to linearize about its mean.The default disables the drivetrain-torsion DOF. The
structural_dofsdefault enables the blade and tower flexibility DOFs (a deck shipped with rigid blades, like the published IEA 3.4-MW one, would otherwise lose every blade mode) and turns offYawDOF(a spurious free nacelle-yaw rigid-body mode, since a linearization has no yaw controller) andDrTrDOF. DisablingDrTrDOFdrops the drivetrain-torsion mode (about 0.62 Hz on the NREL 5 MW turbine) from the extracted spectrum but markedly improvesCalcSteadytrim convergence, a deliberate trade-off. Passstructural_dofs={"DrTrDOF": True}to recover the drivetrain-torsion mode (at some convergence cost) while keeping the free-yaw mode suppressed.A non-converged trim is not averaged. A periodic (
CalcSteady) operating point is sampled atNLinTimesazimuths and MBC-averaged. When the trim does not converge, OpenFAST writes a single forced linearization instead. VANE treats this as a failed trim: it retries the point on the retry ladder and, if the point never converges, records it asconverged=Falserather than averaging the single file into a model.The default inflow is steady and uniform. Both the settle run and the linearization write
PLExp = 0(wind_shear_exponent=0.0), so a settled point is linearized in the wind it settled in, but the model then carries no shear-induced once-per-revolution loading. Setwind_shear_exponent(used by both) for a sheared study, orNoneto keep the template deck’sPLExp.Explicit times do not establish equilibrium. Disabling
CalcSteadyand supplying a full-revolutionlinearization_timessequence only controls where OpenFAST evaluates the Jacobians. The user must first settle the rotating system. The driver accepts the run when every requested.linfile exists; to check the equilibrium as well, setLinearizationDriver(acceptance_policy=...)(LinearizationAcceptancePolicy), which rejects a secular residual in the platform-rate states.
Scope
VANE drives OpenFAST linearizations — configuring a deck for an operating point,
running the executable, and collecting the .lin output (vane.run) — and
post-processes them; it is not a model-building or design-assessment tool.
Full-system mode-shape visualization deforms the entire turbine — floating platform, mooring lines, tower, nacelle, and blades — with the computed complex mode shape. It is a communication and debugging aid, not a geometry-resolved structural-validation artifact: the hull and mooring outlines are schematic and the tower/blade deflections use Euler-Bernoulli (cantilever) shape functions, so the relative motion across the structure is faithful to the computed mode while the absolute geometry is approximate.
The quantity-of-interest (load) residue map (build_qoi_map()) reports
each load’s modal residues C·Φ — which modes drive which loads, an observability
and screening aid. It is not a fatigue or design-load ranking: that requires input
(modal-coordinate) scaling, unit normalization, environmental spectra or time-domain
loading, and design-load-case/fatigue context, none of which the linear residue alone
provides.