Near Single Stage to Orbit (NSTO)

The following files are in (46,363 bytes).

Turbo Pascal Program Files
nsto.pas NSTO simulation main program
earth.pas Earth constants
rocket.pas General purpose trajectory simulation procedures
const.pas NSTO constants
stage1.pas NSTO procedure
stage2.pas Upper Stage procedure
nsto.exe DOS executable

Gnuplot Files
speed.gnu Gnuplot file to generate speed v time curve Speed v time postscript file from "nsto"
height.gnu Gnuplot file to generate height v time curve Height v time postscript file from "nsto"

Similar simulation files are available for the Space Shuttle and Saturn V. An NSTO using O2/H2 with changing mixture ratios can be found in (43,814 bytes). A two stage heavy lift launch vehcile based on an NSTO first stage can be found in (44,001 bytes).

The paper for "A flexible resuable space transportation system" that I am submitting to the Journal of the British Interplanetary Society (also presented at IAF'98) can be found here.

I have written a general purpose simulation program that simulates an NSTO vehicle. The heart of the simulation program is rocket.pas which contains procedures used to determine the trajectory of any rocket using the Runga-Kutta fourth order method. I first wrote this for a Saturn V trajectory simulation program. rocket.pas is separate from the stage*.pas procedures which generate the appropriate values (such as thrust F, propellant rate Rp, time increment dt, etc.) for input to rocket.pas. const.pas contains the constants used in the stage*.pas procedures.

This program was compiled using Free Pascal.

When you execute "nsto" you will get the following response

Enter propellant choice: 8
Enter output filename (return is standard output):

   t      a     vi     h0       r0      alpha  beta  theta     Pq     m0+Me
  sec   m/s^2  m/s   metres   metres     deg    deg   deg      Pa       kg
   0.00   9.8   289       0         0  90.00   0.00  90.00      0.0 2521067.8
Turn time (s)?

You should then enter the duration in which you want the rocket to pitch over. The pitch angle has been set to -0.03 degrees, but you can adjust this angle in const.pas with name angle1. The rocket then takes off vertically before pitching over for the time specified. This time does not include the time to move the rocket to and from angle1, so even if you set the angle to 0, the rocket will slightly pitch over. The output from the program has in each line

t	time, seconds
a	acceleration (excluding any external forces such as gravity and
        air drag); metres per second per second
vi	inertial speed; metres per second
h0	altitude above planet's surface; metres
r0	range; metres
alpha	thrust angle relative to inertial velocity vector 
         or angle of attack; degrees
beta	velocity angle relative to motionless planet; degrees
theta   velocity angle relative to rotating planet; degrees
Pq	Dynamic pressure; Pascals
m0+Me   the mass of the rocket

The first stage performs a gravity turn keeping the thrust vector and the air velocity vector the same. Thus the air angle of attack is zero. You will also see events such as engine throttling down. When the maximum acceleration of 3g is first reached you are asked for the maximum angle of attack. This is relative to the inertial velocity vector. When this angle is greater than the air angle of attack, the angle of attack will gradually increase. This is due to the trajectory algorithm trying to maintain the rate of altitude increase. We have h0 as the height, h1 = dh0/dt is the rate of increase of height, and h2 = dh1/dt. Our orbit algorithm has h2 proportional to sign(h1)|h1|pow. pow is a constant and is set to 2.0. This seems to be not the most optimal algorithm, but I have found that it does a reasonable good job, getting you where you want to go.

The angle of attack will increase until the maximum angle is reached and be maintained there until centrifugal acceleration becomes strong enough. The angle of attack will then naturally decrease.

At the end of stage 2 you should be in an elliptical orbit and at an altitude of between 80 and 90 km. At this altitude and speed, drag is still significant and so the apogee needs to be higher than the nominal 185 km (for a 25 t payload, 1 t = 1000 kg). At this point the upper stage separates from the NSTO vehicle and returns to Earth. After the upper stage has transferred to apogee the apogee should have decreased to 185 km due to drag. You then perform the upper stage burn to circularise your orbit to 185 km. I leave it to you to determine the turn time and angle of attack. Have fun!

One area I would like to improve is determining the coefficient of drag (cd) versus speed. The values I used were from the Mars Project by Werner von Braun for a 20 m diameter rocket. If anyone can help me out on this, I would greatly appreciate it.

5 May 2010 Update: Modified pascal files to allow compilation with latest version of Free Pascal.

3 July 1998 Update: Added O2/H2(7.5:1) propellant. Delta V is now actual delta V (does not include 1% overhead). Removed "LOX/KERO" from title of figures produced by GNU files.

24 July 1998 Update: CH4 (methane), C2H6 (ethane), and C3H8 (propane) now subcooled to 90 K (same temperature as O2) for higher impulse density and overall increase in performance. Added N2O4/N2H4 (hydrazine) and 98%H2O2/C3H4 (methyl ethelyne) propellant combinations. Corrected propellant volume output.

2 August 1998 Update: Modified earth.h and rocket.pas to directly use mu. Simplified program sections for reaching maximum acceleration or speed. Put engine shutdown sequence in a loop.

25 January 2000 Update: Moved atmosphere procedure to earth.pas which now implements full U.S. Standard Atmosphere. Removed nitrogen based propellant combinations and added methylacetylene and quadricyclene propellant combinations. Can now perform simple reentries (90 degree angle of attack). Vehicle mass is now calculated, allowing payload mass to be determined.

19 November 2001 Update: Custom propellant now entered via file.

17 August 2006 Update Free Pascal compilation

Last modified 5 May 2010. Any comments, questions, additions, or corrections should be directed to
Steven S. Pietrobon
Small World Communications
6 First Avenue
Payneham South SA 5070

ph. +61 8 8332 0319
fax +61 8 7117 1416