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
Example #2
0
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")