Motivation
Why not just use historical weight fractions?
Classical conceptual-design methods — Roskam, Torenbeek, Raymer — size an airliner mostly by analogy: a wing weighs some fraction of MTOW because previous wings did, a fuselage's drag is read off a wetted-area correlation fit to previous fuselages. That works beautifully as long as the new airplane looks like the old ones. It breaks the moment you ask a genuinely new question — what happens at a bypass ratio of 15 instead of 5, or with a fuselage shape no one has certified yet — because you've walked off the edge of the data the correlation was fit to.
TASOPT's answer, developed by Mark Drela at MIT starting around 2010, is to push as much of the model as possible down to fundamental structural, aerodynamic, and thermodynamic theory, and reserve historical correlation only for the parts that genuinely resist first-principles treatment — cabin furnishings, avionics, hydraulics. The fuselage is sized as an actual pressure vessel under actual bending loads. The wing is sized as an actual cantilever beam under its actual spanwise lift distribution. The engine is a real multi-spool turbofan cycle with variable-\(c_p(T)\) gas properties, not a fixed TSFC pulled from a spec sheet. Drag is computed from a transonic-airfoil CFD database and an axisymmetric viscous/inviscid fuselage solve, not a flat-plate-plus-fudge-factor.
The payoff is that the resulting sized aircraft is a defensible physical object even far outside historical experience — which is exactly the regime you need when exploring ultra-high-bypass geared turbofans, boundary-layer-ingesting propulsors, or unconventional fuselage cross-sections. The cost is that everything now depends on everything else: change the bypass ratio and the nacelle drag changes, which changes the thrust needed, which changes the fuel burned, which changes the takeoff weight, which changes the wing loading, which changes … TASOPT's real work is running that whole loop to convergence.
Structures I
The fuselage as a pressure vessel
A cruising airliner's cabin needs to be pressurized to roughly a healthy‑2,400‑metre‑altitude equivalent while the outside air at 11 km is a fifth of that pressure. That pressure difference, acting over the whole cylindrical shell, is what actually determines skin thickness — not some fraction of gross weight. TASOPT models the fuselage explicitly as a thin-walled pressure vessel: a "double-bubble" of two intersecting circles (to get a wider, flatter cabin floor than a single circle would give at the same structural weight), capped by an ellipsoidal nose and a hemispherical tail bulkhead.
For a thin cylindrical shell, pressurization alone produces two stresses — a hoop (circumferential) stress and an axial (longitudinal) stress, and the hoop stress is always exactly twice the axial one for the same shell:
Since the hoop stress always wins, it’s the one that sets the skin gauge: the skin is sized so that the hoop stress just reaches the material’s allowable stress, giving the required thickness directly,
and the shell’s mass then follows immediately from that thickness, the fuselage radius, the skin density, and empirical fractions for stringers, frames, and local reinforcement (Eq. A.28–A.32). On top of this pressure sizing, TASOPT separately checks whether in-flight bending loads — from the fuselage’s own weight, the tail’s lift, and landing impact — ever demand more material than pressurization alone would; where they do, extra "bending material" area is added at the top, bottom, and sides of the shell (Figure A.2–A.3), and a separate torsion-sized tailcone carries the vertical tail’s twisting load back into the airframe.
Why this matters: the calculator shows the hoop stress always coming out at exactly the allowable and the axial stress at exactly half of it — not because the sliders are rigged, but because that 2:1 ratio is a geometric fact about thin cylindrical pressure vessels. It's the same reason sausage skins split lengthwise, not around their circumference.
Structures II
Wings and tails as cantilever beams
The wing gets the same treatment. TASOPT parameterizes the planform as a two-segment piecewise-linear shape (root, break, tip chord, with independent inner/outer taper and a single sweep angle), assigns it a spanwise lift distribution close to elliptical, and integrates that distribution into a shear and bending-moment diagram along the span — exactly the free-body diagram a structures textbook draws for a cantilever beam under distributed load. The sparcap area needed at any span station is whatever it takes to keep the bending stress at the allowable value:
which looks dense, but says something quite ordinary: bending stress scales with moment over chord cubed (a deeper, thicker section resists bending far more efficiently than a thin one — that \(c^3\) is the whole reason wing thickness matters structurally, not just aerodynamically), and gets worse with sweep because a swept spar sees a larger effective bending moment in its own cross-sectional plane. Holding the allowable stress fixed and solving for the required material area, then integrating that area along the span and multiplying by material density, gives the wing's structural weight directly — no "wing weight = 11% of MTOW" fraction anywhere in the derivation.
This is also where a purely historical method quietly hides one of the central trade-offs of airplane design. A higher aspect ratio wing (long and skinny) has less induced drag for the same lift, because it spreads the trailing vortex sheet over more span. But a longer span means a longer bending arm, so the same root bending moment problem needs proportionally more spar material — the wing gets heavier. A correlation-based method can't see this tension at all; a structures-and-aerodynamics model like TASOPT's has to resolve it every time it changes anything.
Balance
Weight, balance, and how big the tail has to be
Every component above also has a weight moment — its weight times its distance from the nose — and TASOPT tracks these the whole way through so it can find the aircraft's center of gravity for any payload and fuel loading (Eq. A.278–A.284). From the same bookkeeping it gets the aircraft's aerodynamic center and neutral point — the CG location at which the airplane would have zero static pitch stability — and requires the real CG to sit some specified static-margin fraction of the mean chord ahead of it.
The horizontal tail is then sized, not by a rule of thumb like "tail volume coefficient ≈ 1.0," but by solving two nonlinear equations simultaneously for two unknowns: the wing-box position and the horizontal tail area, chosen so that the airplane is in pitch trim at its worst-case forward CG and meets its static-margin requirement at its worst-case aft CG, at the same time (Eq. A.300–A.303). It's a genuine 2×2 Newton system — move the wing aft to help trim, and you've usually hurt stability, so the two knobs have to be turned together. This is a small but telling example of the whole document's philosophy: replace an empirical coefficient with the actual physical requirement it was standing in for.
Aerodynamics
Drag, reframed as dissipation
TASOPT's aerodynamic model rests on a reframing that is arguably its most quietly important idea, borrowed from a companion paper by Drela on power balance in aerodynamic flows. Instead of tracking drag as a force, it tracks where kinetic energy is being destroyed — viscous dissipation in boundary layers and wakes, plus the kinetic energy left behind in trailing vortices. The propulsive power balance is written
where \(F'\) and \(D'\) are effective thrust and drag defined through power and dissipation rates rather than forces. The payoff is that this formulation stays perfectly well-posed even when the engine ingests part of the airframe's own boundary layer — a fuselage-mounted "aft-fan" propulsor, say — a case where ordinary thrust-minus-drag bookkeeping gets ambiguous about where the airframe stops and the propulsor starts. With ordinary (non-ingesting) propulsion the two views agree exactly, so nothing is lost for a conventional podded-engine airplane; the reframing simply keeps the door open to boundary-layer ingestion without a separate model.
Each drag contributor gets its own physics rather than a shared fudge factor:
- Wing profile drag comes from a 2D transonic-airfoil CFD database (a parametric family swept across thickness and lift coefficient, Figure A.14), applied through infinite-swept-wing theory with a correction that "unsweeps" the shock locally near the fuselage, where the wing's potential flow is forced parallel to the freestream.
- Fuselage drag comes from an actual axisymmetric viscous/inviscid solve — a compressible line-source potential flow coupled to an integral boundary-layer method in the style of XFOIL — not a flat-plate-skin-friction correlation (Appendix E).
- Induced drag comes from a discrete-vortex Trefftz-plane analysis of the actual spanwise loading, including how the wake contracts behind a finite-thickness fuselage.
- Nacelle and strut drag use wetted-area skin friction, corrected for the local flow acceleration the nacelle sees sitting in the wing's or fuselage's induced velocity field.
Summing every contributor gives the aircraft's overall dissipation coefficient (Eq. A.390):
Propulsion
The engine as a thermodynamic cycle
TASOPT doesn't look up a thrust-specific fuel consumption number for "a modern high-bypass turbofan." It runs an actual station-by-station gas-dynamic cycle model — inlet, fan, booster, high-pressure compressor, combustor, high- and low-pressure turbines, core and fan nozzles — with each station's total pressure and temperature computed from a thermally-perfect gas whose specific heat \(c_p\) genuinely varies with temperature and composition. The isentropic relation you'd write for a constant-\(c_p\) gas,
gets replaced everywhere with an integral form built from an entropy-complement function σ(T), solved by Newton iteration at every single component:
where \(\sigma(T) \equiv \displaystyle\int c_p(T)\,\dfrac{dT}{T}\) is the entropy-complement function.
The model runs in two distinct modes. In design-sizing mode, you specify the thrust needed and the combustor exit temperature, and the model solves for how big every flow area has to be. In off-design mode — needed for every point of climb, cruise, and descent that isn't the design point — the flow areas are now fixed hardware, so instead the model solves an 8×8 nonlinear Newton system for the operating pressure ratios and mass flows that satisfy fan/compressor speed matching, choked-turbine mass flow, and nozzle mass-flow constraints simultaneously, using calibrated compressor and fan maps (Eq. B.270, Figure B.3–B.6).
Two supporting appendices worth knowing exist: a film-cooling loss model (Appendix C) that trades turbine-blade cooling flow against metal temperature and cycle efficiency, and a power-accounting framework for boundary-layer ingestion (Appendix F) that extends the drag-as-dissipation idea of §5 all the way into the engine, crediting a BLI propulsor for the wake energy it recovers while penalizing it for the reduced inlet pressure recovery that comes with swallowing a slower, thicker boundary layer.
Mission
Flying the mission: Breguet from a power balance
All of the above — weight, drag, thrust — ultimately exists to answer one question: how much fuel does this airplane burn to fly its mission? Starting from the same power-balance relation introduced in §5 and the definition of thrust-specific fuel consumption, \(dW/dt = -\dot m_\text{fuel}\,g = -F'\cdot\text{TSFC}'\), TASOPT derives the familiar weight-versus-range differential equation
For the cruise-climb segment, where Mach number and lift coefficient are held fixed while the airplane slowly climbs as it burns off fuel, this integrates in closed form into the classic Breguet relation — except now every term on the right traces back to a physical submodel rather than a spec sheet:
The full design mission (Figure A.19) chains together a climb segment, this cruise-climb, and a descent, each integrated over its own altitude/weight profile, with the final landing weight closing the loop back to the mission fuel weight: \(W_\text{burn}=W_b-W_e\), grossed up by a reserve fraction to get the fuel actually loaded (Eq. A.427–A.429).
Synthesis
Closing the loop
None of §2 through §7 runs once and stops. A guessed maximum-takeoff weight sets the loads that size the fuselage and wing; those structures fix the operating-empty weight; the sized wing and fuselage shape fixes the drag polar; the required cruise thrust from that drag sizes the engine; the engine's actual TSFC and the sized drag together determine how much fuel the mission burns; and the fuel burned changes the takeoff weight you started with. TASOPT resolves this as a fixed-point iteration (or, in several places, as an explicit Newton system — the tail sizing in §4 and the engine off-design solve in §6 are both literal Newton solves nested inside the outer loop).
When TASOPT is used not just to analyze one design but to search for a better one, this entire converged loop becomes the inner evaluation of an outer optimizer — varying things like aspect ratio, bypass ratio, cruise altitude, and wing sweep to minimize fuel burn or direct operating cost, subject to constraints like balanced-field length and approach speed.
Implementation
From equations to code
The companion notebook delivered alongside this page, notebook/tasopt_lite.ipynb, is a from-scratch Python implementation of the sizing loop in §8, built directly from the equations above rather than from TASOPT.jl's source. It sizes a 737-800‑class narrowbody end to end — fuselage and wing structural weight, a dissipation-style drag build-up, a simplified turbofan cycle, and a Breguet mission analysis — iterating MTOW to convergence, and checks the result against the real airplane's public specifications.
It is deliberately a reduced-order port, not a reimplementation of the full Fortran/Julia codebase, so it's worth being explicit about what was simplified and why:
| Model piece | Full TASOPT | This notebook |
|---|---|---|
| Gas thermodynamics | Thermally-perfect, \(c_p(T)\) integrated from real species data (Appendix D) | Calorically-perfect ideal gas, constant \(c_p\) per hot/cold path |
| Engine operation | 8×8 Newton solve against calibrated compressor/fan maps at every off-design point (Appendix B) | Single design-point Brayton cycle; TSFC held fixed off-design |
| Wing/fuselage profile drag | Transonic-airfoil CFD database + axisymmetric viscous/inviscid fuselage solve (Appendix E) | Korn-equation wave drag + flat-plate skin friction with a form factor |
| Structural sizing | Full spanwise shear/bending integration, double-bubble fuselage, strut option (Appendix A) | Root-bending-moment sparcap sizing; single-bubble pressure shell |
| Mission integration | Numerically integrated climb/cruise/descent with iterative predictor–corrector | Closed-form Breguet cruise + fixed climb/descent weight-fraction allowances |
Despite the simplifications, keeping the same structure of the calculation — stress-driven weights, a real (if simplified) thermodynamic cycle, and a physically derived range equation, all iterated to a fixed point — is enough to land within roughly 10–15% of the public MTOW and wingspan figures for a 737-800‑class aircraft (component-level numbers like OEW and engine thrust individually disagree with the real airplane by more, even as the top-level result lands close — see the notebook's closing section for why), which is about what you'd expect a conceptual-design-level tool to achieve on a type it was never tuned to.
Everything needed to reproduce this page's numbers lives in this repository:
notebook/tasopt_lite.ipynb— the notebook itself, pre-executed with real outputs and a comparison chart against the 737-800.notebook/tasopt_lite.py— the same model as a plain runnable script, for anyone without Jupyter installed.
Morlier, J., "Weight, Drag, Thrust, Range: a pedagogical walkthrough of TASOPT", 2026. Adapted from M. Drela, TASOPT 2.00 Technical Description, MIT, 2010. Available at: https://github.com/<your-username>/<your-repo>
Further reading