Back to list
vamseeachanta

catenary-riser

by vamseeachanta

Offshore asset lifecycle: ASCII data → strength, fatigue, FFS, hydrodynamics

6🍴 0📅 Jan 24, 2026

SKILL.md


name: catenary-riser description: Analyze catenary and lazy wave riser configurations for static shape, forces, and OrcaFlex model generation. Use for riser static configuration analysis, catenary force calculations, lazy wave design, and generating OrcaFlex models from catenary parameters. updated: '2026-01-07'

Catenary Riser Analysis Skill

Analyze catenary and lazy wave riser configurations for static shape, forces, tension distribution, and OrcaFlex model generation.

Version Metadata

version: 1.0.0
python_min_version: '3.10'
dependencies:
  orcaflex-modeling: '>=2.0.0,<3.0.0'
orcaflex_version: '>=11.0'
compatibility:
  tested_python:
  - '3.10'
  - '3.11'
  - '3.12'
  - '3.13'
  os:
  - Windows
  - Linux
  - macOS

Changelog

[1.0.0] - 2026-01-07

Added:

  • Initial version metadata and dependency management
  • Semantic versioning support
  • Compatibility information for Python 3.10-3.13

Changed:

  • Enhanced skill documentation structure

When to Use

  • Catenary riser static analysis
  • Lazy wave catenary design and optimization
  • Riser static configuration calculation
  • Catenary force and tension analysis
  • Generating OrcaFlex models from catenary geometry
  • Fatigue loading extraction from riser configurations
  • Pipe property calculations (buoyancy, effective weight)

Prerequisites

  • Python environment with digitalmodel package installed
  • Riser geometry and material properties
  • Environmental data (water depth, current if applicable)

Analysis Types

1. Simple Catenary Analysis

catenary:
  simple_catenary:
    flag: true
    geometry:
      top_end:
        x: 0.0
        z: 100.0
      touchdown:
        x: 500.0
        z: 0.0
    properties:
      outer_diameter: 0.2032
      wall_thickness: 0.0127
      steel_density: 7850
      internal_fluid_density: 800
      seawater_density: 1025
    output:
      shape_file: "results/catenary_shape.csv"
      forces_file: "results/catenary_forces.csv"
      plot_file: "results/catenary_plot.html"

2. Lazy Wave Catenary

catenary:
  lazy_wave:
    flag: true
    geometry:
      water_depth: 1500.0
      hang_off_angle: 8.0
      buoyancy_section:
        start_arc_length: 800.0
        end_arc_length: 1200.0
        buoyancy_factor: 1.5
      target_sag_bend_depth: 800.0
      target_hog_bend_depth: 600.0
    pipe_properties:
      outer_diameter: 0.273
      wall_thickness: 0.0159
    output:
      configuration_file: "results/lazy_wave_config.csv"
      plot_file: "results/lazy_wave_plot.html"

3. OrcaFlex Model Generation

catenary:
  orcaflex_model:
    flag: true
    catenary_config: "results/lazy_wave_config.csv"
    orcaflex_settings:
      line_name: "Riser1"
      segment_length: 5.0
      include_buoyancy_modules: true
    output:
      yml_file: "models/riser_model.yml"

Python API

Simple Catenary Equation

from digitalmodel.modules.catenary.catenary_equation import CatenaryEquation
import numpy as np

catenary = CatenaryEquation()
top_end = (0.0, 100.0)
touchdown = (500.0, 0.0)

horizontal_tension = catenary.solve(
    top_end=top_end,
    bottom_end=touchdown,
    unit_weight=500.0
)

arc_lengths = np.linspace(0, catenary.total_length, 100)
x, z = catenary.get_shape(arc_lengths)
tensions = catenary.get_tension(arc_lengths)

Catenary Riser Analysis

from digitalmodel.modules.catenary.catenary_riser import CatenaryRiser
from digitalmodel.modules.catenary.pipe_properties import PipeProperties

pipe = PipeProperties(
    outer_diameter=0.2032,
    wall_thickness=0.0127,
    steel_density=7850,
    internal_fluid_density=800
)

riser = CatenaryRiser(pipe_properties=pipe)
results = riser.analyze(
    water_depth=1000.0,
    hang_off_angle=10.0,
    top_tension=1500e3
)

print(f"TDP position: x={results['tdp_x']:.1f}m")
print(f"Total length: {results['total_length']:.1f} m")

Lazy Wave Catenary

from digitalmodel.modules.catenary.lazy_wave_catenary import LazyWaveCatenary

lazy_wave = LazyWaveCatenary()
config = {
    "water_depth": 1500.0,
    "hang_off_angle": 8.0,
    "buoyancy_section": {
        "start_length": 800.0,
        "end_length": 1200.0,
        "net_buoyancy": 300.0
    },
    "pipe_properties": pipe
}

results = lazy_wave.analyze(config)
sag_bend = results["sag_bend"]
hog_bend = results["hog_bend"]

OrcaFlex Model Building

from digitalmodel.modules.catenary.orcaflex_model import OrcaFlexModelBuilder

builder = OrcaFlexModelBuilder()
builder.set_line_from_catenary(
    catenary_results=results,
    line_name="Riser1",
    segment_length=5.0
)
builder.add_buoyancy_section(
    start_arc_length=800.0,
    end_arc_length=1200.0,
    buoyancy_od=0.6
)
builder.export_yml("models/riser.yml")

Key Classes

ClassPurpose
CatenaryEquationMathematical catenary solver
CatenaryRiserMain analysis orchestrator
LazyWaveCatenaryDynamic catenary with buoyancy
PipePropertiesMaterial and geometric properties
OrcaFlexModelBuilderModel export to OrcaFlex

Output Formats

Catenary Shape CSV

arc_length,x,z,tension,curvature,bend_moment
0.0,0.0,100.0,1523456.7,0.000123,1875.4
10.0,9.8,98.5,1518234.5,0.000145,2215.6

Best Practices

  1. Consistent units - Use SI units (meters, Newtons)
  2. Coordinate system - Z positive upward, origin at seabed
  3. Segment resolution - Use small segments near critical points
  4. Curvature check - Verify minimum bend radius constraints

References

  • API RP 2RD: Design of Risers for Floating Production Systems
  • DNV-OS-F201: Dynamic Risers

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon