OrcaFlex Enrichment Skill
Converts binary OrcaFlex .dat model files to enriched, client-clean YAML
test fixtures using worldenergydata public databases.
Pipeline (all on licensed-win-1)
Stage 1 Extract .dat + OrcFxAPI → raw YAML params
Stage 2 Enrich raw YAML + worldenergydata lookups → enriched YAML → client_projects/
Stage 3 Clean enriched YAML → strip client names → legal scan → digitalmodel/
Stage 1 — Extract
python scripts\data\orcaflex\dat-to-yaml.py ^
--input "\\dev-secondary\dde\Orcaflex\0000 Drilling Riser Development\Latest" ^
--output "client_projects\data\raw\orcaflex-extracted\drilling-riser-development" ^
--project drilling-riser-development
Extracts: general, environment, lines[], vessels[] per .dat file.
Stage 2 — Enrich + Stage (client_projects)
python scripts\data\orcaflex\enrich-and-clean.py ^
--input client_projects\data\raw\orcaflex-extracted\ ^
--output digitalmodel\data\orcaflex\ ^
--dry-run
Enrichment lookups performed
| Object | OrcaFlex field | worldenergydata lookup | Result field |
|--------|---------------|----------------------|--------------|
| Line | OD (m→in) | DrillingRiserLoader.filter_by_size(od_in) | component_type, grade_range, api_standard |
| Line | OD + WT | PipelineSpecLookup.match_od_wt(od_m, wt_m) | nps_in, schedule, grade_range |
| Vessel | type hint from context | BSEE rig fleet .bin | vessel_class, water_depth_rating_m, dp_class |
Enriched YAML output example (line object)
lines:
- component_type: marine_drilling_riser_joint
nps_in: 21.0
public_match:
grade_range: [G105, S135]
api_standard: API-STD-16F
source: worldenergydata.vessel_fleet.DrillingRiserLoader
dat_properties: # numeric props from .dat — unchanged
OD: [0.5334]
WallThickness: [0.025]
Length: [15.24, 15.24, 15.24]
CDt: 0.01
CDn: 1.0
# name: stripped (client-specific)
Enriched YAML output example (vessel object)
vessels:
- vessel_class: drillship
water_depth_rating_m: 3658
dp_class: DP3
public_source: worldenergydata.vessel_fleet.BSEE_rig_fleet
dat_properties:
InitialX: 0.0
InitialY: 0.0
InitialZ: 0.0
# name: stripped
Stage 3 — Clean + Commit
bash scripts/legal/legal-sanity-scan.sh digitalmodel/data/orcaflex/
cd digitalmodel
git add data/orcaflex/
git commit -m "data(orcaflex): enriched fixtures from public vessel/riser databases"
Priority Extraction Order
| Project | .dat count | Standards | worldenergydata lookup |
|---------|-----------|-----------|------------------------|
| 0000 Drilling Riser Dev/Latest | 31 | DNV-OS-F201 | DrillingRiserLoader (21" joints) |
| 31290 WellHead Fatigue/BOP on Wellhead | 240 | API-RP-2A-WSD | DrillingRiserLoader (BOP) |
| 611 Mecor S Lay/Reference | 3 | DNV-OS-F101 | PipelineSpecLookup (pipe OD) |
| 5 - OrcaFlex API Check | 1 | — | minimal fixture |
worldenergydata Database Status
| Dataset | Status | Location |
|---------|--------|----------|
| drilling_riser_components.csv | 24 rows (partial) | data/modules/vessel_fleet/curated/ |
| rig_fleet_full.bin | 2,320 rigs (Feb 2026) | data/modules/bsee/.local/rig_fleet/ |
| construction_vessels.csv | missing — see WRK-593 | data/modules/vessel_fleet/curated/ |
| api_5l_pipe_schedule.csv | missing — see WRK-594 | data/modules/pipeline/ |
Key worldenergydata API Calls
from worldenergydata.vessel_fleet import DrillingRiserLoader
loader = DrillingRiserLoader()
# Match riser joint by OD
joints = loader.filter_by_size(od_in=21.0)
# Get all riser joints
all_joints = loader.get_riser_joints()
# Get BOPs
bops = loader.get_bops()
# Pipeline spec lookup (after WRK-594)
from worldenergydata.bsee.pipeline import PipelineSpecLookup
lookup = PipelineSpecLookup()
spec = lookup.match_od_wt(od_m=0.2731, wt_m=0.012)
# → {nps_in: 10.75, schedule: "XS", grade_range: ["X60", "X65"], ...}
Blocked By
- WRK-593: expand drilling_riser_components.csv + add construction_vessels.csv
- WRK-594: create api_5l_pipe_schedule.csv + PipelineSpecLookup class