Iteratively converge on LEO-deliverable payload mass for the Astrodyne Argo Epsilon single-booster first stage (RP-1/LOX) and Delta second stage (LH2/LOX) stack:
#!/usr/bin/env python3
import math
S1_WET = 46357.2
S1_DRY = 3708.6
S1_ISP = 280.0
S2_WET = 19322.5
S2_DRY = 2318.7
S2_ISP = 430.0
TARGET_DV = 7800.0
G0 = 9.80665
def stage_dv(wet, dry, payload, isp):
m0 = wet + payload
m1 = dry + payload
return isp * G0 * math.log(m0 / m1)
def total_dv(payload):
dv2 = stage_dv(
S2_WET,
S2_DRY,
payload,
S2_ISP,
)
stage2_stack = S2_WET + payload
dv1 = stage_dv(
S1_WET,
S1_DRY,
stage2_stack,
S1_ISP,
)
return dv1, dv2, dv1 + dv2
low = 0.0
high = 100000.0
for _ in range(60):
payload = (low + high) / 2
dv1, dv2, total = total_dv(payload)
if total > TARGET_DV:
low = payload
else:
high = payload
payload = (low + high) / 2
dv1, dv2, total = total_dv(payload)
print(f"Target delta-v : {TARGET_DV:10.1f} m/s")
print(f"Payload : {payload:10.1f} kg")
print(f"Stage 1 Δv : {dv1:10.1f} m/s")
print(f"Stage 2 Δv : {dv2:10.1f} m/s")
print(f"Total Δv : {total:10.1f} m/s")
