Coordinate systems, origins and datums
This page records the frames, orderings, and reference points VANE assumes, so that results can be interpreted unambiguously.
Reference frames
- Rotating (blade) frame
The frame OpenFAST writes for blade degrees of freedom, rotating with the rotor. Channels carry a per-channel rotating-frame flag in the
.lintables; the MBC3 transform uses it to find blade triplets.- Non-rotating (fixed) frame
The frame after the MBC3 transform. The three per-blade coordinates of a triplet become a non-rotating
[collective, cosine, sine]set. The averaged model lives entirely in this frame; tower, drivetrain, and platform degrees of freedom are already non-rotating and pass through unchanged. A rotating state that forms no complete triplet (for example of a one- or two-bladed rotor) stays in the rotating frame, and a warning is logged.
Azimuth convention
Rotor azimuth is read from the .lin header in radians. It is converted to degrees
(MBCResult.azimuths_deg) and wrapped to [0, 360) deg for the sweep checks, so a
file at 0 deg and one at 360 deg count as duplicates. The MBC3 transform averages the
transformed matrices over the sampled azimuths; for an isotropic rotor the averaged
model does not depend on the azimuth origin. The transform takes blade b at azimuth
\(\psi + 2\pi (b-1)/3\); see Linearized dynamics and the multi-blade transform.
State-space layout
After the transform, the state vector is reordered into the block layout
x = [ q2 ; q2dot ; q1 ]
where q2 are the second-order (displacement) degrees of freedom, q2dot their
time derivatives, and q1 the first-order states. A velocity is recognised by
the First time derivative of marker, or by a rate unit (.../s) on a state
whose position partner is present: MoorDyn Px/Vx node states and ServoDyn
structural-control X m / dX/dt m/s states (unit written after whitespace,
not a comma) pair this way. A marker velocity whose displacement partner is present
is paired with it whatever derivative order the file records (SubDyn writes order 0
for its rigid-body mode pairs).
Mode shapes are reported over the displacement and first-order states
(q2 then q1); the eigensolver drops the velocity rows from the full
eigenvectors. Multi-blade coordinate annotations (MBCResult.mbc_coordinates, carried
to ModalSolution.dof_mbc_coordinates) record, for each state, whether it is a
collective, cosine, or sine coordinate, or "" for a non-rotating state.
Degree-of-freedom mapping
Each ElastoDyn channel description embeds an OpenFAST internal DOF token (for example
DOF_TFA1 for the first tower fore-aft mode or DOF_BF(1,1) for blade 1’s first
flapwise mode). classify_dof() maps that token onto a
physical DofCategory, the originating module, and the blade
index, which drive labelling and the collective, regressive and progressive blade-mode
types.
BeamDyn blade frame
BeamDyn states carry no DOF token. Each is a finite-element nodal quantity, for example
BD_1 finite element node 2 (number of elements = 1; element order = 5)
translational displacement in X, m (or rotational displacement in Z, rad), with
a velocity twin spelled BD_1 First time derivative of finite element node ....
BD_<n> names the blade; node 1 is the blade root, a constraint that is never a
state, and the node index increases toward the tip.
The nodal components are expressed in the BeamDyn blade reference frame frozen at the operating point: the blade-root orientation ElastoDyn passes to BeamDyn, which is ElastoDyn’s pitched blade coordinate system.
Zruns along the pitch axis, root to tip.Xis normal to the rotor plane at zero pitch: the flapwise direction.Ylies in the rotor plane at zero pitch: the edgewise direction.
The frame turns with the blade pitch, so X/Y stay flapwise/edgewise at any
pitch angle; only the local structural twist mixes them (most near the root), which
is the same pitch-axis flap/edge split ElastoDyn uses for its tip deflections.
classify_dof() therefore maps a translation along X or a
rotation about Y to BLADE_FLAP, a translation along Y or a rotation about
X to BLADE_EDGE, a rotation about Z to BLADE_TORSION, and a
translation along Z to BLADE_AXIAL, and reports the node and component on
DofInfo. The rotations are BeamDyn’s Wiener-Milenkovic
parameters, which equal the rotation angle to first order.
Because the linearized beam’s root boundary condition is the root-motion input
measured from the same frozen frame, every nodal state is the total perturbation of
that node: it includes the rigid motion the blade root carries (a rotor-azimuth
perturbation is a rigid rotation of every node), and the velocity states are total
velocities. The nodal states are flagged rotating, so the MBC3 transform groups the
BD_1/BD_2/BD_3 copies of each node and component into triplets.
Origins and datums
VANE does not redefine geometric origins; it inherits OpenFAST’s. Rotor and tower geometry extracted from the ElastoDyn input (tip and hub radius, tower height and base height) is reported in the model’s own datum. It is used for context, such as the participation scale factors and the reference geometries of the mode-shape views, and is not used to re-reference the state-space model.