Back to skills
extension
Category: Development & EngineeringNo API key required

orcaflex-installation-analysis

Create and analyze OrcaFlex models for offshore installation sequences

personAuthor: jakexiaohubgithub

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 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.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:

  1. 6DBuoys: NewZ = ReferenceZ + delta_elevation
  2. 3DBuoys: NewZ = ReferenceZ + delta_elevation
  3. Line EndBZ: NewEndBZ = ReferenceEndBZ + delta_elevation
  4. 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

  1. Reference model at datum - Start with well-converged static model
  2. Appropriate segment lengths - Finer segments for crane wire
  3. Buoyancy and mass - Verify structure properties
  4. Crane capacity - Check against maximum tensions

Depth Increments

  1. Fine resolution at splash zone - Wave loading peaks here
  2. Coarse mid-water - Quasi-static behavior
  3. Fine at seabed - Landing dynamics critical

Output Validation

  1. Check crane wire tensions - Must be within capacity
  2. Verify structure orientation - No unexpected rotations
  3. Validate connections - All links maintained
  4. 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

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