Contents

Mars straight line trajectory

Study the dependency on specific power. What is necessary for a fast Mars trip? The model is:

P    = 1/2 T uE/eta
mDot = T/uE
m    = (1+f)mF + mE + mP
mE   = P/sigma
mF   = mDot*tau

------------------------------------------------------------------------- See also Straight2DStructure, ZeroPayloadTime, OptimalExhaustVelocity -------------------------------------------------------------------------

%--------------------------------------------------------------------------
% Copyright (c) 2016 Princeton Satellite Systems, Inc.
% All rights reserved.
%--------------------------------------------------------------------------

Problem definition

Constants

year = 365.25*86400;    % s
au   = Constant('au');  % km

% Mission parameters
nYears   = 0.3;      %
distance = 0.5*au;
duration = nYears*year;

% Engine parameters
payload  = 20000;    % kg
uExhaust = 100;    % km/s
sigma    = 1000;   % W/kg
eta      = 0.4;    % fusion power to thrust
sR       = 0.05;

% Approximate requested DV
avgV = distance/duration; % average velocity, km/s
peakV = 2*avgV;
estDV = 2*peakV;
fprintf('Requested DV: %.1f km/s\n',estDV)

% Maximum thrust from uE and eta, given 20 MW limit
Pmin = 0.5e6;
Pmax = 20e6;

Tmax = 2*Pmax*eta/(uExhaust*1e3)
Tmin = 2*Pmin*eta/(uExhaust*1e3)
fprintf('Thrust range: %.1f to %.1f N\n',Tmin,Tmax)

d       = Straight2DStructure;
d.mP    = payload;      % payload mass (kg)
d.dF    = distance;       % distance traversed, km
d.tF    = nYears*year;  % final time
d.uE    = uExhaust;     % exhaust velocity, km/s
d.f     = sR;           % fuel structural fraction (tanks)
% additional fields for optimization
d.sigma = sigma;        % specific power, W/kg
d.eta   = eta;          % thrust efficiency
d.v0    = 0;            % approx initial velocity (km/s)
Requested DV: 31.6 km/s

Tmax =

   160


Tmin =

     4

Thrust range: 4.0 to 160.0 N

Array of sigmas

sigmas = linspace(1000,20*1000);
uEs = [50 100 200];
tMin = [];
for j = 1:length(uEs)
  d.uE = uEs(j);
  for k = 1:length(sigmas)
    d.sigma = sigmas(k);
    tMin(j,k) = ZeroPayloadTime( d );
  end
end
titleStr = sprintf('Straight-line Trip Time - %g AU - Effect of uE',distance/au);
Plot2D(sigmas*1e-3,tMin/86400,'Sigma (kW/kg)','Minimum Time (days)',titleStr)
ll = legend(num2str(uEs'));
ll.Title.String = 'uE (km/s)';
yy = axis;
xM = mean(yy(1:2));
yM = mean(yy(3:4));
text(xM,yM,sprintf('d:   %g AU\neta: %g\nfS:  %g kg/kg',d.dF/au,d.eta,d.f),...
  'fontsize',12)

Different efficiencies

d.uE   = uExhaust;     % exhaust velocity, km/s
sigmas = linspace(1000,20*1000);
etas = [0.3 0.5 0.7];
tMin = [];
for j = 1:length(uEs)
  d.eta = etas(j);
  for k = 1:length(sigmas)
    d.sigma = sigmas(k);
    tMin(j,k) = ZeroPayloadTime( d );
  end
end
titleStr = sprintf('Straight-line Trip Time - %g AU - Effect of eta',distance/au);
Plot2D(sigmas*1e-3,tMin/86400,'Sigma (kW/kg)','Minimum Time (days)',titleStr)
ll = legend(num2str(etas'));
ll.Title.String = '\eta';
yy = axis;
xM = mean(yy(1:2));
yM = mean(yy(3:4));
text(xM,yM,sprintf('d:  %g AU\nuE: %g km/s\nfS: %g kg/kg',d.dF/au,d.uE,d.f),...
  'fontsize',12)

Structural fraction

d.uE   = uExhaust;     % exhaust velocity, km/s
d.eta  = eta;          % thrust efficiency
sigmas = linspace(1000,20*1000);
fs = [0.02 0.05 0.08];
tMin = [];
for j = 1:length(uEs)
  d.f = fs(j);
  for k = 1:length(sigmas)
    d.sigma = sigmas(k);
    tMin(j,k) = ZeroPayloadTime( d );
  end
end
titleStr = sprintf('Straight-line Trip Time - %g AU - Effect of f',distance/au);
Plot2D(sigmas*1e-3,tMin/86400,'Sigma (kW/kg)','Minimum Time (days)',titleStr)
ll = legend(num2str(fs'));
ll.Title.String = 'fS';
yy = axis;
xM = mean(yy(1:2));
yM = mean(yy(3:4));
text(xM,yM,sprintf('d:  %g AU\nuE: %g km/s\neta: %g',d.dF/au,d.uE,d.eta),...
  'fontsize',12)

Optimal exhaust velocity

This is the exhaust velocity that will maximize payload fraction. This depends on the trip time tF. As sigma increases, so does the optimal exhaust velocity.

d.uE   = uExhaust;     % exhaust velocity, km/s
d.eta  = eta;          % thrust efficiency
d.f    = sR;
d.mP   = 0;
tDurs  = [30 45 60 90];
sigmas = linspace(1000,20*1000);
uEOpt = [];
lambda = [];
% this has to be for a fixed set of times instead!
for j = 1:length(tDurs)
  d.tF = tDurs(j)*86400;
  for k = 1:length(sigmas)
    d.sigma = sigmas(k);
    [uEOpt(j,k),lambda(j,k),eflag] = OptimalExhaustVelocity( d );
    % if eflag ~= 1
    %   keyboard;
    % end
  end
end
titleStr = sprintf('Optimal Exhaust Velocity - %g AU',distance/au);
Plot2D(sigmas*1e-3,uEOpt,'Sigma (kW/kg)',{'Exhaust Velocity (km/s)'},titleStr)
yy = axis;
xM = yy(1) + 0.25*(yy(2)-yy(1));
yM = yy(3) + 0.75*(yy(4)-yy(3));
text(xM,yM,sprintf('d:  %g AU\nf: %g kg/kg\neta: %g',d.dF/au,d.f,d.eta),...
  'fontsize',12)
ll = legend(num2str(tDurs'));
ll.Title.String = 'MET (days)';
Plot2D(sigmas*1e-3,lambda,'Sigma (kW/kg)','Lambda (mPy/m0)','Maximum Payload Fraction')
ll = legend(num2str(tDurs'));
ll.Title.String = 'MET (days)';
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 
Warning: Distance not achievable for sigma 

How far can you go in 30 days?

sigmas = linspace(1000,20*1000);
durs = [30 60 90];
d.uE   = uExhaust;     % exhaust velocity, km/s
d.eta  = eta;          % thrust efficiency
d.f    = sR;
d.mP   = 0;
for j = 1:length(durs)
  for k = 1:length(sigmas)
    dF(j,k) = ZeroPayloadDistance(durs(j)*86400,uExhaust,sigmas(k),eta,sR);
  end
end
Plot2D(sigmas*1e-3,dF/au,'Sigma (kW/kg)','Distance Achieved (AU)','Zero Payload Distance')
ll = legend(num2str(durs'));
ll.Title.String = 'tDur (days)';
yy = axis;
xM = mean(yy(1:2));
yM = mean(yy(3:4));
text(xM,yM,sprintf('uE: %g km/s\neta: %g\nf: %g kg/kg',d.f,d.eta,d.uE),...
  'fontsize',12)

Reasonable payload fraction - fixed uE

fracP = 0.1;
d.uE   = 80;     % exhaust velocity, km/s
d.eta  = 0.5;          % thrust efficiency
d.f    = sR;
d.mP   = 0;
sigmas = linspace(1000,20*1000);
uEs    = [80 120 200];
for j = 1:length(uEs)
d.uE = uEs(j)
  for k = 1:length(sigmas)
    d.sigma = sigmas(k);
    tDur(j,k) = ComputeDurationFraction( fracP, d );
  end
end
Plot2D(sigmas*1e-3,tDur/86400,'Sigma (kW/kg)','Duration (days)','Duration for 0.1 Payload Fraction')
ll = legend(num2str(uEs'));
ll.Title.String = 'uE (km/s)';
yy = axis;
xM = mean(yy(1:2));
yM = mean(yy(3:4));
text(xM,yM,sprintf('d: %g AU\neta: %g\nf: %g kg/kg',d.dF/au,d.eta,d.f),...
  'fontsize',12)

Figui;


%--------------------------------------

% $Id: 08406fdbe80f586e3aedd5cc3f583ab4733831ef $
d = 

  struct with fields:

           tF: 7776000
           dF: 74798935
            f: 0.05
           uE: 80
          eta: 0.5
        sigma: 20000
           mP: 0
           mE: []
           v0: 0
    createdBy: 'Straight2DStructure'


d = 

  struct with fields:

           tF: 7776000
           dF: 74798935
            f: 0.05
           uE: 120
          eta: 0.5
        sigma: 20000
           mP: 0
           mE: []
           v0: 0
    createdBy: 'Straight2DStructure'


d = 

  struct with fields:

           tF: 7776000
           dF: 74798935
            f: 0.05
           uE: 200
          eta: 0.5
        sigma: 20000
           mP: 0
           mE: []
           v0: 0
    createdBy: 'Straight2DStructure'