Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix BD + AD linearization indexing (negative damping results) #2060

Merged
merged 3 commits into from
Feb 29, 2024

Conversation

andrew-platt
Copy link
Collaborator

This commit follows PR #2055

Feature or improvement description
Linearization with BeamDyn and AeroDyn has often resulted in negative damping results in the frequency analysis. The root cause of this was due to an incorrect indexing in the dUdy array for the start location of BeamDyn blade output motion to AeroDyn input blade motion. Instead of starting at the first index for the BD motion, the index was set to the start of the BD reaction load. This shifted all BD motion component mappings in dUdy by 6 indices thereby mapping BD reaction loads to AD node 1 motions.

Related issue, if one exists
This has existed in the code since commit 315bb29.

Impacted areas of the software
Linearization of BeamDyn with AeroDyn.

Additional supporting information
In the 5MW_Land_BD_Linear_Aero test case (added in #2055), the complete list of outputs includes (blade 1 shown, blades 2 & 3 similar):

    Row     Description
    ----    -----------
    ...     ...
    749     ED TwrBsMyt, (kN-m)
    750     ED TwrBsMzt, (kN-m)
    751     BD_1 Reaction force X force, node 1, N
    752     BD_1 Reaction force Y force, node 1, N
    753     BD_1 Reaction force Z force, node 1, N
    754     BD_1 Reaction force X moment, node 1, Nm
    755     BD_1 Reaction force Y moment, node 1, Nm
    756     BD_1 Reaction force Z moment, node 1, Nm
    757     BD_1 Blade motion X translation displacement, node 1, m
    758     BD_1 Blade motion Y translation displacement, node 1, m
    759     BD_1 Blade motion Z translation displacement, node 1, m
    760     BD_1 Blade motion X translation displacement, node 2, m
    ...     ...

In the original formulation, index 751 was getting used as the start of the BeamDyn output blade motion in dUdy instead of the correct index of 757

This issue was discovered by @deslaughter during the development of the tight coupling algorithm for v5.0.0, and the linearization modifications for 4.0.0 (PR #2014).

Test results, if applicable
Test case 5MW_Land_BD_Linear_Aero results change in frequency and damping:

Case: 5MW_Land_BD_Linear_Aero:1.lin: :
             Frequency (Hz)                        Damping (%)
          ----------------------------         ----------------------------
           Ref              New                 Ref              New
          0.319252611      0.322078180         0.009537993      0.004767958
          0.346346186      0.340730801         0.095417269      0.084266008
          0.679221741      0.715607694         0.699663255      0.841247052
          0.808933639      0.746295062         0.609774060      0.801920896
          1.098353857      0.765246954         0.008544169      0.799074416
          1.164942604      1.097330780        -0.041267917      0.008421656
          1.457077372      1.112275601         0.926460147      0.010617836
          1.673366627      1.682866825         0.025520685      0.021900802
          1.866146375      1.991435464         0.114474097      0.194462334
          2.090943724      1.996885379        -0.416019215      0.206933588
          2.120672704      2.088342657         0.158191235      0.199726046
          2.706538417      2.741140597         0.030667009      0.017468285
          2.790739804      2.888865017         0.044923455      0.026717351

The motions in dUdy from BD were starting at the incorrect index.  Instead of starting at the motion, the index started at the root load output.  This resulted in a shift of all the dUdy terms coupling y_BD motion to u_AD blade motion.

This error has existed since at least commit 315bb29 on April 13, 2018

Co-authored-by: Derek Slaughter <deslaughter@gmail.com>
@andrew-platt
Copy link
Collaborator Author

This commit is ready for merging pending testing by @ptrbortolotti and reviews.

@andrew-platt andrew-platt changed the base branch from rc-3.5.3 to dev February 28, 2024 18:24
@andrew-platt andrew-platt changed the base branch from dev to rc-3.5.3 February 28, 2024 18:24
…h documentation)

This results in some differences in the dUdy, A, and C matrices, but basically the same frequencies

Co-authored-by: Derek Slaughter <deslaughter@gmail.com>
@@ -3331,8 +3331,8 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD

! ED translation displacement-to-ED moment transfer (dU^{ED}/dy^{ED}) from BD root-to-ED hub load transfer:
ED_Start = Indx_u_ED_Hub_Start(u_ED, y_FAST) + u_ED%HubPtLoad%NNodes*3 ! start of u_ED%HubPtLoad%Moment field (skip forces)
ED_Out_Start = Indx_y_ED_Hub_Start(y_ED, y_FAST) ! start of y_ED%HubMotion%TranslationDisp field
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that the documentation has this as a summation of all the terms, not terms at each ED root node to the hub. So this change makes it more consistent with the documentation and doesn't affect the resulting frequencies.

This also brings this closer in line with the tight coupling implementation.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the rest of the code, it looks like the original implementation where it connected to the blade root was a bug.... that apparently didn't affect the results. Thanks for fixing it!

BD_Out_Start = y_FAST%Lin%Modules(Module_BD)%Instance(k)%LinStartIndx(LIN_OUTPUT_COL)

BD_Out_Start = y_FAST%Lin%Modules(MODULE_BD)%Instance(k)%LinStartIndx(LIN_OUTPUT_COL) & ! start of BD%y(k)%BldMotion%TranslationDisp field
+ BD%y(k)%ReactionForce%NNodes * 6 ! 2 fields with 3 components
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change was the problem that likely was giving rise to negative damping.

Copy link
Collaborator

@jjonkman jjonkman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, great find! This issue has been plaguing us for a long time!

@andrew-platt andrew-platt merged commit 94a51d4 into OpenFAST:rc-3.5.3 Feb 29, 2024
19 checks passed
@andrew-platt andrew-platt deleted the b/LinBD_AD branch March 4, 2024 16:57
@andrew-platt andrew-platt mentioned this pull request Mar 26, 2024
27 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants