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

MoorDyn v2 + shared moorings + wave propagation in FAST.Farm #1086

Merged
merged 175 commits into from
Sep 10, 2022

Conversation

mattEhall
Copy link
Contributor

@mattEhall mattEhall commented Apr 11, 2022

This pull request can be merged once tests are finalized.

Feature or improvement description
This pull request introduces MoorDyn v2 (a massive increase in mooring modeling capabilities) and updates to FAST.Farm to better model floating wind farms including with shared mooring systems.

MoorDyn improvements:

  • New rigid-body Rod and Body object types (Connections renamed Points)
  • Completed MoorDyn Driver
  • Standardized input file format
  • Active tensioning
  • Linearization functions
  • Nonlinear tension-strain relations for lines
  • Viscoelastic capability for lines (for synthetic ropes)
  • Line bending stiffness for power cables
  • Built-in grid-based wave kinematics based on input wave elevation time series
  • Built-in table-based steady current profile
  • Water kinematics applied on Lines, Points, and Rods
  • Rod free-surface hydrodynamics in all orientations (with wave stretching, fully nonlinear)
  • Seabed bathymetry grid accounting for arbitrary seabed contours and effect of slope and change in depth
  • Line-seabed friction modeling including static and kinetic friction coefficients
  • Support for multiple input and output meshes for use with FAST.Farm

FAST.Farm improvements:

  • "Mod_SharedMooring" - Alternate time stepping arrangement that allows array-level communication between FAST instances and an array-level MoorDyn instance that can be used for shared moorings and shared anchors as well as fully dynamic intra-array cables
  • "Mod_WaveField" - Can account for individual turbine positions when computing incident waves and result loads so that phasing from wave propagation throughout the array is accurately modeled

Impacted areas of the software

  • MoorDyn and how it is called within FAST (I/O meshes are now arrays)
  • FAST.Farm (new alternative time stepping option) and FAST wrapper through to HydroDyn and MoorDyn (turbine reference positions in the array are passed down to the modules from FAST.Farm)

Additional supporting information
This is an updated PR of postponed PRs #750 and #747 along with many improvements done for various NOWRDC and ATLANTIS projects since then.

Dependencies
This depends on PR #999

Test results, if applicable
TBD

ToDo

mattEhall and others added 30 commits July 6, 2020 10:38
 - Tension amplitudes were sometimes changing, typically at 512 s.
 - This was likely caused by use of single-precision time variable with MD_Input_ExtrapInterp.
 - All time variables are now double precision, solving the problem.
…CF-mods2

 - This brings in the initial active tension capability and the MoorDyn driver.
 - Much of this will be overwritten shortly by MoorDyn v2 code.
… changes and to hard-code a simple wave kinematics grid to pass this info to MoorDyn for buoyancy cans.
… turbine positions:

- New variable WaveFieldMod is passed through FAST.Farm into each OpenFAST instance
  to each HydroDyn module  where it can adjust phases in the complex wave elevation
  amplitudes in Waves and Waves2.
- This adds a new line for Mod_WaveField below the line for Mod_AmbWind in the
  FAST.Farm primary input file:
- Mod_WaveField   Wave field handling (-) (switch) {1: use individual HydroDyn inputs
  without adjustment, 2: adjust wave phases based on turbine offsets from farm origin}
…e. Still some things to work out for buoyancy can applications.
… parameters of the Waves module. This makes it quicker to adjust the grid settings and recompile. Also fixed the allocation oversight that prevented WaveMod=0 cases from running (given this wave grid functionality).
 - Solved memory bug in WameMod=0 case by reordering htings.
 - Removing unnecessary USE WAVES and specifying "only..." in MD.
 - In MD, now using WaveTimes array rather than (J-1)*dtWave.
 - Fixed error in MD Rod Froude Krylov force calculation (was 50% too small)
This brings the latest TCF-mods2 work along with everything else in dev into the
MoorDyn v2 branch.
…t/openfast into MDv2

- Not yet tested. Need to resolve some compile issues first.
- Set up new control section in MoorDyn input file parsing.
- A couple adjustments to stage-setting for future farm-level
  mooring capability with FAST.Farm.
- Created a MoorDyn instance in FAST.Farm that can do array-level moorings.
- Modified MoorDyn to take an array of all platform-related inputs/outputs.
- In normal MoorDyn use in FAST, only the first entry of these arrays is used.
- in FAST.Farm use of the farm-level MoorDyn, the arrays are size nTurbines
  and they facilitate coupling with each turbine.
- Modified FAST_Solver etc. to support the new array format
- Various modifications in FAST.Farm to support the farm-level mooring capability.
- New MoorDyn coupling functions are in FAST_Farm_Subs.
- Made a separate workflow in FARM_UpdateStates to support the necessary substepping
  between all FAST instances and MoorDyn, at new introduced timestep DT_mooring, which
  is between DT_low and DT_FAST. Included a modified OpenMP nested parallel approach
  to keep the FAST instances in parallel while having a longer-term parallel AWAE call.
- Some bugs still. Currently hitting a mesh issue with the farm-level MoorDyn mesh
  mapping I set up. "MD_2_FWrap:MeshMapCreate:MeshMap%MapLoads not allocated because
  no nodes were found to map."
andrew-platt and others added 6 commits September 6, 2022 15:48
If a turbine is using SubDyn, the shared moorings connection will be to the platform reference point and not the SubDyn structure.  This can lead to some incorrect behaviour if the mooring connections need to be at points on a flexible platform.
Merge dev into MDv2-farm to update MDv2-farm in preparation for merging into dev for v3.3
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.

I have reviewed various sections of this source code update before and I'm generally happy with that. I am interested in reviewing the updated documentation once that has been added.

Rather than porting everything over, we are simply linking to the other set of documentation that goes with the MoorDyn C++ version.
Not sure it was necessary to really spell out all the MD changes, but I did anyhow
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.

This documentation looks like a great start; thanks!

@andrew-platt
Copy link
Collaborator

@jjonkman, I added some documentation viewable here:

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.

There are certainly more changes that could be made to the FAST.Farm theory section for the shared moorings code, but that is probably asking too much at this point. I approve.

@andrew-platt andrew-platt merged commit 8ad56a7 into OpenFAST:dev Sep 10, 2022
@andrew-platt andrew-platt mentioned this pull request Sep 10, 2022
13 tasks
@rafmudaf rafmudaf mentioned this pull request Oct 27, 2022
10 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.

6 participants