Quickstart
Size an aircraft
cdadt size cases/b738.yaml
Converges the 737-800 case against its 2800 nmi design mission with a Part 25 reserve diversion and loiter, and prints every response of every discipline. Roughly five seconds at 21 nodes per phase.
Black box : openconcept.examples.B738_sizing:B738SizingMissionAnalysis
Grid : 21 nodes per phase
weights
-------
MTOW 78345.6435 kg
OEW 41748.3258 kg
MLW 62676.5148 kg
...
performance
-----------
block_fuel 15977.0628 kg
total_fuel 18597.3177 kg
takeoff_field_length 5247.7948 ft
abort_distance 5247.7948 ft
V1 135.0566 kn
V2 155.4331 kn
engine_out_climb_gradient 0.0579 rad
...
takeoff_field_length and abort_distance are equal because the black box solves the
decision speed V1 to make them so. A run where they differ has not converged.
Size it on your own aerodynamics
The drag can be cdadt’s rather than OpenConcept’s, computed from a vortex lattice built on the wing the case file describes. Everything else – the balanced field, the reserves, the engine deck, the weight closure – stays OpenConcept’s.
cdadt size cases/b738_avl.yaml # openavl (needs: pip install -e ".[avl]")
cdadt size cases/b738_oas.yaml # OpenAeroStruct (needs: pip install -e ".[transonic]")
Six cases ship, in three sets of two – an analysis and an optimization each for the aircraft configuration alone, and for the same configuration with each lattice supplying the aerodynamic loads:
Aerodynamics |
Sizing |
Optimization |
|---|---|---|
OpenConcept’s own |
|
|
openavl vortex lattice |
|
|
OpenAeroStruct vortex lattice |
|
|
What changes, and what does not:
reference openavl OpenAeroStruct
MTOW (kg) 78,345.6 76,827.2 76,554.7
Fuel with reserves 18,597.3 17,402.7 17,188.7
Balanced field (ft) 5,247.8 4,986.0 4,945.3
wing_span (m) not published 34.3143 34.3143
Two things to know before reading that table. The lattices report a span efficiency near 0.99 against the 0.801 the case file assumes, which is most of the difference – but they also carry transonic drag rise, which the reference has no way to model, and that pushes the other way. The figures net the two. Supplying your own aerodynamics separates them.
And wing_span appears only for the lattice cases, because it is an optional response:
OpenConcept’s own group never computes a span. A run that cannot report something says so under
“Not published by this black box” rather than omitting it silently.
Optimize against a certification basis
cdadt optimize cases/b738_optimization.yaml
Minimizes fuel with reserves over the wing planform and the engine rating, subject to the balanced field length, the engine-out second-segment climb gradient and the throttle band of the engine deck. Prints the design variables, a baseline-to-optimum comparison of every result, and the traceability matrix:
regulation constraint value bound margin units status
---------------------------------------------------------------------------------------------------------------------------
14 CFR 25.113 Balanced field length within the runway available 6587.1294 <= 8000 1412.8706 ft MET
14 CFR 25.121(b)(1)(i) OEI second-segment climb gradient 0.0501 >= 0.024 0.0261 rad MET
- Climb throttle within the engine deck 1.0500 0.01 to 1.05 0.0000 - ACTIVE
- Cruise throttle within the engine deck 0.8691 0.01 to 1.05 0.1809 - MET
Where each limit came from
--------------------------
takeoff_field_length (14 CFR 25.113): Design field length, 8000 ft dry runway at sea level, ISA
engine_out_climb_gradient (14 CFR 25.121(b)(1)(i)): Two-engine aeroplane, 2.4% second-segment minimum
Design constraints with no stated regulation or source: climb_throttle, cruise_throttle.
These bound the design; they are not certification evidence.
4 of 4 constraints met, 1 active, 0 violated.
Every run leaves the files a review asks for
Both commands above already did this – there is no flag. Each invocation writes its own
directory under run_outputs/, named for the case and the moment it ran:
run_outputs/b738_20260728_201512_out/
report.txt results.json n2.html
mission.pdf trajectory.pdf takeoff.pdf
.openmdao_out reports/
mission.pdf reproduces B738_sizing.py’s own figure and trajectory.pdf reproduces
B738.py’s; takeoff.pdf draws the balanced field, which neither example plots. An
optimization additionally leaves IPOPT.out, the optimizer’s own log. See Output files.
Read the interface
cdadt inspect cases/b738.yaml --what inputs --filter "ac|geom|wing"
Prints what the case’s black box accepts and what it publishes, without running anything. This is the interface reference, generated rather than transcribed. See The interface reference.
From Python
The command line is a thin wrapper. The API underneath is three lines:
from cdadt import Config, SizingAnalysis
analysis = SizingAnalysis(Config.from_yaml("cases/b738.yaml"))
results = analysis.run()
print(results["MTOW"], results["total_fuel"])
and for an optimization:
from cdadt import Config, Optimizer, SizingAnalysis
optimizer = Optimizer(SizingAnalysis(Config.from_yaml("cases/b738_optimization.yaml")))
outcome = optimizer.run()
print(optimizer.report(outcome))
Where to go next
The case file – every key of the case file.
Output files – the files a run leaves behind.
Architecture – the classes, and why the boundary is drawn where it is.
Tutorials – change the aircraft, free a variable, add a constraint, add a discipline.
Validation – what has been established, and what has not.