Direct Fusion Drive (DFD) Mars Mission using an Orion capsule.

You can change parameters to resize the vehicle. This designs a fusion propelled spacecraft to take an Orion capsule to Mars. Sizes the mission and builds a model of the propulsion stage.

------------------------------------------------------------------------- See also BuildCADModel, CreateBody, CreateComponent, ExportCAD, ExportOBJ, LoadCAD, AntennaPatch, VEscape, UE, VOrbit, Constant, CreateLatexTable, Truss, RocketMass -------------------------------------------------------------------------

Contents

%--------------------------------------------------------------------------
%   Copyright (c) 2013-2014 Princeton Satellite Systems, Inc.
%   All Rights Reserved.
%--------------------------------------------------------------------------
%   Since version 2014.1
%--------------------------------------------------------------------------

Controls

%----------
addOrion            = 1;
exportCAD           = 0;
makeCADModel        = 1;

Constants

%-----------
radiusMars	        = Constant('equatorial radius mars');
radiusEarth         = Constant('equatorial radius earth');
muSun               = Constant('mu sun');
muMars              = Constant('mu mars');
g                   = 9.806; % m/s^2
aU                  = Constant('au' );
aEarth              = aU;
aMars               = 1.5*aU;

Inputs

%--------
dVTransfer          = 59.78;
thrust              = [302.4 352.6 406.7 302.7];
dV                  = [7.41 12.51 17.93 12.47];
earthOrbitAltitude  = 400;
marsOrbitAltitude   = 400;

Spacecraft parameters

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

% Fusion engines
%----------------
rEngine             = 0.55;
lEngine             = 12*rEngine;
lNozzle             = 0.8;
nEngines            = 5;

% http://www.nasaspaceflight.com/2012/04/delving-deeper-dsh-configurations-support-craft/
%----------------------------------------------------------------------------------------
massHab             = 39884; % DSH Configuraton (kg)
specPower           = 1;%0.75;% 0.48; % kW/kg
powerPerEngine      = 6e6;
power               = nEngines*powerPerEngine;
eta                 = 0.58;
fS                  = 0.03; % kg/kg fuel tank/fuel

% Radiator
%---------
radiatorArealMass   = 2.75;
tempRadiator        = 625;
tRadiator           = 0.1;
massTruss           = 20;
lengthTruss         = 3;

% Fuel tanks
%-----------
nTank               = 4;
lTank               = 10;
fInsulation         = 1.2; % Insulation thickness is 20% of tank
densityD            = 162.4; % kg/m^3
nTankPerRow         = 4;
tankSpacing         = lTank/100;
massHe3             = 1.434928508299958;%kg
densityHe3          = 0.1785;%kg/m^3
volHe3              = massHe3/densityHe3;%m^3

% Cylindrical transition structure
%=--------------------------------
lCylTrans           = 12;
rCylTrans           = 2;
massCylTrans        = 200;

% Orion to engine transition structure
%-------------------------------------
rUOrionTrans        = 2;
rLOrionTrans        = 3;
lOrionTrans         = 2;
massOrionTrans      = 20;

Orbit calculations

%--------------------
earthOrbit          = earthOrbitAltitude + radiusEarth;  % km
marsOrbit           = marsOrbitAltitude  + radiusMars;   % km

dVMars              = VEscape( marsOrbit, muMars ) - VOrbit(marsOrbit,marsOrbit,muMars);
dVEarth             = VEscape( earthOrbit )        - VOrbit(earthOrbit,earthOrbit);

% Total delta-v
%--------------
dV                  = dV + [dVEarth dVMars dVMars dVEarth];

Mass calculations

%-------------------
massFuel        = zeros(1,4);
massTotalSeg	  = zeros(1,5);
massTank        = zeros(1,4);
massEngine      = power/(1000*specPower);
massTotalSeg(5) = massEngine + massHab;% + massOrion

for k = 4:-1:1
    uE(k)                                       = 2*power*eta/thrust(k);
    [massFuel(k), massTotalSeg(k), massTank(k)]	= RocketMass( uE(k)/g,massTotalSeg(k+1), fS, dV(k) );
end
volFuel                                         = massFuel/densityD;

clear s

k = 1;
s{k,1} = '$\Delta V$ Mars Escape';	s{k,2} = sprintf('%4.2f',dVMars);               s{k,3} = 'km/s';    k = k + 1;
s{k,1} = '$\Delta V$ Earth Escape';	s{k,2} = sprintf('%4.2f',dVEarth);              s{k,3} = 'km/s';    k = k + 1;
s{k,1} = '$\Delta V$ Round Trip';   s{k,2} = sprintf('%4.2f',dV );                  s{k,3} = 'km/s';    k = k + 1;
s{k,1} = 'Mass Habitat';            s{k,2} = sprintf('%6.1f',massHab);              s{k,3} = 'kg';      k = k + 1;
s{k,1} = 'Mass Engine';             s{k,2} = sprintf('%6.1f',massEngine);           s{k,3} = 'kg';      k = k + 1;
s{k,1} = 'Mass Fuel';               s{k,2} = sprintf('%6.1f',sum(massFuel));        s{k,3} = 'kg';      k = k + 1;
s{k,1} = 'Mass Tankage';            s{k,2} = sprintf('%6.1f',sum(massTank));        s{k,3} = 'kg';      k = k + 1;
s{k,1} = 'Mass Total';              s{k,2} = sprintf('%6.1f',massTotalSeg(1));      s{k,3} = 'kg';      k = k + 1;
s{k,1} = 'Volume Fuel';             s{k,2} = sprintf('%6.1f',volFuel);              s{k,3} = 'm^3';     k = k + 1;
s{k,1} = 'Thrust';                  s{k,2} = sprintf('%6.1f',thrust);               s{k,3} = 'N';       k = k + 1;
s{k,1} = 'Exhaust Velocity';        s{k,2} = sprintf('%7.2f',uE/1000);              s{k,3} = 'km/s';    k = k + 1;
s{k,1} = 'Engine efficiency';       s{k,2} = sprintf('%4.3f',eta);                  s{k,3} = '';        k = k + 1;
s{k,1} = 'Specific power';          s{k,2} = sprintf('%4.3f',specPower);            s{k,3} = 'kW/kg';   k = k + 1;

CreateLatexTable( s, 1 )

% If you don't want a CAD model, return
%--------------------------------------
if( makeCADModel == 0 )
    return
end

% Build the CAD model
%--------------------
BuildCADModel( 'initialize' );

BuildCADModel( 'set name' ,	'Mars Orion' );
BuildCADModel( 'set units',	'mks'  );

m = CreateBody( 'make', 'name', 'Core' );
BuildCADModel('add body', m );
BuildCADModel( 'compute paths' );

if( addOrion )
  BuildCADModel( 'add subassembly', 'Orion', 1, [0;0;0], [-1 0 0;0 1 0; 0 0 1] );
end
$\Delta V$ Mars Escape & 1.39  & km/s \\ 
\hline 
$\Delta V$ Earth Escape & 3.18  & km/s \\ 
\hline 
$\Delta V$ Round Trip & 10.5913.9019.3215.65  & km/s \\ 
\hline 
Mass Habitat & 39884.0  & kg \\ 
\hline 
Mass Engine & 30000.0  & kg \\ 
\hline 
Mass Fuel & 57541.8  & kg \\ 
\hline 
Mass Tankage & 1726.3  & kg \\ 
\hline 
Mass Total & 129152.1  & kg \\ 
\hline 
Volume Fuel &   69.9  95.0 126.4  63.0  & m^3 \\ 
\hline 
Thrust &  302.4 352.6 406.7 302.7  & N \\ 
\hline 
Exhaust Velocity &  115.08  98.70  85.57 114.97  & km/s \\ 
\hline 
Engine efficiency & 0.580  &  \\ 
\hline 
Specific power & 1.000  & kW/kg \\ 
\hline 

Add the habitat module

%------------------------
rHab1 = 2;
rHab2 = 1.5;%125;
rHab3 = 2.25;
lHab1 = 5.5;
lHab2 = 2.5;
lHab3 = 10;
bHab   = [0 0 1;0 1 0;-1 0 0];
xHab1 = -4.2 - lHab1;
rAHab1 = [xHab1;0;0];
massHab1=16077.27;
nameHab1 = sprintf('Habitat Module Part 1%d',k);
m = CreateComponent( 'make', 'cylinder', 'rUpper', rHab1, 'rLower', rHab1, 'h', lHab1, 'n', 20, 'b', bHab, ...
                                    'faceColor', 'aluminum','inside',0, 'rA', rAHab1, 'mass', massHab1, 'name', nameHab1, 'body', 1 );
BuildCADModel( 'add component', m );
xHab2 = -4.2 - lHab1 - lHab2;
rAHab2 = [xHab2;0;0];
massHab2=1545.89;
nameHab2 = sprintf('Habitat Module Part 2%d',k);
m = CreateComponent( 'make', 'cylinder', 'rUpper', rHab2, 'rLower', rHab2, 'h', lHab2, 'n', 20, 'b', bHab, ...
                                    'faceColor', 'steel','inside',0, 'rA', rAHab2, 'mass', massHab2, 'name', nameHab2, 'body', 1 );
BuildCADModel( 'add component', m );
xHab3 = -4.2 - lHab1 - lHab2 - lHab3;
rAHab3 = [xHab3;0;0];
massHab3=22260.84;
nameHab3 = sprintf('Habitat Module Part 3%d',k);
m = CreateComponent( 'make', 'cylinder', 'rUpper', rHab3, 'rLower', rHab3, 'h', lHab3, 'n', 20, 'b', bHab, ...
                                    'faceColor', 'aluminum','inside',0, 'rA', rAHab3, 'mass', massHab3, 'name', nameHab3, 'body', 1 );
BuildCADModel( 'add component', m );
lHab = lHab1+lHab2+lHab3;

% Add the fuel tanks
%-------------------
rTank = sqrt(sum(volFuel)/nTank/lTank/pi);

% Add insulation
%---------------
rTank = fInsulation*rTank;
lTank = fInsulation*lTank;

massTank = (1+fS)*sum(massFuel)/(nTank*nTankPerRow);

ang = pi/4;
b   = [0 0 1;0 1 0;-1 0 0];
lT  = lTank/nTankPerRow;

xTank = -4.2 - lHab - lTank;
for j = 1:nTankPerRow
    for k = 1:nTank
        y       = 1.5*rTank*cos(ang);
        z       = 1.5*rTank*sin(ang);
        ang     = ang + pi/2;
        rA      = [xTank;y;z];
        name	= sprintf('Fuel Tank %d',k);
        m       = CreateComponent(	'make', 'cylinder', 'rUpper', rTank, 'rLower', rTank, 'h', lT, 'n', 20, 'b', b, ...
                                    'faceColor', 'gold foil','inside',0, 'rA', rA, 'mass', massTank, 'name', name, 'body', 1 );
        BuildCADModel( 'add component', m );
    end
	xTank = xTank + lT + tankSpacing;

end

xTank = -4.2 - lHab - lTank;

xTrans = xTank - lCylTrans;
m       = CreateComponent(	'make', 'cylinder', 'rUpper', rCylTrans, 'rLower', rCylTrans, 'h', lCylTrans, 'n', 20, 'b', b, ...
                                'faceColor', 'aluminum','inside',0, 'rA', [xTrans;0;0], 'mass', massCylTrans, 'name', 'Transition', 'body', 1 );
BuildCADModel( 'add component', m );


% Add He3 Tank
%-------------
rHTank = rTank*((1/cos(pi/4))-1)-0.1;
lHTank = volHe3/(pi*((rHTank/fInsulation)^2));
lHTank = lHTank*fInsulation;
bH   = [0 0 1;0 1 0;-1 0 0];
xHTank = -4.2 - lHab - lHTank;
rAH = [xHTank;0;0];
massTankH=1;
nameH = sprintf('He3 Fuel Tank %d',k);

m = CreateComponent( 'make', 'cylinder', 'rUpper', rHTank, 'rLower', rHTank, 'h', lHTank, 'n', 20, 'b', bH, ...
                                    'faceColor', 'gold foil','inside',0, 'rA', rAH, 'mass', massTankH, 'name', nameH, 'body', 1 );
BuildCADModel( 'add component', m );


% Add Engines
%------------
ang         = 0;
massEngine  = massEngine/nEngines;
massNozzle  = 0.05*massEngine;
massEngine  = 0.95*massEngine;
xEngine     = xTrans - lEngine;
xNozzle     = xEngine - lNozzle;
for k = 1:nEngines
  y       = 1.5*rEngine*cos(ang);
  z       = 1.5*rEngine*sin(ang);
  ang     = ang + 2*pi/nEngines;
  rA      = [xEngine;y;z];
  name    = sprintf('Engine %d',k);
  m       = CreateComponent(	'make', 'cylinder', 'rUpper', rEngine, 'rLower', rEngine, 'h', lEngine, 'n', 20, 'b', b, ...
                              'faceColor', 'gold foil','inside',0, 'rA', rA, 'mass', massEngine, 'name', name, 'body', 1 );
  BuildCADModel( 'add component', m );

	rA      = [xNozzle;y;z];

	name	= sprintf('Magnetic Nozzle %d',k);
  m       = CreateComponent(	'make', 'cylinder', 'rUpper', 0.5*rEngine, 'rLower', rEngine, 'h', lNozzle, 'n', 20, 'b', b, ...
                              'faceColor', 'black','inside',0, 'rA', rA, 'mass', massNozzle, 'name', name, 'body', 1 );
  BuildCADModel( 'add component', m );
end

% Add Radiators
%--------------
heatRadiatedPerSide = (1-eta)*power/4; % for one radiator side
sigma               = 5.67e-8;

area                = heatRadiatedPerSide/(sigma*tempRadiator^4);
xWidth              = lCylTrans;
yWidth              = area/xWidth;
massRadiator        = radiatorArealMass*area;

q = 1;
for k = 1:2
	name	= sprintf('Radiator %d',k);
	rA      = [xTrans + 0.5*lCylTrans;q*(rCylTrans+lengthTruss);0];

    m       = CreateComponent(	'make', 'box', 'x', xWidth, 'y', yWidth, 'z', tRadiator, ...
                                'faceColor', 'radiator','inside',0, 'rA', rA, 'mass', massRadiator, 'name', name, 'body', 1 );
    BuildCADModel( 'add component', m );

	name	= sprintf('Radiator Truss %d',k);
    rA      = [xTrans + 0.5*lCylTrans;q*rCylTrans;0];
    m       = CreateComponent(	'make', 'box', 'x', tRadiator, 'y', lengthTruss, 'z', tRadiator,'faceColor', 'black','inside',0, ...
                                 'rA', rA, 'mass', massTruss, 'name', name, 'body', 1 );
    BuildCADModel( 'add component', m );
    q       = -q;

end

% Antenna Assembly
%-----------------
rE          = 1*0.61;
rhoTruss    = 409.7/4.55^2;
mGimbal     = 7.5;
area        = 203*144/39.37^2;
mass        = 53.5/2.205;
rhoAreal    = mass/area;
rAntenna = 1;
massAntenna = rhoAreal*pi*rAntenna^2;
bA   = [0 0 1;0 1 0;-1 0 0];
[v, f, l] = Truss( [0;0;0], [10*rE;0;0], 0.5*rE, 10 );
massTruss = rhoTruss*4.5*rE*rE*(0.5*rE)^2;

lTruss = 15;

m = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f, 'edgeColor','truss', 'rA', [-(lTruss+2.4*rE);0;9.3*rE],...
                     'name', 'Antenna Truss', 'body', 1, 'b',bA, 'mass',massTruss,...
                     'faceColor', 'gold foil', 'inside', 0);
BuildCADModel( 'add component', m );

m = CreateComponent( 'make', 'cylinder', 'rUpper', 0.25*rE, 'rLower',0.25*rE, 'h', 0.4*rE, 'n',12, 'rA', [-(lTruss+2.4*rE);0;9.3*rE],...
                     'name', 'Antenna Azimuth Gimbal', 'body', 1, 'mass', mGimbal/2, ...
                     'faceColor', 'gold foil', 'inside', 0);
BuildCADModel( 'add component', m );

m = CreateComponent( 'make', 'cylinder', 'rUpper', 0.25*rE, 'rLower',0.25*rE, 'h', rE, 'n',12, 'rA', [-(lTruss+2.4*rE);-0.5*rE;10*rE],...
                     'name', 'Antenna Elevation Gimbal', 'body', 1, 'b',[1 0 0;0 0 1;0 -1 0], 'mass', mGimbal/2, ...
                     'faceColor', 'gold foil', 'inside', 0);
BuildCADModel( 'add component', m );


[v, f] = AntennaPatch( rAntenna, rAntenna, 0.5, 0.2,[-1;0;0], [0;0;1], 20 );
m = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f, 'edgeColor','truss',...
	                 'name', 'Antenna', 'body', 1, 'faceColor', 'aluminum','inside', 0,'mass',massAntenna,...
                     'rA',[-(lTruss+2.7*rE);0;10*rE] );

BuildCADModel( 'add component', m );

% Add truss
%----------
xBottom     = [xTank;0;0];
xTop        = [xTank+lTank;0;0];
[v, f]      = Truss( xBottom, xTop, rTank, 8 );
c           = cos(pi/4);
v           = ([1 0 0;0 c c;0 -c c]*v')';
m           = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f,'edgeColor', 'truss' ,'rA',[0;0;0],...
	                         'name', 'Truss', 'body', 1, 'faceColor', [0.8 0.1 0.2],'inside', 1 );
BuildCADModel( 'add component', m );

Add subsystems

%----------------
BuildCADModel( 'add subsystem', 'ACS',        {'star camera','rwa' 'torquer'} );
BuildCADModel( 'add subsystem', 'ECLS',       {'habitat'} );
BuildCADModel( 'add subsystem', 'Propulsion',	{'engine' 'fuel' 'radiator'} );
BuildCADModel( 'add subsystem', 'Telemetry and Command',       {'antenna', 'board'} );
BuildCADModel( 'add subsystem', 'mechanism',  {'drive'} );
BuildCADModel( 'add subsystem', 'power',      {'solar array', 'battery'} );
BuildCADModel( 'add subsystem', 'structure',  {'support', 'frame', 'strut', 'panel'} );

Update the mass properties to produce the tables

%--------------------------------------------------
BuildCADModel( 'update body mass properties' );
g = BuildCADModel( 'get model');
BuildCADModel('show vehicle')

Export

%--------
if( exportCAD )
  CreateReport( g, 'tex', FileFullpath('DFDMarsMass'), 'mass',  1, 1, 1 );

	if( addOrion )
      ExportOBJ( g, FileFullpath('MarsOrion') );
  else
      ExportOBJ( g, FileFullpath('MarsOrionPropulsion') );
  end
end


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