from math import pi, exp from vector import Vector from simulation import AerobreakingSimulation from body import ShapedBody from universal_constants import MARS_RADIUS, MARS_RADIUS2 from universal_functions import mars_orbital_velocity from forces import f_gravity from plots import mars_xys import pylab RADIUS_0 = 100000 + MARS_RADIUS # [m] POSITION_0 = Vector(RADIUS_0, 0, 0) # [m] VELOCITY_0 = Vector(0, mars_orbital_velocity(RADIUS_0), 0) # [m] MASS_MODULE = 25000 # [kg] MASS_PROBE = 17 # [kg] MARS_H_REF = 11000.0 # [m] MARS_DENSITY_0 = 0.02 # [?] variation = 1 # [%] MARS_DENSITY_HIGH = MARS_DENSITY_0 * (100 + variation) / 100 MARS_DENSITY_LOW = MARS_DENSITY_0 * (100 - variation) / 100 for MARS_DENSITY in (MARS_DENSITY_LOW, MARS_DENSITY_0, MARS_DENSITY_HIGH): def d(r): return MARS_DENSITY * exp(-(r - MARS_RADIUS) / MARS_H_REF) def f_drag(b): return - b.direction * d(b.radius) * b.area * b.c_drag * b.speed2 / 2
from universal_constants import MARS_RADIUS, MARS_RADIUS2 from universal_functions import mars_orbital_velocity # Constants DURATION = 1000 dt = 1 def free_flight(body, t, dt, condition=lambda b: b.radius2 < MARS_RADIUS2): simulation = Simulation(body, f_drag + f_gravity) simulation.run(t, dt=dt, condition=condition) return simulation for altitude in (100000, 200000, 300000, 400000): POSITION_0 = Vector(MARS_RADIUS + altitude, 0) VELOCITY_0 = mars_orbital_velocity(MARS_RADIUS + altitude) * Vector(0, 1) body = ShapedBody(POSITION_0, VELOCITY_0, mass=20000.0, area=pi * 2.5 ** 2, c_drag=0.3, r_nose=1.5) p = free_flight(body, t=DURATION, dt=dt) vr = (p.rs[-1] - p.rs[0]) / p.duration print("For altitude: " + str(altitude) + " m") print("Delta radius: " + str(p.rs[-1] - p.rs[0]) + " m") print("Radial speed: " + str(vr) + " m/s")