Skip to main content
Version: 0.5.0

OpenAeroStruct Aerostructural

The aerostructural disciplines wrap a coupled OpenAeroStruct (OAS) vortex-lattice method (VLM) + finite-element structural analysis as Philote disciplines. Two decomposition strategies are provided: a monolithic approach that wraps the entire coupled analysis as a single discipline, and a split approach that exposes geometry, aerodynamics, and structures as three independent disciplines coupled on the client side.

Monolithic Architecture​

The OasAerostructDiscipline packages the full OAS AerostructGeometry + AerostructPoint pipeline -- including the internal Gauss-Seidel coupling loop -- as a single Philote discipline.

┌──────────────────────────────────────────────────────────────────────┐
│ OasAerostructDiscipline (Philote gRPC server) │
│ │
│ ┌────────────────┐ ┌──────────────────────────────────────────┐ │
│ │ AerostructGeom │────▶│ AerostructPoint │ │
│ │ (mesh + FEM │ │ ┌─────────────────────────────────┐ │ │
│ │ setup) │ │ │ CoupledAS (NonlinearBlockGS) │ │ │
│ └────────────────┘ │ │ struct ↔ disp_xfer ↔ VLM ↔ loads│ │ │
│ │ └─────────────────────────────────┘ │ │
│ └──────────────────────────────────────────┘ │
│ │
│ Inputs: Outputs: │
│ v, alpha, Mach_number CL, CD, CM │
│ re, rho, CT, R, W0 fuelburn, failure │
│ speed_of_sound structural_mass │
│ load_factor, empty_cg │
└──────────────────────────────────────────────────────────────────────┘

OAS handles the internal aero-structural coupling (displacement transfer, VLM solve, load transfer, beam solve) automatically via its built-in NonlinearBlockGS solver. The Philote discipline simply exposes flight conditions and mission parameters as inputs and performance metrics as outputs.

Split Architecture​

The split approach decomposes the analysis into three disciplines that can run as separate gRPC services:

┌──────────────┐
│ OasGeom │──mesh, nodes, stiffness──┐
│ Discipline │ │
└──────────────┘ ▼
┌─────────────────────────┐
│ Coupled Group (client) │
│ NonlinearBlockGS │
│ │
│ ┌──────────┐ loads │
│ │ Aero │──────────▶│
│ │ Discipline│◀──────────│
│ └──────────┘ disp │
│ │
│ ┌──────────┐ │
│ │ Struct │ │
│ │Discipline│ │
│ └──────────┘ │
└─────────────────────────┘
DisciplineClassRole
GeometryOasGeomDisciplineMesh generation, FEM setup, structural mass
AerodynamicsOasSplitAeroDisciplineDisplacement transfer, VLM solve, load transfer
StructuresOasSplitStructDisciplineBeam finite-element solve

The client assembles the three disciplines in OpenMDAO, connecting geometry outputs to both aero and structures, and wiring the coupling variables (loads and disp) inside a NonlinearBlockGS-driven coupled group.

Coupling Variables​

The aero-structural coupling is mediated by two variables at the structural nodes:

VariableShapeUnitsDirection
loads(ny, 6)N, N*mAero → Struct
disp(ny, 6)m, radStruct → Aero

Where ny is the number of spanwise nodes (with symmetry: (num_y + 1) // 2). Each row contains 3 force and 3 moment components.

When to Use Which Approach​

CriterionMonolithicSplit
Simplest setupYes--
Fewest gRPC callsYes (1 discipline)No (3 disciplines, iterative)
Disciplines on separate machines--Yes
Different language for each discipline--Yes
Custom coupling strategy--Yes
Access to intermediate coupling state--Yes

Configuration​

All aerostructural disciplines accept the same two options, either via constructor arguments or Philote gRPC options:

  • mesh_dict -- dictionary passed to generate_mesh() (wing planform, panel counts)
  • surface -- dictionary merged into the OAS surface defaults (material properties, drag flags)
# Constructor (in-process)
discipline = OasAerostructDiscipline(
mesh_dict={"num_y": 21, "num_x": 7, "wing_type": "CRM", "symmetry": True},
surface_options={"E": 73.1e9, "G": 33.0e9},
)

# gRPC options (remote)
client.send_options({
"mesh_dict": {"num_y": 21, "num_x": 7, "wing_type": "CRM", "symmetry": True},
"surface": {"E": 73.1e9, "G": 33.0e9},
})

Performance​

Benchmark results comparing native OAS (direct OpenMDAO) vs Philote gRPC:

CaseNative (s)Philote (s)Overhead
Aerostruct small (5x2)0.1000.211112%
Aerostruct large (21x7)0.1810.23228%
Split small (5x2)0.1460.28294%
Split large (21x7)0.1750.405131%

The monolithic overhead decreases with problem size as computation dominates the fixed gRPC round-trip cost. The split overhead is higher due to iterative gRPC calls during the coupling loop.