Code covered by the BSD License  

Highlights from
Fuel fraction sizing

image thumbnail
from Fuel fraction sizing by Sky Sartorius
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).
%     task    - Second argument, a string indicating computation task:
%                '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)
% 
%   See also FUELFRACTIONSIZING, MISSIONFUELBURN, 
%     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)

%   Copyright 2012-2013 Sky Sartorius
%   www.mathworks.com/matlabcentral/fileexchange/authors/101715

if nargin < 6
    V = NaN;
end

switch lower([type(1:3) ' ' task(1)])
    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

Contact us