Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions +AerodynamicsPkg/TrimDrag.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [dCD0] = TrimDrag(Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 08 jan 2026
% last updated: 22 jul 2026
%
% estimate the trim drag from any failed engines.
%
Expand Down Expand Up @@ -38,18 +38,24 @@

% return an array of zeros
dCD0 = zeros(npnt, 1);

% exit the program
return

end

% get the component
icomp = Aircraft.Mission.History.SI.Power.Windmill(SegBeg);

% get the number of sources
nsrc = length(Aircraft.Specs.Propulsion.PropArch.SrcType);


%% PRE-PROCESSING %%
%%%%%%%%%%%%%%%%%%%%

% get the SLS thrust
Tsls = Aircraft.Specs.Propulsion.Engine.DesignThrust;
Tsls = Aircraft.Specs.Propulsion.SLSThrust(icomp - nsrc);

% get the moment arm between the fuselage and most outboard engine
Arm = Aircraft.Specs.Aero.Fuse.DistToEng;
Expand Down
5 changes: 4 additions & 1 deletion +AerodynamicsPkg/WindmillDrag.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [Aircraft] = WindmillDrag(Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 05 jan 2026
% last updated: 22 jul 2026
%
% estimate the windmilling drag from any failed engines.
%
Expand Down Expand Up @@ -99,6 +99,9 @@
ThrCD(isnan(ThrCD)) = 0;
DelCD(isnan(DelCD)) = 0;

% if there are any theoretical drag coefficients less than 0, convert them to zero
ThrCD(ThrCD <= 0) = 0;

% compute the adjusted drag coefficient
TotCD = ThrCD - DelCD;

Expand Down
48 changes: 19 additions & 29 deletions +ConstraintDiagramPkg/+ConstraintSpecsPkg/ElysianE9X.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,22 @@
%
% [] = ElysianE9X()
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 30 mar 2026
% last updated: 22 jul 2026
%
% create a constraint diagram for a battery electric aircraft
% representative of the Elysian E9X.
%
% data was extracted from the following papers, published in 2024 and 2025:
% 1) de Vries, R., Wolleswinkel, R. E., Hoogreef, M., & Vos, R. (2024).
% A new perspective on battery-electric aviation, part II:
% Conceptual design of a 90-seater. In AIAA Scitech 2024 Forum
% (p. 1490). https://doi.org/10.2514/6.2024-1490
%
% 2) de Vries, R., Wolleswinkel, R. E., Exalto, J., van den Berg, P.,
% Vos, R., & Hoogreef, M. (2025). Conceptual Redesign of a 90-Seater
% Battery-Electric Aircraft. In AIAA AVIATION FORUM AND ASCEND 2025
% (p. 3153). https://doi.org/10.2514/6.2025-3153
%
% INPUTS:
% none
%
Expand Down Expand Up @@ -137,41 +148,20 @@
% number of engines [2024 paper]
Aircraft.Specs.Propulsion.NumEngines = 8;

% lapse rate exponent correction factor for cruise/diversion/etc.
Aircraft.Specs.Propulsion.LapseRate.Crs = 0.10;
Aircraft.Specs.Propulsion.LapseRate.Div = 0.28;


%% RUN THE CONSTRAINT ANALYSIS %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% determine which constraints to use (0 = 14 CFR 25; 1 = novel)
Aircraft.Settings.ConstraintType = 0;
% determine which constraints to use (0 = 14 CFR 25; 1 = novel; 2 = Steiner
% et al. [extrapolate exiting reg's for >4 engine aircraft])
Aircraft.Settings.ConstraintType = 2;

% create a constraint diagram
ConstraintDiagramPkg.ConstraintDiagram(Aircraft);

% add the existing sizing point
hold on
scatter(Aircraft.Specs.Aero.W_S.SLS * 9.81 / 1000, 1 / (Aircraft.Specs.Power.P_W.SLS / 9.81 * 1000), 48, "o", "MarkerEdgeColor", [0, 0.251, 0.478], "MarkerFaceColor", [0, 0.251, 0.478]);

% format the axis sizes
xlim([0, 8]);
ylim([0, 0.2]);
axis square

% turn on gridlines
grid on

% get the axis object
A = gca;

% set the grid to be semi-transparent and move it to the top
A.GridAlpha = 0.5;
A.Layer = "top";

% add minor gridlines
A.XMinorGrid = "on";
A.YMinorGrid = "on";

% increase font size
set(gca, "FontSize", 28);


end
70 changes: 44 additions & 26 deletions +ConstraintDiagramPkg/+ConstraintSpecsPkg/SUSAN.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@
%
% [] = SUSAN()
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 25 sep 2025
% last updated: 22 jul 2026
%
% create a constraint diagram for NASA's SUSAN aircraft.
% create a constraint diagram for NASA's SUSAN aircraft. information was
% extracted from the following paper:
%
% Chau, T., & Duensing, J. (2024). Conceptual Design of the Hybrid-Electric
% Subsonic Single Aft Engine (SUSAN) Electrofan Transport Aircraft. In AIAA
% SciTech 2024 Forum (p. 1326). https://doi.org/10.2514/6.2024-1326
%
% INPUTS:
% none
Expand All @@ -28,7 +33,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% aircraft class
Aircraft.Specs.TLAR.Class = "Turbofan";
Aircraft.Specs.TLAR.Class = "Turboprop";

% CFR regulations to certify
Aircraft.Specs.TLAR.CFRPart = 25;
Expand All @@ -41,33 +46,38 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% altitudes
Aircraft.Specs.Performance.Alts.Crs = UnitConversionPkg.ConvLength(40000, "ft", "m");
Aircraft.Specs.Performance.Alts.Srv = UnitConversionPkg.ConvLength(42000, "ft", "m");
% altitudes [cruise from economy mission outlined in 2024 paper; service
% ceiling estimated]
Aircraft.Specs.Performance.Alts.Crs = UnitConversionPkg.ConvLength(37000, "ft", "m");
Aircraft.Specs.Performance.Alts.Srv = UnitConversionPkg.ConvLength(40000, "ft", "m");

% stall speed
% stall speed [based on wing loading from 2024 paper]
Aircraft.Specs.Performance.Vels.Stl = sqrt(2 * 634 * 9.81 / 2 / 1.225);

% cruise mach number
% cruise mach number [2024 paper, Tab. 5]
Aircraft.Specs.Performance.Vels.Crs = 0.775;

% runway lengths and obstacle clearances
Aircraft.Specs.Performance.TOFL = 2750;
Aircraft.Specs.Performance.LFL = 2750;
% runway lengths and obstacle clearances [Boeing 737-800 MAX airport
% planning manual]
Aircraft.Specs.Performance.TOFL = 2040;
Aircraft.Specs.Performance.LFL = 1700;
Aircraft.Specs.Performance.ObstLen = UnitConversionPkg.ConvLength(1000, "ft", "m");

% multiplicative factors for OEI conditions
Aircraft.Specs.Performance.TempInc = 1.25;
Aircraft.Specs.Performance.MaxCont = 1 / 0.94;

% design specific excess power loss
Aircraft.Specs.Performance.PsLoss = 0.7689; % mean for twin-engine aircraft
% 0.9171 - mean SEP loss for twin-engine aircraft
% 0.0720 - lose a single distributed propulsor (most outboard)
% 0.3426 - lose the aft turbofan engine
Aircraft.Specs.Performance.PsLoss = 0.3426;

% landing weight as a fraction of MTOW (computed from baseline)
% landing weight as a fraction of MTOW (computed from FAST simulations)
Aircraft.Specs.Performance.Wland_MTOW = 0.8411;

% requirement type (0 = Roskam; 1 = Mattingly, 2 = de Vries et al.)
Aircraft.Specs.TLAR.ReqType = 0;
Aircraft.Specs.TLAR.ReqType = 2;

% constraints to use
Aircraft.Specs.Performance.ConstraintFuns = ["Jet25_111"; "Jet25_119"; "Jet25_121a"; "Jet25_121b"; "Jet25_121c"; "Jet25_121d"; "JetCrs"; "JetLFL"; "JetTOFL"];
Expand All @@ -83,18 +93,19 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% wing loading
% wing loading [2024 paper]
Aircraft.Specs.Aero.W_S.SLS = 634;

% wing properties
Aircraft.Specs.Aero.AR = 11.22091;
% wing properties [2024 paper]
Aircraft.Specs.Aero.AR = 9.44;

% lift coefficients (from Chau & Duensing and FINCH)
Aircraft.Specs.Aero.CL.Crs = 0.61;
Aircraft.Specs.Aero.CL.Tko = 2.0;
Aircraft.Specs.Aero.CL.Lnd = 3.5;
% lift coefficients [cruise lift coefficient from 2024 paper, others are
% estimated based DEP tech. improvements]
Aircraft.Specs.Aero.CL.Crs = 1.0; % given as 0.61 in 2024 paper, but need maximum CL for the constraint diagram
Aircraft.Specs.Aero.CL.Tko = 2.5;
Aircraft.Specs.Aero.CL.Lnd = 3.0;

% parasite drag coefficients (computed)
% parasite drag coefficients (computed from Raymer)
Aircraft.Specs.Aero.CD0.Crs = 0.0176;
Aircraft.Specs.Aero.CD0.Tko = 0.0626; % cruise CD0 + 0.045
Aircraft.Specs.Aero.CD0.Lnd = 0.1076; % cruise CD0 + 0.090
Expand All @@ -112,7 +123,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% MTOW
% MTOW [2024 paper]
Aircraft.Specs.Weight.MTOW = UnitConversionPkg.ConvMass(190890, "lbm", "kg");

% ----------------------------------------------------------
Expand All @@ -124,12 +135,19 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% thrust-weight ratio
% thrust-weight ratio [2024 paper]
Aircraft.Specs.Propulsion.T_W.SLS = 0.298;

% number of engines
% number of engines [for appropriate FARs]
Aircraft.Specs.Propulsion.NumEngines = 2;

% lapse rate [estimated]
Aircraft.Specs.Propulsion.LapseRate.Crs = 0.35;

% alternatively, a power-weight ratio [assumed takoeff airspeed as the
% "characteristic speed" to avoid singularities]
Aircraft.Specs.Power.P_W.SLS = (Aircraft.Specs.Propulsion.T_W.SLS * 1.21 * Aircraft.Specs.Performance.Vels.Stl) * 9.81 / 1000;


%% RUN THE CONSTRAINT ANALYSIS %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Expand All @@ -142,6 +160,6 @@

% add the existing sizing point
hold on
scatter(Aircraft.Specs.Aero.W_S.SLS, Aircraft.Specs.Propulsion.T_W.SLS, 48, "o", "MarkerEdgeColor", "red", "MarkerFaceColor", "red");
scatter(Aircraft.Specs.Aero.W_S.SLS * 9.81 / 1000, 1 / (Aircraft.Specs.Power.P_W.SLS / 9.81 * 1000), 48, "o", "MarkerEdgeColor", "red", "MarkerFaceColor", "red");

end
7 changes: 6 additions & 1 deletion +ConstraintDiagramPkg/Jet25_111.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [FAR] = Jet25_111(W_S, T_W, Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 30 mar 2026
% last updated: 11 jul 2026
%
% derive the constraints for takeoff climb with one engine inoperative.
%
Expand Down Expand Up @@ -72,6 +72,11 @@
% compute the climb gradient from a sigmoid curve
G = ConstraintDiagramPkg.Sigmoid(Aircraft, 0.5026, -42.54, 0.7925, 1.198);

elseif (Type == 2)

% extrapolate for any aircraft with more than 4 engines
G = 0.005 + 0.003 * NumEng;

else

% throw an error
Expand Down
8 changes: 7 additions & 1 deletion +ConstraintDiagramPkg/Jet25_119.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [FAR] = Jet25_119(W_S, T_W, Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 04 dec 2025
% last updated: 11 jul 2026
%
% derive the constraints for a balked landing climb with all engines
% operative.
Expand Down Expand Up @@ -61,6 +61,12 @@
% compute the climb gradient from a sigmoid curve
G = ConstraintDiagramPkg.Sigmoid(Aircraft, 0, 0, 0, 3.2);

elseif (Type == 2)

% extrapolate for any aircraft with more than 4 engines, but it will
% always remain the same here
G = 0.032;

else

% throw an error
Expand Down
9 changes: 8 additions & 1 deletion +ConstraintDiagramPkg/Jet25_121a.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [FAR] = Jet25_121a(W_S, T_W, Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 30 mar 2026
% last updated: 11 jul 2026
%
% derive the constraints for the transition segment climb.
%
Expand Down Expand Up @@ -72,6 +72,13 @@
% compute the climb gradient from a sigmoid curve
G = ConstraintDiagramPkg.Sigmoid(Aircraft, 0.4999, -151.22, 0.7855, 0.001);

elseif (Type == 2)

% extrapolate for any aircraft with more than 4 engines (only applies
% for >4 engines, but taking the maximum in case an aircraft with <=4
% engines is being designed
G = max(0, -0.007 + 0.003 * NumEng);

else

% throw an error
Expand Down
7 changes: 6 additions & 1 deletion +ConstraintDiagramPkg/Jet25_121b.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [FAR] = Jet25_121b(W_S, T_W, Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 30 mar 2026
% last updated: 11 jul 2026
%
% derive the constraints for the second segment climb.
%
Expand Down Expand Up @@ -72,6 +72,11 @@
% compute the climb gradient from a sigmoid curve
G = ConstraintDiagramPkg.Sigmoid(Aircraft, 0.6024, -42.00, 0.7829, 2.398);

elseif (Type == 2)

% extrapolate for any aircraft with more than 4 engines
G = 0.018 + 0.003 * NumEng;

else

% throw an error
Expand Down
7 changes: 6 additions & 1 deletion +ConstraintDiagramPkg/Jet25_121c.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
%
% [FAR] = Jet25_121c(W_S, T_W, Aircraft)
% written by Paul Mokotoff, prmoko@umich.edu
% last updated: 30 mar 2026
% last updated: 11 jul 2026
%
% derive the constraints for the enroute climb.
%
Expand Down Expand Up @@ -73,6 +73,11 @@
% compute the climb gradient from a sigmoid curve
G = ConstraintDiagramPkg.Sigmoid(Aircraft, 0.5026, -42.54, 0.7925, 1.198);

elseif (Type == 2)

% extrapolate for any aircraft with more than 4 engines
G = 0.005 + 0.003 * NumEng;

else

% throw an error
Expand Down
Loading