Claude-skill-registry catenary-riser
Analyze catenary and lazy wave riser configurations for static shape,
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/catenary-riser" ~/.claude/skills/majiayu000-claude-skill-registry-catenary-riser && rm -rf "$T"
manifest:
skills/data/catenary-riser/SKILL.mdsource content
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
package installeddigitalmodel - 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 |
|---|---|
| Mathematical catenary solver |
| Main analysis orchestrator |
| Dynamic catenary with buoyancy |
| Material and geometric properties |
| 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
- Consistent units - Use SI units (meters, Newtons)
- Coordinate system - Z positive upward, origin at seabed
- Segment resolution - Use small segments near critical points
- Curvature check - Verify minimum bend radius constraints
Related Skills
- orcaflex-modeling - Run OrcaFlex simulations
- fatigue-analysis - Fatigue at critical locations
- structural-analysis - Stress verification
References
- API RP 2RD: Design of Risers for Floating Production Systems
- DNV-OS-F201: Dynamic Risers