Title: AeroDyn v5.0.0 propagation-direction Jacobian uses stale wind rotations
Bug description
During linearization, AeroDyn perturbs PropagationDir without refreshing the dependent wind rotation matrices and rotation-enable state before evaluating the perturbed velocity.
At the validated operating point, the original implementation produces a zero propagation-direction column in B and zero direction feedthrough to turbine outputs in D across all 36 azimuths. InflowWind’s velocity-output Jacobian nevertheless correctly gives:
$$
\frac{\partial V_y}{\partial \psi} = -U
$$
To Reproduce
Steps to reproduce the behavior:
- Compile OpenFAST v5.0.0 in double precision.
- Linearize an aeroelastic case using uniform wind with vertical shear, zero mean propagation direction and upflow angle, and extended wind inputs enabled. Collect 36 azimuth snapshots.
- Open the resulting
.lin files and locate the propagation-direction input columns in B and D.
- In the validated case, the state-input and turbine-output direction derivatives are zero, while the InflowWind lateral-velocity derivative is correctly
−U.
These observations were validated at one operating point; equivalent behavior has not been established for arbitrary configurations.
Expected behavior
A propagation-direction perturbation should update the wind velocity evaluated by AeroDyn, allowing the corresponding aeroelastic derivatives to be calculated consistently with InflowWind.
Screenshots, if applicable
Not applicable; evidence comes from numerical comparisons of the .lin matrices.
OpenFAST Version
- Base version: OpenFAST v5.0.0
- Base commit:
2895884d2be01862173c88d70f86b358d2f1a50a
- Local validation build:
v5.0.0-psi-validation
- Architecture: 64 bit
- Precision: double
The validation build supports comparison of the original perturbation behavior, the repaired implementation, and an independent finite-difference implementation.
System Information (please complete the following information):
- OS: Windows, 64 bit
- Compiler: Intel Fortran
ifx 2026.0, build 20260331
- Build system: CMake with Ninja
- Relevant settings:
-DDOUBLE_PRECISION=ON
-DOPENMP=OFF
-DBLA_VENDOR=Intel10_64lp_seq
-DCMAKE_BUILD_TYPE=Release
Additional context
The affected code is AD_JacobianPInput → PerturbFlowField in modules/aerodyn/src/AeroDyn.f90. Updating PropagationDir alone leaves RotToWind, RotFromWind, and RotateWindBox stale.
The repair refreshes these quantities when direction is perturbed and restores the base rotation before subsequent perturbations.
At one operating point, the repaired implementation restores a nonzero direction response and agrees with an independent uniform-wind-angle finite-difference perturbation across all 36 azimuths at the same step size. Saved operating states, A, C, and non-direction columns of B and D remain unchanged at saved precision.
Finite-difference step-size accuracy is a separate numerical issue. Agreement at a common step validates the rotation repair; it does not establish that the default step is sufficiently accurate.
Title: AeroDyn v5.0.0 propagation-direction Jacobian uses stale wind rotations
Bug description
During linearization, AeroDyn perturbs
PropagationDirwithout refreshing the dependent wind rotation matrices and rotation-enable state before evaluating the perturbed velocity.At the validated operating point, the original implementation produces a zero propagation-direction column in
Band zero direction feedthrough to turbine outputs inDacross all 36 azimuths. InflowWind’s velocity-output Jacobian nevertheless correctly gives:To Reproduce
Steps to reproduce the behavior:
.linfiles and locate the propagation-direction input columns inBandD.−U.These observations were validated at one operating point; equivalent behavior has not been established for arbitrary configurations.
Expected behavior
A propagation-direction perturbation should update the wind velocity evaluated by AeroDyn, allowing the corresponding aeroelastic derivatives to be calculated consistently with InflowWind.
Screenshots, if applicable
Not applicable; evidence comes from numerical comparisons of the
.linmatrices.OpenFAST Version
2895884d2be01862173c88d70f86b358d2f1a50av5.0.0-psi-validationThe validation build supports comparison of the original perturbation behavior, the repaired implementation, and an independent finite-difference implementation.
System Information (please complete the following information):
ifx2026.0, build20260331Additional context
The affected code is
AD_JacobianPInput→PerturbFlowFieldinmodules/aerodyn/src/AeroDyn.f90. UpdatingPropagationDiralone leavesRotToWind,RotFromWind, andRotateWindBoxstale.The repair refreshes these quantities when direction is perturbed and restores the base rotation before subsequent perturbations.
At one operating point, the repaired implementation restores a nonzero direction response and agrees with an independent uniform-wind-angle finite-difference perturbation across all 36 azimuths at the same step size. Saved operating states,
A,C, and non-direction columns ofBandDremain unchanged at saved precision.Finite-difference step-size accuracy is a separate numerical issue. Agreement at a common step validates the rotation repair; it does not establish that the default step is sufficiently accurate.