Repository navigation
MoorDyn slip support - #3501
Merged
Merged
MoorDyn slip support#3501
Conversation
New optional SLIP SUPPORTS input section (ID Point Line Shape K Zeta MuS MuK VTol VS) and MoorDyn_SlipSupport module. The hoop acts on a virtual contact point on the line through a transverse penalty spring-damper and regularized Coulomb friction with static/kinetic coefficients and Stribeck transition. Contact load is spread with linear (2-node) or cubic B-spline (4-node) weights, split per node along each node's own tangent so a frictionless hoop applies no along-line force. The reaction is added to the host Point in Point_DoRHS. Includes piecewise initial line layout through hoops, viscous slip damping during IC generation, deferred line release committed after accepted time steps, and SLIP<n>{S,VS,FN,FF,FX,FY,FZ} output channels.
Co-authored-by: GitHub Copilot <noreply@github.com>
Co-authored-by: Claude <noreply@anthropic.com>
…split Add a Width column to SLIP SUPPORTS (ID Point Line Shape Width K Zeta MuS MuK VTol VS). Width > 0 spreads the contact load with a hat (LINEAR) or cubic B-spline (CUBIC) kernel of fixed scale in unstretched arc length, normalized and mirrored about the line ends, so the number of loaded nodes grows with refinement and node-passing ripple vanishes. Width = 0 keeps node-based weights. Contact normal and friction are split per node along each node's own tangent so a frictionless hoop applies no along-line force; FN is the normal force actually delivered to the line and sets the friction capacity. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
…t length Remove the Shape input and the linear/node-based contact weights; every slip support now spreads its load with the fixed-width cubic B-spline kernel. The SLIP SUPPORTS row is now ID Point Line Width K Zeta MuS MuK VTol VS, where Width is a multiple of the longest segment length among all lines through the same hoop point (2 recommended). Width < 1 is a fatal error, Width < 2 gives a ripple warning, and the resulting kernel must stay shorter than a quarter of the line. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
Add a StickDisp column to SLIP SUPPORTS (ID Point Line Width K Zeta MuS MuK VTol VS StickDisp). StickDisp > 0 selects LuGre friction with one continuous bristle-deflection state per support, appended after the line states, held at zero during IC generation, and registered for linearization as a first-order variable. Bristle stiffness is MuS/StickDisp, capped for explicit stability with a one-time warning; bristle damping is critical and faded out with the Stribeck velocity; sigma2 = 0. Friction is bounded by MuS*Fn, or by mu(v)*Fn when the relaxation rate is capped, preserving LuGre frictional lag at breakaway. StickDisp = 0 keeps the regularized Coulomb model. Adds the SLIP<n>Z output channel. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
Add MoorDyn-F specific features page documenting slip support input, outputs, and usage, and a slip support theory page. Store the contact segment (search-window center) in OtherStates so glue-code rollbacks restore it; misc copy still tracks the contact within a coupling step. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
…p to 1/dtM Clarify contact kernel, contact search, effective contact mass, force distribution, friction stability limits, LuGre rate cap, and initial line layout in the theory page. Raise the LuGre bristle relaxation-rate cap from 0.5/dtM to 1/dtM (fastest RK2 decay, half the stability limit). Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
Explain that using the same kernel weights for contact kinematics and force spreading makes the contact spring/damper passive on the line nodes and defines the contact inertia m_C. Add section labels and the Peskin (2002) reference. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
luwang00
marked this pull request as ready for review
November 2, 2026 21:59
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical defects can inject energy through damping and friction, retain incorrect support releases after state restoration, and cause out-of-bounds output access.
6 open issues
Reject support IDs below 1 to prevent out-of-bounds access · New Use consistent velocity projection and force spreading for damping and friction · New Restore support release status during correction iterations · New Recompute viscoelastic extensions after updating support geometry · New Match the full slip-support section header instead of any “slip” · New Preserve small nonzero friction inputs with scientific notation · New
What changed in this PR
Adds slip supports to MoorDyn-F, allowing lines to slide through Point-based guides with transverse restraint and friction.
Changes:
- Implements contact forces, Coulomb and LuGre friction, line release, outputs, and linearization integration.
- Adds Python input/output support and registers standalone and coupled regression cases.
- Documents inputs, usage, and theory, and updates both build systems.
| File | Description |
|---|---|
vs-build/modules/MoorDyn.vfproj |
Includes the slip-support module in Visual Studio builds. |
reg_tests/CTestList.cmake |
Registers two slip-support regression cases. |
openfast_io/openfast_io/FAST_writer.py |
Writes slip-support input tables. |
openfast_io/openfast_io/FAST_reader.py |
Reads slip-support input tables. |
modules/moordyn/src/MoorDyn.f90 |
Integrates parsing, initialization, forces, release, and linearization. |
modules/moordyn/src/MoorDyn_Types.f90 |
Adds slip-support types and copy/serialization routines. |
modules/moordyn/src/MoorDyn_SlipSupport.f90 |
Implements contact search, force distribution, friction, and release. |
modules/moordyn/src/MoorDyn_Registry.txt |
Defines slip-support data and state fields. |
modules/moordyn/src/MoorDyn_Point.f90 |
Adds support reactions to Point forces. |
modules/moordyn/src/MoorDyn_Line.f90 |
Includes slip-support forces in line dynamics. |
modules/moordyn/src/MoorDyn_IO.f90 |
Adds slip-support output channels. |
modules/moordyn/CMakeLists.txt |
Includes the new module in CMake builds. |
docs/source/user/moordyn/slip_support_theory.rst |
Documents the contact and friction formulation. |
docs/source/user/moordyn/moordynf_features.rst |
Describes inputs, outputs, usage, and linearization. |
docs/source/user/moordyn/index.rst |
Links the new MoorDyn-F documentation. |
docs/source/user/api_change.rst |
Records the optional slip-support input section. |
Review effort: Balanced
- Reject slip output IDs below 1 - Measure damper and slip velocities with the per-node projections used to spread the forces (strictly dissipative damping and friction) - Store slip release status in OtherState - Reset viscoelastic dl_1 after the slip-support line layout - Seed the contact search segment at initialization - Reject free hoop Points with no mass and no attached lines - openfast_io: stricter section match, scientific format for small slip inputs - Docs: passivity, linearization secant damping, no release during IC Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
andrew-platt
approved these changes
Nov 3, 2026
… tangent Near a line end, the +2a share that each virtual (point-reflected) node folds onto the end node now uses the tangent of its mirrored node for the damper/friction velocity projections and the distributed forces. Previously the end node's single-segment tangent was used, giving a spurious normal damping force while the hoop approaches or overshoots the end. Interior results are unchanged. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
The damper now acts on the normal component of the kernel-interpolated relative velocity and is spread to the nodes with the same weights, without the per-node tangent projection. This keeps the damper strictly dissipative while avoiding the double cos^2 reduction of damping at sharp bends, which left the contact underdamped and roughened the release near line ends. The spring force keeps the per-node split, and friction keeps the per-node slip velocity and force. Theory docs updated accordingly. Co-authored-by: GitHub Copilot <noreply@github.com> Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


This PR is ready for merging.
Feature or improvement description
This PR introduces slip supports to MoorDyn. A slip support can be attached to any Point type (free, fixed, coupled, or attached to a Body) and acts like a hoop that lines pass through. A slip support constrains line motion in the normal direction only (through stiffness and damping), while allowing the line to slip through the support along the tangent direction, resisted only by friction.
The formulation uses a smooth B-spline kernel to distribute loads across several neighboring nodes, giving a smooth load handoff as the line nodes slip past the support, without requiring remeshing. The normal constraint is enforced through stiffness and damping based on the normal offset and relative normal velocity between the line contact point and the slip support. In the tangential direction, the line experiences friction modeled with either regularized Coulomb friction with a Stribeck transition from static to kinetic friction, or the single-state LuGre model, which captures true sticking.
The contact point kinematics are also interpolated from neighboring line nodes using the same B-spline kernel, so the contact point lies on a smooth curve that can be offset from the polyline representation of the mooring line. The offset is larger for sharper bends and decreases with a smaller kernel width (a user input), at the cost of more ripple as nodes pass the support. Because the kernel width is specified relative to the segment length, refining the line discretization reduces the offset while keeping the same smoothness. Using the same kernel for interpolating the contact kinematics and spreading the loads ensures adjoint consistency, so the contact spring and damper act passively on the line.
With the current implementation, the force and velocity projections are consistent for the normal damping and the tangential friction. The node forces and the velocities they act against use the same per-node projections. As a result, damping and Coulomb friction are dissipative, and LuGre friction is passive. The spring force is different. It is computed from the gap at the contact point, normal to the line tangent there. When it is spread to the nodes, the component along each node's local tangent is dropped. Without that projection, the normal support would push the line along its own axis and cause spurious snatching. The trade-off is that the spring force is not exactly conservative. It cannot add energy through axial motion, but it is not the gradient of a potential either.
Each line can have multiple slip supports, and each Point can serve as a slip support for multiple lines. A free Point used as a slip support must have nonzero mass, and a very light Point may require a reduced, user-specified stiffness. If a line end moves past a slip support, the line is permanently released from that support.
Linearization is supported, and new output channels report the contact location, slip velocity, normal and friction forces, bristle deflection (LuGre), and the reaction force on the support Point.
Impacted areas of the software
MoorDyn, docs
Additional supporting information
Detailed user and theory guide for slip support can be found in
docs/source/user/moordyn/moordynf_features.rstdocs/source/user/moordyn/slip_support_theory.rstExample results
The example below was simulated using MoorDyn driver. A slack line is draped over a slip support, the red cross. The left end of the line is anchored, and the right end follows prescribed motion. Initially, the right end is at rest. At t=20 s, the right end starts moving toward +x at a constant speed of 0.5 m/s until t = 132 s, at which point, the motion stops. During this process, the line is pulled to the right until taut, with the line nodes sliding past the slip support smoothly.
MD_SlideSupport_Demo1.mp4
In addition to the normal force at the slip support, friction based on the LuGre model is also included. The time series of the friction force is shown below, including a zoomed-in figure around 20 s when the sliding started.
The friction is zero initially when the system is at rest. This is a direct consequence of the dynamic initialization, which produces a friction-free configuration at t=0 by design. After the dynamic initialization, the bristle deflection state of the LuGre model is reset to zero, so that there is no elastic stiction force.
There is a spike in friction at about 20 s when the right end of the line starts to get pulled. For the most part of the time series, the line is sliding at about 0.5 m/s, well above the Stribeck velocity of 0.1 m/s defined in the input file. Therefore, the friction is capped at the dynamic friction limit that starts to grow rapidly after about 120 s. This is the point where the line starts to get pulled taut, and the normal force at the slip support rises rapidly. At 132 s, the pulling stops, and the line stiction at the slip support reestablishes. A spike in friction followed by oscillation and slow relaxation can be observed.
Focusing around 20 s when the line just starts to move, a spike in friction past the dynamic friction limit can be seen due to stiction. The max friction does not quite reach the static friction limit. This rate-dependent slip is a known behavior of the LuGre model, where a fast start can undercut the peak static friction. Right after the slipping starts, the friction can temporarily remain above the dynamic friction limit and takes a finite amount of time to drop down to the limit. This is all related to the friction lag effect.
The new slip support should also correctly interact with other existing MoorDyn features, such as line failure. In the example below, we continue to pull the right end of the chain after 132 s. The anchor point is set to detach after reaching 1e5 N tension. The line continues to move past the slip support after detaching from the anchor until it is fully released from the support and drops to the seabed.
MD_SlideSupport_Demo1.mp4
Note that in the two examples above, the slip support is attached to a fixed Point. It is also possible to use a free or coupled Point as slip support. In the latter case, the slip support becomes attached to the rest of the OpenFAST structure like a fairlead. This is shown in the example below. The horizontal cylinder floating on the free surface is modeled in HydroDyn and ElastoDyn. The two ends of the cylinder are both coupled to MoorDyn slip supports. The nonlinear hydrodynamic loading causes the cylinder to drift downstream, sliding along the two mooring lines that act like guide ropes.
HMember_MDSlipSupport.mp4
Generative AI usage
This development is heavily supported by AI both during formulation and implementation.
MoorDyn_SlipSupport.f90with minimal interface with the existing MoorDyn codebase; therefore, it is extremely unlikely it will cause any issue with existing features.Models/tools:
Test results, if applicable
The two examples above, a line over a slip support pulled taut and a floating horizontal cylinder with two guide ropes, are both added as new r-tests. The floating horizontal cylinder glue-code test also serves as an additional r-test for PR #3489.
The two new tests are
md_SlipSupport_LuGreandFloating_Cylinder_Guide_Ropes.