Create and analyze OrcaFlex models for offshore installation sequences including subsea structure lowering, pipeline installation, and crane operations. Generate models at multiple water depths and orientations for installation feasibility studies.
Create and analyze OrcaFlex models for offshore installation sequences including subsea structure lowering, pipeline installation, and crane operations. Generate models at multiple water depths and orientations for installation feasibility studies.
Generate and analyze OrcaFlex models for offshore installation sequences with automated depth variation and orientation studies.
Version Metadata
version:1.0.0python_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 digitalmodel package 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.ymlstructure:BaseFile:"reference_model.yml"reference_model_file:"models/installation_reference.yml"reference_elevation_file:"models/elevation_reference.yml"# Objects to update6DBuoys:-"Subsea_Structure"3DBuoys:-"Masterlink"# Lines to extendLines:-name:"Crane_Wire"EndBZ:true# Update end B Z coordinatelength_index:2# Section index to extendTargetSegmentLength:5.0-name:"Intermediate_Sling"EndBZ:true# Depth increments from referencedelta_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 referenceAnalysis:analysis_root_folder:"results/installation/"
Heavy Lift Configuration
# configs/heavy_lift_config.ymlreference_elevation_file:"models/heavy_lift_reference.yml"# Key componentsstructure:"Topside_Module"masterlink:"Lifting_Padeye"crane_wire:"Main_Crane_Wire"intermediate_sling:"Spreader_Sling"# Output namingoutput_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
# models/elevation_reference.yml6DBuoys:Subsea_Structure:InitialZ:-50.0# Initial elevationInitialRotation3:45# Initial rotation (deg)3DBuoys:Masterlink:InitialZ:-45.0Lines:Crane_Wire:EndBZ:-45.0Sections:-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.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 resultsfor 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
from digitalmodel.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 foundtry:
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