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

Support for large platform yaw offset in OpenFAST #2203

Merged
merged 106 commits into from
Aug 29, 2024

Conversation

luwang00
Copy link
Contributor

@luwang00 luwang00 commented May 10, 2024

Feature or improvement description

  • The PR adds support for unrestricted platform rotation in ElastoDyn and SubDyn (for floating only).
  • HydroDyn is currently limited to large yaw motion only with small roll and pitch offset.
  • This PR also updates the general checking and handling of wave headings in the WAMIT and WAMIT2 modules for robustness. It should address some known issues when the range of wave headings crosses the +/-180-deg cut.
  • The option to disable GuyanLoadCorrection in SubDyn is removed. GuyanLoadCorrection will always be used from now on.

Impacted areas of the software
Main impacted modules: ElastoDyn, HydroDyn, SubDyn
Minor updates for linearization: AeroDyn, MoorDyn, ServoDyn

Related Issue
For floating, the Guyan (rigid-body) modes of SubDyn models are made nonlinear and exact, consistent with ElastoDyn-only models. This change should address the discrepancies observed in Issue #2021.

Test results, if applicable

  • r-test HydroDyn files are updated with the new inputs.
  • With ElastoDyn and SubDyn switching to fully nonlinear platform rotation instead of small rotation approximation, the results of many existing r-tests involving a floating structure also changed and need to be updated.
  • Some r-test results for the SubDyn module also changed because the option to disable GuyanLoadCorrection is removed, and all r-test results for SubDyn need to be regenerated with GuyanLoadCorrection set to true.
  • HydroDyn r-test input files need to be updated because the input PRP motion file is now assumed to contain the time derivatives of the Tait-Bryan angles instead of the angular velocity and angular acceleration. HD driver will convert the input to angular velocity and angular acceleration internally.
  • HydroDyn r-test output files also changed because some nonlinearity with rotational offset is introduced into the hydrostatic loads of potential-flow bodies.
  • Several new r-tests with large yaw offset are added for the HydroDyn driver.
    See PR #133 to r-test.

Representative changes to r-test results are shown below:

5MW_OC3Mnpl_Linear
The eigenfrequencies from this test case show slight changes due to the changes made to the platform roll, pitch, and yaw DoF in ElastoDyn.

|             New            |     Reference (dev with     |
|                            |     GuyanLoadCorrection)    |
|  Freq (Hz)  |   Damp (%)   |   Freq (Hz)  |   Damp (%)   | 
|-------------|--------------|--------------|--------------|
| 0.017796474 | -0.777738405 | 0.017796428  | -0.777738379 |
| 0.017882340 |  0.779210600 | 0.017882306  |  0.779210674 |
| 0.275399247 |  0.001722274 | 0.275335134  |  0.001721133 |
| 0.277751794 |  0.001549770 | 0.277687353  |  0.001548639 |
| 0.712753964 |  0.004198908 | 0.712751224  |  0.004198887 |
| 0.743403938 |  0.004485754 | 0.743401949  |  0.004485744 |
| 0.995640417 |  0.005045851 | 0.995640050  |  0.005045819 |
| 1.091265363 |  0.005146327 | 1.091264164  |  0.005146313 |
| 1.191872529 |  0.005402909 | 1.191872058  |  0.005402910 |
| 1.654263201 |  0.019777407 | 1.654238948  |  0.019776211 |

5MW_OC3Spar_DLL_WTurb_WavesIrr
Note that the roll motion and, by extension, sway motion changed because ED now solves the nonlinear rotation in the order of intrinsic yaw->pitch->roll. While yaw is fairly small in this case, the moderate pitch displacement affects the roll response of the spar.
image
image
image
image
image

5MW_OC4Semi_WSt_WavesWN
image
image
image
image

* Modified the HD Driver code to include large yaw offset.
* Modified HydroDyn to pass relevant new inputs and parameters to submodules
* Modified the Morison module to account for large yaw offset.
* Moved the helper subroutines to a separate YawOffset module to avoid code duplication.
* Fixed single-precision compile.
Added wrapper functions for GetSmllRotAngs in the YawOffset module to accommodate large yaw offset.
Updated the linear wave excitation from the WAMIT module to work with dynamic large platform yaw offset.
Minimize code duplication.
Update the potential-flow wave-radiation and hydrostatic loads to account for the large platform yaw offset.
…ns with only one grid point

This is convenient by allowing the various possible combinations of HD potential-flow wave-excitation settings to share the same array dimensions and interpolation functions.
Streamline linear wave excitation interpolation in WAMIT.f90.
Don't update PtfmRefY if PtfmYMod != 1.
* Added some basic checking for the new driver inputs associated with yaw offset.
* Added the YawJoint subroutine under Morison_CalcOutput to clean up the code.
Included some additional checks for input validity.
Added static yaw rotation of the Morison mesh nodes based on PtfmRefY when PtfmYMod=0 and WaveDisp=0.
Updated the second-order wave loads to support large platform yaw offset.
Added some missing deallocation command in WAMIT2.
Added rotation of the full difference-frequency and sum-frequency QTF loads based on static PtfmRefY.
* Update the checking of wave heading ranges in WAMIT2 (this part needs more work).
* Bug fix for the rotation matrix of second-order wave loads.
…heading check into a dedicated subroutine to minimize code duplication
… approximation

* HydroDyn now assumes the three rotation angles are the Tait-Bryan roll, pitch, and yaw angles following the intrinsic yaw-pitch-roll convenction.
* The angular velocity and acceleration passed to HydroDyn should be the true angular velocity and acceleration vectors in the inertial frame, not the time derivatives of the Tait-Bryan angles.
@luwang00
Copy link
Contributor Author

@andrew-platt I updated the MoorDyn and HydroDyn c-binding by replacing the calls to SmllRotTrans with EulerConstructZYX. I hope this is all we needed to do. It is the user's responsibility to make sure the data passed to HydroDyn and MoorDyn follow the adopted rotation convention and that the angular velocity and acceleration are computed correctly for large rotation. (Note that I have moved the yaw filter from ElastoDyn back into HydroDyn as discussed, so HydroDyn no longer requires any new inputs from the coupling code.)

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.

2 participants