Skip to content

SubDyn: add per-member discretization support to align meshes with HydroDyn#3385

Open
luwang00 wants to merge 39 commits into
OpenFAST:devfrom
luwang00:subdyn_discretization
Open

SubDyn: add per-member discretization support to align meshes with HydroDyn#3385
luwang00 wants to merge 39 commits into
OpenFAST:devfrom
luwang00:subdyn_discretization

Conversation

@luwang00

Copy link
Copy Markdown
Contributor

This PR is ready. Need to merge PR #3356 into rc-5.0.1 and merge rc-5.0.1 into dev first.

Feature or improvement description

This PR adds optional element-length-based discretization for beam member to SubDyn. In the SubDyn input file, the MEMBERS table now accepts a new optional 8th column at the end called MDivSize. It defines the maximum length in meters of the resulting equal-length elements after discretizing the member. Effectively, it behaves the same way as MDivSize in the HydroDyn input file.

Each member can have a different MDivSize. If omitted for a given member, that particular member will revert back to NDiv elements as before. This allows for backward compatibility. MDivSize is always ignored for non-beam members, including cables, rigid links, and spring elements, which are not subdivided.

Internally, SubDyn initialization and output have been revised to support differing number of elements for each member. When requesting beam member nodal outputs (load and motion), NodeCnt must be less than or equal to NDiv+1 if default discretization based on NDiv is used (MDivSize not specified), or be less than or equal to the actual number of nodes belonging to that member after discretization based on MDivSize. Users can refer to the SubDyn summary file for the number of nodes belonging to each member.

The primary purpose of this change is to simplify mesh alignment between SubDyn and HydroDyn for hydroelastic simulations. Aligned meshes between the two modules are recommended to ensure physical results. With this update, if a member has the same starting and ending joint coordinates and the same MDivSize in the two module input files, the internal mesh nodes will also be aligned between the two modules. Additionally, if members have drastically different lengths in SubDyn, the MDivSize based discretization is more appropriate compared to the uniform subdivision based on NDiv. The latter will either result in excessive discretization of short members or inadequate discretization of long members.

Impacted areas of the software
SubDyn, docs, r-test

Generative AI usage
Co-authored-by: Microsoft Copilot copilot@microsoft.com

Test results, if applicable
No change to existing r-tests (all passed); added a new SubDyn module r-test called SD_2Beam_MixedDiscretization to demonstrate the new discretization capability for beams.

  • r-test branch merging required

andrew-platt and others added 30 commits June 2, 2026 14:31
The third term in the calculation was incorrect.  This routine has not been used since it was added in 2014, so no results will be affected.

This was reported on the forum here: https://forums.nlr.gov/t/beamdyn-questions/9518/3
[BugFix] Error in `Quaternion_to_DCM` calculation
…mary file

Update AllFmt format strings in BeamDyn_IO.f90 for Init_Nodes and Init_QP
arrays to use proper spacing and trailing comma in Fortran format specs.
This was preventing writing of this information.

Remove redundant format statement from yaml_write_array2R[48]
I missed the usage of it right afterwards
Fix format issue preventing fields from appearing in BeamDyn YAML summary file
RBergua and others added 9 commits June 26, 2026 08:23
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…Corrected the figure for the element local coordinate system.
Add optional per-member MDivSize parsing and resolve per-member MemberNDiv with global NDiv fallback.

Refactor FEM discretization to use per-member divisions, cache MemberElemStart, and avoid max-width MemberNodes storage.

Update output mapping and summary generation to reconstruct member node ordinals from connectivity and MemberElemStart.

Register and document SD_2Beam_MixedDiscretization regression case and update r-test submodule pointer.

Co-authored-by: GitHub Copilot <copilot@github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants