OrcaFlex Installation Analysis Skill
Generate and analyze OrcaFlex models for offshore installation sequences with automated depth variation and orientation studies.
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-17
Added:
- Initial release with installation sequence capabilities
- Multi-depth model generation
- Orientation variation support
- Crane wire length adjustment
When to Use
- Subsea structure installation analysis
- Pipeline/umbilical installation sequences
- Heavy lift crane operations
- Installation depth variation studies
- Lowering phase analysis
- Splash zone analysis
- Installation feasibility assessment
- Crane wire and sling configuration
Prerequisites
- OrcaFlex license (for simulation)
- Python environment with
digitalmodelpackage installed - Reference model files (.yml format recommended)
- Reference elevation configuration
Installation Sequence Workflow
[Reference Model] → [Define Delta Elevations] → [Generate Depth Models]
↓ ↓ ↓
Base geometry [-10m, -20m, -30m, ...] Model per depth:
at datum - Update structure Z
- Update buoy Z
- Extend crane wire
- Update sling connections
↓
[Orientation Variants]
↓
[Batch Simulation]
Configuration
Basic Installation Depth Study
# configs/installation_config.yml
structure:
BaseFile: "reference_model.yml"
reference_model_file: "models/installation_reference.yml"
reference_elevation_file: "models/elevation_reference.yml"
# Objects to update
6DBuoys:
- "Subsea_Structure"
3DBuoys:
- "Masterlink"
# Lines to extend
Lines:
- name: "Crane_Wire"
EndBZ: true # Update end B Z coordinate
length_index: 2 # Section index to extend
TargetSegmentLength: 5.0
- name: "Intermediate_Sling"
EndBZ: true
# Depth increments from reference
delta_elevations:
- 0 # Reference position
- -10 # 10m below reference
- -20 # 20m below reference
- -30 # 30m below reference
- -50 # 50m below reference
- -75 # 75m below reference
- -100 # 100m below reference
Analysis:
analysis_root_folder: "results/installation/"
Heavy Lift Configuration
# configs/heavy_lift_config.yml
reference_elevation_file: "models/heavy_lift_reference.yml"
# Key components
structure: "Topside_Module"
masterlink: "Lifting_Padeye"
crane_wire: "Main_Crane_Wire"
intermediate_sling: "Spreader_Sling"
# Output naming
output_basefile: "topside_installation"
# Installation depths (negative = below reference)
delta_elevations:
- 0 # At deck level
- -5 # Splash zone entry
- -10 # Through splash zone
- -15 # Below splash zone
- -20 # Mid-water
- -30 # Approaching seabed
- -40 # Near seabed
- -45 # Final position
Python API
Generate Installation Depth Models
from digitalmodel.modules.orcaflex.orcaflex_installation import OrcInstallation
# Initialize
installer = OrcInstallation()
# Configuration for depth variation
cfg = {
"structure": {
"BaseFile": "reference.yml",
"reference_model_file": "models/reference_model.yml",
"reference_elevation_file": "models/elevations.yml",
"6DBuoys": ["Structure"],
"3DBuoys": ["Masterlink"],
"Lines": [
{
"name": "Crane_Wire",
"EndBZ": True,
"length_index": 1,
"TargetSegmentLength": 5.0
}
],
"delta_elevations": [0, -10, -20, -30, -50, -75, -100]
},
"Analysis": {
"analysis_root_folder": "results/"
}
}
# Generate models for all depths
installer.create_model_for_water_depth(cfg)
Simple Depth Model Generation
from digitalmodel.modules.orcaflex.orcaflex_installation import OrcInstallation
installer = OrcInstallation()
# Simpler configuration
cfg = {
"reference_elevation_file": "models/reference.yml",
"structure": "Subsea_Template",
"masterlink": "Lifting_Point",
"crane_wire": "Main_Wire",
"intermediate_sling": None, # Optional
"output_basefile": "template_installation",
"delta_elevations": [0, -10, -20, -30, -40, -50]
}
# Generate depth models
installer.create_installation_depth_model(cfg)
With Structure Orientation
from digitalmodel.modules.orcaflex.orcaflex_installation import OrcInstallation
installer = OrcInstallation()
# This generates:
# 1. Base model at each depth
# 2. Orientation variant (rotation about Z)
cfg = {
"structure": {
"BaseFile": "reference.yml",
"reference_model_file": "models/reference.yml",
"reference_elevation_file": "models/elevations.yml",
"6DBuoys": ["Mudmat"],
"3DBuoys": [],
"Lines": [
{"name": "Wire1", "EndBZ": True, "length_index": 0}
],
"delta_elevations": [0, -5, -10, -15, -20]
},
"Analysis": {
"analysis_root_folder": "results/mudmat/"
}
}
# Generates files:
# - _el_00000m.yml (reference)
# - _el_00000m_str_orientation.yml (with Rotation3 = 0)
# - el_00000m.yml (final model)
# - _el_-0010m.yml
# - ... etc for each depth
installer.create_model_for_water_depth(cfg)
Output File Structure
results/installation/
├── _el_00000m.yml # Reference depth, base orientation
├── _el_00000m_str_orentation.yml # Reference depth, zero rotation
├── el_00000m.yml # Final reference model
├── _el_-0010m.yml # 10m below reference
├── _el_-0010m_str_orentation.yml
├── el_-0010m.yml
├── _el_-0020m.yml # 20m below reference
├── _el_-0020m_str_orentation.yml
├── el_-0020m.yml
└── ...
Key Concepts
Reference Elevation File
Contains the initial Z positions for all objects:
# models/elevation_reference.yml
6DBuoys:
Subsea_Structure:
InitialZ: -50.0 # Initial elevation
InitialRotation3: 45 # Initial rotation (deg)
3DBuoys:
Masterlink:
InitialZ: -45.0
Lines:
Crane_Wire:
EndBZ: -45.0
Sections:
- Length: 10.0
- Length: 50.0 # Section to extend
- Length: 5.0
Delta Elevation Application
For each delta_elevation:
- 6DBuoys:
NewZ = ReferenceZ + delta_elevation - 3DBuoys:
NewZ = ReferenceZ + delta_elevation - Line EndBZ:
NewEndBZ = ReferenceEndBZ + delta_elevation - Line Length:
NewLength = ReferenceLength + |delta_elevation|
Crane Wire Extension
As structure lowers, crane wire extends:
# For each delta_elevation
new_wire_length = reference_length + abs(delta_elevation)
Integration with Universal Runner
After generating installation models, run batch simulations:
from digitalmodel.modules.orcaflex.universal import UniversalOrcaFlexRunner
# Initialize runner
runner = UniversalOrcaFlexRunner(
input_directory="results/installation/",
output_directory="results/installation/.sim/",
mock_mode=False
)
# Run all installation models
results = runner.run_batch(
pattern="el_*.yml",
parallel=True,
max_workers=4
)
# Check results
for file_name, status in results.items():
print(f"{file_name}: {'SUCCESS' if status['success'] else 'FAILED'}")
Analysis Types
1. Splash Zone Analysis
Focus on depths around waterline:
delta_elevations:
- 5 # Above water
- 2 # Near waterline
- 0 # At waterline
- -2 # Just below
- -5 # Submerged
- -10 # Below splash zone
2. Full Lowering Sequence
Complete installation from deck to seabed:
delta_elevations:
- 0 # At deck
- -5 # Clear of vessel
- -10 # Splash zone entry
- -15 # Through splash zone
- -20 # Mid-water (upper)
- -30 # Mid-water
- -50 # Mid-water (lower)
- -75 # Approaching seabed
- -95 # Near seabed
- -100 # At seabed
3. Landing Sequence
Fine resolution near seabed:
# Reference at 5m above seabed
delta_elevations:
- 0 # 5m above seabed
- -1 # 4m above
- -2 # 3m above
- -3 # 2m above
- -4 # 1m above
- -4.5 # 0.5m above (touchdown)
- -5 # On seabed
Post-Processing Installation Results
from digitalmodel.modules.orcaflex.opp import OrcaFlexPostProcess
opp = OrcaFlexPostProcess()
# Extract crane wire tensions at each depth
cfg = {
"orcaflex": {
"postprocess": {
"summary": {
"flag": True,
"variables": [
{"object": "Crane_Wire", "variable_name": "Effective Tension"},
{"object": "Structure", "variable_name": "Z"}
]
}
}
}
}
# Process all simulation files
sim_files = list(Path("results/installation/.sim/").glob("*.sim"))
for sim_file in sim_files:
results = opp.process_single_file(sim_file, cfg)
depth = extract_depth_from_filename(sim_file.stem)
print(f"Depth {depth}m: Max tension = {results['max_tension']:.1f} kN")
Best Practices
Model Preparation
- Reference model at datum - Start with well-converged static model
- Appropriate segment lengths - Finer segments for crane wire
- Buoyancy and mass - Verify structure properties
- Crane capacity - Check against maximum tensions
Depth Increments
- Fine resolution at splash zone - Wave loading peaks here
- Coarse mid-water - Quasi-static behavior
- Fine at seabed - Landing dynamics critical
Output Validation
- Check crane wire tensions - Must be within capacity
- Verify structure orientation - No unexpected rotations
- Validate connections - All links maintained
- Review static convergence - Each depth should converge
Error Handling
Common Issues
# File not found
try:
installer.create_model_for_water_depth(cfg)
except FileNotFoundError as e:
print(f"Reference file not found: {e}")
print("Check: reference_model_file and reference_elevation_file paths")
# Invalid line section index
# Error: "Key not found in line item"
# Fix: Verify length_index matches actual line sections
# Convergence failure at depth
# Check: Environmental loads, line lengths, tensions
Related Skills
- orcaflex-modeling - Run OrcaFlex simulations
- orcaflex-post-processing - Extract results
- orcaflex-static-debug - Debug convergence issues
- orcaflex-line-wizard - Configure line properties
References
- OrcaFlex Installation Analysis: Orcina Documentation
- DNV-RP-H103: Modelling and Analysis of Marine Operations
- API RP 2A: Planning, Designing and Constructing Fixed Offshore Platforms
- Source:
src/digitalmodel/modules/orcaflex/orcaflex_installation.py
微信扫一扫