Skip to content

feat(stiffeners): model tapered bend stiffeners on finite-EI lines - #50

Merged
SMI-Lab-Inha merged 3 commits into
devfrom
feat/bend-stiffeners
Oct 26, 2026
Merged

SMI-Lab-Inha merged 3 commits into
devfrom
feat/bend-stiffeners

Conversation

@SMI-Lab-Inha

@SMI-Lab-Inha SMI-Lab-Inha commented Oct 26, 2026 •

Copy link
Copy Markdown
Owner

Summary

Bend stiffener modelling on finite-EI lines, the first of two steps (this one: linear-elastic tapered stiffeners; next: nonlinear moment–curvature materials and bend restrictors).

Deck (STIFFENERS table). One row per conical segment of the stiffener over End A or End B, from the root outward:

--------------------- STIFFENERS --------------------------------------------
LineID  End  Length  RootOD  TipOD  InnerD  E       Density
1       A    0.4     0.45    0.45   0.17    5.0e7   1150
1       A    3.6     0.45    0.18   0.17    5.0e7   1150

Model. The sleeve bends with the cable: an element it covers takes

  • the compliance average of EI_cable + E π/64 (OD⁴ − ID⁴) over its length (exact element rotation under a uniform moment);
  • the sleeve's mean mass;
  • one diameter, that of the displaced area of cable plus solid sleeve, for its buoyancy (dry part above the surface included), added mass and drag, as a line type has (the sleeve's outer diameter when the bore is the cable diameter).

Elements it does not reach keep their line type's values exactly. The overlay is applied in the two routines every finite-EI route builds its element properties from, so it covers standalone runs, the OpenFAST aggregate, the C API and Python.

Outputs.

  • BendMom<L>N<J> under a stiffener is the cable's own moment, the line type's EI × curvature. This also applies to the BendMoment columns of the static profile, range graphs and element file.
  • New StfMom<L>N<J>: the sleeve's share of the moment.
  • New FairDefl<L>/AnchDefl<L>: the angle between the end force and the direction a held END CONNECTIONS row declares. With the end tension, this is the stiffener's load case.
  • Initialisation notes for a stiffener spanning fewer than 10 elements and for a stiffener at a pinned end.

Python. DeckFile mirrors the native table and channel rules, and DeckModel.add_stiffener / Stiffener reads and writes the table.

Example: lazy_wave_bend_stiffener.dat, a 4 m stiffener at a clamped hang-off on an RAO-driven vessel in a JONSWAP sea.

Not modelled (documented): nonlinear or hysteretic polyurethane, a sleeve that slides or rattles on the cable, a steel root section, friction between sleeve and cable.

Verification

  • driver_bend_stiffener (new): a 60 m cable clamped horizontal through a 5 m stiffener (16 × the cable's EI at the root), 0.05 m elements.
    • Curvature against OrcaFlex 11.6d, with its stiffener as a line attachment: within 0.74 % of the root curvature (0.4523 against 0.4522 1/m). The reference profile is committed in tests/data/, generated by validation/scripts/orcaflex_bend_stiffener.py.
    • Against an independent collocation solution of the planar extensible elastica (scipy solve_bvp, EI(s) and the sleeve's weight):
      • cable moment within 0.74 % of its root value;
      • cable + sleeve moments within 0.18 % of the section moment;
      • deflection angle within 0.003° (32.37°);
      • node positions within 0.6 mm.
    • Notes: none on the resolved, clamped deck; the resolution note with 2 m elements; the pinned-end note without END CONNECTIONS.
  • bend_stiffener (new Fortran test):
    • overlay values against closed forms (half-covered cylinder at either end) and a 20 000-interval integration (cone);
    • untouched elements bit for bit;
    • the fail-closed grammar;
  • an EI = 0 section: a fully sleeved element takes the sleeve's EI, a partly sleeved one keeps EI = 0;
    • the stock-order end swap;
    • the new channels' rules;
    • the coupled aggregate (stiffened root element, initial fairlead load = standalone static tension).
  • Unchanged results: all 51 existing examples run with dev and with this branch, 99 of 99 output files byte-identical.
  • Local gates: ctest 301/301; pytest 2069 passed; pre-commit; Sphinx -W.

Checklist

  • pre-commit run --all-files passes
  • ctest --test-dir build --output-on-failure passes
  • python -m pytest tests python/tests passes (if Python or validation records changed)
  • VALIDATION.md updated if a validation result changed (new L3-8)
  • CHANGELOG.md updated under [Unreleased] (heading added if missing) for user-visible changes
  • Documentation in doc/ updated for changed inputs, options, or outputs
  • Conventional Commit title (feat:, fix:, docs:, ...)
  • Commits are signed off (git commit -s) under the
    Developer Certificate of Origin

A STIFFENERS table describes a polyurethane bend stiffener over End A or
End B of a finite-EI line as conical segments from the root outward
(length, outer diameter at each side, bore, modulus, density). The sleeve
bends with the cable: every element it covers takes the compliance
average of EI_cable + E pi/64 (OD^4 - ID^4) over its length, the sleeve's
mean mass, a displaced area of cable plus solid sleeve, and the mean
outer diameter for drag and added mass. Elements it does not reach keep
their line type's values exactly, so decks without stiffeners are
unchanged. The overlay sits in the two routines every finite-EI route
builds its element properties from, so it applies standalone, on the
OpenFAST aggregate, through the C API and in Python.

Under a stiffener BendMom<L>N<J> (and the BendMoment columns) report the
cable's own moment, the line type's EI times the curvature; the new
StfMom<L>N<J> reports the sleeve's share. FairDefl<L>/AnchDefl<L> give
the angle between the end force and the direction a held END
CONNECTIONS row declares, the stiffener's load case with the end
tension. Initialisation notes name a stiffener spanning fewer than 10
elements and one at a pinned end. The Python reader and builder mirror
the native table and channel rules.

On a hang-off clamped through a 5 m stiffener (16 times the cable's EI at
the root), the curvature follows OrcaFlex 11.6d with its stiffener as a
line attachment within 0.74 % of the root value, and an independent
collocation solution of the planar extensible elastica within 0.74 %
(cable moment), 0.18 % (section moment) and 0.003 deg (deflection).
Example lazy_wave_bend_stiffener.dat.

Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
@SMI-Lab-Inha

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T06:33:46.773565Z bd57167 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@read-the-docs-community

read-the-docs-community Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Documentation build overview

📚 CableDyn | 🛠️ Build #35405005 | 📁 Comparing bd57167 against latest (fd1936d)

  🔍 Preview build  

13 files changed · ± 13 modified

± Modified

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b2f07d46c8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/CableDyn_DeckDriver.f90 Resolved
A stiffener ending partway through an element of an EI = 0 section gave
the element the sleeve's bending stiffness over its whole length, since
the bare part's compliance was skipped. That part has an infinite
compliance, so the compliance average stays zero: only an element the
sleeve covers completely now gains bending stiffness.

Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
@SMI-Lab-Inha

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ddbfbbc6ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/CableDyn_DeckDriver.f90 Resolved
The drag diameter of a sleeved element was the mean outer diameter while
its weight used the displaced-area diameter, but the dynamic model also
recovers the dry-part buoyancy above the surface from the drag diameter.
A sleeved element at or above the waterline then lost a different
buoyancy than the static solve assumed. Like a line type, an element now
has one diameter, that of the displaced area of cable and solid sleeve,
for its buoyancy, added mass, Froude-Krylov force and drag; with the
bore equal to the cable diameter it is the sleeve's outer diameter.

Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
@SMI-Lab-Inha

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: bd571673a8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@SMI-Lab-Inha
SMI-Lab-Inha merged commit 3e3e2c0 into dev Oct 26, 2026
21 checks passed
@SMI-Lab-Inha
SMI-Lab-Inha deleted the feat/bend-stiffeners branch October 26, 2026 07:46
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.

1 participant