Agent SkillsAgent Skills
vamseeachanta

catenary-riser

@vamseeachanta/catenary-riser
vamseeachanta
9
0 forks
Updated 3/31/2026
View on GitHub

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.

Installation

$npx agent-skills-cli install @vamseeachanta/catenary-riser
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Path.claude/skills/catenary-riser/SKILL.md
Branchmain
Scoped Name@vamseeachanta/catenary-riser

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

npx agent-skills-cli list

Skill Instructions


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.subsea.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.subsea.catenary.catenary_riser import CatenaryRiser
from digitalmodel.subsea.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.subsea.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.subsea.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

Related Skills

References

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