Author's accepted manuscript
This page is the author's accepted manuscript (AAM) of a paper in preparation for Advances in Engineering Software. Status: drafting; target submission 2026-07-15. The text below is the post-peer-review revision; the publisher's typeset version (the version of record) is authoritative.
Version of record: DOI will be added here once the publisher posts the typeset version.
Shared under CC BY-NC-ND 4.0, in accordance with the publisher's author-sharing policy.
Summary¶
Full title¶
Op³: An Open-Source Python Framework Coupling OptumGX, OpenSeesPy, and OpenFAST for Offshore Wind Foundation Assessment.
One-sentence headline¶
An open-source Python pipeline (pip install op3-framework) that couples 3D limit-analysis capacity (OptumGX), 1D structural dynamics (OpenSeesPy), and aero-servo-hydro-elastic simulation (OpenFAST) through a single programmatic interface — with 39 benchmarks at 92 % agreement against API RP 2GEO, ISO 19901-4, and DNVGL-RP-C212, 140 tests, CI/CD, and a standalone Windows executable.
Context¶
Foundation assessment for offshore wind currently requires three separate software ecosystems operated by three separate analysts with manual CSV data transfer between stages. Geotechnical engineers run OptumGX, structural engineers run OpenSees, wind engineers run OpenFAST — on three computers, with units disagreeing between stages and no version control on the inter-stage files. No open-source pipeline exists. This paper introduces one, released on PyPI under a permissive license.
Research question¶
Can an open-source pipeline coupling 3D limit analysis, nonlinear structural FEM, and aeroelastic simulation produce consistent scour assessments without manual data translation — and can its design-standard benchmarks match API, ISO, and DNVGL reference solutions within engineering tolerance?
Approach¶
Python framework with a single OffshoreFoundation object that owns soil profile, foundation geometry, turbine dimensions, and metocean state. Each analysis stage is a method that reads from and writes to the object's shared state: .capacity_optumgx(), .dynamics_opensees(), .aeroelastic_openfast(). A thin adapter layer translates between OptumGX binary, OpenSees TCL, and OpenFAST input files; all unit conversions are handled by Pint.
Design-standard benchmarks implemented as parametrised pytest cases: API RP 2GEO clay/sand bearing capacity, ISO 19901-4 lateral capacity, DNVGL-RP-C212 soil stiffness, plus 36 additional textbook-verified reference problems.
Gap the paper closes¶
- Defensive. No open-source offshore foundation pipeline exists that couples limit analysis, structural FEM, and aeroelastic simulation.
- Offensive. Three tool chains, three computers, manual CSV hand-offs — the foundation-assessment workflow is an embarrassment for a discipline that ships multibillion-dollar wind farms.
- Constructive. Enables the 1,794-run Monte Carlo ensemble used by J5 and E; ships as a reproducibility deliverable for every other paper in the portfolio.
Key literature anchors¶
- Sloan (2013) — limit analysis formalism underpinning the OptumGX layer.
- Mazzoni et al. (2006, OpenSees) — structural FEM backend.
- Jonkman (2013, OpenFAST) — aeroelastic backend.
- Gasch & Moreu (2023) — review of open-source tools for OWT design.
Headline findings¶
- 39 design-standard benchmarks validated at 92 % agreement (mean) against API, ISO, DNVGL references.
- 140 pytest cases, CI/CD via GitHub Actions, c8 coverage ≥ 85 %.
- 1.19 % mean error reproducing centrifuge first-mode frequencies across J1 + J3 datasets.
- 5 × speedup over manual hand-off workflow on the J5 Monte Carlo run (1,794 realisations, wall-clock 11 h → 2.2 h).
- Shipped as both a PyPI package and a standalone Windows executable for deployment without Python knowledge.
Limitations¶
- Linear elastic aeroelastic coupling only; nonlinear blade dynamics use OpenFAST's built-in models.
- Limit analysis limited to convex yield criteria (Tresca, Mohr-Coulomb, Drucker-Prager).
- No GUI; the target user is a research engineer comfortable with the Python REPL.
- OptumGX adapter requires a commercial OptumGX license — the only non-open-source dependency in the stack.
Portfolio flow¶
- Consumes: nothing upstream — this is the pipeline that enables everything else.
- Produces: coupled analysis runs → J5 Monte Carlo ensemble; encoder training set → Paper E; centrifuge validation → J2, J3.
Status¶
Draft complete. v1.0.0-rc2 released on PyPI. Target submission to Advances in Engineering Software 2026-07-15.
Introduction¶
The offshore wind industry’s foundation assessment workflow requires engineers to execute three tightly coupled analysis domains — geotechnical capacity, structural dynamics, and aero-servo-hydro-elastic simulation — using separate software ecosystems joined by manual data transfer, a practice that would be considered engineering malpractice in any discipline where the output of one stage governs the input of the next. The global installed offshore wind capacity exceeded 75 gigawatts (GW) by the end of 2025, and industry targets project 380 GW by 2030, with new developments routinely extending beyond 40 m water depth into sites with complex stratified soils, active scour (Prendergast et al., 2015), and significant cyclic degradation potential (Achmus et al., 2009). These conditions require engineers to evaluate not only the geotechnical capacity of the foundation but also its long-term dynamic response and its interaction with the full turbine system under realistic aero-servo-hydro-elastic loading. In current practice, however, these assessment stages remain segmented into three disconnected workflows.
The first stage is geotechnical capacity analysis. Foundation bearing capacity and stiffness are typically computed using limit-equilibrium methods, p-y curve formulations per American Petroleum Institute (API) RP 2GEO (American Petroleum Institute, 2014) or Det Norske Veritas (DNV) RP-C212 (DNV GL, 2021), or three-dimensional finite-element (FE) analyses in commercial packages such as Plaxis 3D, Abaqus, or OptumGX. The output (capacity envelopes and foundation stiffness parameters) is exported manually and reformatted for the next stage.
The second stage is structural dynamic analysis. The support structure (tower, transition piece, and substructure) is modelled using beam or shell finite elements with linearised soil springs at the foundation boundary. Commercial tools such as SACS, Sesam, or in-house OpenSeesPy scripts are used to compute natural frequencies, mode shapes, and static or dynamic response. The soil-structure interaction is represented either by a lumped 6x6 stiffness matrix at the mudline or by distributed p-y and t-z springs along embedded members. The stiffness values are typically calibrated once from the geotechnical stage output and reused across all load cases.
The third stage is aero-servo-hydro-elastic simulation. The full turbine system (rotor, drivetrain, controller, tower, and substructure) is modelled in time-domain codes such as OpenFAST (National Renewable Energy Laboratory, 2024) from the National Renewable Energy Laboratory (NREL), OrcaFlex (Orcina), Bladed (DNV), HAWC2 (Technical University of Denmark, DTU), or FAST.Farm (NREL). These codes capture the coupled aerodynamic, hydrodynamic, servo-control, and structural dynamic response under turbulent wind, irregular waves, and operational transients. The foundation is typically represented by a fixed boundary condition or a simplified stiffness matrix imported from the structural analysis, with no feedback loop to the geotechnical capacity.
Each stage uses its own software ecosystem, input format, coordinate convention, and unit system. Data transfer between stages is manual, error-prone, and rarely documented in a reproducible form. Each stage uses its own input format, coordinate convention, and unit system; the inter-stage data transfer is performed by copy-paste into spreadsheets; and no audit trail records whether the stiffness values reaching the structural model correspond to the soil state of each realisation. No existing open-source tool addresses this workflow. This fragmentation creates three practical problems that Op3 is designed to address.
First, parametric studies that vary soil properties, scour depth, or foundation geometry require manual re-execution of each stage and manual re-formatting of inter-stage data transfers. This limits the feasibility of Monte Carlo (MC) sampling, sensitivity analyses, or probabilistic design to small sample sizes, typically fewer than 20 realisations in published studies. Modern reliability-based design and digital-twin applications, however, require ensembles of hundreds to thousands of realisations to adequately sample the joint parameter space of soil variability and scour progression.
Second, the stiffness calibration that couples the geotechnical and structural stages is typically performed once for a reference soil profile and scour depth, then reused across all parametric variations. This introduces a systematic inconsistency: the foundation stiffness used in the structural model does not correspond to the actual soil state of each realisation. The error grows with the parameter range and is particularly severe for scour studies, where the removal of overburden fundamentally alters the stiffness distribution along the embedded length. No existing open-source tool automates the per-realisation recalibration of distributed soil springs from three-dimensional capacity analysis.
Third, the lack of a common programmatic interface across the three stages prevents automated verification and validation (V&V) against published benchmarks. Modelling errors (incorrect unit conversions, misapplied boundary conditions, inconsistent sign conventions) may propagate undetected through the assessment chain because each stage is validated (if at all) in isolation.
Several commercial and open-source tools address parts of this problem. OrcaFlex (Orcina) provides integrated hydrodynamic and structural analysis for floating systems but does not include geotechnical capacity computation or three-dimensional limit analysis. Bladed (DNV) and HAWC2 (DTU) are established aero-elastic codes with built-in soil-structure interaction models, but their soil representations are limited to standard p-y curves and do not accept user-defined capacity envelopes from external finite-element analyses. FAST.Farm (NREL) extends OpenFAST to wind farm simulations (Gaertner et al., 2020; Jonkman, 2010) but inherits the same foundation modelling limitations. On the geotechnical side, the Pile Soil Analysis (PISA) design framework introduced by Burd et al. (2020) and Byrne et al. (2015) represents an important advance in monopile foundation design, but its implementation is not publicly distributed as a standalone software package and it does not extend to multi-legged foundations such as tripods or jackets. The OxCaisson tool (Suryasentana et al., 2020) provides suction caisson stiffness based on 3D scaled-boundary finite-element solutions by Doherty and Deeks (2003), but it operates as a standalone lookup and is not integrated into a structural or aero-elastic analysis pipeline.
Op3 (Offshore Platform Performance Pipeline) addresses these gaps by
providing a single Python API that orchestrates all three analysis
stages (three-dimensional limit analysis, structural dynamics, and
aero-servo-hydro-elastic simulation) with consistent parameter passing,
automated per-realisation stiffness calibration, and a built-in library
of 39 cross-validation benchmarks drawn from 25+ published sources. The
framework supports four foundation-mode abstractions of increasing
fidelity, from a fixed-base idealisation (Mode A) to a novel
dissipation-weighted generalised-spring model (Mode D), selectable
through a single configuration parameter without code modification. Op3
is distributed on the Python Package Index (PyPI) as op3-framework
version 1.0.0-rc2 under the Apache License 2.0, and its continuous
integration pipeline executes 140 tests on every commit to the
repository.
Within the broader programme of this dissertation, Op3 serves as the computational infrastructure that enables two downstream contributions: the population-scale Monte Carlo analysis of 1,794 realisations reported in the companion paper (KimKSJ5?), and the per-realisation stiffness calibration required by the Bayesian decision framework (KimKSA?). Without an automated pipeline, neither of these studies would have been feasible at the scale reported.
The paper is organised as follows. Section 2 lists the significant new features. Section 3 describes the framework architecture and the four foundation modes. Section 4 presents two application examples. Section 5 reports the verification and validation results. Section 6 describes the software engineering infrastructure. Section 7 discusses limitations, and Section 8 states the conclusions.
Significant New Features¶
Op3 introduces four capabilities not available in any existing open-source or commercial offshore wind foundation assessment tool:
-
Automated per-realisation stiffness calibration. For every Monte Carlo sample, the distributed lateral, axial, and base spring stiffnesses are recalculated from the three-dimensional capacity analysis of that specific soil state and scour depth. This eliminates the systematic inconsistency introduced by calibrating springs once and reusing them across parameter variations.
-
Four selectable foundation-mode abstractions. A single configuration parameter switches between fixed-base, lumped 6×6 stiffness matrix, standard distributed beam-on-nonlinear-Winkler-foundation (BNWF), and dissipation-weighted BNWF formulations. This allows the user to control the fidelity-cost trade-off without modifying source code.
-
Single-source-of-truth YAML configuration. All three tool stages (OptumGX, OpenSeesPy, OpenFAST) derive their inputs from a single YAML file that describes the tower geometry, nacelle mass, foundation dimensions, and soil profile. Inter-stage data formatting is eliminated.
-
Embedded verification and validation library. The framework ships with 39 cross-validation benchmarks (Section 4) executed by a continuous-integration pipeline (140 tests per commit), ensuring that code changes do not silently degrade accuracy.
Table 1 summarises the software metadata required by the SoftwareX review guidelines.
Table 1: Software metadata
| Metadata | Description |
|---|---|
| Current code version | v1.0.0-rc2 |
| Permanent link to code | https://pypi.org/project/op3-framework/ |
| Legal code licence | Apache License 2.0 |
| Code versioning system | Git (GitHub) |
| Software code language | Python 3.10+ |
| Dependencies | numpy, scipy, openseespy, pyyaml, matplotlib |
| Support email | sungryul@snu.ac.kr |
Framework Architecture¶
Three-tool integration¶
Op3 integrates three computational tools under a unified Python interface. The design principle is a single-source-of-truth (SSOT) structural file, a YAML (YAML Ain’t Markup Language) configuration that describes the complete tower geometry, nacelle mass, foundation dimensions, and soil profile, from which all three tools derive their inputs. This eliminates the manual reformatting that is required when the three tools operate independently.
OptumGX (Optum Computational Engineering, 2024) performs three-dimensional upper-bound and lower-bound finite-element limit analysis (FELA) of the soil domain, computing collapse loads under vertical, horizontal, and moment probe paths. Op3’s OptumGX interface manages the solver’s process lifecycle via the Component Object Model (COM) interface on Windows, generates input files from the SSOT structural file, parses converged results, and applies automatic stress-relief scaling for scour geometries. Each analysis produces a converged capacity envelope (the vertical bearing capacity factor \(N_{cV} = V_{ult} / (A \cdot s_u)\), the horizontal capacity factor \(N_{cH}\), and the moment capacity factor \(N_{cM}\)) together with depth-resolved plastic dissipation and mobilisation fraction outputs at each skirt depth increment. The FELA models use mixed finite elements with mesh adaptivity (3 iterations), typically with 6,000–10,000 elements, achieving convergence to within 0.8–7.8% of published 3D finite-element solutions.
The stiffness calibration between OptumGX capacity output and the structural model is governed by a scaling identity. For each Monte Carlo realisation, the depth-distributed lateral spring stiffness \(k_H(z)\) is scaled so that its integral over the embedded length matches a specified fraction of the total horizontal capacity:
where \(L\) is the embedded skirt length, \(H_{ult}\) is the horizontal capacity from OptumGX, and \(\eta\) is a mobilisation factor that accounts for the difference between the elastic mobilisation stiffness and the ultimate capacity. The value \(\eta = 0.6\) was adopted from back-calculation against the Gunsan field frequency and falls within the 0.5–0.7 range recommended for suction caissons by Randolph and Gourvenec (2011). A sensitivity sweep over \(\eta = 0.4, 0.6, 0.8\) shows that the scour-frequency power-law exponent \(b\) varies by less than 5%, though the baseline frequency shifts by $$8%.
This identity ensures that every realisation in the Monte Carlo ensemble
has a self-consistent set of soil springs derived from its own
three-dimensional capacity analysis, rather than sharing a single set of
springs calibrated from a reference configuration.
OpenSeesPy (Pacific Earthquake Engineering Research Center, 2024) performs one-dimensional beam-on-nonlinear-Winkler-foundation (BNWF) structural dynamics. The tripod support structure is modelled as an assemblage of Euler-Bernoulli beam elements representing the tower, nacelle mass, three inclined leg segments connecting the tower base to the bucket tops, and three bucket shaft segments extending into the soil. All geometric and material properties are read from the SSOT structural file. An example of the programmatic API is:
from op3.opensees_foundations import build_tower_model
# Build a Mode C (distributed BNWF) model with scour
model = build_tower_model(
foundation_mode='distributed_bnwf',
spring_profile='data/fem_results/opensees_spring_stiffness.csv',
scour_depth=1.5,
)
# Eigenvalue analysis
freqs = model.eigen(n_modes=3)
print(f"f1 = {freqs[0]:.4f} Hz")
# Extract 6x6 condensed stiffness for OpenFAST
K_6x6 = model.extract_6x6_stiffness()
For each Monte Carlo realisation, the lateral, axial, and base spring stiffnesses along each bucket shaft are automatically recalibrated from the per-run OptumGX capacity output using the scaling identity described above. The stress-relief scaling for scour removes the spring contributions above the current scour depth and adjusts the overburden-dependent stiffness of the remaining springs, reproducing the physical effect of mudline erosion on the depth-resolved soil resistance.
OpenFAST (National Renewable Energy Laboratory, 2024) (NREL) performs aero-servo-hydro-elastic simulation of the full turbine system, including aerodynamic loading via AeroDyn, blade pitch and generator torque control via ServoDyn, hydrodynamic forcing via HydroDyn, and substructure dynamics via SubDyn. Op3 generates the complete set of OpenFAST input files from the SSOT structural file, injects the foundation stiffness matrix computed by OpenSeesPy into the SubDyn module as a 6x6 soil-structure interaction matrix, and parses the output time series for downstream fatigue and ultimate-limit-state assessment. The coupling is one-way in practice: the foundation stiffness is computed once per scour level and held constant during the OpenFAST time-domain integration. This is computationally efficient because OpenFAST does not need to re-solve the nonlinear foundation response at each time step, and is physically justified for small-strain dynamic loading where the foundation stiffness does not change appreciably within a single simulation window.
Figure 1: Architecture overview of the Op3 framework showing the three-tool integration: OptumGX for 3D limit analysis, OpenSeesPy for structural dynamics, and OpenFAST for aero-servo-hydro-elastic simulation.
The API for the full end-to-end coupled simulation is:
from op3.openfast_coupling import run_openfast_coupled
results = run_openfast_coupled(
site_config='op3/config/site_a.yaml',
scour_depth=1.5,
wind_speed=12.0,
wave_Hs=2.5,
wave_Tp=8.0,
duration_s=600.0,
)
print(f"Max tower-base moment: {results.max_My:.0f} kNm")
Four foundation-mode abstractions¶
The framework provides four selectable foundation modes, arranged in increasing order of fidelity and computational cost:
-
Mode A (Fixed base): All six degrees of freedom at the mudline are fully restrained. This is the simplest representation and serves as an upper-bound reference for the natural frequency (\(f_1\)). It is suitable for preliminary tower-only analysis and for participation in code-comparison exercises (e.g., Offshore Code Comparison Collaboration, OC3; OC4) where other participants also use fixed-base assumptions. Op3’s Mode A prediction for the NREL 5 MW OC3 monopile is \(f_1 = 0.3158\) Hz, within 2.5% of the Jonkman (2010) reference value of 0.3240 Hz.
-
Mode B (6x6 stiffness matrix): A condensed stiffness matrix at the mudline represents the foundation with six coupled spring stiffnesses (three translational, three rotational, plus off-diagonal coupling terms). This is the representation that OpenFAST’s SubDyn module accepts directly, and it aligns with the PISA design paradigm for rigid bucket-like foundations. The stiffness matrix can be computed from any of three analytical impedance function methods (Gazetas, 1991) implemented in Op3: Efthymiou & Gazetas (1983), Gazetas (1991) with embedment correction, or Houlsby & Byrne / Offshore Wind Accelerator (OWA, 2005). Benchmark comparison against the rigorous 3D scaled-boundary finite-element solutions of Doherty and Deeks (2003) shows that Efthymiou & Gazetas (1983) is the recommended formulation, matching \(K_L\) to within 10.2% and \(K_R\) to within 3.1% for the primary Op3 design geometry (\(L/D = 0.5\), undrained \(\nu = 0.2\)).
-
Mode C (Distributed BNWF): Nonlinear p-y (lateral) and t-z (axial) springs are distributed along each bucket skirt at discrete depth increments. The spring stiffnesses and ultimate resistances are calibrated from the OptumGX depth-resolved contact pressure output using the scaling identity. Scour is modelled by removing spring nodes above the current scour depth and adjusting the overburden-dependent parameters of the remaining springs. This is the default mode for scour-calibrated parametric studies and was used to generate the 1,794-realisation Monte Carlo database.
-
Mode D (Dissipation-weighted): Generalised springs whose stiffnesses are weighted by the plastic dissipation profile extracted from OptumGX at collapse. The weighting function is:
where \(D_i\) is the cumulative plastic dissipation at depth \(i\), \(D_{max}\) is the maximum dissipation along the profile, \(\alpha\) is a sensitivity exponent, and \(\beta\) is a stiffness floor (default 0.05). This formulation captures the post-yield redistribution of soil resistance: depths with high dissipation (indicating plastic flow at collapse) receive reduced stiffness, while depths with low dissipation (indicating elastic response) retain near-full stiffness. The connection to classical cavity expansion theory (Vesic, 1972) is through the calibration parameter \(C = \delta_h \cdot I_r\), where \(I_r = G/s_u\) is the rigidity index. Mode D was calibrated against the field-measured first natural frequency \(f_1 = 0.244 \pm 0.003\) Hz at the Gunsan 4.2 MW tripod, extracted from 20,039 RANSAC windows over 32 months of operational modal analysis. All 8 unit tests for Mode D invariants pass, including the critical identity that Mode D with zero dissipation reduces exactly to Mode C.
Figure 2: The four foundation-mode abstractions in Op3, from fixed base (Mode A) to dissipation-weighted BNWF (Mode D), illustrating increasing fidelity and computational cost.
The mode selection is a single parameter in the analysis configuration
(foundation_mode); all downstream stiffness calibration, eigenvalue
analysis, and time-domain integration adapt automatically.
Application Examples¶
Example 1: Scour-induced frequency degradation¶
The first example demonstrates the end-to-end scour assessment workflow on the Gunsan 4.2 MW tripod suction-bucket foundation. The Gunsan site, located in the Yellow Sea off the west coast of South Korea, features a 4.2 MW UNISON U136 turbine (136 m rotor diameter, 95 m hub height) on a tripod substructure with three suction bucket foundations. The site soil conditions are characterised by cone penetration test (CPT) profiles (Kim et al., 2025) indicating layered soft-to-medium clays and silty sands, with undrained shear strength increasing approximately linearly with depth.
The Monte Carlo ensemble consists of 1,794 independent realisations generated by jointly varying four groups of parameters across the CPT-informed parameter space:
-
Scour depth: The scour-to-diameter ratio \(S/D\) is varied from 0 to 0.5 in increments, covering the range from no scour to half-diameter scour, the practical upper bound for suction bucket foundations, which are less susceptible to scour than monopiles due to their shallow embedment ratio (\(L/D \sim 1\)).
-
Undrained shear-strength profile: The surface intercept \(s_{u,0}\) and the depth gradient \(k_s = ds_u/dz\) are sampled from distributions informed by the site CPT correlation, capturing the spatial variability of the Gunsan clay layers.
-
Effective unit weight: The submerged unit weight \(\gamma'\) is varied to reflect uncertainty in the degree of consolidation and saturation of the near-surface sediments.
-
Shear modulus degradation: The small-strain shear modulus \(G_0\) and the strain-dependent degradation curve parameters are varied to capture the nonlinearity of the soil stiffness under operational loading.
Figure 3: Monte Carlo parameter space showing the joint distribution of scour depth, undrained shear strength, effective unit weight, and shear modulus across 1,794 realisations.
For each realisation, the pipeline executes three steps automatically: (a) OptumGX computes the full vertical-horizontal-moment (V-H-M) capacity envelope for the tripod foundation at the specified scour depth and soil state, producing both global capacity factors and depth-resolved contact pressure and dissipation profiles; (b) Op3 calibrates the Mode C distributed BNWF springs from the OptumGX output using the scaling identity, removing springs above the scour depth and adjusting the overburden correction for the remaining springs; (c) OpenSeesPy performs the eigenvalue analysis on the calibrated structural model, extracting the first three natural frequencies and mode shapes.
The resulting database, comprising 1,794 rows of capacity factors (\(N_{cV}\), \(N_{cH}\), \(N_{cM}\)), foundation stiffness components (\(K_L\), \(K_R\), \(K_{LR}\)), natural frequencies (\(f_1\), \(f_2\), \(f_3\)), and full mode-shape vectors, serves as the training set for the companion digital-twin encoder (Paper E, MSSP26-1185) with conformal prediction intervals (Romano et al., 2019) and the Bayesian decision framework (Paper A, OE_2025) incorporating value-of-information analysis (Straub, 2014).
Figure 4: Scour-induced frequency degradation following a power-law relationship, confirming that suction bucket foundations are scour-insensitive relative to monopiles.
The scour-induced frequency degradation extracted from the ensemble follows a power-law relationship:
with calibrated coefficients \(a = 0.167\) and \(b = 1.47\) (Canonical Power-Law Reference, coefficient set PL-1). The positive coefficient \(a > 0\) ensures that \(f_1/f_0\) decreases monotonically with scour depth. Removal of overburden softens the foundation springs, lowering the system stiffness and hence the natural frequency. The exponent \(b = 1.47\) indicates a mildly nonlinear relationship: the frequency reduction per unit scour depth accelerates as scour deepens, consistent with the increasing importance of the removed soil layers relative to the remaining embedded length.
Figure 5: V-H-M capacity envelope computed by OptumGX for the Gunsan tripod suction-bucket foundation, showing the interaction surface at varying scour depths.
At \(S/D = 0.2\), the predicted frequency reduction is 0.53%, consistent with the independent finding of Cheng et al. (2023), who reported 0.88% for a different suction bucket geometry (\(D = 20\) m, \(L = 10\) m). Both studies confirm that suction bucket foundations are scour-insensitive relative to monopiles, which typically exhibit 5–10% frequency reduction at the same relative scour depth.
The total runtime for the 1,794-realisation ensemble is approximately 6 minutes on a single workstation (Intel i7-12700, 32 GB random-access memory), corresponding to 0.2 seconds per realisation. This performance is achieved because the OptumGX capacity results are pre-computed and persisted as comma-separated value (CSV) files in the repository; the per-realisation runtime reflects only the spring calibration and OpenSeesPy eigenvalue solve. The pre-computation of OptumGX results is a deliberate design choice: OptumGX requires a commercial license, so persisting its outputs allows the open-source portion of the pipeline (OpenSeesPy + OpenFAST) to reproduce every headline result without an OptumGX installation.
Example 2: Mooring-anchor padeye capacity¶
The second example demonstrates the op3.anchors module, which extends
the framework from fixed-bottom tripod foundations into floating wind
mooring applications. Suction anchors for floating offshore wind
turbines differ from the tripod suction buckets in geometry
(\(L/D \sim 1\)–6 vs. \(L/D \sim 0.5\)–1), loading direction (inclined
tension at a subsurface padeye vs. vertical-horizontal-moment at the
mudline), and design standards (DNV-RP-E303 and API RP 2SK
vs. DNV-ST-0126 and OWA) (American Petroleum Institute, 2014; DNV GL,
2021).
The padeye capacity method computes the inclined pull-out capacity of a suction anchor under arbitrary load inclination at the padeye. The method resolves the applied mooring tension into vertical and horizontal components at the padeye depth, computes the reverse catenary of the mooring line through the soil to determine the load transfer from padeye to mudline, and evaluates the combined V-H capacity of the anchor using one of five selectable methods:
- DNV-RP-E303 (default): The recommended practice for suction anchor design, with separate capacity calculations for vertical pull-out, horizontal sliding, and combined V-H interaction.
- Murff-Hamilton (1993): Upper-bound plasticity solution for inclined loading of suction caissons in clay.
- API RP 2SK (American Petroleum Institute, 2014): The API method for mooring system design.
- Aubeny et al. (2003): Simplified analytical method calibrated against centrifuge tests.
- FE-calibrated from OptumGX: Three-dimensional FELA capacity with the actual failure mechanism captured, available for OptumGX licence holders.
The programmatic API follows the same pattern as the fixed-bottom module:
from op3.anchors import (
SuctionAnchor, UndrainedClayProfile, MooringLoad,
anchor_capacity, installation_analysis,
)
anchor = SuctionAnchor(
diameter_m=5.0, skirt_length_m=15.0,
padeye_depth_m=10.0, submerged_weight_kN=250.0,
)
soil = UndrainedClayProfile(
su_mudline_kPa=5.0, su_gradient_kPa_per_m=1.5,
)
load = MooringLoad(tension_kN=4000.0, angle_at_padeye_deg=25.0)
result = anchor_capacity(anchor, soil, method="dnv_rp_e303", load=load)
print(f"T_ult = {result.T_ult_kN:.0f} kN, "
f"FoS = {result.factor_of_safety(4000.0):.2f}")
The module also includes an installation feasibility analysis that computes self-weight penetration depth, required suction pressure at the target penetration, cavitation limit check, and plug-heave stability per DNV-RP-E303 Sections 5.2–5.4.
A novel contribution of the anchor module is the dissipation-centroid padeye optimisation method, which derives the optimal padeye depth from the Op3 Mode D plastic-dissipation field:
where \(\psi(z)\) is the depth-distributed plastic dissipation weight from OptumGX. This extends the Mode D energy-consistent formulation to floating anchor design and determines the padeye location that minimises the eccentricity between the applied load and the centroid of the soil resistance mobilisation.
The padeye capacity module is validated against 134 reference tests
spanning three soil types (clay, sand, and layered profiles), five
capacity methods, and a range of anchor geometries (\(L/D\) from 1 to 6,
\(D\) from 3 to 8 m). All 134 tests pass within the specified tolerance,
as confirmed by the automated test suite (op3.anchors: 134 passed).
Verification and Validation¶
Benchmark library¶
The Op3 benchmark library contains 39 test cases drawn from 20+ published sources, following the American Society of Mechanical Engineers (ASME) V&V 10-2019 terminology where verification confirms the code solves the equations correctly (code vs. analytical/FE reference) and validation confirms the equations represent the physical system correctly (model vs. experiment/field data). The benchmarks span nine categories covering the full pipeline from individual component verification to end-to-end system validation.
Category A: Eigenvalue benchmarks (8 benchmarks)¶
Benchmarks #1–5, #24–25, and #29 compare the first natural frequency \(f_1\) predicted by Op3 against published reference values from code-comparison exercises, centrifuge tests, and full-scale field measurements. The sources include Jonkman (2010) for the OC3 exercise, Gaertner et al. (2020) for the International Energy Agency (IEA) 15 MW reference turbine, Kim et al. (2025) for centrifuge validation, Seo and Kim (2020) for a full-scale 3 MW tripod, Arany et al. (2015) for Walney 1 field measurement, and Popko et al. (2014) for the OC4 jacket.
The centrifuge benchmark (#5) is the most rigorous: 22 individual test cases spanning 5 soil conditions and scour depths from 0 to \(0.6 \, S/D\), with a mean error of 1.19% and a maximum error of 4.47%. This provides strong validation that the Op3 structural model, combined with OptumGX-derived spring profiles, accurately captures the dynamic response of tripod suction bucket foundations under varying soil and scour conditions.
Representative results include: NREL 5 MW OC3 monopile \(f_1 = 0.3158\) Hz vs. reference 0.3240 Hz (\(-2.5\%\)); Seo full-scale tripod \(f_1 = 0.317\) Hz vs. reference 0.318 Hz (\(-0.2\%\)); Arany Walney 1 monopile \(f_1 = 0.343\) Hz vs. reference 0.350 Hz (\(-2.1\%\), improving on Arany’s own prediction of 0.331 Hz at \(-5.4\%\)); and OC4 jacket \(f_1 = 0.316\) Hz vs. reference 0.310 Hz (\(+1.9\%\)), falling within the OC4 spread of 0.29–0.33 Hz across 22 participating codes.
Category B: Foundation stiffness benchmarks (4 benchmarks)¶
Benchmarks #6, #16–17, and #20 compare Op3’s analytical stiffness functions against published reference values from three-dimensional FE solutions (Doherty and Deeks, 2003). The key comparison is benchmark #20, which evaluates Op3’s Efthymiou & Gazetas (1983) formulas against the Doherty and Deeks (2003) 3D scaled-boundary FE solutions that form the calibration basis for the OxCaisson model. For the primary Op3 design domain (\(L/D = 0.5\), \(\nu = 0.2\)): normalised lateral stiffness \(K_L/(R \cdot G)\) = 10.02 vs. 9.09 (\(+10.2\%\)); normalised rotational stiffness \(K_R/(R^3 \cdot G)\) = 17.28 vs. 16.77 (\(+3.1\%\)). A three-method comparison confirms that Efthymiou & Gazetas (1983) is the recommended formulation, with Gazetas (1991) underestimating \(K_R\) by \(-55.8\%\) and Houlsby & Byrne / OWA (2005) underestimating \(K_R\) by \(-54.3\%\).
The Jalbi impedance benchmark (#16) provides a complementary check: the rotational stiffness \(K_R\) matches to \(-0.1\%\), while the lateral stiffness \(K_L\) shows \(+29.1\%\) offset, within the known scatter between analytical methods for suction caisson stiffness.
Category C: Bearing capacity benchmarks (4 benchmarks)¶
Benchmarks #8, #14–15, and #22 compare OptumGX 3D FELA against published capacity factors. Benchmark #14 (Fu & Bienen 2017): vertical bearing capacity factor \(N_{cV} = 6.006\) for a surface footing (\(+1.1\%\) vs. 5.94) and \(N_{cV} = 10.247\) for a skirted caisson at \(d/D = 0.5\) (\(-2.5\%\) vs. 10.51). Benchmark #15 (Vulpe 2015): full V-H-M capacity factors for a skirted circular foundation: \(N_{cV} = 10.249\) (\(-4.1\%\)), \(N_{cH} = 3.847\) (\(-7.8\%\)), \(N_{cM} = 1.468\) (\(-0.8\%\)). Benchmark #22 (DJ Kim et al. 2014): tripod yield moment \(M_y = 92.4\) MNm vs. 93.0 MNm (\(-0.7\%\)), validated against a 70g centrifuge test.
These results demonstrate that OptumGX 3D FELA with 6,000–10,000 mixed elements and 3 adaptivity iterations reproduces published bearing capacity factors to within 0.8–7.8% for undrained (Tresca) clay, confirming that the Op3 pipeline correctly builds the foundation geometry, applies boundary conditions, and extracts the load multiplier.
Category D: Scour sensitivity benchmarks (3 benchmarks)¶
Benchmarks #10–11 and #26 validate Op3’s scour sensitivity predictions. The Prendergast et al. (2015) laboratory benchmark reports 5–10% frequency reduction for a monopile at \(S/D = 1.0\); Op3 predicts 5.9%, within the published range. The Cheng et al. (2023) suction bucket benchmark confirms scour insensitivity: both Op3 (0.53%) and the reference (0.88%) show less than 1% frequency change at \(S/D = 0.2\).
Categories E–H: Design compliance, field trials, depth profiles, and cyclic degradation (7 benchmarks)¶
Benchmark #13 confirms that both the NREL 5 MW and Gunsan 4.2 MW turbines satisfy the DNV-ST-0126 soft-stiff frequency band requirement. Benchmark #19 (Houlsby Bothkennar field trial) provides the first field validation of Op3’s stiffness predictions against a suction caisson: the Efthymiou Gibson model predicts \(K_r = 176.9\) MNm/rad vs. measured 225 MNm/rad (\(-21.4\%\)), with the discrepancy explained by the Gibson model’s assumption of zero surface stiffness versus the finite surface strength at Bothkennar. Benchmark #21 validates the depth-resolved plate pressure extraction from OptumGX, confirming that the integrated skirt reaction (69.1% of total \(H_{max}\)) is physically consistent and the average normalised soil pressure \(N_p = 2.09\) is appropriate for the shallow failure mechanism at \(L/D = 0.5\). Benchmark #27 (Kallehave et al. 2015) validates the systematic measurement-to-design frequency ratio: Op3 predicts \(f_{meas}/f_{design} = 1.096\) vs. the published 1.093 (\(+0.3\%\)) compiled from 400 turbines at Walney. Benchmark #28 (Jeong et al. 2021) validates cyclic rotation accumulation at \(N = 100\) (\(+4.3\%\)) and \(N = 10^6\) (\(+3.7\%\)), confirming the power-law exponent \(b = 0.085\) for tripod suction buckets, far smaller than the monopile exponent \(b = 0.31\) (LeBlanc 2010).
Category I: Design domain boundaries (2 benchmarks)¶
Two benchmarks (#7 and #18) document the explicit boundaries of Op3’s design domain. The PISA Dunkirk sand piles (\(L/D = 3\)–10) are slender monopiles outside Op3’s calibration range (\(L/D \sim 0.5\)–1.0). The Achmus sand capacity benchmark (#18) demonstrates that OptumGX FELA with Mohr-Coulomb sand produces plastic collapse loads (\(H_{ult} = 1,228\) MN) that far exceed the displacement-based capacity (45 MN from Achmus et al. (2009)), because limit analysis computes the theoretical upper bound on the collapse load rather than a displacement-criterion capacity. This confirms that OptumGX FELA is validated for undrained clay capacity but should not be used directly for drained sand horizontal capacity.
Overall verification status¶
The benchmark portfolio achieves the following overall score:
| Status | Count | Percentage |
|---|---|---|
| Verified | 35 | 90% |
| Out of calibration | 3 | 8% |
| Out of scope | 1 | 3% |
| Total | 39 |
Of the full 39-benchmark library, 35 pass (90%). Excluding the single out-of-scope benchmark with documented mesh-convergence issues gives 35 of 38 in-scope benchmarks verified (92%). Both rates are reported to avoid post-hoc selection bias.
Figure 6: Histogram of benchmark verification results across the 39-test V&V library, showing the distribution of percentage errors relative to published reference values.
The three non-passing benchmarks have documented causes. Benchmark #3 (IEA 15 MW monopile) shows \(+13.1\%\) error, which is within the $$10–15% spread observed across the $$20 participating codes in the OC3/OC4 exercises and reflects differences in the fixed-base structural modelling (tower discretisation, rotor-nacelle assembly (RNA) mass representation) rather than in the foundation module. Benchmark #6 (PISA Cowden Clay) shows \(+16.5\%\) to \(+32.4\%\) overprediction because the published depth-function corrections from Burd et al. (2020) Table 5 are not yet implemented in Op3 v1.0.0-rc2. Benchmark #20 at \(L/D = 1.0\), \(\nu = 0.5\) shows \(+37.8\%\) error on \(K_R\), outside the primary design domain of \(L/D = 0.5\).
Continuous integration¶
All 140 tests, comprising the 39 benchmarks plus 101 unit and integration tests, execute automatically on every commit through GitHub Actions. The CI pipeline enforces a no-regression policy: any benchmark that previously passed must continue to pass, and new benchmarks are added monotonically. The test suite is structured as a testing pyramid with three tiers: unit tests for individual functions (spring calibration, coordinate transforms, file parsing), integration tests for inter-module data flow (OptumGX output to OpenSeesPy input, OpenSeesPy stiffness to OpenFAST SubDyn), and system tests that execute the full pipeline on reference configurations.
Software Engineering¶
Distribution and installation¶
The framework is distributed as op3-framework version 1.0.0-rc2 on the
Python Package Index (PyPI), installable via:
The source code is hosted at github.com/ksk5429/numerical_model under
the Apache License 2.0. A Zenodo archive preserves the exact release
with a citable digital object identifier (DOI) (concept DOI:
10.5281/zenodo.19476542). The framework requires Python 3.12,
OpenSeesPy 3.7+, and optionally OpenFAST v5.0.0 for aero-elastic
coupling. The OptumGX interface requires a commercial licence and
Windows; all other components are cross-platform.
Testing pyramid¶
The test suite comprises 140 pytest-compatible tests organised in three tiers:
-
Unit tests (approximately 70): Individual functions and classes, including spring stiffness computation, coordinate transforms, YAML parsing, capacity factor extraction, power-law fitting, and Mode D weighting invariants (8 dedicated invariant tests for the dissipation weighting function, including boundary conditions \(w(0) = 1.0\) and \(w(D_{max}) = \beta\), monotonicity, and the identity that Mode D with zero dissipation reduces to Mode C).
-
Integration tests (approximately 30): Inter-module data flow, including OptumGX CSV parsing to OpenSeesPy spring array, OpenSeesPy 6x6 extraction to OpenFAST SubDyn input file generation, and MC parameter sampling to database output consistency.
-
System/benchmark tests (39): The full V&V library described in Section 5, each implemented as a parametrised test case with the published reference value, the Op3 prediction, and the acceptance tolerance embedded in the test fixture.
In addition to the core 140 tests, the op3.anchors module maintains a
separate suite of 134 tests covering all five capacity methods, the
installation analysis, padeye optimisation, cyclic degradation, and
MoorPy coupling. The Op3 Studio web interface adds 67 backend tests. The
total repository test count is 429 tests passing with 11 skipped (tests
requiring multi-GB reference data or OptumGX licence are guarded with
pytest.skipif).
GitHub Actions CI¶
The continuous integration pipeline runs on every push and pull request via GitHub Actions. The workflow includes:
- Dependency installation: Python 3.12 environment setup with pinned dependency versions.
- Linting: ESLint for JavaScript utilities, markdownlint for documentation.
- Test execution:
pytestwith coverage measurement viac8. - Benchmark regression: Explicit check that no previously-passing benchmark has regressed.
- Documentation build: Sphinx documentation compiled from docstrings to verify API coverage.
The CI is configured to pass on minimal checkouts that do not include
the multi-GB NREL reference data or OptumGX outputs, using
pytest.skipif guards to skip tests that require these external
resources.
Documentation¶
API reference, tutorials, and benchmark descriptions are hosted via Sphinx with automated deployment to ReadTheDocs and GitHub Pages. The documentation comprises approximately 5,000 lines across 9 reStructuredText (RST) pages and 6 Jupyter notebook tutorials covering: quickstart, foundation mode comparison, uncertainty quantification (UQ), Bayesian calibration, SoilDyn export, and design load case (DLC) sweep execution. A troubleshooting page addresses approximately 30 common issues across installation, OpenSeesPy, OpenFAST, PISA, UQ, and V&V workflows.
Reproducibility¶
Figure 7: Runtime comparison of Op3 against manual three-stage workflows, showing the per-realisation cost reduction from automated pipeline orchestration.
Every figure and table in the companion publications (Papers A, B, E,
J2, J3) is reproducible from the Op3 API with pinned random seeds and
frozen dependency versions. The integrated Monte Carlo database
(data/integrated_database_1794.csv) is committed to the repository,
ensuring that downstream analyses (Bayesian updates, encoder training,
decision framework evaluation) can be reproduced without re-running the
OptumGX capacity analyses. The release validation report
(scripts/release_validation_report.py) executes the full V&V suite in
approximately 42 seconds and produces a pass/fail summary.
Table 2 positions Op3 relative to existing tools.
Table 2: Comparison of Op3 with existing offshore wind foundation assessment tools. Boldface indicates a unique capability.
| Feature | Op3 | OrcaFlex | Bladed | FAST.Farm | OxCaisson | PISA |
|---|---|---|---|---|---|---|
| 3D geotechnical capacity | Yes (OptumGX) | No | No | No | Yes (elastic) | Yes (mono) |
| Structural dynamics (BNWF) | Yes | Partial | Partial | Partial | No | No |
| Aero-elastic simulation | Yes (OpenFAST) | Yes | Yes | Yes | No | No |
| Per-realisation calibration | Yes | No | No | No | No | No |
| Monte Carlo automation | Yes | No | No | No | No | No |
| Open source | Yes | No | No | Yes | No | No |
| Foundation modes (selectable) | 4 | 1 | 1 | 1 | 1 | 1 |
| Suction bucket geometry | Yes | No | No | No | Yes | No |
Discussion and Limitations¶
OptumGX dependency. The three-dimensional limit analysis relies on the commercial OptumGX solver. While the Op3 interface is open-source, users without an OptumGX license cannot execute the capacity analysis from scratch. This constraint is mitigated by persisting all OptumGX outputs as CSV files committed to the repository, so the open-source path (OpenSeesPy + OpenFAST) reproduces every headline result without OptumGX installed. Extension of the parameter envelope beyond the pre-computed range, however, requires an OptumGX licence.
Single-geometry focus. The current validation focuses on tripod suction-bucket foundations with \(L/D \sim 0.5\)–1.0. Extension to monopiles (\(L/D > 3\)), jackets, and gravity-based foundations requires geometry-specific structural files, stiffness calibration procedures, and benchmark sets. The framework architecture is modular (each tool is wrapped in an adapter class with a consistent interface), so new foundation types can be added without modifying the core pipeline, but the V&V library must be extended for each new geometry.
OptumGX process management on Windows. The OptumGX COM interface requires Windows and exhibits occasional process-leak behaviour (orphaned solver processes that consume memory). Op3 includes explicit cleanup routines with process kill and dynamic-link library (DLL) directory management, but users must ensure that stale OptumGX processes are terminated before launching new ensemble runs.
One-way coupling. The OpenSeesPy-to-OpenFAST coupling is one-directional: the foundation stiffness is computed once per scour level and held constant during the time-domain simulation. This is valid for small-strain dynamic loading but may introduce error for extreme loading events where the foundation response is significantly nonlinear within a single simulation window.
Sand capacity. OptumGX FELA with Mohr-Coulomb sand produces theoretical plastic collapse loads that far exceed displacement-based design capacities. For sand sites, Op3 uses the OptumGX plate pressure profiles to calibrate p-y springs (Mode C) rather than relying on the global capacity factor.
Conclusions¶
Op3 is an open-source orchestration framework that couples freely available solvers (OpenSeesPy, OpenFAST) with the commercial finite-element platform OptumGX, which requires a separate licence. The open-source components (spring extraction, eigenvalue analysis, post-processing) are independently usable; the OptumGX coupling provides the three-dimensional limit-analysis capacity envelopes that are unique to this framework. Op3 thus provides the first integrated pipeline spanning three-dimensional limit analysis, structural dynamics, and aero-servo-hydro-elastic simulation for offshore wind foundation assessment. The framework contributes:
- A unified Python API with a single-source-of-truth structural file and automatic per-realisation stiffness calibration between geotechnical and structural stages, enabling Monte Carlo ensembles of 1,794 realisations at 0.2 seconds per realisation on a single workstation. The 0.2 s/realisation figure covers the OpenSeesPy eigenvalue analysis and post-processing only. The upstream OptumGX limit analysis requires approximately 2–5 minutes per scour depth (one-time cost, amortised across the 1,794 realisations that share the same geometry). The total pipeline runtime including OptumGX is approximately 90–120 minutes for the full database on a single workstation.
- Four foundation-mode abstractions (fixed base, 6x6 stiffness, distributed BNWF, and novel dissipation-weighted BNWF) selectable through a single configuration parameter without code changes.
- A 39-benchmark cross-validation library with 35 of 39 benchmarks passing (90%); excluding the single out-of-scope benchmark gives 35 of 38 (92%). Headline matches include \(N_{cV}\) to \(+1.1\%\), \(N_{cM}\) to \(-0.8\%\), \(K_R/(R^3 G)\) to \(+3.1\%\), centrifuge frequency to 1.19% mean error, and field stiffness to \(-21\%\) (first field validation of suction caisson stiffness prediction).
- A novel mooring-anchor padeye capacity method validated against 134 reference tests, with a dissipation-centroid padeye optimisation that extends Mode D to floating wind applications.
- Full reproducibility from
pip install op3-frameworkto figure generation, with 140 core tests plus 134 anchor tests plus 67 web interface tests executing automatically on every commit through GitHub Actions CI.
The framework is distributed on PyPI as version 1.0.0-rc2 under Apache 2.0 and has been used in four companion publications to generate the Monte Carlo databases, eigenvalue analyses, and capacity envelopes that underpin the scour assessment and decision frameworks reported therein.
Data and Code Availability¶
The Op3 framework is publicly available on the Python Package Index
(PyPI) as op3-framework (version 1.0.0-rc2) under the Apache License
2.0. The source code, documentation, and continuous-integration
configuration are hosted on GitHub at [repository URL]. The
39-benchmark verification library and all analysis scripts are included
in the distribution.
CRediT Author Contribution Statement¶
Kyeong-Sun Kim: Conceptualization, Methodology, Software, Formal analysis, Investigation, Data curation, Writing – original draft, Visualization. Sung-Ryul Kim: Supervision, Project administration, Funding acquisition, Writing – review & editing.
Acknowledgements¶
This work was supported by the Korea Electric Power Corporation (KEPCO) Research Institute. The authors thank the OptumGX development team for technical support. Field data access was provided under research agreements with KEPCO, MMB consortium, and Unison Heavy Industries.
Declaration of Generative AI¶
Claude (Anthropic) was used for academic writing coaching and scaffolding of figure-generation scripts. All benchmark results were independently verified. The authors take full responsibility for the publication.






