Code covered by the BSD License

Fuel fraction sizing

Sky Sartorius (view profile)

09 Nov 2012 (Updated )

Finds aircraft gross weight using the fuel fraction sizing method

breguet(type, task, E_R_or_frac, LD, SFC, V, eta_p)
function varargout = breguet(type, task, E_R_or_frac, LD, SFC, V, eta_p)
% BREGUET uses the Breguet range equation to calculate the weight fraction
% for a cruise or loiter mission segment -OR- to find the range and
% endurance for a given segment weight fraction.
%
%   segFrac = BREGUET('Jet' , 'Cruise', R      , LD, TSFC, V)
%   segFrac = BREGUET('Jet' , 'Loiter', E      , LD, TSFC)
%   [R, E]  = BREGUET('Jet' , 'Range' , segFrac, LD, TSFC, V)
%
%   segFrac = BREGUET('Prop', 'Cruise', R      , LD, PSFC, [], eta_p)
%   segFrac = BREGUET('Prop', 'Loiter', E      , LD, PSFC, V , eta_p)
%   [R, E]  = BREGUET('Prop', 'Range' , segFrac, LD, PSFC, V , eta_p)
%
%   Variables (also see table below):
%     type    - First argument, a string indicating type of powerplant:
%                'Prop'   - Power-producing (e.g. piston or turboprop).
%                'Jet'    - Thrust-producing (e.g. turbofan).
%                'Cruise' - Calculate weight fraction, W_end/W_start, for a
%                           cruising mission segment based on given range.
%                'Loiter' - Calculate weight fraction for a loitering
%                           mission segment based on given endurance.
%                'Range'  - Calculate segment range and/or endurance for a
%                           given weight fraction.
%     segFrac - Weight fraction for the mission segment, W_end/W_start.
%     R       - Segment range, i.e. distance traveled in length units.
%     E       - Endurange, i.e. time elapsed for segment in time units
%     LD      - L/D, the lift to drag ratio AT WHICH THE SEGMENT IS FLOWN.
%               Optimal is shown in table below for a parabolic drag polar.
%               Remember that L/D and V are NOT independent (see table).
%     TSFC    - Thrust specific fuel consumption in 1/time units.
%     PSFC    - Power specific fuel consumption in 1/length units.
%     V       - True speed at which the segment is flown. Required for
%               'JetRange' only for finding R and for 'PropRange' only for
%               finding E.
%     eta_p   - Efficiency with which shaft power is converted by propulsor
%               (i.e. propeller) into thrust power
%
%   Certain parameters must combine according to the table below such that
%   their units cancel in order to create a dimensionless quantity. SFC
%   must be in different units depending on the powerplant type (PSFC vs
%   TSFC). Using inconsistent units is an extremely common mistake that is
%   difficult to detect. Using gravitational acceleration is often
%   necessary to achieve unit consistency.
%            type  |   task   | Optimal LD | Dimensionless quantity
%          --------|----------|------------|------------------------
%           'Jet'  | 'Cruise' | .866*LDmax |        R*TSFC/V
%           'Jet'  | 'Loiter' |    LDmax   |         E*TSFC
%           'Prop' | 'Cruise' |    LDmax   |         R*PSFC
%           'Prop' | 'Loiter' | .866*LDmax |        E*PSFC*V
%
%   Note: The Breguet range equation assumes that L/D, V, and SFC remain
%   constant over the entire flight sement.
%
%   BREGUET is fully vectorized and also can accept dimensioned variables
%   using the DimensionedVariable class (see UNITS function). This is
%   extemely helpful in enforcing unit consistency and eliminating common
%   errors.
%
%   Example 1a: Find endurance of a loitering jet with segment fuel
%   fraction of 30% (segment weight fraction 70%), max L/D of 18, and TSFC
%   of 0.5 lb/hr/lb. Result is in hours because TSFC is in units of 1/hour.
%       [~, Emax] = BREGUET('Jet', 'Range', 0.7, 18, 0.5)
%
%   Example 1b: Find the range and segment time for a cruise segment flown
%   at M = 0.87 @ 37000 ft (500 knots true). Result is in nmi and hr
%   because of inputs in units of 1/hr and kts.
%       [R, t]    = BREGUET('Jet', 'Range', 0.7, 0.866*18, 0.5, 500)
%
%   Example 2: Use DimensionedVariable class to find 600 nmi cruise segment
%   weight fraction for piston-prop general aviation aircraft with max L/D
%   of 10, PSFC of 0.4 lb/hr/hp, and propeller efficiency of 80%.
%       u = units;
%       breguet('Prop','Cruise',600*u.nmi,10,u.g0*.4*u.lbm/u.hr/u.hp,[],.8)
%
%     UNITS - http://www.mathworks.com/matlabcentral/fileexchange/38977.
%
%   segFrac = BREGUET('Jet' , 'Cruise', R      , LD, TSFC, V)
%   segFrac = BREGUET('Jet' , 'Loiter', E      , LD, TSFC)
%   [R, E]  = BREGUET('Jet' , 'Range' , segFrac, LD, TSFC, V)
%
%   segFrac = BREGUET('Prop', 'Cruise', R      , LD, PSFC, [], eta_p)
%   segFrac = BREGUET('Prop', 'Loiter', E      , LD, PSFC, V , eta_p)
%   [R, E]  = BREGUET('Prop', 'Range' , segFrac, LD, PSFC, V , eta_p)

%   www.mathworks.com/matlabcentral/fileexchange/authors/101715

if nargin < 6
V = NaN;
end

case 'jet l'  %E_R_or_frac is endurance in s; SFC is TSFC in 1/s
varargout{1} = exp(-E_R_or_frac.*SFC./LD);

case 'jet c'  %E_R_or_frac is range in m; SFC is TSFC in 1/s
varargout{1} = exp(-E_R_or_frac.*SFC./(V.*LD));

case 'pro l' %with V; E_R_or_frac is endurance; SFC is PSFC in 1/m
varargout{1} = exp(-E_R_or_frac.*SFC.*V./(LD.*eta_p));

case 'pro c' %E_R_or_frac is range in m; SFC is PSFC in 1/m
varargout{1} = exp(-E_R_or_frac.*SFC./(LD.*eta_p));

case 'jet r'  % SFC is TSFC in 1/s
varargout{2} = -LD.*log(E_R_or_frac)./SFC;
varargout{1} = varargout{2}.*V;

case 'pro r' % SFC is PSFC in 1/m
varargout{1} = -LD.*eta_p.*log(E_R_or_frac)./SFC;
varargout{2} = varargout{1}./V;

otherwise
error('unknown mission segment type and/or task string')
end

% See FUELFRACTIONSIZING for additional revision history.
% 2013-04-07/21 reformatted help block/table