Contents
Power-Limited Rocket Demo
For a fixed payload mass and fuel mass, compute the optimal power (engine size) for a mission to 10 AU. Assume engine parameters for specific power and tank fraction.
------------------------------------------------------------------------ See also: SLPLDataStructure, SLPLSolver ------------------------------------------------------------------------
%-------------------------------------------------------------------------- % Copyright (c) 2021 Princeton Satellite Systems, Inc. % All rights reserved. %-------------------------------------------------------------------------- % Since 2021.1 %--------------------------------------------------------------------------
Fuel-mass limited demo
AU = Constant('au'); dF = 10*AU; Pj = linspace(1e5,1e7); sigma = 500; % engine mass scales with jet power, Wj/kg f = 0.05; % tank fraction mP = 500; % payload mass, kg mF = [1000 2000 3000]; % Fuel mass, kg % Reserve output array size tF = zeros(length(mF),length(Pj)); m0 = zeros(length(mF),length(Pj)); lambda = zeros(length(mF),length(Pj)); d = SLPLDataStructure; d.dF = dF; d.vF = 0; for k = 1:length(Pj) for j = 1:length(mF) mE = Pj(k)/sigma; mD = mE+mP+f*mF(j); m0(j,k) = mD+mF(j); lambda(j,k) = mP/m0(j,k); d.Pj = Pj(k); d.mD = mD; d.m0 = m0(j,k); d.tF = []; data = SLPLSolver( d ); tF(j,k) = data.tF; end end % Plots Plot2D(Pj*1e-6,tF/86400,'Power (MW)','Days to 10 AU','Power-limited Rocket') text(1,900,sprintf('Distance: %g AU\nPayload: %g kg\nsigma: %g W/kg',dF/AU,mP,sigma)) ll = legend(num2str(mF')); ll.Title.String = 'mFuel'; Plot2D(Pj*1e-6,m0,'Power','Initial Mass','Power-limited Rocket Mass') text(1,20000,sprintf('Distance: %g AU\nPayload: %g kg\nsigma: %g W/kg',dF/AU,mP,sigma)) ll = legend(num2str(mF')); ll.Title.String = 'mFuel'; Plot2D(Pj*1e-6,lambda,'Power','Payload Fraction','Power-limited Rocket Payload') text(2,0.25,sprintf('Distance: %g AU\nPayload: %g kg\nsigma: %g W/kg',dF/AU,mP,sigma)) ll = legend(num2str(mF')); ll.Title.String = 'mFuel';
Initial mass-limited demo
The payload fraction is constant.
tF = []; mP = 500; Pj = linspace(1e5,3e6); m0 = [10000 15000 20000]; % Initial mass % Reserve output array size mF = zeros(length(m0),length(Pj)); tF = zeros(length(m0),length(Pj)); for k = 1:length(Pj) for j = 1:length(m0) mE = Pj(k)/sigma; mL = m0(j) - mE - mP; mF(j,k) = mL/(1+f); mD = mE + mP + f*mF(j,k); d.Pj = Pj(k); d.mD = mD; d.m0 = m0(j); d.tF = []; data = SLPLSolver( d ); tF(j,k) = data.tF; end end Plot2D(Pj*1e-6,tF/86400,'Power (MW)','Days to 10 AU','Power-limited Rocket') text(1,700,sprintf('Distance: %g AU\nPayload: %g kg\nsigma: %g W/kg',dF/AU,mP,sigma)) [ts,js] = min(tF,[],2); hold on; plot(Pj(js)*1e-6,ts/86400,'k.') ll = legend(num2str(m0')); ll.Title.String = 'm0 (kg)'; %--------------------------------------