返回 Skill 列表
extension
分类: 开发与工程无需 API Key

catenary-riser

分析悬链线和懒波立管配置的静态形状

person作者: jakexiaohubgithub

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

| Class | Purpose | |-------|---------| | CatenaryEquation | Mathematical catenary solver | | CatenaryRiser | Main analysis orchestrator | | LazyWaveCatenary | Dynamic catenary with buoyancy | | PipeProperties | Material and geometric properties | | OrcaFlexModelBuilder | Model 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