Skip to content

11. Two-stage rocket ascent

Empty tanks and engines become dead weight. Discarding them lets the remaining propellant accelerate a lighter vehicle. How much higher can a two-stage rocket fly with the same 3000 kg of propellant as Example 10?

ItemDefinition
StatesRadius RR, upward velocity vv, mass mm
ControlThrust TT
ObjectiveMaximize final altitude
PhasesTwo stages, 25 nodes each; free separation and final times
New conceptsDiscontinuous mass and explicit phase linkage

Initial mass is 5000 kg. The atmosphere, gravity, engine efficiency, and thrust limit match Example 10. The difference is stage separation:

  • Stage 1 has total mass 3000 kg, including 1800 kg of propellant and 1200 kg of structure.
  • Stage 2 has total mass 2000 kg, including 1200 kg of propellant and 800 kg of structure.
  • After stage 1 consumes its own propellant, its 1200 kg structure is discarded.

Each stage’s dry-to-wet mass ratio is Mc = 0.4. Total propellant remains 3000 kg, but only 800 kg of dry structure reaches the endpoint. Each stage can consume only its own propellant. Separate phase polynomials represent the instantaneous mass drop.

Both phases use

R˙=v,v˙=T−Dm−GMR2,m˙=−Tg0Isp,\dot R=v,\qquad\dot v=\frac{T-D}m-\frac{GM}{R^2},\qquad\dot m=-\frac{T}{g_0I_{sp}}, D=12ρ(R−Re)v2CdA,ρ(h)=ρ0e−h/H.D=\tfrac12\rho(R-R_e)v^2C_dA,\qquad\rho(h)=\rho_0e^{-h/H}.

See Example 10 for the model terms.

At separation time t1t_1,

R(1)(t1)=R(2)(t1),v(1)(t1)=v(2)(t1),m(2)(t1)=2000 kg,m(1)(t1)=m(2)(t1)+1200 kg.\begin{aligned} R^{(1)}(t_1)&=R^{(2)}(t_1),\\ v^{(1)}(t_1)&=v^{(2)}(t_1),\\ m^{(2)}(t_1)&=2000\ \mathrm{kg},\\ m^{(1)}(t_1)&=m^{(2)}(t_1)+1200\ \mathrm{kg}. \end{aligned}

Thus stage 1 ends at 3200 kg and stage 2 begins at 2000 kg. The propellant budgets are exactly 5000−3200=18005000-3200=1800 kg and 2000−800=12002000-800=1200 kg. Disable automatic state continuity and write these equations explicitly (linking phases).

R(0)=Re,v(0)=0,m(0)=5000 kg,v(tf)=0,m(tf)=800 kg.R(0)=R_e,\quad v(0)=0,\quad m(0)=5000\ \mathrm{kg},\qquad v(t_f)=0,\quad m(t_f)=800\ \mathrm{kg}.

The endpoint is the highest point after both stages have consumed their propellant.

0≤T≤98066.5 N,R≥Re,v≥0,0\le T\le98066.5\ \mathrm N,\quad R\ge R_e,\quad v\ge0, 3200≤m≤5000 kg(phase 1),800≤m≤2000 kg(phase 2),\begin{aligned} 3200\le m\le5000\ \mathrm{kg}&\quad\text{(phase 1)},\\ 800\le m\le2000\ \mathrm{kg}&\quad\text{(phase 2)}, \end{aligned} t1≥10 s,tf≥10 s,J=−R(tf)/Re.t_1\ge10\ \mathrm s,\qquad t_f\ge10\ \mathrm s,\qquad J=-R(t_f)/R_e.

The same maximum thrust applies to both stages.

Use Mc = 0.4, Cd=0.2C_d=0.2, A=10A=10 m², Isp=300I_{sp}=300 s, ρ0=1.225\rho_0=1.225 kg/m³, and H=8500H=8500 m. Earth constants and units match Example 10: radius ReR_e, speed GM/Re\sqrt{GM/R_e}, and mass 5000 kg.

Use phase times 0→300→6000\to300\to600 s. Radius rises cubically from the surface to 50 km altitude, with zero velocity. Mass decreases linearly from 5000 to 3200 kg in phase 1 and from 2000 to 800 kg in phase 2. Thrust decreases cubically from maximum to zero over the full time interval.

Altitude, velocity, mass, and thrust. Blue and orange identify the stages, each with 25 nodes. The vertical dashed line marks separation; red marks maximum thrust.
Altitude, velocity, mass, and thrust. Blue and orange identify the stages, each with 25 nodes. The vertical dashed line marks separation; red marks maximum thrust.
Vertical ascent colored by stage, alongside velocity and thrust histories.
  • Maximum altitude: 184.1 km, about 2.8 times the single-stage value 65.5 km.
  • Stage 1 burns out around 64 s, then coasts briefly before separation at 69.2 s.
  • Mass drops from 3,200 kg to 2,000 kg, exactly the discarded 1200 kg.
  • Stage 2 ignites at separation; total burnout occurs around 152 s, and the highest point at 307 s.

Ignoring gravity and drag, the rocket equation gives

Δv=g0Ispln⁡mstartmend.\Delta v=g_0I_{sp}\ln\frac{m_{\text{start}}}{m_{\text{end}}}.

A single stage has mass ratio 5000/2000 = 2.5. Discarding structure before the second burn lets the same propellant accelerate a much lighter vehicle. Peak speed rises from roughly 780 m/s to 1420 m/s, greatly increasing altitude.

Stage 1 uses maximum thrust for about 22 s, then throttles to limit drag, consuming its 1800 kg around 64 s. It coasts for a few seconds before separation. With no thrust during that interval, carrying the empty structure has little effect on the modeled motion; the separation time effectively chooses when stage 2 ignites.

Fixing the stage-specific propellant budgets matters. Otherwise the optimizer favors early separation and unrealistically assigns more propellant to stage 2 than its tank can hold.

The second stage again shows maximum, intermediate, and zero thrust. Its maximum-thrust interval is short because it starts with speed and a lighter vehicle. Oscillation near burnout remains a limitation of representing each stage’s entire control with one polynomial.

  • Remove result.equal(m2[0], obj.M0_2nd) and widen the mass bounds to set_states_bounds(2, 0, obj.Mdry_1st + obj.Mdry_2nd, obj.M0) and set_states_bounds(2, 1, obj.Mdry_2nd, obj.M0 - obj.Mdry_1st). Separation moves to the 10 s lower bound and altitude may reach about 261 km, but stage 2 starts near 3530 kg, exceeding its 2000 kg capacity.
  • Lower Mc from 0.4 to 0.3. Lighter structure can increase altitude to roughly 476 km.
Terminal window
uv run python examples/11_rocket_ascent_two_stage.py

View the Python source on GitHub.