Skip to content

Add back free-surface normal computation based on finite differencing - #3503

Merged
andrew-platt merged 1 commit into
OpenFAST:rc-5.0.1from
luwang00:SeaSt_HD_Finite_Difference_Wave_Normal
Nov 3, 2026
Merged

andrew-platt merged 1 commit into
OpenFAST:rc-5.0.1from
luwang00:SeaSt_HD_Finite_Difference_Wave_Normal

Conversation

@luwang00

@luwang00 luwang00 commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

This PR is ready for merging.

Feature or improvement description
The free-surface normal used by the Morison hydrostatic loads is again computed by central differencing the wave elevation over +/- the section half-width, now on the cubic-interpolated surface. The exact point gradient let waves shorter than the member section tilt the waterplane, exciting high-frequency response on surface-piercing columns (see #3496). The point gradient is kept when no half-width is given (e.g., SeaState C binding).

Also apply WaveTimeShift consistently in WaveField_GetNodeTotalWaveElev and the vertical-stretching branches of WaveField_GetNodeWaveVel and WaveField_GetNodeWaveVelAcc, check the GridInterpSetupN error status, and return a vertical normal when no wave elevation data exists.

Related issue, if one exists
Addressed issue #3496. Close issue upon merging.

Additional Information
The changes made in this PR will create merge conflicts with dev that will need to be resolved.

Impacted areas of the software
SeaState, HydroDyn

Generative AI usage
Co-authored-by: Anthropic Claude claude@anthropic.com
Assisted by: GitHub Copilot support@github.com

Test results, if applicable
All tests passed as is; r-test merging is not required.

The free-surface normal used by the Morison hydrostatic loads is again
computed by central differencing the wave elevation over +/- the section
half-width, now on the cubic-interpolated surface. The exact point
gradient let waves shorter than the member section tilt the waterplane,
exciting high-frequency (tower-mode) response on surface-piercing
columns (see OpenFAST#3496). The point gradient is kept when no half-width is
given (e.g., SeaState C binding).

Also apply WaveTimeShift consistently in WaveField_GetNodeTotalWaveElev
and the vertical-stretching branches of WaveField_GetNodeWaveVel and
WaveField_GetNodeWaveVelAcc, check the GridInterpSetupN error status,
and return a vertical normal when no wave elevation data exists.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
@luwang00 luwang00 added Module: HydroDyn Module: SeaState SeaState module for wave data generation labels Oct 30, 2026
@luwang00 luwang00 added this to the v5.0.1 milestone Oct 30, 2026
@luwang00
luwang00 marked this pull request as ready for review November 2, 2026 18:47
@andrew-platt andrew-platt self-assigned this Nov 3, 2026
@andrew-platt
andrew-platt merged commit 2196fc5 into OpenFAST:rc-5.0.1 Nov 3, 2026
42 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Module: HydroDyn Module: SeaState SeaState module for wave data generation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants