Code covered by the BSD License  

Highlights from
Fuel fraction sizing

image thumbnail

Fuel fraction sizing

by

 

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).
%     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