Advertisement
Guest User

Untitled

a guest
Jul 10th, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.53 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. g = 9.81
  5.  
  6. class RocketEngine:
  7.     def __init__(self, engine_name, engine_mass, engine_isp, engine_atmo_thrust, engine_vac_thrust):
  8.         self.name = engine_name
  9.         self.mass = engine_mass
  10.         self.isp = engine_isp
  11.                 self.atmo_thrust = engine_atmo_thrust
  12.                 self.vac_thrust = engine_vac_thrust
  13.  
  14. ant = RocketEngine("Ant", 20, 310, 0.51, 2.0)
  15. spark = RocketEngine("Spark", 100, 300, 16.2, 18.0)
  16. lv909 = RocketEngine("Terrier", 500, 340, 14.783, 60.0)
  17. nerv = RocketEngine("Nerv", 3000, 800, 13.875, 60.0)
  18. nerv2x = RocketEngine("2x Nerv", 6000, 800, 27.5, 120.0)
  19. lightbulb = RocketEngine("Lightbulb", 20000.0, 1500.0, 225.0, 400.0)
  20. reliant = RocketEngine("Reliant", 1250, 320, 200.67, 215.0)
  21. aerospike = RocketEngine("Aerospike", 1000, 340, 153.53, 180.0)
  22. poodle = RocketEngine("Poodle", 1750, 350, 64.29, 250.0)
  23. mainsail = RocketEngine("Mainsail", 6000, 310, 1379.0, 1500.0)
  24. skipper = RocketEngine("Skipper", 3000, 320, 568.75, 650.0)
  25. rhino = RocketEngine("Rhino", 9000, 340, 1500.0, 2000.0)
  26. mammoth = RocketEngine("Mammoth", 15000, 315, 3746.0, 4000.0)
  27. twinboar = RocketEngine("Twin-boar", 10000, 300, 1866.7, 2000.0)
  28. engines = [aerospike,
  29.            reliant,
  30.            poodle,
  31.            mainsail,
  32.            skipper,
  33.            rhino,
  34.            twinboar,
  35.            mammoth,
  36.            nerv,
  37.            ant,
  38.            spark,
  39.            lv909,]
  40.  
  41. payloads = [10000.0]
  42.  
  43. hs = []
  44. colors = plt.get_cmap('jet')(np.linspace(0, 1.0, len(engines)))
  45.  
  46. plt.figure(1)
  47.  
  48. def how_many_engines(engine, more_than_twr, fuel_mass, payload_mass):
  49.         num_engines = 0
  50.         twr = 0
  51.         while twr < more_than_twr:
  52.             num_engines = num_engines + 1
  53.             twr = (num_engines * engine.vac_thrust) / ((fuel_mass + engine.mass + payload_mass) * g) * 1000
  54.         return 0, 1
  55. #        return twr, num_engines
  56.  
  57. requested_twr = 0.2
  58.        
  59. for p, payload_mass in enumerate(payloads):
  60.         print "---------------------------"
  61.         print "payload", payload_mass, "kg"
  62.         print "---------------------------"
  63.         for color, engine in zip(colors, engines):
  64.                 fuel_masses = np.arange(0, 10000 * (p+1), 50)
  65.                 dv_values = np.zeros(np.size(fuel_masses))
  66.  
  67.                 for i, fuel_mass in enumerate(fuel_masses):
  68.                         twr, num_engines = how_many_engines(engine, requested_twr, fuel_mass, payload_mass)
  69.                         engine_block_mass = engine.mass * num_engines
  70.                         total_mass = fuel_mass + engine_block_mass + payload_mass
  71.                         dv = g * engine.isp * (engine.vac_thrust / engine.vac_thrust) * np.log(total_mass / (total_mass - fuel_mass))
  72.                         dv_values[i] = dv
  73.                         #print engine.name, num_engines, fuel_mass, "kg", twr, dv, "m/s"
  74.  
  75.                 subplot_arg = 110 + (p + 1)
  76.                 plt.subplot(subplot_arg)
  77.  
  78.                 twr = engine.vac_thrust / ((fuel_masses[-1:] + engine.mass + payload_mass) * g) * 1000
  79.                 label = "{0}".format(engine.name, twr[0])
  80.                
  81.                 h, = plt.plot(dv_values, fuel_masses + payload_mass + engine.mass, label=label, linewidth=3, color=color)
  82.                 hs.append(h)
  83.  
  84.         if p == 0:
  85.                 plt.legend(handles=hs[0:len(engines)], loc='best')
  86.  
  87.         plt.title("payload = {0} kg".format(payload_mass, requested_twr))
  88.         plt.ylabel("total mass [kg]")
  89.         plt.xlabel("delta-v [m/s]")
  90.         plt.grid()
  91.  
  92. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement