OrcaFlex Model Generator Skill
ABOUTME: Generate complete OrcaFlex models using component assembly approach - build models from pre-validated components (vessels, lines, materials, environments) via lookup tables instead of manually editing template files.
Version Metadata
version: 1.0.0
python_min_version: '3.10'
dependencies:
orcaflex-file-conversion: '>=1.0.0,<2.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
Overview
This skill provides template-based OrcaFlex model generation using a component assembly approach. Instead of manually editing model files, you configure models by selecting pre-validated components from lookup tables.
Key Capabilities
- ✅ Component Assembly: Build models from modular, reusable components
- ✅ Lookup Tables: Pre-defined vessels, lines, materials, environments
- ✅ Simple Configuration: YAML-based with minimal parameters
- ✅ Comprehensive Templates: Risers, pipelines, umbilicals, moorings, installations
- ✅ Validated: All components meet engineering standards (DNV, API, ISO)
- ✅ Integrated: Works with converter, runner, post-processor
When to Use This Skill
Use this skill when you need to:
- Generate Standard Models: Create OrcaFlex models for risers, pipelines, umbilicals
- Parametric Studies: Generate multiple models with varying parameters
- Quick Feasibility: Rapidly create models for initial assessments
- Project Kickstart: Start new projects with proven configurations
- Training: Learn OrcaFlex modeling with validated templates
- Design Optimization: Test multiple configurations efficiently
Quick Start
1. List Available Components
from digitalmodel.modules.orcaflex.model_generator import OrcaFlexModelGenerator
generator = OrcaFlexModelGenerator()
# List vessels
vessels = generator.list_components("vessels")
print(f"Available vessels: {vessels}")
# Output: ['FPSO_P50', 'FPSO_P70', 'Drillship_DP3', ...]
# List risers
risers = generator.list_components("lines/risers")
print(f"Available risers: {risers}")
# Output: ['SCR_10inch_X65', 'SCR_12inch_X65', 'LWR_12inch', ...]
# List environments
envs = generator.list_components("environment")
print(f"Available environments: {envs}")
# Output: ['GoM_100yr', 'GoM_10yr', 'NorthSea_100yr', ...]
2. View Component Details
# Get vessel specifications
vessel_spec = generator.get_component("vessels", "FPSO_P50")
print(f"FPSO P50 Length: {vessel_spec['LOA']}m")
print(f"Displacement: {vessel_spec['Displacement']}t")
# Get riser specifications
riser_spec = generator.get_component("lines/risers", "SCR_10inch_X65")
print(f"OD: {riser_spec['OD']}m")
print(f"Wall Thickness: {riser_spec['WallThickness']}m")
print(f"Material: {riser_spec['Material']}")
3. Create Configuration
# my_scr_config.yml
model:
type: "scr_catenary"
name: "GoM_SCR_Analysis_001"
vessel:
lookup: "FPSO_P50" # From component library
position: {x: 0, y: 0, z: 0}
riser:
lookup: "SCR_10inch_X65" # From component library
length: 1500
segments: 150
environment:
lookup: "GoM_100yr" # From component library
water_depth: 1200
analysis:
type: "dynamic"
duration: 10800
time_step: 0.1
4. Generate Model
# Generate model
model = generator.generate_from_template(
template="risers/scr_catenary",
config="my_scr_config.yml",
output="my_scr_model.yml"
)
# Validate
validation = generator.validate(model)
if validation['is_valid']:
print("✅ Model is valid")
else:
print("❌ Validation errors:", validation['errors'])
Available Templates
Risers (High Priority - Implemented)
| Template | Description | Status |
|---|---|---|
risers/scr_catenary | Steel Catenary Riser | ✅ Ready |
risers/ttr_top_tensioned | Top-Tensioned Riser | 📋 Planned |
risers/lazy_wave | Lazy Wave Riser | 📋 Planned |
risers/pliant_wave | Pliant Wave Riser | 📋 Planned |
risers/hybrid_riser | Hybrid Riser System | 📋 Planned |
Pipeline Installation (High Priority - Planned)
| Template | Description | Status |
|---|---|---|
pipeline_installation/s_lay | S-Lay Method | 📋 Planned |
pipeline_installation/j_lay | J-Lay Method | 📋 Planned |
pipeline_installation/reel_lay | Reel-Lay Method | 📋 Planned |
pipeline_installation/tow_installation | Pipeline Tow & Pull-in | 📋 Planned |
Umbilical Installation (High Priority - Planned)
| Template | Description | Status |
|---|---|---|
umbilical_installation/static_installation | Static Umbilical | 📋 Planned |
umbilical_installation/dynamic_umbilical | Dynamic Umbilical | 📋 Planned |
umbilical_installation/bundle_installation | Umbilical Bundle | 📋 Planned |
Additional Categories
- Mooring Systems: CALM, SALM, spread, turret, single point
- Structure Installation: Jacket, topside, subsea, manifold
- Towing Operations: Platform, pipeline, barge
- Heavy Lift: Dual crane, subsea, tandem
- ROV Operations: Inspection, intervention, construction
- Specialized: Riser pull-in, flexjoint, touchdown, VIV
Component Library
Vessels
Location: docs/modules/orcaflex/templates/components/vessels/
| Component ID | Type | LOA (m) | Displacement (t) | Description |
|---|---|---|---|---|
| FPSO_P50 | FPSO | 300 | 200,000 | Standard FPSO deepwater |
| FPSO_P70 | FPSO | 320 | 250,000 | Large FPSO ultra-deepwater |
| FPSO_P30 | FPSO | 270 | 150,000 | Compact FPSO shallow water |
| DS_DP3_7GEN | Drillship | 228 | 90,000 | 7th gen DP3 drillship |
| PLV_SLAY_LARGE | Pipelay | 185 | 45,000 | Large S-lay vessel |
Risers
Location: docs/modules/orcaflex/templates/components/lines/risers.csv
| Component ID | OD (m) | Material | Max Tension (kN) | Description |
|---|---|---|---|---|
| SCR_10inch_X65 | 0.2731 | X65_STEEL | 2,500 | Standard 10-inch SCR |
| SCR_12inch_X65 | 0.3239 | X65_STEEL | 3,500 | 12-inch SCR |
| SCR_10inch_X70 | 0.2731 | X70_STEEL | 2,700 | High strength X70 |
| LWR_12inch | 0.3239 | X65_STEEL | 3,500 | Lazy wave riser |
Materials
Location: docs/modules/orcaflex/templates/components/materials/
| Component ID | Grade | Yield (MPa) | UTS (MPa) | Density (kg/m³) |
|---|---|---|---|---|
| X65_STEEL | X65 | 448 | 531 | 7850 |
| X70_STEEL | X70 | 483 | 565 | 7850 |
| X80_STEEL | X80 | 552 | 621 | 7850 |
| TITANIUM_GR5 | Ti-6Al-4V | 880 | 950 | 4430 |
Environment
Location: docs/modules/orcaflex/templates/components/environment/
| Component ID | Hs (m) | Tp (s) | Current (m/s) | Return Period |
|---|---|---|---|---|
| GoM_100yr | 14.5 | 15.0 | 1.5 | 100-year |
| GoM_10yr | 10.2 | 12.5 | 1.2 | 10-year |
| NorthSea_100yr | 16.8 | 16.5 | 1.8 | 100-year |
| Brazil_100yr | 13.2 | 14.8 | 1.4 | 100-year |
Usage Examples
Example 1: Basic SCR Model
from digitalmodel.modules.orcaflex.model_generator import generate_model
# Simple one-liner
model = generate_model(
template="risers/scr_catenary",
config={
'model': {'name': 'Basic_SCR'},
'vessel': {'lookup': 'FPSO_P50'},
'riser': {'lookup': 'SCR_10inch_X65', 'length': 1200},
'environment': {'lookup': 'GoM_1yr', 'water_depth': 1000},
'analysis': {'type': 'static'}
},
output="basic_scr.yml"
)