| name | orcaflex-operability |
| description | Perform operability analysis combining multiple sea states to assess system availability and weather downtime. Generate operability envelopes, critical heading analysis, and downtime calculations from wave scatter diagrams. |
| version | 1.0.0 |
| updated | Sat Jan 17 2026 00:00:00 GMT+0000 (Coordinated Universal Time) |
| category | offshore-engineering |
| triggers | operability analysis, weather downtime, operability envelope, sea state analysis, weather window, operational limits, critical headings, wave scatter, annual downtime |
OrcaFlex Operability Analysis Skill
Assess system operability across multiple sea states with envelope generation, critical heading analysis, and weather downtime calculations.
Version Metadata
version: 1.0.0
python_min_version: '3.10'
dependencies:
orcaflex-modeling: '>=2.0.0,<3.0.0'
orcaflex-post-processing: '>=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-17
Added:
- Initial release with operability envelope generation
- Weather downtime calculations from wave scatter
- Critical heading analysis
- Interactive Plotly visualization
When to Use
- Operability envelope generation for mooring systems
- Weather downtime calculations from scatter diagrams
- Critical heading identification for design loads
- Multi-sea-state analysis (1yr, 10yr, 100yr return periods)
- Tension limit assessment (intact vs damaged conditions)
- Annual operational availability studies
- Polar coordinate visualization of system limits
Prerequisites
- OrcaFlex simulation results (.sim files) for multiple headings
- Wave scatter diagram (Hs-Tp probability matrix)
- Python environment with
digitalmodelpackage installed - Tension limits for intact and damaged conditions
Operability Workflow
[Multiple .sim Files] [Wave Scatter Diagram]
(per heading) (Hs-Tp matrix)
↓ ↓
[Extract Max Tensions] [Probability Distribution]
↓ ↓
[Operability Envelope] → [Weather Downtime Calc]
↓ ↓
[Critical Headings] [Annual Availability %]
↓ ↓
[Combined HTML Report with Interactive Plots]
Configuration
Basic Operability Configuration
# configs/operability_config.yml
operability:
# Input data
simulation_directory: "results/.sim/"
file_pattern: "mooring_heading_*.sim"
# Tension extraction
line_names:
- "Mooring_Line_1"
- "Mooring_Line_2"
- "Mooring_Line_3"
- "Mooring_Line_4"
variable: "Effective Tension"
statistic: "max" # max, min, mean
# Limits for envelope
tension_limits:
intact: 2500.0 # kN - intact condition limit
damaged: 3000.0 # kN - damaged condition limit (typically higher)
# Wave scatter for downtime
wave_scatter:
file: "data/wave_scatter_gom.csv"
format: "hs_tp_matrix" # or "hs_tp_list"
# Output
output:
directory: "reports/operability/"
report_name: "mooring_operability"
format: "html" # html, pdf
Advanced Configuration
# configs/operability_advanced.yml
operability:
# Input data
simulation_directory: "results/calm_operability/.sim/"
file_pattern: "calm_hs*_tp*_dir*.sim"
# Multi-line analysis
line_groups:
windward:
lines: ["Leg_1", "Leg_2", "Leg_3"]
critical_limit: 2000.0
leeward:
lines: ["Leg_4", "Leg_5", "Leg_6"]
critical_limit: 2200.0
# Heading analysis
headings:
start: 0
end: 360
step: 15
critical_count: 5 # Top N critical headings to report
# Envelope visualization
envelope:
polar_plot: true
include_limits: true
colorscale: "Viridis"
show_critical_headings: true
# Weather downtime
downtime:
operational_hours_per_year: 8760
minimum_window_hours: 6 # Minimum weather window
include_seasonal: true
seasons:
winter: [12, 1, 2]
spring: [3, 4, 5]
summer: [6, 7, 8]
autumn: [9, 10, 11]
# Output
output:
directory: "reports/operability/"
report_name: "calm_operability_comprehensive"
include_data_tables: true
export_csv: true
Python API
Basic Operability Analysis
from digitalmodel.modules.orcaflex.operability_analysis import OperabilityAnalyzer
# Initialize analyzer
analyzer = OperabilityAnalyzer(
simulation_directory="results/.sim/",
output_directory="reports/operability/"
)
# Generate operability envelope
envelope = analyzer.generate_operability_envelope(
line_names=["Mooring_Line_1", "Mooring_Line_2"],
variable="Effective Tension",
statistic="max",
intact_limit=2500.0,
damaged_limit=3000.0
)
# Save envelope plot
analyzer.save_envelope_plot(envelope, "operability_envelope.html")
Weather Downtime Calculation
from digitalmodel.modules.orcaflex.operability_analysis import OperabilityAnalyzer
import pandas as pd
analyzer = OperabilityAnalyzer(
simulation_directory="results/.sim/",
output_directory="reports/"
)
# Load wave scatter diagram
wave_scatter = pd.read_csv("data/wave_scatter.csv", index_col=0)
# Calculate weather downtime
downtime_results = analyzer.calculate_weather_downtime(
wave_scatter=wave_scatter,
operational_limit_hs=4.0, # Operational Hs limit
operational_limit_tp=12.0 # Operational Tp limit
)
print(f"Annual downtime: {downtime_results['annual_downtime_percent']:.1f}%")
print(f"Operational hours: {downtime_results['operational_hours']:.0f} hrs/yr")
print(f"Downtime days: {downtime_results['downtime_days']:.1f} days/yr")
Critical Headings Analysis
from digitalmodel.modules.orcaflex.operability_analysis import OperabilityAnalyzer
analyzer = OperabilityAnalyzer(
simulation_directory="results/.sim/",
output_directory="reports/"
)
# Identify critical headings
critical = analyzer.generate_critical_headings_report(
line_names=["Leg_1", "Leg_2", "Leg_3", "Leg_4", "Leg_5", "Leg_6"],
variable="Effective Tension",
top_n=5, # Top 5 most critical headings
limit=2500.0
)
# Report format:
# critical = {
# "headings": [45, 135, 225, 315, 0],
# "max_tensions": [2450.2, 2380.5, 2350.1, 2290.8, 2250.3],
# "utilization": [0.98, 0.95, 0.94, 0.92, 0.90],
# "critical_lines": ["Leg_1", "Leg_3", "Leg_5", "Leg_2", "Leg_4"]
# }
for i, heading in enumerate(critical["headings"]):
print(f"Heading {heading}°: {critical['max_tensions'][i]:.1f} kN "
f"({critical['utilization'][i]*100:.1f}% utilization)")
Comprehensive Report Generation
from digitalmodel.modules.orcaflex.operability_analysis import OperabilityAnalyzer
analyzer = OperabilityAnalyzer(
simulation_directory="results/.sim/",
output_directory="reports/"
)
# Generate comprehensive HTML report with all analyses
report_path = analyzer.generate_comprehensive_report(
line_names=["Leg_1", "Leg_2", "Leg_3", "Leg_4", "Leg_5", "Leg_6"],
variable="Effective Tension",
intact_limit=2500.0,
damaged_limit=3000.0,
wave_scatter_file="data/wave_scatter.csv",
report_title="CALM Buoy Mooring Operability Assessment",
include_envelope=True,
include_critical_headings=True,
include_weather_downtime=True
)
print(f"Report saved to: {report_path}")
Output Formats
Operability Envelope Plot
Interactive Plotly polar plot showing:
- Maximum tension vs heading angle
- Intact and damaged limit circles
- Color-coded utilization zones
- Hover tooltips with exact values
Critical Headings Table
| Rank | Heading (°) | Max Tension (kN) | Utilization (%) | Critical Line | Status |
|---|---|---|---|---|---|
| 1 | 45 | 2450.2 | 98.0 | Leg_1 | WARNING |
| 2 | 135 | 2380.5 | 95.2 | Leg_3 | OK |
| 3 | 225 | 2350.1 | 94.0 | Leg_5 | OK |
Weather Downtime Summary
{
"annual_downtime_percent": 12.5,
"operational_hours_per_year": 7665,
"downtime_hours_per_year": 1095,
"downtime_days_per_year": 45.6,
"seasonal_breakdown": {
"winter": {"downtime_percent": 25.3, "days": 23.1},
"spring": {"downtime_percent": 10.2, "days": 9.3},
"summer": {"downtime_percent": 5.1, "days": 4.7},
"autumn": {"downtime_percent": 9.4, "days": 8.5}
}
}
Wave Scatter Diagram Format
CSV Matrix Format
Tp\Hs,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0
4,0.001,0.002,0.001,0.000,0.000,0.000,0.000,0.000
6,0.005,0.015,0.020,0.010,0.003,0.001,0.000,0.000
8,0.010,0.050,0.080,0.060,0.030,0.010,0.003,0.001
10,0.008,0.040,0.070,0.080,0.050,0.025,0.010,0.003
12,0.005,0.025,0.040,0.050,0.040,0.020,0.010,0.005
14,0.002,0.010,0.020,0.025,0.020,0.015,0.008,0.003
Values represent probability of occurrence (sum = 1.0).
Best Practices
Simulation Setup
- Consistent headings - Use regular intervals (15° or 30°)
- Sufficient sea states - Cover full scatter diagram range
- Consistent naming - Include heading in filename
- Complete simulations - Ensure all finish successfully
Limit Selection
- Intact limit - Based on design code (e.g., 60% MBL)
- Damaged limit - Account for redundancy (e.g., 80% MBL)
- Include safety factors - Per API RP 2SK or DNV
Weather Downtime
- Site-specific scatter - Use project metocean data
- Operational limits - Define based on system capabilities
- Weather windows - Consider minimum window requirements
Error Handling
try:
envelope = analyzer.generate_operability_envelope(...)
except FileNotFoundError as e:
print(f"Simulation files not found: {e}")
print("Check simulation_directory and file_pattern")
except ValueError as e:
print(f"Configuration error: {e}")
print("Check line names and variable specifications")
Integration with Other Skills
With OrcaFlex Modeling
# 1. Run simulations for multiple headings
from digitalmodel.modules.orcaflex.universal import UniversalOrcaFlexRunner
runner = UniversalOrcaFlexRunner()
for heading in range(0, 360, 15):
runner.run_single(f"mooring_heading_{heading}.yml")
# 2. Run operability analysis
from digitalmodel.modules.orcaflex.operability_analysis import OperabilityAnalyzer
analyzer = OperabilityAnalyzer(simulation_directory="results/.sim/")
analyzer.generate_comprehensive_report(...)
With Post-Processing
# Use OPP for detailed extraction, then operability for envelope
from digitalmodel.modules.orcaflex.opp import OrcaFlexPostProcess
from digitalmodel.modules.orcaflex.operability_analysis import OperabilityAnalyzer
# Extract detailed statistics
opp = OrcaFlexPostProcess()
stats = opp.extract_summary_statistics(...)
# Generate operability envelope
analyzer = OperabilityAnalyzer(...)
envelope = analyzer.generate_operability_envelope(...)
Related Skills
- orcaflex-modeling - Run OrcaFlex simulations
- orcaflex-post-processing - Extract results
- orcaflex-extreme-analysis - Extreme value extraction
- mooring-design - Mooring system design
References
- API RP 2SK: Design and Analysis of Stationkeeping Systems
- DNV-OS-E301: Position Mooring
- ISO 19901-7: Stationkeeping Systems
- Source:
src/digitalmodel/modules/orcaflex/operability_analysis.py