I've assumed a meta-Falcon 9 Full Thrust and shot it straight up on a non-rotating Earth with no atmosphere.
1st stage 2nd stage coast stage
--------- --------- ---------
total mass (kg) 422000 128000 28000
propellant mass (kg) 370000 108000
Isp (sec) 300 350
exhaust velocity (m/s) 2943 3433.5
burn time (sec) 160 400 1800
mass flow (kg/sec) 2312.5 270
For the 1st and 2nd stage, I've integrated
\begin{align}
F_{thrust} & = v_{exhaust} \times \frac{dm}{dt} \\
m(t) & = m_0 - t \frac{dm}{dt} \\
a_{thrust} & = \frac{F_{thrust}}{m} \\
a_{gravity} & = -\frac{GM}{r^2} \\
\end{align}
As I suspected:
Launching "straight up" is probably going to be much more costly.
There are so many answers in this site that explain the idea that getting to orbit is about getting moving sideways fast-enough, soon-enough. Here is what happen if you don't do that.
I've dubbed the mission "Falcon Nein" because even with zero additional payload, a Falcon 9 Full Thrust, shot straight up, will fall back to Earth, both the 1st stage, and unladen 2nd stage, be it African or European.
A half-hour of gravity, in the absence of orbit, is horribly costly in fact.
I've simulated for five "settings" of Earth gravity; 100%, 75%, 50%, 25% and zero.
Python script:
def deriv_1(X, t):
x, v = X
F_t = v_ex_1 * mdot_1
m = m_tot_1 - t * mdot_1 + m_tot_2
acc_t = F_t / m
acc_g = -GM / x**2
return np.hstack((v, acc_t + acc_g))
def deriv_2(X, t):
x, v = X
F_t = v_ex_2 * mdot_2
m = m_tot_2 - (t-t_burn_1) * mdot_2
acc_t = F_t / m
acc_g = -GM / x**2
return np.hstack((v, acc_t + acc_g))
def deriv_3(X, t):
x, v = X
acc_g = -GM / x**2
return np.hstack((v, acc_g))
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint
GMe = 3.986E+14 # m^3/s^2
Re = 6378137. # m
GMs = GMe * np.linspace(0, 1, 5)
# Setup:
# first stage
m_fuel_1 = 370000. # kg
m_tot_1 = 422000. # kg
t_burn_1 = 160. # sec
Isp_1 = 300. # sec
v_ex_1 = Isp_1 * 9.81 # m/s
mdot_1 = m_fuel_1 / t_burn_1 # kg/sc
# second stage
m_fuel_2 = 108000. # kg
m_tot_2 = 128000. # kg
t_burn_2 = 400. # sec
Isp_2 = 350. # sec
v_ex_2 = Isp_2 * 9.81 # m/s
mdot_2 = m_fuel_2 / t_burn_2 # kg/sc
# coast stage
t_coast = 1800. # sec
# Go!
trajectories = []
for GM in GMs:
traj = []
# first stage
X0_1 = np.array([Re, 0.0])
time_1 = np.linspace(0, t_burn_1, 101)
answer_1, info = ODEint(deriv_1, X0_1, time_1, full_output=True)
x_1, v_1 = answer_1.T
traj.append((time_1, (x_1, v_1)))
# second stage
X0_2 = answer_1[-1]
time_2 = np.linspace(0, t_burn_2, 101) + time_1[-1]
answer_2, info = ODEint(deriv_2, X0_2, time_2, full_output=True)
x_2, v_2 = answer_2.T
traj.append((time_2, (x_2, v_2)))
# coast stage
X0_3 = answer_2[-1]
time_3 = np.linspace(0, t_coast, 201) + time_2[-1]
answer_3, info = ODEint(deriv_3, X0_3, time_3, full_output=True)
x_3, v_3 = answer_3.T
traj.append((time_3, (x_3, v_3)))
trajectories.append(traj)
if True:
plt.figure()
for traj in trajectories:
for (time, (x, v)), color in zip(traj, ('-b', '-g', '-r')):
plt.subplot(2, 1, 1)
plt.plot(time, 0.001 * (x-Re), color)
plt.subplot(2, 1, 2)
plt.plot(time, 0.001 * v, color)
plt.subplot(2, 1, 1)
plt.ylabel('altitude (km)', fontsize=16)
plt.xlabel('time (sec)', fontsize=16)
plt.ylim(0, 15000)
plt.subplot(2, 1, 2)
plt.ylabel('speed (km/s)', fontsize=16)
plt.xlabel('time (sec)', fontsize=16)
plt.suptitle('Vertical Launch ("Falcon Nein") GM = (1, 0.75, 0.5, 0.25, 0) x GMe', fontsize=16)
plt.show()
+1
I think the mathematical beauty of this question is lost on some people. Launching "straight up" is probably going to be much more costly. $\endgroup$