diff --git a/Design/Vehicle-Sizing/MS_TANK_SIZING_CODE.py b/Design/Vehicle-Sizing/MS_TANK_SIZING_CODE.py
deleted file mode 100755
index 5bc828e..0000000
--- a/Design/Vehicle-Sizing/MS_TANK_SIZING_CODE.py
+++ /dev/null
@@ -1,212 +0,0 @@
-''' Beginning of Marginal Stability Tank Sizing Code
- This code will take inputs from a .txt file containing all relevant
- vehicle sizing data and information and compute important estimates
- such as tank height, volume, thickness, and mass. These values
- provided will only be estimates; however, the code will take into
- account as many variables and parameters as possible to ensure
- the most accurate result.
- Work in Progress
-
-'''
-# Establish needed variables and parameters for calculations
-# This will all eventually be handled by a .txt file, when I learn how to do that :)
-import math # gives me all the available constants I need
-
-class tankSize:
- def __init__(self, rp1Mass, loxMass, diameter, pressure, factorOfSafety, pressurantDiameter, initialPressure, finalPressure):
- self.rp1Mass = rp1Mass
- self.loxMass = loxMass
- self.diameter = diameter
- self.pressure = pressure
- self.factorOfSafety = factorOfSafety
- self.pressurantDiameter = pressurantDiameter
- self.initialPressure = initialPressure
- self.finalPressure = finalPressure
-
- pi = math.pi
- rho_lox = 0.04122124 # density of LOx as given in Vehicle Sizing spreadsheet V1, lbm/in^3
- rho_rp1 = 0.0292631 # density of RP-1, MS Vehicle Sizing V1
- rho_alum = 0.0975 # density of Aluminum 6061-T6, the likely choice for tanks
- ys_alum = 40030.488 # yield strength of 6061-T6
-
-
- # Begin importing text file stuff...yay!
- #file = open('input.txt', 'r')
- # this opens the file 'input.txt' from whatever directory the program is
- # saved to--make sure to download it or move it to the same directory!
-
- #prop_diam_text = file.readlines(1) # reads first line of the input file
- #for line in prop_diam_text:
- # prop_diam_stuff = line.split() # saves split results of first line
- #diam = float(prop_diam_stuff[1]) # saves proper variables from that array, converted to float
- diam = diameter
-
- #prop_press_text = file.readlines(2) # continues to read down the input file
- #for line in prop_press_text:
- # prop_press_stuff = line.split()
- # print(prop_press_stuff)
- #lox_press = float(prop_press_stuff[1])
- lox_press = pressure
- rp1_press = lox_press # can be better worked into the code later, but should be the same
- ''' Quick note here: I'd already written the code such that it would allow for two different
- tank pressure inputs before adding the input text file capability, and I really didn't want
- to go back and rewrite all my code at the risk of missing a variable somewhere or skewing an
- equation. Leaving it like this also makes it a lot easier down the road if we decide we'd like
- to keep the two tanks at different pressures for some reason. It also makes it a lot easier to
- tell which tanks you're doing calculations for if they have different variable names, rather than
- just a generic "tank pressure".'''
-
- #fos_text = file.readlines(3)
- #for line in fos_text:
- # fos_stuff = line.split()
- #fos = float(fos_stuff[1])
- fos = factorOfSafety
-
- #press_diam_text = file.readlines(4)
- #for line in press_diam_text:
- # press_diam_stuff = line.split()
- #press_tank_diam = float(press_diam_stuff[1])
- press_tank_diam = pressurantDiameter
-
- #press_ipress_text = file.readlines(5)
- #for line in press_ipress_text:
- # press_ipress_stuff = line.split()
- #initial_press = float(press_ipress_stuff[1])
- initial_press = initialPressure
-
- #press_fpress_text = file.readlines(6)
- #for line in press_fpress_text:
- # press_fpress_stuff = line.split()
- #final_press = float(press_fpress_stuff[1])
- final_press = finalPressure
-
- #file.close() # closes the input file once everything's read in
-
- k = 0.725158 # Roundness factor for 2:1 elliptical heads, as given by [insert link here]
- E = 0.85 # joint efficiency of any welded joints, might change or not be used
- m_lox = self.loxMass # Mass of LOx required, lbm
- m_rp1 = self.rp1Mass # Mass of RP-1 required, lbm
- of_ratio = 2.33 # oxidizer:fuel ratio, as given currently in MSVS V1
- #lox_press = 600 # Max. Expected Operating Pressure of LOx, psi
- #rp1_press = 600 # MEOP of RP-1, psi
- tubediam = 0.83 # OD for transfer tube, in (for subtracting volume)
-
- vol_lox = m_lox / rho_lox # computes the volume of the propellants to be used, in^3
- vol_rp1 = m_rp1 / rho_rp1
-
- # Barlow's equation for tank wall thickness
- t_lox = (lox_press * diam) / (2 * ys_alum / fos)
- t_rp1 = (lox_press * diam) / (2 * ys_alum / fos)
-
- # Tank head thickness equations (taken from [insert link here])
- th_lox = (lox_press * diam * k) / ((2 * E * ys_alum / fos) - (0.2 * lox_press))
- th_rp1 = (rp1_press * diam * k) / ((2 * E * ys_alum / fos) - (0.2 * lox_press))
-
- # Inner volume of tank heads (neutrium eqns)
- vh_lox = (diam - (2 * th_lox))**3 * 0.5 * (pi / 24) * 2
-
- vh_rp1 = (diam - (2 * th_rp1))**3 * 0.5 * (pi / 24) * 2
-
- # Tank straight-wall height requirements
- sh_lox = (vol_lox - (2 * vh_lox)) / (pi * ((diam - 2 * t_lox)/2)**2)
- sh_rp1 = vol_rp1 / (pi * (((diam - (2 * t_rp1))/2)**2 - (tubediam / 2)**2)) # factors out internal plumbing
-
- # Volume of LOx tank
- vol_loxtank = (2 * vh_lox) + (pi * ((diam - (2 * t_lox))/2)**2 * sh_lox)
- vol_rp1tank = (pi * ((diam - (2 * t_rp1))/2)**2 * sh_rp1)
-
- # Tank head heights (for CAD purposes, mostly)
- hi_lox = (diam - 2 * th_lox) / 4 # inner height
- ho_lox = hi_lox + th_lox # outer height
- hi_rp1 = (diam - 2 * th_rp1) / 4
- ho_rp1 = hi_rp1 + th_rp1
-
- # Tank heights, separate and together
- lox_height = 2 * ho_lox + sh_lox
- rp1_height = ho_rp1 + sh_rp1
- total_height = ho_rp1 + ho_lox + sh_rp1 + sh_lox
- ''' This isn't just LOx height + RP-1 height because the tanks share a common bulkhead.
- When installed, the bottom of the LOx tank actually sits inside the shoulder of the
- RP-1 tank, so the overall length of the tanks sittingg in the rocket will be the
- height of the upper LOx bulkhead + the straight-wall LOx height + the RP-1
- straight-wall height (little/no bulkhead space in between) + the height of the
- lower RP-1 bulkhead
- Later versions of this code should acknowledge that there is, in fact, a bit of
- space between the two tanks, especially if they are double-walled. This can be
- updated as the design is finalized
- '''
-
-
- # Numbers for CAD ease and tank designing specifications
- id_lox = diam - 2 * t_lox # inside diameter of the tanks, in
- id_rp1 = diam - 2 * t_rp1
- KRi_lox = 0.17 * id_lox # knuckle radii and crown radii of ellipses, inside and out, in
- CRi_lox = 0.9 * id_lox
- KRo_lox = 0.17 * diam
- CRo_lox = 0.9 * diam
- KRi_rp1 = 0.17 * id_rp1
- CRi_rp1 = 0.9 * id_rp1
- KRo_rp1 = 0.17 * diam
- CRo_rp1 = 0.9 * diam
-
- # Tank metal volume and mass estimates
- loxheadmetal = ((diam**3) * 0.5 * (pi / 24) * 2) - vh_lox
- rp1headmetal = ((diam**3) * 0.5 * (pi/24) * 2) - vh_rp1
- metalwalllox = (pi * (diam / 2)**2 * sh_lox) - (pi * (((diam - 2 * t_lox)/2)**2) * sh_lox)
- metalwallrp1 = (pi * (diam / 2)**2 * sh_rp1) - (pi * (((diam - 2 * t_rp1)/2)**2) * sh_rp1)
- metalvolume = 2*loxheadmetal + metalwalllox + metalwallrp1 + 2 * rp1headmetal
-
- self.tank_mass = rho_alum * metalvolume
- head_mass = (2 * loxheadmetal + 2 * rp1headmetal) * rho_alum
- wall_mass = (metalwalllox + metalwallrp1) * rho_alum
-
- file2 = open('output.txt', 'w') # creates generic output file, can be renamed later
- # Print results to output file rather than command line
- file2.write('The propellant tank diameter is ' + str(diam) + ' in\n')
- file2.write('The LOx tank pressure is ' + str(lox_press) + ' psi\n')
- file2.write('The RP-1 tank pressure is ' + str(rp1_press) + ' psi\n')
- file2.write('The total mass is ' + str(round(self.tank_mass, 3)) + ' lbs\n')
- file2.write('The total tank height is ' + str(round(total_height, 3)) + ' in\n')
- file2.write('The LOx tank is ' + str(round(lox_height, 3)) + ' in high\n')
- file2.write('The RP-1 tank is ' + str(round(rp1_height, 3)) + ' in high\n')
- '''Another quick note: I floated everything to 3 digits here just for simplicity's sake.
- It won't hurt my feelings if you need to float the decimals further or just take
- rounding off altogether, if precision becomes more important than 3 decimals down
- the road'''
-
-
- ''' Moving on to the Pressurant Tank Sizing Section
- This part of the code will take in other values, probably from the same .txt
- file, and compute the needed mass of helium, as well as the volume of helium,
- and size a tank appropriately
- '''
-
- # Prepare other variables from propellant tank sizing
- #press_tank_diam = 6 # has to be user-defined, need a diameter to help find volume
- prop_vol = vol_lox + vol_rp1 # gives the total volume of propellants being ejected
- prop_press = lox_press # since they should both be the same anyways
- gamma = 5 / 3; # the ratio of specific heats for the gas equations
- #initial_press = 4500 # pressure inside helium tank on the pad
- #final_press = 50 # pressure inside tank after burnout
- press_temp = 536.67 # gives temperature of pressurant in *R
- R = 10.73159*12**3 # gas constant in imperial, in^3-psi / *R-lbmol
- molar_mass = 4.003 # also for gas equations, lbm/lbmol
-
- # Calculate the pressurant mass from equations given by AIAA report
- press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass
-
- # Calculate volume of pressurant from ideal gas eqns
- press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press
-
- # Use the volume and diameter to find tank straight-wall height, then add height of spherical end caps
- tank_height = ((press_vol - (4/3) * pi * (press_tank_diam / 2)**3) / (pi * (press_tank_diam / 2)**2)) + press_tank_diam
-
- # ...and print the results!
- file2.write('The helium tank diameter is ' + str(press_tank_diam) + ' in\n')
- file2.write('The volume of helium needed is ' + str(round(press_vol, 3)) + ' in^3\n')
- file2.write('The mass of helium needed is ' + str(round(press_mass, 3)) + ' lbm\n')
- file2.write('The pressurant tank is ' + str(round(tank_height, 3)) + ' in high\n')
-
- file2.close()
-
-example = tankSize(357.10,796.34,10,750,4,8,4500,50)
diff --git a/Design/Vehicle-Sizing/MS_tank_sizing_6719.m b/Design/Vehicle-Sizing/MS_tank_sizing_6719.m
new file mode 100644
index 0000000..922c794
--- /dev/null
+++ b/Design/Vehicle-Sizing/MS_tank_sizing_6719.m
@@ -0,0 +1,145 @@
+clear all; close all; clc;
+
+
+% This program is adapted from Huzel and Huang's "Modern Engineering for
+% Design of Liquid-Propellant Rocket Engines" and uses the calculations for
+% tank dimensions found in Chapter 8
+
+%% Lists all required constants and values required for math-ing
+P = input('Propellant Tank Pressure (psi): '); %input tank pressure in psig
+
+D = 12; %tank outer diameter in inches
+R = D./2; %tank radius, in
+S = 40000; %yield strength of 6061-T6 alloy in psi
+Sc = 56000; %compressive yield strength of 6061-T6 in psi
+FoS = 1.5; %factor of safety
+v = 0.33; %Poisson's ratio of 6061-T6 alloy, unitless
+ew = 0.85; %approximate efficiency of welded joints
+E = 1e7; %6061-T6 modulus of elasticity, psi
+rho_alum = 0.0975; %density of aluminum, lbm./in.^3
+rho_lox = 0.04122124; %density of LOx, lbm./in.^3
+rho_rp1 = 0.0292631; %density of RP-1, lbm./in.^3
+k = 2; %ratio of a./b, which should be 2:1 due to the semi-elliptical tank head design
+K = 1.2; %obtained from graph on page 292 of H&H book
+Fc = 3305; %estimated critical loading on rocket during flight, lbf
+g = 32.2; %gravitational acceleration, ft./s.^3
+
+mix_ratio = 2.23; %fuel mix ratio, for prop mass calcs and volume
+m_prop = 1180.799; %propellant mass in lbm--given from prop team
+m_rp1 = m_prop ./ (1+mix_ratio); %computes needed amount of RP-1 based on mixture ratio
+m_lox = m_prop - m_rp1; %remaining propellant must be LOx
+vol_lox = m_lox ./ rho_lox;%use density of propellants to compute volumes
+vol_lox = vol_lox .* 1.02; %adds an extra 2% of volume for ullage space
+vol_rp1 = m_rp1 ./ rho_rp1;
+vol_rp1 = vol_rp1 .* 1.02; %also adds an extra 2% of volume for ullage
+
+%not required unless volume is given instead of mass
+% vol_lox = 16748.707; %volume of oxidizer in in.^3
+% vol_rp1 = 10579.792; %volume of fuel in in.^3
+% d_pressline = 0.5; %outer diameter of pressurant lines through tanks, in
+% d_annulus = 2; %outer diameter of annular lining, in
+% d_rp1fill = 1; %outer diameter of fill line to rp-1, in
+d_pressline = 0;
+d_annulus = 0;
+d_rp1fill = 0;
+%as of new design, all plumbing is external :)
+t_barlows = (P.*D)./(2.*S./FoS);
+
+%% Calculates needed tank thickness based on loading characteristics
+% Algebraic manipulation of eqn. 8-32 on p. 293 required to caclculate
+% required cylindrical wall thickness based on loading criteria
+
+tc_vec = 0:0.001:0.25; %vector of wall thicknesses for testing
+LHS = 4.*(Fc.*FoS).*(1-v.^2) ./ (E.*pi); %the left-hand side of the eqn. on p.293
+RHS = (36.*tc_vec.^3 - tc_vec.^5) ./ (6-tc_vec).^3;
+
+indexer = find(RHS <= LHS); %finds intersection of two curves
+tc = tc_vec(max(indexer)); %saves tc--cylindrical wall thickness
+
+%% test to see whether barlows is a bit more accurate than the other
+if t_barlows >= tc
+ tc = t_barlows;
+end
+%tc = t_barlows;
+%% Uses required cylindrical wall thickness to estimate bulkhead thickness
+
+a = R - tc; %a is the internal radius, or major axis length of ellipse
+b = a./2; %minor axis length, or head height--property of 2:1 shape
+Eprime = 2.*k + (1./sqrt(k.^2-1)).*log((k+sqrt(k.^2-1))./(k-sqrt(k.^2-1)));
+%eprime is the "design factor" described on p. 292, for weight calcs later
+%on
+
+tk = (K.*P.*a) ./ (S.*ew ./ FoS); %knuckle thickness, in
+tcr = (P.*R) ./ (2.*S.*ew ./ FoS); %crown thickness, in
+tequiv = (tk + tcr) ./ 2; %average bulkhead thickness for weight calcs
+
+%% Redimensions tanks according to volume and wetted area eqns. given in H&H
+
+v_endcap = (2.*pi.*a.^2.*b)./3; %endcap volume capacity, in.^3
+leftovervol_lox = vol_lox - 2.*v_endcap; %volume left for cylindrical section
+leftovervol_rp1 = vol_rp1 - 2*v_endcap; %vol left for rp-1 cylindrical section
+%this has been adjusted due to the fact that the RP-1 tank is now its own
+%entity, and not a common bulkhead. The addition of a convex bulkhead adds
+%volume to the tank itself and removes the need to exclude the bulkhead
+%volume
+vcyl_lox = leftovervol_lox; %lox cylinder volume needed to hold remaining propellant
+vcyl_rp1 = leftovervol_rp1; %rp-1 cylinder volume needed to hold remaining propellant
+
+cylheight_lox = vcyl_lox ./ (pi.*a.^2 - pi.*d_rp1fill.^2 - 2.*pi.*(d_pressline ./ 2).^2); %computes height of cylinders for each propellant
+cylheight_rp1 = vcyl_rp1 ./ (pi.*a.^2 - pi.*(d_pressline ./ 2).^2 - pi.*(d_annulus ./ 2).^2);
+
+intertank_airframe_height = 12; %height of intertank airframe in inches
+overall_height = cylheight_lox + cylheight_rp1 + 4.*(b+tcr) + intertank_airframe_height; %head height, with cylindrical sections and two end caps
+
+%% Computes weights of tank segments also based on given equations
+%pi.*(outer_diameter.^2 - inner_diameter.^2) .* height .* rho_alum ./ 4
+% weight of bulkheads in lbm for calculating--from SolidWorks
+loxupper_weight = 5.83;
+loxlower_weight = 5.17;
+rp1upper_weight = 5.29;
+rp1lower_weight = 5.65;
+w_endcaps = loxupper_weight + loxlower_weight + rp1upper_weight + rp1lower_weight;
+
+%weight of respective cylindrical sections
+w_cyl_rp1 = pi.*(R.^2 - a.^2) .* cylheight_rp1 .* rho_alum;
+w_cyl_lox = pi.*(R.^2 - a.^2) .* cylheight_lox .* rho_alum;
+
+% all plumbing weights are no longer included
+dry_weight = w_endcaps + w_cyl_rp1 + w_cyl_lox;
+wet_weight = dry_weight + m_prop;
+
+
+
+%% Pressurant Tank Sizing Code
+prop_vol = vol_lox + vol_rp1;
+prop_press = P;
+gamma = 5/3; %ratio of specific heats for Helium
+press_temp = 536.67; %pressurant temp in Rankine
+R = 10.73159*12^3; %gas constant in imperial units, in3-psi / R-lb-mol
+molar_mass = 4.003;
+initial_press = 3600; %initial pressure in bottle, psi
+final_press = P; %final pressure at burnout, psi
+press_tank_diam = 11; %outer diameter of pressurant tank, in, based on Ray's SW model
+
+
+press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass;
+press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press;
+% Pressurant Tank sizing calcs also excluded since they suck
+
+%% Print the results for ease of design and troubleshooting if needed
+fprintf('Propellant Volume: %f in.^3\n', vol_lox+vol_rp1)
+fprintf('Tank Pressure: %f psi\n', P)
+fprintf('Cylindrical Wall Thickness: %f in\n', tc)
+fprintf('Cylindrical Thickness--Barlow''s Eqn.(comparison): %f in\n', (P.*D)./(2.*S./FoS))
+%I threw Barlow's estimate in the printed response to make sure that these
+%calculations, which take into account the axial loading of max Q and
+%thrust, are larger than just plain internal pressure estimates. This is
+%just a handy troubleshooting feature./sanity check to make sure everything
+%is at least in the ballpark
+fprintf('Equivalent Bulkhead Thickness: %f in\n', tequiv)
+fprintf('LOx Cylindrical Wall Height: %f in\n', cylheight_lox)
+fprintf('RP-1 Cylindrical Wall Height: %f in\n', cylheight_rp1)
+fprintf('Approximate Overall Tank Height: %f in\n', overall_height)
+fprintf('Approximate Dry Mass: %f lbm\n', dry_weight)
+fprintf('Approximate Wet Mass: %f lbm\n', wet_weight)
+fprintf('Pressurant Volume and Mass Required: %f in^3 and %f lbm\n', press_vol, press_mass)
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/marginal-stability-sizing.ipynb b/Design/Vehicle-Sizing/marginal-stability-sizing.ipynb
index 61af45e..d9d98f5 100755
--- a/Design/Vehicle-Sizing/marginal-stability-sizing.ipynb
+++ b/Design/Vehicle-Sizing/marginal-stability-sizing.ipynb
@@ -5,26 +5,28 @@
"metadata": {},
"source": [
"# Marginal Stability Vehicle Sizing\n",
- "This sheet uses numpy, matplotlib, simulations, unit_conversions, and tanksim
.\n",
+ "This sheet uses numpy, matplotlib, simulations, and tank_sizing_9_20
.\n",
"\n",
"simulations
is developed and maintained (no promises) by Cameron. The current version of the code is 0.0.1 and can be downloaded from github [here](https://github.com/cmflannery/simulations). The source-code is not currently on pip."
]
},
{
"cell_type": "code",
- "execution_count": 62,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from simulations import simulations as sim\n",
+ "unit = sim.unit()\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
- "import tank_sizing_2_23 as tankSize"
+ "import tank_sizing_9_20 as tank\n",
+ "from scipy import interpolate as inter"
]
},
{
"cell_type": "code",
- "execution_count": 63,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -46,6 +48,7 @@
" ax2.grid(True, linewidth=1)\n",
" ax2.plot(time,velocity)\n",
" ax2.set_ylabel('Velocity (ft/s)')\n",
+ " ax2.set_ylim(bottom=-6000)\n",
"\n",
" # plot acceleration\n",
" gees = [x/g0Imp for x in acceleration]\n",
@@ -56,6 +59,7 @@
" ax3.plot(time,gees)\n",
" ax3.set_ylabel('Acceleration (gees)')\n",
" ax3.set_xlabel('Time (s)')\n",
+ " ax3.set_ylim(bottom=-2)\n",
" \n",
"def plot_thrust(fig):\n",
" # plot thrust\n",
@@ -80,90 +84,87 @@
},
{
"cell_type": "code",
- "execution_count": 64,
+ "execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "250\n",
"### STRUCTURAL PARAMETERS ###\n",
- "Propellant Mass = 1153.85 lbm\n",
- "Propulsion Mass = 55.00 lbm\n",
- "Tank Mass = 202.60 lbm\n",
- "Structural Mass (inc. Tank) = 530.60 lbm\n",
- "Systems Mass = 67.80 lbm\n",
- "Misc Mass = 25.00 lbm\n",
- "Avionics Mass = 21.40 lbm\n",
- "Mass Propellant Ratio (Mprop/M0) 0.62\n",
- "Total Wet Mass: 1853.65 lbm\n",
- "Total Dry Mass: 699.80 lbm\n",
+ "Propellant Mass = 710.17 lbm\n",
+ "Helium Mass = 11.03 lbm\n",
+ "Propulsion Mass = 47.79 lbm\n",
+ "Tank Mass = 134.51 lbm\n",
+ "Pressurant Tank Mass = 204.62 lbm\n",
+ "Structural Mass (inc. Tanks) = 530.19 lbm\n",
+ "Systems Mass = 162.00 lbm\n",
+ "Misc Mass = 0.00 lbm\n",
+ "Avionics Mass = 13.07 lbm\n",
+ "Mass Propellant Ratio (Mprop/M0) 0.49\n",
+ "Total Wet Mass: 1474.25 lbm\n",
+ "Total Dry Mass: 753.05 lbm\n",
"\n",
"### ENGINE PARAMETERS ###\n",
"Thrust = 5000 lbf\n",
- "Isp = 260 s\n",
- "mdot = 19.23 lbm/s\n",
- "Total Impulse = 300000 lbf-s\n",
+ "Isp = 281.62 s\n",
+ "mdot = 17.75 lbm/s\n",
+ "Total Impulse = 200000 lbf-s\n",
"\n",
"### OTHER IMPORTANT THINGS ###\n",
- "Burn Time = 60.00 s\n"
+ "Burn Time = 40.00 s\n"
]
}
],
"source": [
- "unit = sim.unit()\n",
- "\n",
- "burntime = 60 # s\n",
+ "thrust_sl = 5000 # s\n",
"\n",
"nengines = 1\n",
- "thrust_sl = 5000 # lbf\n",
- "Isp = 260 #s\n",
- "mdot = nengines*thrust_sl/(Isp) #lbm/s\n",
- "twratio = 50 # estimated thrust 2 weight ratio\n",
- "mixtureratio = 2.23\n",
+ "burntime = 40 # s\n",
+ "chamberpressure = 500 #psi\n",
+ "Isp = 281.622 #s\n",
+ "#Isp as a function of chamber pressure might be a useful addition\n",
+ "mdot = nengines*thrust_sl/(Isp) #lbm/s (calc results in lbf/s, but conversion factor is 1)\n",
+ "mixtureratio = 2.275\n",
"g0Metric = 9.81 #m/s^2\n",
"g0Imp = 32.17 #ft/s^2\n",
"\n",
- "mstructure = 328 # lbm\n",
- "mavionics = 21.4 # lbm\n",
- "msystems = 67.8 # lbm\n",
- "mmisc = 25 #lbm\n",
- "#mengine = thrust_sl*nengines/twratio #lbm\n",
- "mpropulsion = 55 # lbm\n",
+ "mstructure = 191.06 # lbm\n",
+ "mavionics = 13.07 # lbm\n",
+ "msystems = 162 # lbm\n",
+ "mmisc = 0 #lbm\n",
+ "mpropulsion = 47.79 # lbm\n",
"mpropellant = mdot*burntime\n",
"\n",
"\n",
- "diameter = 12 #in\n",
+ "diameter = 16 #in\n",
+ "diam_tank = 12 #in\n",
"\n",
"mRP1 = mpropellant / (mixtureratio + 1)\n",
"mLOx = mpropellant - mRP1\n",
"\n",
- "tankpressure = 600 #psi\n",
- "fos = 4\n",
- "pressurantdiameter = diameter - 2 #in\n",
- "HEinitialpressure = 4500 #psi\n",
- "HEfinalpressure = 50 #psi\n",
+ "rp1tankpressure = 730 #psi\n",
+ "loxtankpressure = 730 #psi\n",
+ "HEinitialpressure = 6000 #psi\n",
"\n",
- "mtank = tankSize.getTankMass(tankpressure,diameter,mpropellant)\n",
+ "mtank, mHe, lenloxin, lenrp1in = tank.getTankMassLen(loxtankpressure,rp1tankpressure,diam_tank,mpropellant,HEinitialpressure)\n",
+ "mtank = 134.51 #correction to tank code\n",
+ "mpress = 204.62 # lbm, mass of pressurant tank\n",
"\n",
- "if diameter == 8:\n",
- " refArea = .345 #ft^2\n",
- "elif diameter == 15:\n",
- " refArea = 1.227 #ft^2\n",
- "elif diameter == 12:\n",
- " refArea = .786 #ft^2\n",
- "else:\n",
- " refArea = .538 #ft^2\n",
- "#reference area of .538 for 10\" rocket, .345 for 8\" rocket, 1.227 for 15\" rocket, .785 for 12\" rocket\n",
+ "mpropellant += mHe\n",
"\n",
- "m0 = mpropulsion + mpropellant + mstructure + mavionics + msystems + mmisc + mtank\n",
+ "refArea = np.pi*((diameter/2)**2) / 144 #ft^2\n",
+ "coef_drag = 0.37\n",
+ "\n",
+ "m0 = mpropulsion + mpropellant + mstructure + mavionics + msystems + mmisc + mtank + mpress\n",
"\n",
"print('### STRUCTURAL PARAMETERS ###')\n",
- "print('Propellant Mass = %.2f lbm' % mpropellant)\n",
+ "print('Propellant Mass = %.2f lbm' % (mpropellant - mHe))\n",
+ "print('Helium Mass = %.2f lbm' % mHe)\n",
"print('Propulsion Mass = %.2f lbm' % mpropulsion)\n",
"print('Tank Mass = %.2f lbm' % mtank)\n",
- "print('Structural Mass (inc. Tank) = %.2f lbm' % (mstructure + mtank))\n",
+ "print('Pressurant Tank Mass = %.2f lbm' % mpress)\n",
+ "print('Structural Mass (inc. Tanks) = %.2f lbm' % (mstructure + mtank + mpress))\n",
"print('Systems Mass = %.2f lbm' % msystems)\n",
"print('Misc Mass = %.2f lbm' % mmisc)\n",
"print('Avionics Mass = %.2f lbm' % mavionics)\n",
@@ -172,7 +173,7 @@
"print('Total Dry Mass: %.2f lbm' % (m0-mpropellant))\n",
"print('\\n### ENGINE PARAMETERS ###')\n",
"print('Thrust = %d lbf' % (thrust_sl*nengines))\n",
- "print('Isp = %d s' % Isp)\n",
+ "print('Isp = %.2f s' % Isp)\n",
"print('mdot = %.2f lbm/s' % mdot)\n",
"print('Total Impulse = %i lbf-s' % (thrust_sl*burntime*nengines))\n",
"\n",
@@ -186,12 +187,13 @@
" 'flight_heading': np.deg2rad(90),\n",
" 'latitude': 0,\n",
" 'longitude': 0,\n",
- " 'altitude': 0,\n",
+ " 'altitude': 4460, # ft\n",
" 'mass': unit.lbmToSlug(m0),\n",
" 'heat': 0,\n",
" 'lift_coefficient': 0,\n",
" 'bank_angle': 0,\n",
- " 'reference_area': refArea\n",
+ " 'reference_area': refArea,\n",
+ " 'coef_drag': coef_drag\n",
"}\n",
"\n",
"engines = {\n",
@@ -200,43 +202,450 @@
" 'Isp': Isp,\n",
" 'Ae': 2.690978,\n",
" 'nengines': nengines\n",
- "}\n"
+ "}\n",
+ "\n",
+ "timestep = .1"
]
},
{
"cell_type": "code",
- "execution_count": 65,
+ "execution_count": 13,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "4656.955047\n",
+ "4656.9543430673075\n",
+ "4656.972113533943\n",
+ "4657.007682543401\n",
+ "4657.061077075186\n",
+ "4657.132322855838\n",
+ "4657.221444350145\n",
+ "4657.3284647520595\n",
+ "4657.453405975317\n",
+ "4657.596288643742\n",
+ "4657.757132081245\n",
+ "4657.935954301522\n",
+ "4658.132771997417\n",
+ "4658.347600529995\n",
+ "4658.580453917281\n",
+ "4658.831344846836\n",
+ "4659.100284746507\n",
+ "4659.387283743655\n",
+ "4659.692350654777\n",
+ "4660.015493006375\n",
+ "4660.356717014797\n",
+ "4660.716027329676\n",
+ "4661.0934269268955\n",
+ "4661.488917521405\n",
+ "4661.902499874502\n",
+ "4662.334173481106\n",
+ "4662.783936507201\n",
+ "4663.251785345711\n",
+ "4663.737714359375\n",
+ "4664.24171714753\n",
+ "4664.76378648863\n",
+ "4665.303913763678\n",
+ "4665.8620882119785\n",
+ "4666.438297067284\n",
+ "4667.032527253694\n",
+ "4667.644764874934\n",
+ "4668.2749938781735\n",
+ "4668.923195432838\n",
+ "4669.589351074252\n",
+ "4670.273441527426\n",
+ "4670.975444222542\n",
+ "4671.695335225068\n",
+ "4672.433090748583\n",
+ "4673.188684765507\n",
+ "4673.962090619859\n",
+ "4674.753277654556\n",
+ "4675.562216673732\n",
+ "4676.388876852567\n",
+ "4677.233223046696\n",
+ "4678.0952220042645\n",
+ "4678.97483856816\n",
+ "4679.87203319206\n",
+ "4680.7867692635\n",
+ "4681.719005827072\n",
+ "4682.668700542394\n",
+ "4683.635812400877\n",
+ "4684.620294733454\n",
+ "4685.622103472424\n",
+ "4686.6411910053075\n",
+ "4687.6775079124145\n",
+ "4688.731006170546\n",
+ "4689.8016321533105\n",
+ "4690.889334284125\n",
+ "4691.994059694615\n",
+ "4693.1157502896995\n",
+ "4694.254352091054\n",
+ "4695.409804013683\n",
+ "4696.582049359284\n",
+ "4697.771024417369\n",
+ "4698.976669598664\n",
+ "4700.198918745126\n",
+ "4701.43770938471\n",
+ "4702.692972716733\n",
+ "4703.964643707751\n",
+ "4705.25265068796\n",
+ "4706.556926328126\n",
+ "4707.877396099265\n",
+ "4709.213989802432\n",
+ "4710.566630853347\n",
+ "4711.935246206322\n",
+ "4713.319756725432\n",
+ "4714.720086926753\n",
+ "4716.136155125752\n",
+ "4717.567882578329\n",
+ "4719.015186840742\n",
+ "4720.477984145045\n",
+ "4721.95619209538\n",
+ "4723.449722988761\n",
+ "4724.958491838422\n",
+ "4726.482410498654\n",
+ "4728.021388457932\n",
+ "4729.575337371512\n",
+ "4731.144164137318\n",
+ "4732.72777795323\n",
+ "4734.326083557591\n",
+ "4735.938985835851\n",
+ "4737.566390415811\n",
+ "4739.208198620698\n",
+ "4740.864311866838\n",
+ "4742.534632370486\n",
+ "4744.219058493028\n",
+ "4745.917487890745\n",
+ "4747.629819853772\n",
+ "4749.355948657731\n",
+ "4751.0957707772495\n",
+ "4752.849180760417\n",
+ "4754.616070600796\n",
+ "4756.396332148892\n",
+ "4758.189858070786\n",
+ "4759.996537981437\n",
+ "4761.816260117077\n",
+ "4763.648912887535\n",
+ "4765.494384662519\n",
+ "4767.352560684935\n",
+ "4769.223326251564\n",
+ "4771.106566834751\n",
+ "4773.00216551527\n",
+ "4774.910004358842\n",
+ "4776.829964944862\n",
+ "4778.761929006689\n",
+ "4780.705776764282\n",
+ "4782.661387018837\n",
+ "4784.62863689312\n",
+ "4786.60740607784\n",
+ "4788.597570733299\n",
+ "4790.599006417976\n",
+ "4792.611588106917\n",
+ "4794.635190319383\n",
+ "4796.669687105316\n",
+ "4798.714951803894\n",
+ "4800.77085636545\n",
+ "4802.8372721007845\n",
+ "4804.914068895604\n",
+ "4807.001118901413\n",
+ "4809.098290911645\n",
+ "4811.205453803188\n",
+ "4813.322475638462\n",
+ "4815.449223873136\n",
+ "4817.585565570777\n",
+ "4819.73136721701\n",
+ "4821.886494702406\n",
+ "4824.050813940514\n",
+ "4826.224189087156\n",
+ "4828.406484234925\n",
+ "4830.597563172565\n",
+ "4832.797288973507\n",
+ "4835.005524529186\n",
+ "4837.222132046447\n",
+ "4839.446973366831\n",
+ "4841.679909978935\n",
+ "4843.920802417551\n",
+ "4846.169511031867\n",
+ "4848.425896010254\n",
+ "4850.689816886909\n",
+ "4852.961133053475\n",
+ "4855.239703459538\n",
+ "4857.525386707356\n",
+ "4859.818040994315\n",
+ "4862.117524473854\n",
+ "4864.423694551495\n",
+ "4866.736408498432\n",
+ "4869.055523416064\n",
+ "4871.3808960210745\n",
+ "4873.712382885168\n",
+ "4876.049840247338\n",
+ "4878.393123280102\n",
+ "4880.742089803315\n",
+ "4883.096594567934\n",
+ "4885.456493031393\n",
+ "4887.821640466456\n",
+ "4890.1918921148335\n",
+ "4892.567102967469\n",
+ "4894.947128004803\n",
+ "4897.331822124031\n",
+ "4899.721039921555\n",
+ "4902.114635912542\n",
+ "4904.512464697819\n",
+ "4906.914380867838\n",
+ "4909.320238893453\n",
+ "4911.72989310887\n",
+ "4914.143197961436\n",
+ "4916.5600071074705\n",
+ "4918.980176533896\n",
+ "4921.403559939614\n",
+ "4923.830011698902\n",
+ "4926.2593864483315\n",
+ "4928.6915386232495\n",
+ "4931.126323000816\n",
+ "4933.563594318752\n",
+ "4936.003207015998\n",
+ "4938.445016729983\n",
+ "4940.888878224439\n",
+ "4943.3346467065385\n",
+ "4945.782177514588\n",
+ "4948.231326239754\n",
+ "4950.681948483975\n",
+ "4953.133900326588\n",
+ "4955.587037688942\n",
+ "4958.041216778458\n",
+ "4960.4962941854965\n",
+ "4962.952126616404\n",
+ "4965.4085711033385\n",
+ "4967.865484911774\n",
+ "4970.322725482512\n",
+ "4972.7801504621\n",
+ "4975.237618382501\n",
+ "4977.694987306189\n",
+ "4980.152116002929\n",
+ "4982.608863355485\n",
+ "4985.065088811183\n",
+ "4987.5206520600395\n",
+ "4989.975413162722\n",
+ "4992.429231512756\n",
+ "4994.881969888498\n",
+ "4997.333488530805\n",
+ "4999.783648938101\n",
+ "5002.232313213861\n",
+ "5004.679343662526\n",
+ "5007.1246031765\n",
+ "5009.567954653323\n",
+ "5012.009262486226\n",
+ "5014.448390634834\n",
+ "5016.885203710279\n",
+ "5019.319566869505\n",
+ "5021.751345729953\n",
+ "5024.180406473861\n",
+ "5026.606615691851\n",
+ "5029.029840670423\n",
+ "5031.449949086308\n",
+ "5033.866808931119\n",
+ "5036.28028913263\n",
+ "5038.690259029211\n",
+ "5041.096588525992\n",
+ "5043.499148081735\n",
+ "5045.8978087346495\n",
+ "5048.29244134911\n",
+ "5050.682919836727\n",
+ "5053.069116228869\n",
+ "5055.450904096985\n",
+ "5057.828157495042\n",
+ "5060.200751197473\n",
+ "5062.568560634678\n",
+ "5064.9314619710185\n",
+ "5067.2893318065235\n",
+ "5069.642047514617\n",
+ "5071.989487173419\n",
+ "5074.331529584379\n",
+ "5076.668054193372\n",
+ "5078.9989411981915\n",
+ "5081.324071442128\n",
+ "5083.643326531975\n",
+ "5085.956587840467\n",
+ "5088.263740461256\n",
+ "5090.564667240458\n",
+ "5092.8592527321625\n",
+ "5095.147382281151\n",
+ "5097.428942000905\n",
+ "5099.703818733347\n",
+ "5101.971900102203\n",
+ "5104.233074049701\n",
+ "5106.487230775614\n",
+ "5108.734260026413\n",
+ "5110.974052737332\n",
+ "5113.206500659999\n",
+ "5115.431496260011\n",
+ "5117.648932935656\n",
+ "5119.858704908045\n",
+ "5122.060707142509\n",
+ "5124.254834768268\n",
+ "5126.440986125498\n",
+ "5128.619058367036\n",
+ "5130.7889500877545\n",
+ "5132.950560644679\n",
+ "5135.103790546898\n",
+ "5137.248540620908\n",
+ "5139.384713079592\n",
+ "5141.512210289194\n",
+ "5143.630938505\n",
+ "5145.740801312606\n",
+ "5147.841704669194\n",
+ "5149.93355522662\n",
+ "5152.0162606166405\n",
+ "5154.089729901005\n",
+ "5156.153873079877\n",
+ "5158.208600797815\n",
+ "5160.253824167214\n",
+ "5162.289456479779\n",
+ "5164.315410705568\n",
+ "5166.331601385065\n",
+ "5168.337945725406\n",
+ "5170.3343643272165\n",
+ "5172.320780320733\n",
+ "5174.297117674716\n",
+ "5176.263301897603\n",
+ "5178.219258496109\n",
+ "5180.164913170495\n",
+ "5182.1001935325\n",
+ "5184.025028197019\n",
+ "5185.939345802246\n",
+ "5187.843075437999\n",
+ "5189.736147142944\n",
+ "5191.618493780821\n",
+ "5193.490047423495\n",
+ "5195.350740815218\n",
+ "5197.200506868418\n",
+ "5199.039282915595\n",
+ "5200.867003436798\n",
+ "5202.683604297149\n",
+ "5204.489025064233\n",
+ "5206.283203811936\n",
+ "5208.066079822126\n",
+ "5209.837592687485\n",
+ "5211.597685789247\n",
+ "5213.346301080345\n",
+ "5215.08338126383\n",
+ "5216.808871079066\n",
+ "5218.522716889314\n",
+ "5220.224863675019\n",
+ "5221.915261096767\n",
+ "5223.593856843484\n",
+ "5225.260599294837\n",
+ "5226.915441179983\n",
+ "5228.558334069581\n",
+ "5230.189229122998\n",
+ "5231.808082077686\n",
+ "5233.414848445637\n",
+ "5235.009482125017\n",
+ "5236.591943481118\n",
+ "5238.16218863373\n",
+ "5239.720179110896\n",
+ "5241.265875394924\n",
+ "5242.799238219659\n",
+ "5244.320232923923\n",
+ "5245.828822536069\n",
+ "5247.324972650913\n",
+ "5248.808651907512\n",
+ "5250.279826249811\n",
+ "5251.738466660807\n",
+ "5253.184543513592\n",
+ "5254.618027793273\n",
+ "5256.0388937179705\n",
+ "5257.44711598013\n",
+ "5258.842670189739\n",
+ "5260.225532538455\n",
+ "5261.595683518345\n",
+ "5262.95310043883\n",
+ "5264.29776718788\n",
+ "5265.629663604481\n",
+ "5266.948775978352\n",
+ "5268.255087843607\n",
+ "5269.548586807043\n",
+ "5270.829260741628\n",
+ "5272.097098772856\n",
+ "5273.352091609701\n",
+ "5274.594233447149\n",
+ "5275.823515143809\n",
+ "5277.039935033605\n",
+ "5278.243486655973\n",
+ "5279.434171310823\n",
+ "5280.611985510781\n",
+ "5281.776933314408\n",
+ "5282.929014574523\n",
+ "5284.068236037032\n",
+ "5285.194600825005\n",
+ "5286.308118194861\n",
+ "5287.408795184831\n",
+ "5288.49664293844\n",
+ "5289.57167294342\n",
+ "5290.633897905047\n",
+ "5291.6833336452155\n",
+ "5292.7199962506675\n",
+ "5293.743902761032\n",
+ "5294.7550747679425\n",
+ "5295.753530570492\n",
+ "5296.739295398611\n",
+ "5297.712391883017\n",
+ "5298.672846286261\n",
+ "5299.620687069518\n",
+ "5300.5559411389995\n",
+ "5301.478641408389\n",
+ "5302.388818871911\n",
+ "5303.286506923248\n",
+ "5304.171742998974\n",
+ "5305.044561971733\n",
+ "5305.905003360184\n",
+ "5306.753108631542\n",
+ "5307.588917522662\n",
+ "5308.412474899988\n",
+ "5309.223826460103\n",
+ "5310.023017153102\n",
+ "5310.810096396804\n",
+ "5311.585114416306\n",
+ "5312.348123804914\n",
+ "5313.099176029714\n",
+ "5313.838326887453\n",
+ "5314.565634004208\n",
+ "5315.28115392388\n",
+ "5315.984946272758\n",
+ "5316.677073529042\n",
+ "5317.357598044781\n"
+ ]
+ }
+ ],
"source": [
- "itsatest = sim.Rocket(initialConditions, engines, burntime)\n",
- "altitude, velocity, acceleration, mass, time, thrust, drag, Q, rho, temperature = itsatest.run()"
+ "itsatest = sim.Rocket(initialConditions, engines,burntime,timestep)\n",
+ "altitude, velocity, acceleration, mass, time, thrust, drag, Q, rho, temperature, mach = itsatest.run()"
]
},
{
"cell_type": "code",
- "execution_count": 66,
- "metadata": {
- "scrolled": false
- },
+ "execution_count": 14,
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Apogee = 701507 ft\n",
- "Apogee = 213 km\n",
- "Max Velocity = 5899.80 ft/s\n",
- "Max Acceleration = 6.27 gees\n",
- "Max Q = 12.94 psi\n",
- "Max Drag = 805.75 lbf\n"
+ "Apogee = 288742 ft\n",
+ "Apogee = 88 km\n",
+ "Max Velocity = 3810.85 ft/s\n",
+ "Max Acceleration = 4.93 gees\n",
+ "Max Q = 13.50 psi\n",
+ "Max Drag = 1004.15 lbf\n"
]
},
{
"data": {
- "image/png": "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kXFTmBQREREREZFxU5gUERERERGRcVOYFBERERERkXFTmBQREREREZFxU5gUERERERGRcVOYFBERERERkXFTmBQREREREZFxU5gUERERERGRcVOYFBERERERkXFTmBQREREREZFxU5gUERERERGRcVOYFBERERERkXFTmBQREREREZFxU5gUERERERGRcctIdQHpprS01GtqalJdxgkOHz5MYWFhqsuQGU7zUNKB5qGkC81FSQeah5IM69atO+juZae7TmFylJqaGtauXZvqMk6wevVq6uvrU12GzHCah5IONA8lXWguSjrQPJRkMLNdZ3KdtrmKiIiIiIjIuClMioiIiIiIyLgpTIqIiIiIiMi4KUyKiIiIiIjIuKkBj8g4DQw6/72piZxImCWV+VTkZ2FmqS5LRERERGRSKUyKjIO787kHXuauNXsSYwU5mSyuzGNxRR6LK/NYUpnHoso88rMzU1ipiIiIiEhyKUyKnCF350sPb+GuNXv4H29ZyFsWlbGtuZ0tTe1sbTrK/esb6ejpT1w/uyA7HjIr81lcGWNxRT4Ly3PJygin8FOIiIiIiEwMhUmRM/TVR7fxH7/ayR9cMY+/WrkYM+OKhSWJ992dxsPH2NrUztbm9vhjUzu/aThI34ADEA4Z80tzWVQRo648j0UVeSyqiFFTmktmWLcwi4iIiMjUoTApcga+/th2vvlEAx+4tJq/veGcMe+RNDOqiqJUFUW5dmlFYrxvYJBXD3YmwuXW5nZe2XeUhzc24fGMSWY4HjLrKvJYVB4PmHUVMeaVKGSKiIiISHpSmBQ5jW8/2cDXHtvGey+u4ourziMUGl+zncxwKFiBzOOG5cfHu/sGaGjpYHtLO9uaO9je3M7Le4/w0Mv7R4TMBaXxYDm0illXkce84igZCpkiIiIikkJpGybN7DWgHRgA+t19hZkVAz8BaoDXgPe5e5vFl4m+Drwd6AL+0N1fCH7OzcDngh/7D+5+52R+Dpm63J2vPbadbzy+nXdfOIcv/e754w6Sp5KdGebcOQWcO6dgxPix3njI3NbczraWdhqaO9iw9zA/f2l/4ppIRogFpbkjAuaiijzmFkcJT2CNIiIiIiInk7ZhMnC1ux8c9vrTwOPu/iUz+3Tw+q+A64G64Osy4DvAZUH4/DywAnBgnZk96O5tk/khZOpxd/7hF5v53m9e5f0r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\n",
+ "image/png": "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\n",
"text/plain": [
""
]
@@ -272,25 +681,28 @@
},
{
"cell_type": "code",
- "execution_count": 67,
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Max Q = 12.94 psi\n",
- "Time of max Q = 33 s\n",
- "Altitude at max Q = 32499.26 ft\n",
- "Velocity at max Q = 2140.65 ft/s\n",
- "Air density at max Q = 0.0008753 slug/ft^3\n",
+ "Max Q = 14.93 psi\n",
+ "Time of max Q = 26 s\n",
+ "Altitude at max Q = 34838.16 ft\n",
+ "Velocity at max Q = 2408.34 ft/s\n",
+ "Air density at max Q = 0.0007481 slug/ft^3\n",
+ "Drag at max Q = 1013.02 lbf\n",
+ "\n",
+ "Max velocity = 4366.55 ft/s\n",
+ "Time of max velocity = 40 s\n",
+ "Altitude at max velocity = 78924.72 ft\n",
+ "Q at max velocity = 5.96 psi\n",
+ "Air density at max velocity = 0.0000909 slug/ft^3\n",
"\n",
- "Max velocity = 5899.80 ft/s\n",
- "Time of max velocity = 62 s\n",
- "Altitude at max velocity = 138282.84 ft\n",
- "Q at max velocity = 0.79 psi\n",
- "Air density at max velocity = 0.0000070 slug/ft^3\n",
- "Height at burnout = 127081.84 ft\n"
+ "Height at burnout = 78489.96 ft\n",
+ "Velocity at burnout = 4347.54 ft/s\n"
]
}
],
@@ -298,41 +710,45 @@
"def maxAndTime(list):\n",
" max = 0\n",
" time = 0\n",
- " for i in range(len(Q)):\n",
+ " for i in range(len(list)):\n",
" if list[i] > max:\n",
" max = list[i]\n",
- " time = i\n",
- " return (max,time)\n",
+ " point = i\n",
+ " time = i*timestep\n",
+ " return (max,point,time)\n",
"\n",
- "maxQ, maxQTime = maxAndTime(QPsi)\n",
+ "maxQ, maxQPoint, maxQTime = maxAndTime(QPsi)\n",
"print(\"Max Q = %.2f psi\" % maxQ)\n",
"print(\"Time of max Q = %d s\" % maxQTime)\n",
- "print(\"Altitude at max Q = %.2f ft\" % altitude[maxQTime])\n",
- "print(\"Velocity at max Q = %.2f ft/s\" % velocity[maxQTime])\n",
- "print(\"Air density at max Q = %.7f slug/ft^3\" % rho[maxQTime])\n",
+ "print(\"Altitude at max Q = %.2f ft\" % altitude[maxQPoint])\n",
+ "print(\"Velocity at max Q = %.2f ft/s\" % velocity[maxQPoint])\n",
+ "print(\"Air density at max Q = %.7f slug/ft^3\" % rho[maxQPoint])\n",
+ "print(\"Drag at max Q = %.2f lbf\" % drag[maxQPoint])\n",
"\n",
"print()\n",
"\n",
- "maxV, maxVTime = maxAndTime(velocity[0:len(Q)])\n",
+ "\n",
+ "maxV, maxVPoint, maxVTime = maxAndTime(velocity[0:int(200/timestep)])\n",
"print(\"Max velocity = %.2f ft/s\" % maxV)\n",
"print(\"Time of max velocity = %d s\" % maxVTime)\n",
- "print(\"Altitude at max velocity = %.2f ft\" % altitude[maxVTime])\n",
- "print(\"Q at max velocity = %.2f psi\" % QPsi[maxVTime])\n",
- "print(\"Air density at max velocity = %.7f slug/ft^3\" % rho[maxVTime])\n",
+ "print(\"Altitude at max velocity = %.2f ft\" % altitude[maxVPoint])\n",
+ "print(\"Q at max velocity = %.2f psi\" % QPsi[maxVPoint])\n",
+ "print(\"Air density at max velocity = %.7f slug/ft^3\" % rho[maxVPoint])\n",
+ "\n",
+ "print()\n",
"\n",
- "print(\"Height at burnout = %.2f ft\" % altitude[burntime])"
+ "print(\"Height at burnout = %.2f ft\" % altitude[int(burntime/timestep)])\n",
+ "print(\"Velocity at burnout = %.2f ft/s\" % velocity[int(burntime/timestep)])"
]
},
{
"cell_type": "code",
- "execution_count": 68,
- "metadata": {
- "scrolled": false
- },
+ "execution_count": 8,
+ "metadata": {},
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl4AAAFzCAYAAADv+wfzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd5hcZd3/8fe9m2x6SN+UTW+kt6W3BJBeIyhKU5AAivpYUGxgw/aoyKOCIiIgkNACSBGQskonvZCE9N77bpLNtvv3xy7+EBMIITNndub9ui4udmZ2OZ8vJ5l8cs6Z+4QYI5IkSUq9vKQDSJIk5QqLlyRJUppYvCRJktLE4iVJkpQmFi9JkqQ0sXhJkiSlSYOkA+yLdu3axR49eqR0Gzt27KBZs2Yp3UYmy+X5c3l2yO35c3l2cP5cnj+XZ4fUzz9lypSNMcb2e3qtXhSvHj16MHny5JRuo6SkhNGjR6d0G5ksl+fP5dkht+fP5dnB+XN5/lyeHVI/fwhh2d5e81SjJElSmli8JEmS0sTiJUmSlCYWL0mSpDSxeEmSJKWJxUuSJClNLF6SJElpYvGSJElKE4uXJElSmli8JEmS0sTiJUmSlCYWL0mSlPWqayKPTV9FjDHRHPXiJtmSJEn7a2dFFV8aP53n5q6jTbOCRLN4xEuSJGWt9aXlXHDb67wwbx0/OGsQx/Rtn2gej3hJkqSstGBdKZ/5yyQ276jgtouLOXFgYdKRLF6SJCn7vLpoI1f+dQqNG+bzwJVHMKTooKQjARYvSZKUZR6espLrJs6kZ7tm3PGZQyhq3TTpSP9m8ZIkSVkhxsjNzy/gN88t4Mjebbn1olEc1KRh0rH+g8VLkiTVexVVNVw3cSYTp67ivFFF/OTcIRQ0yLzPEFq8JElSvbZtVyVX/XUKry3exFc/1o8vHt+HEELSsfbI4iVJkuqtFZt3ctmdk1i6aQc3fXIY544oSjrS+7J4SZKkemnmyq1cdudkKqqqufuywziid9ukI30gi5ckSap3/jFnHV8aP422zQuYMO4w+nRokXSkfWLxkiRJ9UaMkT+/vIQbn5rL0KJW3H5JMe1bNEo61j6zeEmSpHqhsrqG6x+bzfg3V3DakI786vzhNCnITzrWh2LxkiRJGW/rzgo+f+9UXl20iWvG9OGrH+tHXl5mfnLx/Vi8JElSRluycQeX3zmJlVt28etPDGPsyMz+5OL7sXhJkqSM9dqiTVx1zxTy8wL3XXEYxT3aJB3pI7F4SZKkjDThzeV899HZ9GzXjD9fegjd2mbOPRf3l8VLkiRllOqayM+fnsdt/1rMsf3a87tPj6Bl48y65+L+snhJkqSMsWN3FV+eMJ3n5q7j0iO6870zBtIgP/Puubi/LF6SJCkjrN66i8vvmszba7fzg7MGcemRPZKOdMBZvCRJUuKmr9jKFXdPpryimjs+cwij+3dIOlJKpOzYXQjhjhDC+hDC7Hc91yaE8I8QwoK6f7dO1fYlSVL9MHHqSj7xx9do3DCPhz9/ZNaWLkhh8QLuBE55z3PXAc/HGPsCz9c9liRJOai6JvLTp+by1QdmMLJbKx77wtH0K6wf91zcXyk71Rhj/FcIocd7nj4bGF339V1ACfDNVGWQJEmZaduuSr48YRolb2/g4sO7c/2ZA2mYRRfR702IMabuP15bvJ6IMQ6ue7w1xtjqXa9viTHu8XRjCGEcMA6gsLBw1IQJE1KWE6CsrIzmzZundBuZLJfnz+XZIbfnz+XZwflzef6kZ1+7o4bfTC1nw87IRQMKGNMtvUtFpHr+MWPGTIkxFu/ptYy9uD7GeBtwG0BxcXEcPXp0SrdXUlJCqreRyXJ5/lyeHXJ7/lyeHZw/l+dPcvZ/zt/AjfdNpWF+Q+67YiSH9Wqb9gxJzp/u4rUuhNApxrgmhNAJWJ/m7UuSpATEGPnzy0v4yVNz6VfYgj9dUkzXNvV/JfoPK90nU/8GXFr39aXAY2neviRJSrPyymq+/uBMfvzkXE4e1JGHrz4yJ0sXpPCIVwhhPLUX0rcLIawEbgB+BjwQQrgcWA6cn6rtS5Kk5K3fXs6V90xh2vKt/M+JffnS8X3JywtJx0pMKj/V+Km9vHRCqrYpSZIyx8yVWxl39xS27ark1gtHcuqQTklHSlzGXlwvSZLqr8emr+IbD82kXfNGPHz1kQzs3DLpSBnB4iVJkg6YGCO/fWEhv/7HfA7t2YZbLxxJ2+aNko6VMSxekiTpgKiqruG7j85mwqQVjB3ZhZ+NHUpBg+xfFPXDsHhJkqSPbMfuKq65byovvr2Ba8b04Wsn9SOE3L2Ifm8sXpIk6SPZWLaby+6cxOxV27jx3MFceFj3pCNlLIuXJEnab0s37uDSv7zJuu3l3HZxMScOLEw6UkazeEmSpP0yfcVWLrtzEjFGxl9xOCO67fH2y3oXi5ckSfrQXpi3ji/cO412LQq467OH0qt9bt5w/MOyeEmSpA/l/knL+fYjsxnQqQV3fOYQOrRonHSkesPiJUmS9kmMkf97fiE3PTefY/q249aLRtG8kVXiw/D/liRJ+kBV1TV877G3GP/mctfo+ggsXpIk6X3tqqjmi+On8tzc9XxhTG++flJ/1+jaTxYvSZK0V5t3VHD5XZOYvmIrPzx7EJcc0SPpSPWaxUuSJO3Rsk07+OxfJrFy6y5uvXAUpwzumHSkes/iJUmS/suUZVu44u7J1MTIvZ87jEN6tEk6UlaweEmSpP/w5Mw1fOWB6XQ6qDF/+cwhrtF1AFm8JEkSULtcxB//tZif/X0eo7q35k+XFNOmWUHSsbKKxUuSJFFZXcP1dctFnDG0E788fxiNG+YnHSvrWLwkScpxpeWVfP7eqby0YCNfGNObr32sP3l5LheRChYvSZJy2Oqtu7jszkksWF/Gzz8+hE8e0i3pSFnN4iVJUo6atXIbl981iV0V1dz52UM4pm/7pCNlPYuXJEk56Lk56/ji+Gm0aVbAX68+jP4dWyQdKSdYvCRJyiExRp5ZWsn9z0xmUOeD+POlxXRo2TjpWDnD4iVJUo6oqKrh+sdmM2FeBScNLOQ3FwynaYFVIJ38vy1JUg7YvKOCq++ZwhtLNnNGr4b830Wj/ORiAixekiRluQXrSrn8rsms3V7OTZ8cRuttCy1dCclLOoAkSUqdF99ez9hbXmVnRRXjrzicc0cUJR0pp3nES5KkLBRj5I5XlnLjk3Po37Elt19aTJdWTZKOlfMsXpIkZZmKqhpu+Ntsxr+5gpMGFnLTJ4fTrJF/5GcC94IkSVlky44Krqq7iP7zo3vz9ZO8/U8msXhJkpQlFq6vvYh+zdZyfv2JYYwd6fVcmcbiJUlSFnj2rbV89YEZNG6Yx/hxhzOqe+ukI2kPLF6SJNVjNTWR376wkJuem8/QooP4w0Wj6OxF9BnL4iVJUj1VtruKr94/nWfnrGPsiC78ZOwQGjfMTzqW3ofFS5Kkemjpxh1ccfdkFm/cwfVnDOSzR/UgBC+iz3QWL0mS6pmSt9fzpfHTyMsL3H3ZoRzVp13SkbSPLF6SJNUTMUb++K/F/OLpefQrbMGfLimma5umScfSh2DxkiSpHthVUc03Hp7J4zNWc/rQTvzveUNpWuAf4/WNe0ySpAy3cstOxt09hblrt/PNUw7mquN6eT1XPWXxkiQpg/1z/ga+PGEa1TWROz5zCGP6d0g6kj4Ci5ckSRmopiby+xcX8uvn5tO/sAW3XjSKnu2aJR1LH5HFS5KkDLNtVyVfvX86z89bz7kjunDjuYO9nitLuBclScogc1Zv5+p7p7B66y5+ePYgLj68u9dzZRGLlyRJGWLi1JV8+5FZHNSkIRPGHeH9FrOQxUuSpITtrqrmR0/M4Z7Xl3N4rzb89lMjad+iUdKxlAKJFK8QwleAzwERmAV8NsZYnkQWSZKStGbbLq6+ZyrTV2zlyuN6ce1J/WmQn5d0LKVI2otXCKEL8CVgYIxxVwjhAeAC4M50Z5EkKUmvLtzIF8dPY3dVDbdeOJJTh3RKOpJSLKlTjQ2AJiGESqApsDqhHJIkpV113VIRv3luPr3bN+cPF4+id/vmScdSGqS9eMUYV4UQfgksB3YBz8YYn013DkmSkrCxbDdfuX86Ly3YyNgRXfjROYNp1shLrnNFiDGmd4MhtAYeBj4JbAUeBB6KMd7znu8bB4wDKCwsHDVhwoSU5iorK6N589z920Yuz5/Ls0Nuz5/Ls4PzJzH/vM3V/GHGbnZURi4aUMCxRQ0SWSrCfZ/a+ceMGTMlxli8p9eSqNgnAktijBsAQggTgSOB/yheMcbbgNsAiouL4+jRo1MaqqSkhFRvI5Pl8vy5PDvk9vy5PDs4fzrnr6mJ3PrPRfxq0tv0aNuM8ReOZECnlmnZ9p6475ObP4nitRw4PITQlNpTjScAkxPIIUlSym3eUcFX7p/OP+dv4Mxhnfnp2CE099RizkriGq83QggPAVOBKmAadUe2JEnKJpOXbuaa+6axeUcFPz5nMBce1s1V6HNcIpU7xngDcEMS25YkKdVqaiK3vbSY/33mbYpaN2Hi549kcJeDko6lDOCxTkmSDqDNOyr4+oMzeGHeek4b0pGffXwoLRs3TDqWMoTFS5KkA+TVRRv5yv3T2bKjku+fOZBLj+zhqUX9B4uXJEkfUVV1DTc/v4DfvbiQnm2b8edLD/HUovbI4iVJ0kewcstOvjxhOlOWbeG8UUX84KxBLoiqvfJXhiRJ++nvs9bwzYdnUhPh5guGc/bwLklHUoazeEmS9CHtqqjmh0/MYfybyxlWdBD/96kRdG/bLOlYqgcsXpIkfQhvry3li+OnMn9dGVce24uvndSfggZ5ScdSPWHxkiRpH8QYufeN5fzoiTm0aNyAuy87lGP7tU86luoZi5ckSR9gY9lurnt4Js/NXc8xfdvx608Mp32LRknHUj1k8ZIk6X28OG891z40g+27qvju6QO47Kie5OW5Npf2j8VLkqQ92FVRzU+emstfX19G/8IW3PO5wzi4Y8ukY6mes3hJkvQes1dt48sTprFoww4uP7on157cn8YN85OOpSxg8ZIkqU51TeSP/1rEr5+dT9vmBdxz+WEc3bdd0rGURSxekiRRuwL9V++fwZtLN3PakI785NwhtGpakHQsZRmLlyQpp8UYeWz6ar736Gwi8KvzhzF2ZBdvbq2UsHhJknLWtp2VfPex2Tw+YzXF3Vtz0yeH07VN06RjKYtZvCRJOWnWhiqu+82/2Fi2m6+f1I+rjutNg3xXoFdqWbwkSTmlbHcVNz45l/FTdtOnQ3Nuu2QUQ4taJR1LOcLiJUnKGa8v3sTXH5zBqq27OLVnQ2667GiXiVBaWbwkSVmvvLKaXzz9Nne8soTubZvy4JVHULZ0pqVLaWfxkiRltWnLt/C1B2eweMMOLjmiO9edejBNCxpQsjTpZMpFFi9JUlbaXVXNzc8t4A//XETHlo2593OHcVQfF0NVsixekqSs89bqbXztgRnMW1vKJ4qL+O4ZA2nZuGHSsSSLlyQpe1RW1/CHkkXc/PwCWjcr4I7PFHP8wYVJx5L+zeIlScoKb63exrUPzmTOmu2cOawzPzxrEK2becsfZRaLlySpXttdVc1vn1/IH/65iNbNCvjDRaM4ZXDHpGNJe2TxkiTVW1OXb+EbD81k4foyzhtVxPdOH8hBTb2WS5nL4iVJqnd2VVTzq2ff5s+vLKFTy8bc+dlDGN2/Q9KxpA9k8ZIk1SuvLdrEdRNnsmzTTi46vBvfPOVgWviJRdUTFi9JUr1QWl7Jz/4+j3vfWE73tk0Zf8XhHNG7bdKxpA/F4iVJynglb6/n2xNnsWZ7OZ87uidfO6k/TQq83Y/qH4uXJCljbSrbzY1PzmXitFX06dCch68+kpHdWicdS9pvFi9JUsaJMTJx6ip+/OQcSsuruGZMH754Qh8aNfAol+o3i5ckKaMs3biD7zw6i1cWbmJkt1b8dOxQ+ndskXQs6YCweEmSMkJldQ1/emkxNz+3gIL8PH50zmAuPLQbeXkh6WjSAWPxkiQlbtryLXxr4izmrS3llEEd+f5Zg+h4UOOkY0kHnMVLkpSY0vJKfvnM29z9+jIKWzTmtotHcdIgb/ej7GXxkiQl4tm31nL9Y2+xrrScS4/owddO6udCqMp6Fi9JUlqtLy3nhsfe4u+z13JwxxbcetFIRrhEhHKExUuSlBbvLBHxwyfmsKuymmtP7s+4Y3vRMD8v6WhS2li8JEkpV1FVw3UPz2TitFUUd2/Nz88bSu/2zZOOJaWdxUuSlFJlu6u4+p4pvLRgI185sR9fPL6PS0QoZ1m8JEkps760nMvunMTcNaX84uND+cQhXZOOJCXK4iVJSonFG8q49C9vsrG0gj9dMorjDy5MOpKUOIuXJOmAm7Z8C5ffNRmA8eMOZ3jXVgknkjKDxUuSdEA9P3cdX7hvKh1aNObuyw6lR7tmSUeSMkYin+ENIbQKITwUQpgXQpgbQjgiiRySpANr/JvLueLuyfQrbMHDVx9p6ZLeI6kjXjcDT8cYzwshFABNE8ohSToAYoz85rkF3Pz8Ao7r155bLhxJs0aeVJHeK+2/K0IILYFjgc8AxBgrgIp055AkHRgVVTV8+5FZPDRlJeeNKuKnY4e4KKq0FyHGmN4NhjAcuA2YAwwDpgBfjjHueM/3jQPGARQWFo6aMGFCSnOVlZXRvHnuLuaXy/Pn8uyQ2/Pn8uxwYOYvq4j8dlo5b2+p4ezeDTmnT0NCqB9rdOXy/s/l2SH1848ZM2ZKjLF4T68lUbyKgdeBo2KMb4QQbga2xxi/t7efKS4ujpMnT05prpKSEkaPHp3SbWSyXJ4/l2eH3J4/l2eHjz7/ko07uOzOSazasotfnDeUc0Z0OXDh0iCX938uzw6pnz+EsNfilcQJ+JXAyhjjG3WPHwKuSyCHJGk/vbF4E1feM4W8ELj3isM4pEebpCNJ9ULaT8LHGNcCK0II/eueOoHa046SpHrg4SkruejPb9CmWQGPfP5IS5f0IST1kZMvAvfWfaJxMfDZhHJIkvZRTU3kpufm89sXFnJk77bceuEoDmraMOlYUr2yT8UrhNAPuBbo/u6fiTEevz8bjTFOB/Z47lOSlHl2VVRz7UMzeGLmGj5Z3JUfnzvYTy5K+2Ffj3g9CPwB+BNQnbo4kqRMs3rrLsb9dTJvrd7ON085mKuO61VvPrkoZZp9LV5VMcZbU5pEkpRxJi/dzFX3TKG8sobbLynmhAHe6Fr6KN63eIUQ3rli8vEQwueBR4Dd77weY9ycwmySpARNeHM533tsNl1aNWHCuGL6dGiRdCSp3vugI15TgAi8c0z52ne9FoFeqQglSUpOZXUNP3piDne/toxj+rbjd58a6UX00gHyvsUrxtgzXUEkScnbvKOCz987hdcXb2bcsb34xsn9aeBF9NIBs0+/m0IIXwghtHrX49Z1px4lSVli7prtnPW7l5m6fCu//sQwvn3aAEuXdIDt6++oK2KMW995EGPcAlyRmkiSpHR7ZNpKzr3lFSqra3jgyiMYO7Io6UhSVtrXTzXmhRBCrLuxYwghHyhIXSxJUjpUVNVw45NzuOu1ZRzasw2/+/QIOrRonHQsKWvta/F6BngghPAHai+qvwp4OmWpJEkpt6W8hgtue42py7dyxTE9+cYpB7soqpRi+1q8vglcCVxN7SccnwVuT1UoSVJqvbZoEze8uosqKvj9p0dy+tBOSUeScsI+Fa8YYw1wa90/kqR6KsbI7S8t4WdPz6NDk8BfrzzK9bmkNNrXezX2BX4KDAT+ffI/xug6XpJUT5SWV/LNh2fy1Ky1nDq4I2d13G7pktJsX0/m/4Xao11VwBjgbuCvqQolSTqwZq/axpm/fZln3lrHt087mFsuHEmTBt5vUUq3fS1eTWKMzwMhxrgsxvh94PjUxZIkHQgxRu5+bSljb3mV8soaJow7nHHH9vYm11JC9vXi+vIQQh6wIIRwDbAK6JC6WJKkj2p7eSXX1Z1aHNO/Pb/6xHDaNHMlIClJ+1q8/gdoCnwJ+BG1pxsvSVUoSdJHM2PFVq4ZP5U1W8v59mkH87mje5GX51EuKWn7Wrwitdd0dQfeuVPqn4ChqQglSdo/MUb+8spSfvr3uXRo0Zj7rzyCUd1bJx1LUp19LV73AtcCs4Ca1MWRJO2vbTsrufahGTw7Zx0nDijkl+cPpVVTTy1KmWRfi9eGGOPfUppEkrTfJi/dzJcnTGd9aTnfPX0Alx/d0wvopQy0r8XrhhDC7cDzwO53nowxTkxJKknSPqmqruH/XljI715YQFHrpjx41ZEM79oq6ViS9mJfi9dngYOpvb7rnVONEbB4SVJClm3awf/cP51py7fy8ZFFfP+sgbRo3PCDf1BSYva1eA2LMQ5JaRJJ0j6JMTJx6iquf2w2eXmB335qBGcO65x0LEn7YF+L1+shhIExxjkpTSNJel/bdlbynUdn8cTMNRzasw03fXI4XVo1STqWpH20r8XraODSEMISaq/xCkCMMbqchCSlyeuLN/HV+6ezvnQ3157cn6uO602+a3NJ9cq+Fq9TUppCkrRXFVU13Pz8fG4pWUT3Nk15+OojGeYF9FK9tE/FK8a4LNVBJEn/be6a7Xz1gRnMXbOdTxQXccOZg2jWaF//ziwp0/i7V5IyUFV1Dbe9tJib/jGfg5o05LaLR3HSoI5Jx5L0EVm8JCnDLN5QxtcenMG05Vs5bUhHfnzOEG9uLWUJi5ckZYiamshdry3l50/Po1GDfG6+YDhnDevsCvRSFrF4SVIGWLllJ9c+OJPXFm9idP/2/PzjQyls2TjpWJIOMIuXJCUoxsgDk1fwoyfmEmPkZ2OH8MlDunqUS8pSFi9JSsiKzTv59iOzeGnBRg7r2YZfnj+Mrm2aJh1LUgpZvCQpzWpqIne/tpRfPPM2AfjR2YO48LDu5LkYqpT1LF6SlEaLNpRx3cMzmbR0C8f2a89Pzh1MUWuPckm5wuIlSWlQVV3Dn15awk3Pzadxgzx+ef4wPj6yi9dySTnG4iVJKTZ3zXa+8dBMZq3axsmDCvnR2YPp4CcWpZxk8ZKkFCmvrOaWFxdyS8kiWjVtyO8/PZLThnT0KJeUwyxekpQCry7cyHcenc2SjTs4d0QXrj9jIK1dfV7KeRYvSTqANpXt5san5jJx6iq6t23KXy8/lGP6tk86lqQMYfGSpAMgxsiDU1byk6fmsmN3FdeM6cM1x/ehccP8pKNJyiAWL0n6iBauL+Pbj8zizSWbKe7emp+MHUK/whZJx5KUgSxekrSfyiuruaVkEbeWLKRJw3x+NnYInyju6kKokvbK4iVJ++HdF8+fM7wz3zl9IO1bNEo6lqQMZ/GSpA9h7bZybnxqLo/PWO3F85I+NIuXJO2Dyuoa/vLKEm5+bgGVNZEvn9CXq0f39uJ5SR9KYsUrhJAPTAZWxRjPSCqHJH2QVxdu5Pq/vcXC9WWcOKAD158xiG5tvb+ipA8vySNeXwbmAi0TzCBJe7Vm2y5+/ORcnpy5hm5tmvLnS4s5YUBh0rEk1WOJFK8QQhFwOnAj8NUkMkjS3lRU1XDHK0v4v+cXUF0T+cqJ/bjyuF6eVpT0kSV1xOs3wDcAF7qRlFFeXrCRG/42m0UbdvCxgYVcf8ZAurbxtKKkAyPEGNO7wRDOAE6LMX4+hDAa+PqervEKIYwDxgEUFhaOmjBhQkpzlZWV0bx585RuI5Pl8vy5PDvk9vzvnn39zhomzKtg6vpqOjQNXDiggGHts/vzR7m87yG358/l2SH1848ZM2ZKjLF4T68lUbx+ClwMVAGNqb3Ga2KM8aK9/UxxcXGcPHlySnOVlJQwevTolG4jk+Xy/Lk8O+T2/CUlJYw6/Ch+98JC/vLKUhrkB74wpg+XH90zJ04r5vK+h9yeP5dnh9TPH0LYa/FK+1/nYozfAr4F8K4jXnstXZKUCtU1kX+uqOTrL5ewsayC80YV8Y2T+9OhZeOko0nKYtl9HF2S9uCNxZv44RNzeGt1BcXdW3PHZw5haFGrpGNJygGJFq8YYwlQkmQGSbljxead/PTvc3lq1lo6H9SYq4Y14psXHEEI3ltRUnp4xEtS1ivbXcWtJQv500tLyA+Br5zYj3HH9uKNV1+ydElKK4uXpKxVVV3DhEkr+M1z89lYVsE5wzvzzVMPptNBTZKOJilHWbwkZZ0YI/+Ys46fPT2PxRt2cGiPNtx+6QCGd/U6LknJsnhJyirTV2zlJ0/N5c0lm+nVvhm3XTyKjw0s9JSipIxg8ZKUFZZv2skvnpnHEzPX0K55AT86ZzAXHNKVhvl5SUeTpH+zeEmq17burOC3Lyzk7teWkp8X+NLxfRh3XG+aN/LtTVLm8Z1JUr1UXlnN3a8t5XcvLKRsdxXnj+rKV0/qR6ELoErKYBYvSfVKdU1k4tSV/Oa5BazauovR/dtz3akHc3DHlklHk6QPZPGSVC/EGHnmrbX88tn5LFxfxtCig/jFeUM5qk+7pKNJ0j6zeEnKeC8v2Mj/PjOPGSu30adDc/5w0UhOHtTRTypKqncsXpIy1vQVW/nF0/N4ddEmurRqwi/OG8rYEV1o4CcVJdVTFi9JGWf+ulJ++czbPDtnHW2bFXD9GQO58PBuNGqQn3Q0SfpILF6SMsaKzTv5zXMLeGTaSpoWNOArJ/bj8mN6ujSEpKzhu5mkxK3ZtotbXlzEhEnLCSFw+dE9uXp0H9o0K0g6miQdUBYvSYlZv72cW0oWcd+by6mpiZxf3JUvndDHm1hLyloWL0lpt6F0N3/45yLueX0ZVTWR80YWcc3xfejapmnS0SQppSxektJmU9lubvvXYu56bSkVVTWMHVnEF4/vQ/e2zZKOJklpYfGSlHJbdlRw20uLuevVpZRXVnP28C588fg+9GrfPOlokpRWFi9JKbNtZyW3v7yYv7yylB0VVZw5tDNfOqEvfTpYuCTlJouXpANu285K7nhlCXe8vITS3VWcPqQTXz6xL/0KWyQdTZISZfGSdMBsKtvNn19ewt2vLaNsdxUnDSzkKx/rx4BO3sBaksDiJekAWL+9nD+9tJh7Xl9OeVU1pysw918AABSnSURBVA3uxDXH97FwSdJ7WLwk7bfVW3fxx38uYvykFVRV13D28C58YUxv+nTwlKIk7YnFS9KHtmLzTm4pWcRDU1YQI4wd2YXPj+5Dj3YuCyFJ78fiJWmfLd5Qxu9fXMSj01eRHwKfKO7KVcf1duFTSdpHFi9JH+jttaX8/sWFPDFzNQ3z87jkiO5ceWxvOh7UOOloklSvWLwk7dWUZZu5tWQRz81dT9OCfK44phefO6YX7Vs0SjqaJNVLFi9J/yHGSMnbG7i1ZBFvLt1Mq6YN+Z8T+3LpET1o3awg6XiSVK9ZvCQBUFVdw5Oz1nBrySLmrS2l80GNuf6MgVxwaFeaFvhWIUkHgu+mUo6rqI789bWl/PFfi1m5ZRd9OzTnl+cP46xhnSlokJd0PEnKKhYvKUdt21XJPa8v4w//3ElpxVuM6NaKG84cxAkHdyAvLyQdT5KyksVLyjHrtpdzx8tLuPeN5ZTtrmJou3y+M/YQDu3ZhhAsXJKUShYvKUcsXF/K7S8tYeLUVVTV1HDG0M5ceVwvNsyfxmG92iYdT5JygsVLymIxRl5bvInbX1rCC/PW06hBHucXF3Hlsb3p1rZ20dOS+QmHlKQcYvGSslBldQ1PzVrDn15azOxV22nbrICvnNiPiw7vRtvmrsElSUmxeElZpLS8kvsnreCOl5ewels5vdo346djh3DuiC40bpifdDxJynkWLykLrN66iztfXcr4N5ZTuruKw3q24UfnDGZMfz+hKEmZxOIl1WOzV23j9pcW88TMNUTgtCGduOKYngwtapV0NEnSHli8pHqmpiZSMn89t7+0hFcXbaJZQT6XHtmDzx7Vg6LWTZOOJ0l6HxYvqZ7YsbuKh6as5M5Xl7Jk4w46tmzMt049mAsO7cZBTRomHU+StA8sXlKGW7F5J3e9upT7J6+gtLyK4V1bcfMFwzltSCca5ntLH0mqTyxeUgaKMfLmks3c8coS/jFnHSEEThvSic8e1YOR3VonHU+StJ8sXlIG2V1VzeMz1nDHy0uYs2Y7rZo25KrjenPxEd3pdFCTpONJkj4ii5eUAdaXlnPv68u5941lbCyroG+H5vx07BDOGd6FJgWuvyVJ2cLiJSVo9qpt3PHKEh6fsZrK6sjxB3fgsqN6clSftt6wWpKykMVLSrPK6hqenr2Wu19byqSlW2hakM+Fh3Xn0iN70LNds6TjSZJSKO3FK4TQFbgb6AjUALfFGG9Odw4p3dZtL+e+N5Yz/s3lrC/dTbc2Tfnu6QM4v7iry0FIUo5I4ohXFfC1GOPUEEILYEoI4R8xxjkJZJFSKsbIpKVbuOu1pTwzey3VMXJcv/b8/IgeHNevvbfzkaQck/biFWNcA6yp+7o0hDAX6AJYvJQ1dlZU8ei01dz92lLmrS2lZeMGfObIHlx0eHd6eDpRknJWiDEmt/EQegD/AgbHGLe/57VxwDiAwsLCURMmTEhplrKyMpo3b57SbWSyXJ7/QM6+dkcNLyyv5KVVVeyqgm4t8jihWwMO79yARvmZeXTLfZ+bs4Pz5/L8uTw7pH7+MWPGTIkxFu/ptcSKVwihOfBP4MYY48T3+97i4uI4efLklOYpKSlh9OjRKd1GJsvl+T/q7NU1kRfnrefu15fxr/kbaJBXu9jpJUd0Z1T31hn/6UT3/eikYyTG+XN3/lyeHVI/fwhhr8UrkU81hhAaAg8D935Q6ZIy1ZYdFdw/eQX3vL6MlVt2UdiyEV/9WD8uOLQrHVo0TjqeJCkDJfGpxgD8GZgbY/x1urcvfRQxRqYu38q9byzjyZlr2F1Vw2E92/Dt0wbwsYGF3jtRkvS+kjjidRRwMTArhDC97rlvxxifSiCLtE9Kyyt5dNoq7n1jOfPWltKsIJ/zRhVxyRE96N+xRdLxJEn1RBKfanwZyOyLXqQ6s1dt4943lvHY9NXsrKhmUOeW/OTcIZw1vDPNG7n+sCTpw/FPDuk9dlZU8fiM1dz3xnJmrNxG44Z5nDWsMxce1p2hRQdl/MXykqTMZfGS6ry9tpT73ljGxKmrKN1dRb/C5vzgrEGcM6KLK8tLkg4Ii5dyWnllNa+uruJ3t77K5GVbKMjP4/Shnfj0Yd0orgdLQUiS6heLl3LS4g1l3PfGch6aupKtOyvp2a4B3zltAB8fVUSbZgVJx5MkZSmLl3JGeWU1z85Zx4Q3l/Pqok00yAucPKgjgxpv4apzj/O+iZKklLN4Keu9vbaUCZOW88i0VWzdWUlR6yZce3J/zi8uokOLxpSUlFi6JElpYfFSVtqxu4onZq5mwqQVTFu+lYb5gZMGdeRTh3TjyN5tLVqSpERYvJQ1YoxMX7GV+yet4PEZq9lRUU2fDs357ukDGDvSa7ckScmzeKne27qzgkemreL+SSuYt7aUJg3zOWNoJy44tCsju/nJRElS5rB4qV6qqYm8vngTEyat4Om31lJRVcOwooP4yblDOHNYJ1o0dt0tSVLmsXipXlm/vZwHp6zkgckrWLZpJy0bN+DTh3bjE8VdGdi5ZdLxJEl6XxYvZbzK6hpemLeeByev5MW311NdEzm8Vxu+cmI/ThnckcYN85OOKEnSPrF4KWPNW7udByev5NFpq9i0o4L2LRpxxTG9+OQhXenZrlnS8SRJ+tAsXsooW3dW8LcZq3lw8kpmrdpGw/zAiQMKOb+4iGP7tqdBfl7SESVJ2m8WLyWuuiby0oINPDhlJf94ax0V1TUM7NSSG84cyNnDu7gMhCQpa1i8lJjFG8p4aMpKJk5dxdrt5bRu2pBPH9aN84uLGNT5oKTjSZJ0wFm8lFal5ZU8OXMND01ZyeRlW8gLMLp/B244cyDHD+hAowZeKC9Jyl4WL6VcTU3k9SWbeGjySv4+ey27Kqvp3b4Z1516MGNHdKFDy8ZJR5QkKS0sXkqZ5Zt2MnHaSh6eupIVm3fRolEDzhnRhfOLixjRtZUrykuSco7FSwfUtl2VPDVrDROnrmTS0i2EAEf2bsvXPtafkwd1pEmBpxIlSbnL4qWPrLK6hpcWbODhqav4x5x1VFTV0Lt9M649uT/njOhCl1ZNko4oSVJGsHhpv8QYeWv1dh6eupK/TV/Nph0VtZ9KPLQb547owtCigzyVKEnSe1i89KGs2baLR6et5pFpK5m/royC/DxOGNCBsSOLOK5fewoauMCpJEl7Y/HSB9qxu4pn3lrLxKmreGXRRmKEUd1b8+NzBnPG0E60auoCp5Ik7QuLl/aouiby2qJNTJy2kqdnr2VnRTVFrZvwxeP7cu6ILt4rUZKk/WDx0n+Yv66UiVNX8ei02tXkWzRqwFnDOjN2ZBHF3VuTl+d1W5Ik7S+Ll1i7rZy/L6nkf2e+xFurt5OfFziuX3u+e8YAThxQSOOGLgEhSdKBYPHKUdt2VfL07DU8Om01ry/ZRIwwrKgJ3ztjIGcN60z7Fo2SjihJUtaxeOWQ8spqXpy3nkenr+LFeRuoqK6hR9umfOn4vnSqWMkFpx+ddERJkrKaxSvLVddE3li8iUenr+Lvs9dSWl5Fu+YFfPqwbpwzogvD6tbbKilZnXRUSZKynsUrC72zuOmj01bx+MzVrNu+m2YF+Zw8uCPnDO/Ckb3b0iDf9bYkSUo3i1cWWb5pJ49NX8Wj01exaMMOGuYHjuvXge+e3pkTBxR6n0RJkhJm8arnNpXt5omZa3hs+iqmLt8KwKE92nDZ0T05bXAnWjdzcVNJkjKFxase2l5eyT/eWsfjM1fz0oKNVNdEDu7Ygm+ecjBnDutEUeumSUeUJEl7YPGqJ3ZVVPP8vHU8PmM1L769gYqqGrq0asIVx/TinBGdObhjy6QjSpKkD2DxymC7q6r51/yNPD5jNc/NXcfOimo6tGjEhYd148xhnRnRtRUhuJK8JEn1hcUrw1RV1/Dqok08PmM1T79Vu/xD66YNOWdEF84c2plDe7Yh39v2SJJUL1m8MkBNTWTS0s08PnM1T81ay+YdFbRo1ICTBnXkzGGdOKpPOxq6/IMkSfWexSshMUZmrNzG4zNW80TdWluNG+Zx4oBCzhzWmeP6tfceiZIkZRmLVxrFGJm3tpTHZ6zm8ZmrWbF5FwX5eRzXvz1nDuvMCQd3oFkjd4kkSdnKP+XTYOH6Up6cuZbHZ65m4foy8vMCR/Vpx5eO78tJgzpyUJOGSUeUJElpYPFKkXfK1lOz1vD2ulJCqF3Y9DPnDObUwR1p27xR0hElSVKaWbwOoHfK1pOzVjN/XRkhQHH31nz/zIGcOqQThS0bJx1RkiQlyOL1ES1YV8qTs9bw1Kw1/y5bh3RvY9mSJEn/xeK1HyxbkiRpf1i89tE7ZevJmWtYsP7/l60fnDWIUwZ3tGxJkqQPlEjxCiGcAtwM5AO3xxh/lkSODzJ/XSlPzqw9svXvstXDsiVJkvZP2otXCCEf+D3wMWAlMCmE8LcY45x0Z9mT9ytbpw7uSAfLliRJ2k9JHPE6FFgYY1wMEEKYAJwNJFa8/vzyEu57bRc/mFzCko07/l22fnj2IE4ZZNmSJEkHRogxpneDIZwHnBJj/Fzd44uBw2KM17zn+8YB4wAKCwtHTZgwIWWZXlheyZurd9O4YQMGt8unuDCfVo1z696IZWVlNG/ePOkYicjl2SG358/l2cH5c3n+XJ4dUj//mDFjpsQYi/f0WhJHvMIenvuv9hdjvA24DaC4uDiOHj06ZYFGAyUlJaRyG5kul+fP5dkht+fP5dnB+XN5/lyeHZKdP4nDOiuBru96XASsTiCHJElSWiVRvCYBfUMIPUMIBcAFwN8SyCFJkpRWaT/VGGOsCiFcAzxD7XISd8QY30p3DkmSpHRLZB2vGONTwFNJbFuSJCkpufXRPUmSpARZvCRJktLE4iVJkpQmFi9JkqQ0sXhJkiSlicVLkiQpTSxekiRJaWLxkiRJShOLlyRJUpqEGGPSGT5QCGEDsCzFm2kHbEzxNjJZLs+fy7NDbs+fy7OD8+fy/Lk8O6R+/u4xxvZ7eqFeFK90CCFMjjEWJ50jKbk8fy7PDrk9fy7PDs6fy/Pn8uyQ7PyeapQkSUoTi5ckSVKaWLz+v9uSDpCwXJ4/l2eH3J4/l2cH58/l+XN5dkhwfq/xkiRJShOPeEmSJKWJxQsIIZwSQng7hLAwhHBd0nnSKYSwNIQwK4QwPYQwOek8qRZCuCOEsD6EMPtdz7UJIfwjhLCg7t+tk8yYSnuZ//shhFV1vwamhxBOSzJjqoQQuoYQXgwhzA0hvBVC+HLd81m//99n9lzZ941DCG+GEGbUzf+Duud7hhDeqNv394cQCpLOmgrvM/+dIYQl79r/w5POmiohhPwQwrQQwhN1jxPb9zlfvEII+cDvgVOBgcCnQggDk02VdmNijMNz5KPFdwKnvOe564DnY4x9gefrHmerO/nv+QFuqvs1MDzG+FSaM6VLFfC1GOMA4HDgC3W/13Nh/+9tdsiNfb8bOD7GOAwYDpwSQjgc+Dm18/cFtgCXJ5gxlfY2P8C179r/05OLmHJfBua+63Fi+z7nixdwKLAwxrg4xlgBTADOTjiTUiTG+C9g83uePhu4q+7ru4Bz0hoqjfYyf06IMa6JMU6t+7qU2jfhLuTA/n+f2XNCrFVW97Bh3T8ROB54qO75rNz38L7z54QQQhFwOnB73eNAgvve4lX75rPiXY9XkkNvSNT+5ns2hDAlhDAu6TAJKYwxroHaP6CADgnnScI1IYSZdacis+5U23uFEHoAI4A3yLH9/57ZIUf2fd2ppunAeuAfwCJga4yxqu5bsvq9/73zxxjf2f831u3/m0IIjRKMmEq/Ab4B1NQ9bkuC+97iBWEPz+XM3wSAo2KMI6k91fqFEMKxSQdS2t0K9Kb2FMQa4FfJxkmtEEJz4GHgf2KM25POk057mD1n9n2MsTrGOBwoovZMx4A9fVt6U6XPe+cPIQwGvgUcDBwCtAG+mWDElAghnAGsjzFOeffTe/jWtO17i1dt0+36rsdFwOqEsqRdjHF13b/XA49Q+4aUa9aFEDoB1P17fcJ50irGuK7uTbkG+BNZ/GsghNCQ2uJxb4xxYt3TObH/9zR7Lu37d8QYtwIl1F7r1iqE0KDupZx473/X/KfUnYKOMcbdwF/Izv1/FHBWCGEptZcSHU/tEbDE9r3FCyYBfes+4VAAXAD8LeFMaRFCaBZCaPHO18BJwOz3/6ms9Dfg0rqvLwUeSzBL2r1TOuqcS5b+Gqi7ruPPwNwY46/f9VLW7/+9zZ5D+759CKFV3ddNgBOpvc7tReC8um/Lyn0Pe51/3rv+whGovcYp6/Z/jPFbMcaiGGMPav98fyHGeCEJ7nsXUAXqPkL9GyAfuCPGeGPCkdIihNCL2qNcAA2A+7J99hDCeGA0tXemXwfcADwKPAB0A5YD58cYs/IC9L3MP5raU00RWApc+c41T9kkhHA08BIwi/9/rce3qb3WKav3//vM/ilyY98PpfYC6nxqDzg8EGP8Yd174ARqT7NNAy6qO/qTVd5n/heA9tSeepsOXPWui/CzTghhNPD1GOMZSe57i5ckSVKaeKpRkiQpTSxekiRJaWLxkiRJShOLlyRJUppYvCRJktLE4iUpq4QQWoUQPl/3decQwkMf9DOSlC4uJyEpq9Tdi/CJGOPghKNI0n9p8MHfIkn1ys+A3nU3BF4ADIgxDg4hfIba1bnzgcHU3pewALgY2A2cFmPcHELoDfye2oUldwJXxBjnpX8MSdnIU42Sss11wKK6GwJf+57XBgOfpvaedDcCO2OMI4DXgEvqvuc24IsxxlHA14Fb0pJaUk7wiJekXPJijLEUKA0hbAMer3t+FjA0hNAcOBJ4sPb2dQA0Sn9MSdnK4iUpl7z7Xmw173pcQ+37YR6wte5omSQdcJ5qlJRtSoEW+/ODMcbtwJIQwvkAodawAxlOUm6zeEnKKjHGTcArIYTZwP/ux3/iQuDyEMIM4C3g7AOZT1JuczkJSZKkNPGIlyRJUppYvCRJktLE4iVJkpQmFi9JkqQ0sXhJkiSlicVLkiQpTSxekiRJaWLxkiRJSpP/B9ah6TL8Act5AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
@@ -344,18 +760,146 @@
}
],
"source": [
+ "shortTime = time[0:int(burntime/timestep)]\n",
"fig1 = plt.figure(figsize=(10,6))\n",
"ax11 = fig1.add_subplot(1,1,1)\n",
- "maltitude = [unit.ftToM(x) for x in altitude]\n",
- "mvelocity = [unit.ftToM(v) for v in velocity]\n",
- "ax11.plot(time,rho)\n",
+ "ax11.plot(shortTime,mach[:len(shortTime)])\n",
"ax11.set_title('')\n",
- "ax11.set_xlabel('time (s)')\n",
- "ax11.set_ylabel('rho (slug/m^3)')\n",
+ "ax11.set_xlabel('time')\n",
+ "ax11.set_ylabel('mach')\n",
"ax11.grid()\n",
"plt.show()"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/Confusion/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6: RuntimeWarning: divide by zero encountered in double_scalars\n",
+ " \n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "gamma = 7/5\n",
+ "def tantheta(M,B):\n",
+ " b = np.radians(B)\n",
+ " num = 2*((M**2)*(np.sin(b)**2) - 1)\n",
+ " den = np.tan(b)*((M**2)*(gamma + (np.cos(b)**2)) + 2)\n",
+ " return num/den\n",
+ "\n",
+ "maxmach = max(mach[:len(shortTime)])\n",
+ "realTheta = 21.27\n",
+ "realB = []\n",
+ "highM = []\n",
+ "\n",
+ "for m in mach[:len(shortTime)]:\n",
+ " if m >= 1:\n",
+ " for B in np.arange(0,90,0.1):\n",
+ " if tantheta(m,B) > np.tan(np.radians(realTheta)):\n",
+ " realB.append(B)\n",
+ " highM.append(m)\n",
+ " break\n",
+ "\n",
+ "fig1 = plt.figure(figsize=(10,6))\n",
+ "p = plt.plot(highM,realB)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# eng File Writer\n",
+ "\n",
+ "The below cell writes .eng files for the previously simulated rocket, allowing it to be used in OpenRocket."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "suffix = str(input('Enter a label here for the .eng file: '))\n",
+ "diam = 304\n",
+ "he_len = 1692\n",
+ "lox_len = 2970\n",
+ "rp1_len = 1880\n",
+ "kgRp1 = unit.lbToKg(mRP1)\n",
+ "kgLox = unit.lbToKg(mLOx)\n",
+ "kgHe = unit.lbToKg(mHe)\n",
+ "\n",
+ "#S refers to a tank not providing thrust\n",
+ "def startline(diam,length,mass,name,isS):\n",
+ " if isS:\n",
+ " s = '-S'\n",
+ " else:\n",
+ " s = ''\n",
+ " motorname = name + '-' + str(int(diameter)) + '-' + suffix + s\n",
+ " returnstring = '{motor} {diameter} {length} P {lowmass} {highmass} RPL'.format(motor=motorname, \n",
+ " diameter=diam, \n",
+ " length=int(length),\n",
+ " lowmass=round(mass,2),\n",
+ " highmass=round(mass+0.01,2))\n",
+ " return returnstring\n",
+ "\n",
+ "lox_start = startline(diam,lox_len,kgLox,'LOx',True)\n",
+ "rp1_start = startline(diam,rp1_len,kgRp1,'RP1',False)\n",
+ "he_start = startline(diam,he_len,kgHe,'HE',True)\n",
+ "\n",
+ "def makeTank(diam,length,mass,name,isS):\n",
+ " start = startline(diam,length,mass,name,isS)\n",
+ " shorttime = burntime - 0.001\n",
+ " longtime = burntime\n",
+ " if isS:\n",
+ " thrusts = '\\n 0.001 0.01 \\n {shorttime} 0.01 \\n {longtime} 0.00'.format(shorttime=shorttime,longtime=longtime)\n",
+ " else:\n",
+ " datanum = int(burntime/2)\n",
+ " thrustinter = inter.CubicSpline(time[:int(burntime/timestep)],thrust[:int(burntime/timestep)])\n",
+ " thrusts = ''\n",
+ " for i in range(datanum+1):\n",
+ " if i == 0:\n",
+ " thrusts += ' \\n 0.001 {} \\n'.format(unit.lbfToN(thrustinter(0)))\n",
+ " elif i == datanum:\n",
+ " thrusts += ' {shorttime} {shortthrust} \\n {longtime} 0.00'.format(shorttime=shorttime,\n",
+ " longtime=longtime,\n",
+ " shortthrust=unit.lbfToN(thrustinter(longtime)))\n",
+ " elif i >= 5:\n",
+ " thrusts += ' {nexttime} {nextthrust} \\n'.format(nexttime=i*2,nextthrust=unit.lbfToN(thrustinter(i*2)))\n",
+ " else:\n",
+ " thrusts += ' {nexttime} {nextthrust} \\n'.format(nexttime=i*2,nextthrust=unit.lbfToN(thrustinter(i*2)))\n",
+ " return start + thrusts\n",
+ "\n",
+ "with open('LOx_tank_{d}_{suf}_S.eng'.format(d=diameter,suf=suffix), 'w') as loxfile:\n",
+ " loxstring = makeTank(diam,lox_len,kgLox,'LOx',True)\n",
+ " loxfile.write(loxstring)\n",
+ "\n",
+ "with open('He_tank_{d}_{suf}_S.eng'.format(d=diameter,suf=suffix), 'w') as hefile:\n",
+ " hestring = makeTank(diam,he_len,kgHe,'HE',True)\n",
+ " hefile.write(hestring)\n",
+ "\n",
+ "with open('RP1_tank_{d}_{suf}.eng'.format(d=diameter,suf=suffix), 'w') as rp1file:\n",
+ " rp1string = makeTank(diam,rp1_len,kgRp1,'RP1',False)\n",
+ " rp1file.write(rp1string)"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -380,9 +924,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.2"
+ "version": "3.7.7"
}
},
"nbformat": 4,
- "nbformat_minor": 2
+ "nbformat_minor": 4
}
diff --git a/Design/Vehicle-Sizing/output.txt b/Design/Vehicle-Sizing/output.txt
old mode 100644
new mode 100755
diff --git a/Design/Vehicle-Sizing/simulations/ISA.csv b/Design/Vehicle-Sizing/simulations/ISA.csv
new file mode 100644
index 0000000..7d03193
--- /dev/null
+++ b/Design/Vehicle-Sizing/simulations/ISA.csv
@@ -0,0 +1,50 @@
+-6561.68,542.16,0.0028681955764,1141.404236,
+-4921.26,536.22,0.0027386549624,1135.2,
+-3280.84,530.46,0.0026136304432,1128.937044,
+-1640.42,524.52,0.0024931220188,1122.703448,
+0,518.67,0.0024,1116.469852,
+1640.42,512.82,0.0022649403868,1110.236256,
+3280.84,507.06,0.00215702949,1103.674576,
+4921.26,501.12,0.0020531593096,1097.44098,
+6561.68,495.36,0.0019530921564,1090.8793,
+8202.1,489.42,0.0018568280304,1084.645704,
+9842.52,483.66,0.0017643669316,1078.084024,
+11482.94,477.72,0.0016752334816,1071.522344,
+13123.36,471.96,0.0015899030588,1064.960664,
+14763.78,466.02,0.0015076625956,1058.398984,
+16404.2,460.26,0.0014289874704,1051.50922,
+18044.62,454.32,0.0013534023048,1044.94754,
+19685.04,448.56,0.0012809070988,1038.38586,
+21325.46,442.62,0.0012112641632,1031.496096,
+22965.88,436.86,0.0011449488764,1024.606332,
+24606.3,431.1,0.0010812481708,1017.716568,
+26246.72,425.16,0.0010201620464,1010.826804,
+27887.14,419.4,0.0009619281924,1003.9,
+29527.56,413.46,0.0009063089196,996.719192,
+31167.98,407.7,0.0008530665388,989.829428,
+32808.4,401.94,0.0008024387392,983.595832,
+34448.82,396.0,0.0007539501424,975.721816,
+36089.24,390.24,0.0007078384376,968.503968,
+37729.66,390.06,0.000654833746,968.175884,
+39370.08,390.06,0.0006051567032,968.175884,
+41010.5,390.06,0.0005595203768,968.175884,
+42650.92,390.06,0.0005172116992,968.175884,
+44291.34,390.06,0.0004782306704,968.175884,
+45931.76,390.06,0.0004,968.175884,
+47572.18,390.06,0.0004,968.175884,
+49212.6,390.06,0.0004,968.175884,
+50853.02,390.06,0.0003,968.175884,
+52493.44,390.06,0.0003230196228,968.175884,
+54133.86,390.06,0.0002985376352,968.175884,
+55774.28,390.06,0.0002761948504,968.175884,
+57414.7,390.06,0.0002552782008,968.175884,
+59055.12,390.06,0.00024,968.175884,
+60695.54,390.06,0.00021824622344,968.175884,
+62335.96,390.06,0.00020177436188,968.175884,
+63976.38,390.06,0.00019,968.175884,
+65616.8,390.06,0.00017251482136,968.175884,
+72178.48,393.48,0.00012516713272,972.440976,
+78740.16,397.08,0.00009108250144,976.706068,
+85301.84,400.5,0.00006648166924,981.299244,
+91863.52,404.1,0.00004865497924,985.564336,
+98425.2,407.7,0.00003572468676,989.829428,
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/simulations/ThrustAlt.csv b/Design/Vehicle-Sizing/simulations/ThrustAlt.csv
new file mode 100644
index 0000000..bdcf08e
--- /dev/null
+++ b/Design/Vehicle-Sizing/simulations/ThrustAlt.csv
@@ -0,0 +1,851 @@
+Thrust lbf,alt km
+4656.955047,1.359416345
+4657.763162,1.36905093
+4658.571278,1.378694719
+4659.379393,1.388347732
+4660.187508,1.398009989
+4660.995624,1.407681509
+4661.803739,1.417362313
+4662.611854,1.42705242
+4663.41997,1.43675185
+4664.228085,1.446460624
+4665.0362,1.456178761
+4665.844316,1.465906282
+4666.652431,1.475643206
+4667.460546,1.485389556
+4668.268662,1.49514535
+4669.076777,1.504910609
+4669.884892,1.514685354
+4670.693008,1.524469605
+4671.501123,1.534263383
+4672.309238,1.544066709
+4673.117353,1.553879604
+4673.925469,1.563702089
+4674.733584,1.573534184
+4675.541699,1.58337591
+4676.349815,1.593227289
+4677.15793,1.603088342
+4677.966045,1.612959091
+4678.774161,1.622839555
+4679.582276,1.632729758
+4680.390391,1.64262972
+4681.198507,1.652539463
+4682.006622,1.662459008
+4682.814737,1.672388377
+4683.622853,1.682327593
+4684.430968,1.692276676
+4685.239083,1.702235649
+4686.047199,1.712204534
+4686.855314,1.722183352
+4687.663429,1.732172127
+4688.471545,1.74217088
+4689.27966,1.752179633
+4690.087775,1.762198409
+4690.89589,1.772227231
+4691.704006,1.78226612
+4692.512121,1.7923151
+4693.320236,1.802374193
+4694.128352,1.812443422
+4694.936467,1.82252281
+4695.744582,1.83261238
+4696.552698,1.842712154
+4697.360813,1.852822157
+4698.168928,1.86294241
+4698.977044,1.873072938
+4699.785159,1.883213763
+4700.593274,1.89336491
+4701.40139,1.903526401
+4702.209505,1.91369826
+4703.01762,1.923880511
+4703.825736,1.934073178
+4704.633851,1.944276284
+4705.441966,1.954489854
+4706.250082,1.96471391
+4707.058197,1.974948479
+4707.866312,1.985193583
+4708.674428,1.995449247
+4709.482543,2.005715495
+4710.290658,2.015992352
+4711.098773,2.026279843
+4711.906889,2.036577991
+4712.715004,2.046886822
+4713.523119,2.05720636
+4714.331235,2.067536631
+4715.13935,2.077877659
+4715.947465,2.088229469
+4716.755581,2.098592086
+4717.563696,2.108965537
+4718.371811,2.119349845
+4719.179927,2.129745038
+4719.988042,2.140151139
+4720.796157,2.150568174
+4721.604273,2.160996171
+4722.412388,2.171435153
+4723.220503,2.181885148
+4724.028619,2.19234618
+4724.836734,2.202818277
+4725.644849,2.213301464
+4726.452965,2.223795768
+4727.26108,2.234301215
+4728.069195,2.244817831
+4728.87731,2.255345643
+4729.685426,2.265884679
+4730.493541,2.276434963
+4731.301656,2.286996524
+4732.109772,2.297569389
+4732.917887,2.308153584
+4733.726002,2.318749137
+4734.534118,2.329356074
+4735.342233,2.339974424
+4736.150348,2.350604214
+4736.958464,2.361245471
+4737.766579,2.371898223
+4738.574694,2.382562497
+4739.38281,2.393238323
+4740.190925,2.403925727
+4740.99904,2.414624738
+4741.807156,2.425335384
+4742.615271,2.436057694
+4743.423386,2.446791695
+4744.231502,2.457537417
+4745.039617,2.468294887
+4745.847732,2.479064135
+4746.655847,2.48984519
+4747.463963,2.50063808
+4748.272078,2.511442835
+4749.080193,2.522259484
+4749.888309,2.533088055
+4750.696424,2.54392858
+4751.504539,2.554781086
+4752.312655,2.565645604
+4753.12077,2.576522163
+4753.928885,2.587410794
+4754.737001,2.598311525
+4755.545116,2.609224389
+4756.353231,2.620149414
+4757.161347,2.63108663
+4757.969462,2.642036069
+4758.777577,2.652997762
+4759.585693,2.663971737
+4760.393808,2.674958027
+4761.201923,2.685956663
+4762.010039,2.696967675
+4762.818154,2.707991094
+4763.626269,2.719026953
+4764.434385,2.730075281
+4765.2425,2.741136112
+4766.050615,2.752209476
+4766.85873,2.763295405
+4767.666846,2.774393931
+4768.474961,2.785505087
+4769.283076,2.796628904
+4770.091192,2.807765415
+4770.899307,2.818914651
+4771.707422,2.830076647
+4772.515538,2.841251433
+4773.323653,2.852439044
+4774.131768,2.863639512
+4774.939884,2.87485287
+4775.747999,2.886079152
+4776.556114,2.89731839
+4777.36423,2.908570618
+4778.172345,2.91983587
+4778.98046,2.931114179
+4779.788576,2.94240558
+4780.596691,2.953710106
+4781.404806,2.965027792
+4782.212922,2.976358671
+4783.021037,2.987702779
+4783.829152,2.999060149
+4784.637267,3.010430817
+4785.445383,3.021814818
+4786.253498,3.033212185
+4787.061613,3.044622956
+4787.869729,3.056047163
+4788.677844,3.067484844
+4789.485959,3.078936034
+4790.294075,3.090400768
+4791.10219,3.101879083
+4791.910305,3.113371014
+4792.718421,3.124876597
+4793.526536,3.136395869
+4794.334651,3.147928866
+4795.142767,3.159475625
+4795.950882,3.171036183
+4796.758997,3.182610576
+4797.567113,3.194198841
+4798.375228,3.205801016
+4799.183343,3.217417139
+4799.991459,3.229047246
+4800.799574,3.240691375
+4801.607689,3.252349565
+4802.415805,3.264021853
+4803.22392,3.275708277
+4804.032035,3.287408876
+4804.84015,3.299123688
+4805.648266,3.310852751
+4806.456381,3.322596106
+4807.264496,3.334353789
+4808.072612,3.346125842
+4808.880727,3.357912303
+4809.688842,3.369713211
+4810.496958,3.381528606
+4811.305073,3.393358528
+4812.113188,3.405203017
+4812.921304,3.417062113
+4813.729419,3.428935856
+4814.537534,3.440824288
+4815.34565,3.452727448
+4816.153765,3.464645377
+4816.96188,3.476578117
+4817.769996,3.488525708
+4818.578111,3.500488192
+4819.386226,3.512465611
+4820.194342,3.524458006
+4821.002457,3.536465419
+4821.810572,3.548487893
+4822.618687,3.560525469
+4823.426803,3.57257819
+4824.234918,3.584646099
+4825.043033,3.596729239
+4825.851149,3.608827651
+4826.659264,3.620941381
+4827.467379,3.633070471
+4828.275495,3.645214965
+4829.08361,3.657374906
+4829.891725,3.669550339
+4830.699841,3.681741307
+4831.507956,3.693947856
+4832.316071,3.70617003
+4833.124187,3.718407872
+4833.932302,3.73066143
+4834.740417,3.742930746
+4835.548533,3.755215868
+4836.356648,3.76751684
+4837.164763,3.779833709
+4837.972879,3.79216652
+4838.780994,3.80451532
+4839.589109,3.816880154
+4840.397225,3.82926107
+4841.20534,3.841658114
+4842.013455,3.854071333
+4842.82157,3.866500776
+4843.629686,3.878946488
+4844.437801,3.891408518
+4845.245916,3.903886913
+4846.054032,3.916381723
+4846.862147,3.928892994
+4847.670262,3.941420776
+4848.478378,3.953965117
+4849.286493,3.966526067
+4850.094608,3.979103675
+4850.902724,3.991697989
+4851.710839,4.004309061
+4852.518954,4.016936939
+4853.32707,4.029581673
+4854.135185,4.042243315
+4854.9433,4.054921915
+4855.751416,4.067617524
+4856.559531,4.080330192
+4857.367646,4.093059971
+4858.175762,4.105806913
+4858.983877,4.118571069
+4859.791992,4.131352492
+4860.600107,4.144151233
+4861.408223,4.156967346
+4862.216338,4.169800883
+4863.024453,4.182651897
+4863.832569,4.195520441
+4864.640684,4.208406569
+4865.448799,4.221310335
+4866.256915,4.234231793
+4867.06503,4.247170996
+4867.873145,4.260128
+4868.681261,4.27310286
+4869.489376,4.28609563
+4870.297491,4.299106366
+4871.105607,4.312135124
+4871.913722,4.325181959
+4872.721837,4.338246928
+4873.529953,4.351330086
+4874.338068,4.364431491
+4875.146183,4.3775512
+4875.954299,4.39068927
+4876.762414,4.403845758
+4877.570529,4.417020722
+4878.378644,4.430214221
+4879.18676,4.443426312
+4879.994875,4.456657055
+4880.80299,4.469906508
+4881.611106,4.48317473
+4882.419221,4.496461782
+4883.227336,4.509767722
+4884.035452,4.523092612
+4884.843567,4.53643651
+4885.651682,4.549799479
+4886.459798,4.56318158
+4887.267913,4.576582872
+4888.076028,4.590003419
+4888.884144,4.603443282
+4889.692259,4.616902523
+4890.500374,4.630381205
+4891.30849,4.643879391
+4892.116605,4.657397144
+4892.92472,4.670934527
+4893.732836,4.684491604
+4894.540951,4.69806844
+4895.349066,4.711665099
+4896.157182,4.725281645
+4896.965297,4.738918144
+4897.773412,4.752574662
+4898.581527,4.766251263
+4899.389643,4.779948015
+4900.197758,4.793664983
+4901.005873,4.807402235
+4901.813989,4.821159837
+4902.622104,4.834937858
+4903.430219,4.848736365
+4904.238335,4.862555426
+4905.04645,4.876395109
+4905.854565,4.890255485
+4906.662681,4.904136621
+4907.470796,4.918038588
+4908.278911,4.931961455
+4909.087027,4.945905293
+4909.895142,4.959870173
+4910.703257,4.973856166
+4911.511373,4.987863343
+4912.319488,5.001891776
+4913.127603,5.015941537
+4913.935719,5.0300127
+4914.743834,5.044105336
+4915.551949,5.058219519
+4916.360064,5.072355323
+4917.16818,5.086512823
+4917.976295,5.100692093
+4918.78441,5.114893207
+4919.592526,5.129116241
+4920.400641,5.143361271
+4921.208756,5.157628373
+4922.016872,5.171917624
+4922.824987,5.1862291
+4923.633102,5.20056288
+4924.441218,5.21491904
+4925.249333,5.229297659
+4926.057448,5.243698816
+4926.865564,5.25812259
+4927.673679,5.272569061
+4928.481794,5.287038308
+4929.28991,5.301530411
+4930.098025,5.316045452
+4930.90614,5.330583513
+4931.714256,5.345144674
+4932.522371,5.359729018
+4933.330486,5.374336627
+4934.138602,5.388967585
+4934.946717,5.403621975
+4935.754832,5.418299882
+4936.562947,5.43300139
+4937.371063,5.447726583
+4938.179178,5.462475547
+4938.987293,5.477248369
+4939.795409,5.492045135
+4940.603524,5.50686593
+4941.411639,5.521710844
+4942.219755,5.536579964
+4943.02787,5.551473377
+4943.835985,5.566391174
+4944.644101,5.581333443
+4945.452216,5.596300275
+4946.260331,5.61129176
+4947.068447,5.626307988
+4947.876562,5.641349051
+4948.684677,5.656415042
+4949.492793,5.671506053
+4950.300908,5.686622176
+4951.109023,5.701763505
+4951.917139,5.716930135
+4952.725254,5.732122161
+4953.533369,5.747339676
+4954.341484,5.762582778
+4955.1496,5.777851563
+4955.957715,5.793146127
+4956.76583,5.808466568
+4957.573946,5.823812983
+4958.382061,5.839185473
+4959.190176,5.854584135
+4959.998292,5.87000907
+4960.806407,5.885460378
+4961.614522,5.900938161
+4962.422638,5.916442518
+4963.230753,5.931973554
+4964.038868,5.94753137
+4964.846984,5.963116071
+4965.655099,5.978727759
+4966.463214,5.99436654
+4967.27133,6.01003252
+4968.079445,6.025725803
+4968.88756,6.041446497
+4969.695676,6.057194709
+4970.503791,6.072970547
+4971.311906,6.088774119
+4972.120021,6.104605535
+4972.928137,6.120464904
+4973.736252,6.136352336
+4974.544367,6.152267945
+4975.352483,6.16821184
+4976.160598,6.184184135
+4976.968713,6.200184943
+4977.776829,6.216214378
+4978.584944,6.232272554
+4979.393059,6.248359588
+4980.201175,6.264475595
+4981.00929,6.280620693
+4981.817405,6.296794998
+4982.625521,6.31299863
+4983.433636,6.329231707
+4984.241751,6.345494349
+4985.049867,6.361786677
+4985.857982,6.378108812
+4986.666097,6.394460876
+4987.474213,6.410842993
+4988.282328,6.427255285
+4989.090443,6.443697878
+4989.898559,6.460170897
+4990.706674,6.476674468
+4991.514789,6.493208718
+4992.322904,6.509773774
+4993.13102,6.526369766
+4993.939135,6.542996822
+4994.74725,6.559655073
+4995.555366,6.57634465
+4996.363481,6.593065685
+4997.171596,6.60981831
+4997.979712,6.626602661
+4998.787827,6.64341887
+4999.595942,6.660267074
+5000.404058,6.677147408
+5001.212173,6.694060011
+5002.020288,6.71100502
+5002.828404,6.727982575
+5003.636519,6.744992815
+5004.444634,6.762035882
+5005.25275,6.779111917
+5006.060865,6.796221064
+5006.86898,6.813363465
+5007.677096,6.830539267
+5008.485211,6.847748614
+5009.293326,6.864991653
+5010.101441,6.882268533
+5010.909557,6.899579402
+5011.717672,6.91692441
+5012.525787,6.934303708
+5013.333903,6.951717447
+5014.142018,6.969165781
+5014.950133,6.986648863
+5015.758249,7.004166849
+5016.566364,7.021719895
+5017.374479,7.039308157
+5018.182595,7.056931795
+5018.99071,7.074590967
+5019.798825,7.092285835
+5020.606941,7.110016559
+5021.415056,7.127783303
+5022.223171,7.14558623
+5023.031287,7.163425506
+5023.839402,7.181301297
+5024.647517,7.19921377
+5025.455633,7.217163095
+5026.263748,7.23514944
+5027.071863,7.253172978
+5027.879979,7.27123388
+5028.688094,7.28933232
+5029.496209,7.307468472
+5030.304324,7.325642513
+5031.11244,7.343854621
+5031.920555,7.362104973
+5032.72867,7.380393751
+5033.536786,7.398721134
+5034.344901,7.417087306
+5035.153016,7.435492451
+5035.961132,7.453936754
+5036.769247,7.472420401
+5037.577362,7.490943582
+5038.385478,7.509506484
+5039.193593,7.5281093
+5040.001708,7.546752221
+5040.809824,7.565435441
+5041.617939,7.584159155
+5042.426054,7.602923561
+5043.23417,7.621728856
+5044.042285,7.64057524
+5044.8504,7.659462914
+5045.658516,7.678392081
+5046.466631,7.697362945
+5047.274746,7.716375712
+5048.082861,7.735430589
+5048.890977,7.754527786
+5049.699092,7.773667513
+5050.507207,7.792849982
+5051.315323,7.812075408
+5052.123438,7.831344005
+5052.931553,7.850655992
+5053.739669,7.870011586
+5054.547784,7.88941101
+5055.355899,7.908854484
+5056.164015,7.928342234
+5056.97213,7.947874486
+5057.780245,7.967451466
+5058.588361,7.987073406
+5059.396476,8.006740535
+5060.204591,8.026453088
+5061.012707,8.046211299
+5061.820822,8.066015406
+5062.628937,8.085865648
+5063.437053,8.105762264
+5064.245168,8.1257055
+5065.053283,8.145695598
+5065.861398,8.165732806
+5066.669514,8.185817373
+5067.477629,8.20594955
+5068.285744,8.226129589
+5069.09386,8.246357746
+5069.901975,8.266634278
+5070.71009,8.286959444
+5071.518206,8.307333506
+5072.326321,8.327756728
+5073.134436,8.348229374
+5073.942552,8.368751715
+5074.750667,8.389324018
+5075.558782,8.409946559
+5076.366898,8.430619611
+5077.175013,8.451343452
+5077.983128,8.472118361
+5078.791244,8.492944621
+5079.599359,8.513822516
+5080.407474,8.534752334
+5081.21559,8.555734363
+5082.023705,8.576768896
+5082.83182,8.597856227
+5083.639936,8.618996654
+5084.448051,8.640190476
+5085.256166,8.661437995
+5086.064281,8.682739517
+5086.872397,8.704095349
+5087.680512,8.725505802
+5088.488627,8.746971188
+5089.296743,8.768491825
+5090.104858,8.79006803
+5090.912973,8.811700125
+5091.721089,8.833388436
+5092.529204,8.855133289
+5093.337319,8.876935016
+5094.145435,8.898793949
+5094.95355,8.920710425
+5095.761665,8.942684784
+5096.569781,8.964717369
+5097.377896,8.986808525
+5098.186011,9.008958603
+5098.994127,9.031167953
+5099.802242,9.053436932
+5100.610357,9.075765899
+5101.418473,9.098155217
+5102.226588,9.12060525
+5103.034703,9.143116368
+5103.842818,9.165688945
+5104.650934,9.188323355
+5105.459049,9.21101998
+5106.267164,9.233779202
+5107.07528,9.256601409
+5107.883395,9.279486991
+5108.69151,9.302436344
+5109.499626,9.325449866
+5110.307741,9.348527958
+5111.115856,9.371671029
+5111.923972,9.394879487
+5112.732087,9.418153747
+5113.540202,9.441494228
+5114.348318,9.464901353
+5115.156433,9.488375547
+5115.964548,9.511917242
+5116.772664,9.535526874
+5117.580779,9.559204882
+5118.388894,9.58295171
+5119.19701,9.606767807
+5120.005125,9.630653626
+5120.81324,9.654609625
+5121.621356,9.678636267
+5122.429471,9.702734019
+5123.237586,9.726903352
+5124.045701,9.751144745
+5124.853817,9.775458678
+5125.661932,9.799845639
+5126.470047,9.82430612
+5127.278163,9.848840619
+5128.086278,9.873449636
+5128.894393,9.898133681
+5129.702509,9.922893266
+5130.510624,9.947728911
+5131.318739,9.972641138
+5132.126855,9.997630479
+5132.93497,10.02269747
+5133.743085,10.04784265
+5134.551201,10.07306656
+5135.359316,10.09836977
+5136.167431,10.12375283
+5136.975547,10.1492163
+5137.783662,10.17476075
+5138.591777,10.20038678
+5139.399893,10.22609495
+5140.208008,10.25188586
+5141.016123,10.27776011
+5141.824238,10.3037183
+5142.632354,10.32976104
+5143.440469,10.35588895
+5144.248584,10.38210266
+5145.0567,10.40840279
+5145.864815,10.43479
+5146.67293,10.46126491
+5147.481046,10.4878282
+5148.289161,10.51448052
+5149.097276,10.54122253
+5149.905392,10.56805493
+5150.713507,10.59497839
+5151.521622,10.6219936
+5152.329738,10.64910128
+5153.137853,10.67630212
+5153.945968,10.70359685
+5154.754084,10.73098619
+5155.562199,10.75847089
+5156.370314,10.78605168
+5157.17843,10.81372933
+5157.986545,10.84150458
+5158.79466,10.86937823
+5159.602775,10.89735104
+5160.410891,10.92542382
+5161.219006,10.95359735
+5162.027121,10.98187246
+5162.835237,11.01024997
+5163.643352,11.03873071
+5164.451467,11.06731552
+5165.259583,11.09600526
+5166.067698,11.12480079
+5166.875813,11.15370299
+5167.683929,11.18271274
+5168.492044,11.21183094
+5169.300159,11.24105851
+5170.108275,11.27039636
+5170.91639,11.29984543
+5171.724505,11.32940667
+5172.532621,11.35908103
+5173.340736,11.3888695
+5174.148851,11.41877304
+5174.956967,11.44879267
+5175.765082,11.47892939
+5176.573197,11.50918423
+5177.381313,11.53955823
+5178.189428,11.57005245
+5178.997543,11.60066794
+5179.805658,11.6314058
+5180.613774,11.66226713
+5181.421889,11.69325303
+5182.230004,11.72436464
+5183.03812,11.7556031
+5183.846235,11.78696958
+5184.65435,11.81846525
+5185.462466,11.85009131
+5186.270581,11.88184896
+5187.078696,11.91373945
+5187.886812,11.94576402
+5188.694927,11.97792394
+5189.503042,12.01022049
+5190.311158,12.04265497
+5191.119273,12.07522871
+5191.927388,12.10794305
+5192.735504,12.14079936
+5193.543619,12.17379902
+5194.351734,12.20694343
+5195.15985,12.24023403
+5195.967965,12.27367226
+5196.77608,12.30725959
+5197.584195,12.34099751
+5198.392311,12.37488756
+5199.200426,12.40893125
+5200.008541,12.44313017
+5200.816657,12.4774859
+5201.624772,12.51200006
+5202.432887,12.5466743
+5203.241003,12.58151027
+5204.049118,12.61650967
+5204.857233,12.65167423
+5205.665349,12.68700571
+5206.473464,12.72250588
+5207.281579,12.75817655
+5208.089695,12.79401956
+5208.89781,12.83003679
+5209.705925,12.86623015
+5210.514041,12.90260155
+5211.322156,12.93915299
+5212.130271,12.97588645
+5212.938387,13.01280399
+5213.746502,13.04990767
+5214.554617,13.0871996
+5215.362733,13.12468193
+5216.170848,13.16235685
+5216.978963,13.20022659
+5217.787078,13.23829341
+5218.595194,13.27655961
+5219.403309,13.31502755
+5220.211424,13.35369963
+5221.01954,13.39257826
+5221.827655,13.43166595
+5222.63577,13.47096521
+5223.443886,13.51047863
+5224.252001,13.55020883
+5225.060116,13.59015849
+5225.868232,13.63033033
+5226.676347,13.67072713
+5227.484462,13.71135174
+5228.292578,13.75220703
+5229.100693,13.79329597
+5229.908808,13.83462156
+5230.716924,13.87618686
+5231.525039,13.91799501
+5232.333154,13.9600492
+5233.14127,14.00235268
+5233.949385,14.0449088
+5234.7575,14.08772094
+5235.565615,14.13079257
+5236.373731,14.17412724
+5237.181846,14.21772855
+5237.989961,14.26160022
+5238.798077,14.305746
+5239.606192,14.35016977
+5240.414307,14.39487546
+5241.222423,14.4398671
+5242.030538,14.48514881
+5242.838653,14.53072481
+5243.646769,14.57659941
+5244.454884,14.62277701
+5245.262999,14.66926213
+5246.071115,14.71605937
+5246.87923,14.76317347
+5247.687345,14.81060925
+5248.495461,14.85837167
+5249.303576,14.9064658
+5250.111691,14.95489682
+5250.919807,15.00367007
+5251.727922,15.052791
+5252.536037,15.10226518
+5253.344153,15.15209836
+5254.152268,15.2022964
+5254.960383,15.25286534
+5255.768498,15.30381134
+5256.576614,15.35514076
+5257.384729,15.4068601
+5258.192844,15.45897605
+5259.00096,15.51149547
+5259.809075,15.56442541
+5260.61719,15.6177731
+5261.425306,15.671546
+5262.233421,15.72575175
+5263.041536,15.78039821
+5263.849652,15.83549348
+5264.657767,15.89104587
+5265.465882,15.94706397
+5266.273998,16.00355657
+5267.082113,16.06053275
+5267.890228,16.11800188
+5268.698344,16.17597358
+5269.506459,16.23445778
+5270.314574,16.29346473
+5271.12269,16.35300497
+5271.930805,16.41308941
+5272.73892,16.47372929
+5273.547035,16.53493622
+5274.355151,16.59672218
+5275.163266,16.65909957
+5275.971381,16.72208119
+5276.779497,16.78568027
+5277.587612,16.84991052
+5278.395727,16.91478611
+5279.203843,16.9803217
+5280.011958,17.04653251
+5280.820073,17.11343427
+5281.628189,17.18104332
+5282.436304,17.24937658
+5283.244419,17.31845163
+5284.052535,17.38828671
+5284.86065,17.45890076
+5285.668765,17.53031349
+5286.476881,17.60254536
+5287.284996,17.67561767
+5288.093111,17.74955261
+5288.901227,17.82437327
+5289.709342,17.90010371
+5290.517457,17.97676904
+5291.325572,18.05439546
+5292.133688,18.13301031
+5292.941803,18.21264219
+5293.749918,18.29332096
+5294.558034,18.37507789
+5295.366149,18.45794574
+5296.174264,18.54195882
+5296.98238,18.62715311
+5297.790495,18.71356639
+5298.59861,18.80123833
+5299.406726,18.89021068
+5300.214841,18.98052735
+5301.022956,19.07223458
+5301.831072,19.16538117
+5302.639187,19.26001861
+5303.447302,19.3562013
+5304.255418,19.45398679
+5305.063533,19.55343604
+5305.871648,19.65461368
+5306.679764,19.75758831
+5307.487879,19.86243287
+5308.295994,19.969225
+5309.10411,20.07804746
+5309.912225,20.18898859
+5310.72034,20.30214287
+5311.528455,20.41761146
+5312.336571,20.5355029
+5313.144686,20.65593385
+5313.952801,20.77902992
+5314.760917,20.90492663
+5315.569032,21.03377053
+5316.377147,21.16572042
+5317.185263,21.30094879
+5317.993378,21.43964348
+5318.801493,21.58200958
+5319.609609,21.72827168
+5320.417724,21.87867642
+5321.225839,22.03349559
+5322.033955,22.19302969
+5322.84207,22.35761222
+5323.650185,22.52761483
+5324.458301,22.70345344
+5325.266416,22.88559572
+5326.074531,23.07457023
+5326.882647,23.27097773
+5327.690762,23.47550517
+5328.498877,23.68894341
+5329.306992,23.91220977
+5330.115108,24.14637705
+5330.923223,24.39271163
+5331.731338,24.65272406
+5332.539454,24.92823768
+5333.347569,25.22148345
+5334.155684,25.53523432
+5334.9638,25.87300079
+5335.771915,26.2393251
+5336.58003,26.64024092
+5337.388146,27.08402667
+5338.196261,27.58251349
+5339.004376,28.15353318
+5339.812492,28.82597762
+5340.620607,29.65182852
+5341.428722,30.74165753
+5342.236838,32.42064729
+5343.044953,44.33076067
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/simulations/atm.csv b/Design/Vehicle-Sizing/simulations/atm.csv
new file mode 100644
index 0000000..e4aa825
--- /dev/null
+++ b/Design/Vehicle-Sizing/simulations/atm.csv
@@ -0,0 +1,501 @@
+0.00000,518.670,0.00237717,1116.45,,,
+500.000,516.887,0.00234259,1114.53,,,
+1000.00,515.104,0.00230839,1112.61,,,
+1500.00,513.321,0.00227457,1110.68,,,
+2000.00,511.538,0.00224114,1108.75,,,
+2500.00,509.755,0.00220808,1106.81,,,
+3000.00,507.972,0.00217539,1104.88,,,
+3500.00,506.188,0.00214308,1102.94,,,
+4000.00,504.405,0.00211114,1100.99,,,
+4500.00,502.622,0.00207956,1099.04,,,
+5000.00,500.839,0.00204834,1097.09,,,
+5500.00,499.056,0.00201748,1095.14,,,
+6000.00,497.273,0.00198698,1093.18,,,
+6500.00,495.490,0.00195684,1091.22,,,
+7000.00,493.707,0.00192704,1089.25,,,
+7500.00,491.924,0.00189760,1087.28,,,
+8000.00,490.141,0.00186850,1085.31,,,
+8500.00,488.358,0.00183974,1083.34,,,
+9000.00,486.575,0.00181132,1081.36,,,
+9500.00,484.791,0.00178324,1079.37,,,
+10000.0,483.008,0.00175549,1077.39,,,
+10500.0,481.225,0.00172808,1075.40,,,
+11000.0,479.442,0.00170099,1073.40,,,
+11500.0,477.659,0.00167423,1071.40,,,
+12000.0,475.876,0.00164779,1069.40,,,
+12500.0,474.093,0.00162168,1067.40,,,
+13000.0,472.310,0.00159588,1065.39,,,
+13500.0,470.527,0.00157039,1063.37,,,
+14000.0,468.744,0.00154522,1061.36,,,
+14500.0,466.961,0.00152036,1059.34,,,
+15000.0,465.178,0.00149581,1057.31,,,
+15500.0,463.395,0.00147156,1055.28,,,
+16000.0,461.611,0.00144761,1053.25,,,
+16500.0,459.828,0.00142396,1051.22,,,
+17000.0,458.045,0.00140061,1049.18,,,
+17500.0,456.262,0.00137755,1047.13,,,
+18000.0,454.479,0.00135479,1045.08,,,
+18500.0,452.696,0.00133231,1043.03,,,
+19000.0,450.913,0.00131012,1040.97,,,
+19500.0,449.130,0.00128821,1038.91,,,
+20000.0,447.347,0.00126659,1036.85,,,
+20500.0,445.564,0.00124524,1034.78,,,
+21000.0,443.781,0.00122417,1032.71,,,
+21500.0,441.998,0.00120337,1030.63,,,
+22000.0,440.214,0.00118285,1028.55,,,
+22500.0,438.431,0.00116259,1026.47,,,
+23000.0,436.648,0.00114260,1024.38,,,
+23500.0,434.865,0.00112287,1022.28,,,
+24000.0,433.082,0.00110341,1020.19,,,
+24500.0,431.299,0.00108421,1018.08,,,
+25000.0,429.516,0.00106526,1015.98,,,
+25500.0,427.733,0.00104656,1013.87,,,
+26000.0,425.950,0.00102812,1011.75,,,
+26500.0,424.167,0.00100993,1009.63,,,
+27000.0,422.384,0.000991984,1007.51,,,
+27500.0,420.601,0.000974284,1005.38,,,
+28000.0,418.818,0.000956827,1003.24,,,
+28500.0,417.034,0.000939610,1001.11,,,
+29000.0,415.251,0.000922631,998.963,,,
+29500.0,413.468,0.000905888,996.816,,,
+30000.0,411.685,0.000889378,994.664,,,
+30500.0,409.902,0.000873099,992.508,,,
+31000.0,408.119,0.000857050,990.347,,,
+31500.0,406.336,0.000841227,988.181,,,
+32000.0,404.553,0.000825628,986.010,,,
+32500.0,402.770,0.000810252,983.835,,,
+33000.0,400.987,0.000795096,981.655,,,
+33500.0,399.204,0.000780157,979.470,,,
+34000.0,397.421,0.000765434,977.280,,,
+34500.0,395.637,0.000750925,975.085,,,
+35000.0,393.854,0.000736627,972.885,,,
+35500.0,392.071,0.000722539,970.681,,,
+36000.0,390.288,0.000708657,968.471,,,
+36500.0,389.970,0.000692396,968.076,,,
+37000.0,389.970,0.000675954,968.076,,,
+37500.0,389.970,0.000659904,968.076,,,
+38000.0,389.970,0.000644234,968.076,,,
+38500.0,389.970,0.000628937,968.076,,,
+39000.0,389.970,0.000614002,968.076,,,
+39500.0,389.970,0.000599423,968.076,,,
+40000.0,389.970,0.000585189,968.076,,,
+40500.0,389.970,0.000571294,968.076,,,
+41000.0,389.970,0.000557728,968.076,,,
+41500.0,389.970,0.000544485,968.076,,,
+42000.0,389.970,0.000531556,968.076,,,
+42500.0,389.970,0.000518934,968.076,,,
+43000.0,389.970,0.000506612,968.076,,,
+43500.0,389.970,0.000494582,968.076,,,
+44000.0,389.970,0.000482838,968.076,,,
+44500.0,389.970,0.000471373,968.076,,,
+45000.0,389.970,0.000460180,968.076,,,
+45500.0,389.970,0.000449253,968.076,,,
+46000.0,389.970,0.000438586,968.076,,,
+46500.0,389.970,0.000428171,968.076,,,
+47000.0,389.970,0.000418004,968.076,,,
+47500.0,389.970,0.000408079,968.076,,,
+48000.0,389.970,0.000398389,968.076,,,
+48500.0,389.970,0.000388929,968.076,,,
+49000.0,389.970,0.000379694,968.076,,,
+49500.0,389.970,0.000370678,968.076,,,
+50000.0,389.970,0.000361876,968.076,,,
+50500.0,389.970,0.000353283,968.076,,,
+51000.0,389.970,0.000344894,968.076,,,
+51500.0,389.970,0.000336705,968.076,,,
+52000.0,389.970,0.000328709,968.076,,,
+52500.0,389.970,0.000320904,968.076,,,
+53000.0,389.970,0.000313284,968.076,,,
+53500.0,389.970,0.000305845,968.076,,,
+54000.0,389.970,0.000298583,968.076,,,
+54500.0,389.970,0.000291493,968.076,,,
+55000.0,389.970,0.000284571,968.076,,,
+55500.0,389.970,0.000277814,968.076,,,
+56000.0,389.970,0.000271217,968.076,,,
+56500.0,389.970,0.000264777,968.076,,,
+57000.0,389.970,0.000258490,968.076,,,
+57500.0,389.970,0.000252352,968.076,,,
+58000.0,389.970,0.000246360,968.076,,,
+58500.0,389.970,0.000240510,968.076,,,
+59000.0,389.970,0.000234799,968.076,,,
+59500.0,389.970,0.000229224,968.076,,,
+60000.0,389.970,0.000223781,968.076,,,
+60500.0,389.970,0.000218467,968.076,,,
+61000.0,389.970,0.000213279,968.076,,,
+61500.0,389.970,0.000208215,968.076,,,
+62000.0,389.970,0.000203271,968.076,,,
+62500.0,389.970,0.000198444,968.076,,,
+63000.0,389.970,0.000193732,968.076,,,
+63500.0,389.970,0.000189132,968.076,,,
+64000.0,389.970,0.000184641,968.076,,,
+64500.0,389.970,0.000180257,968.076,,,
+65000.0,389.970,0.000175976,968.076,,,
+65500.0,389.970,0.000171798,968.076,,,
+66000.0,390.180,0.000167629,968.337,,,
+66500.0,390.455,0.000163537,968.677,,,
+67000.0,390.729,0.000159548,969.017,,,
+67500.0,391.003,0.000155659,969.358,,,
+68000.0,391.278,0.000151867,969.698,,,
+68500.0,391.552,0.000148170,970.037,,,
+69000.0,391.826,0.000144566,970.377,,,
+69500.0,392.100,0.000141051,970.717,,,
+70000.0,392.375,0.000137625,971.056,,,
+70500.0,392.649,0.000134284,971.396,,,
+71000.0,392.923,0.000131026,971.735,,,
+71500.0,393.198,0.000127850,972.074,,,
+72000.0,393.472,0.000124753,972.413,,,
+72500.0,393.746,0.000121733,972.752,,,
+73000.0,394.021,0.000118788,973.091,,,
+73500.0,394.295,0.000115916,973.430,,,
+74000.0,394.569,0.000113116,973.768,,,
+74500.0,394.844,0.000110385,974.107,,,
+75000.0,395.118,0.000107722,974.445,,,
+75500.0,395.392,0.000105125,974.783,,,
+76000.0,395.667,0.000102592,975.121,,,
+76500.0,395.941,0.000100122,975.459,,,
+77000.0,396.215,0.0000977131,975.797,,,
+77500.0,396.490,0.0000953638,976.135,,,
+78000.0,396.764,0.0000930725,976.472,,,
+78500.0,397.038,0.0000908378,976.810,,,
+79000.0,397.313,0.0000886582,977.147,,,
+79500.0,397.587,0.0000865324,977.484,,,
+80000.0,397.861,0.0000844590,977.822,,,
+80500.0,398.136,0.0000824367,978.159,,,
+81000.0,398.410,0.0000804641,978.496,,,
+81500.0,398.684,0.0000785400,978.832,,,
+82000.0,398.958,0.0000766632,979.169,,,
+82500.0,399.233,0.0000748325,979.506,,,
+83000.0,399.507,0.0000730467,979.842,,,
+83500.0,399.781,0.0000713047,980.178,,,
+84000.0,400.056,0.0000696054,980.515,,,
+84500.0,400.330,0.0000679478,980.851,,,
+85000.0,400.604,0.0000663307,981.187,,,
+85500.0,400.879,0.0000647532,981.523,,,
+86000.0,401.153,0.0000632142,981.858,,,
+86500.0,401.427,0.0000617128,982.194,,,
+87000.0,401.702,0.0000602481,982.530,,,
+87500.0,401.976,0.0000588190,982.865,,,
+88000.0,402.250,0.0000574249,983.200,,,
+88500.0,402.525,0.0000560647,983.536,,,
+89000.0,402.799,0.0000547376,983.871,,,
+89500.0,403.073,0.0000534428,984.206,,,
+90000.0,403.348,0.0000521794,984.541,,,
+90500.0,403.622,0.0000509468,984.875,,,
+91000.0,403.896,0.0000497441,985.210,,,
+91500.0,404.171,0.0000485705,985.544,,,
+92000.0,404.445,0.0000474254,985.879,,,
+92500.0,404.719,0.0000463081,986.213,,,
+93000.0,404.994,0.0000452178,986.547,,,
+93500.0,405.268,0.0000441539,986.881,,,
+94000.0,405.542,0.0000431158,987.215,,,
+94500.0,405.816,0.0000421027,987.549,,,
+95000.0,406.091,0.0000411140,987.883,,,
+95500.0,406.365,0.0000401493,988.216,,,
+96000.0,406.639,0.0000392078,988.550,,,
+96500.0,406.914,0.0000382890,988.883,,,
+97000.0,407.188,0.0000373923,989.217,,,
+97500.0,407.462,0.0000365172,989.550,,,
+98000.0,407.737,0.0000356632,989.883,,,
+98500.0,408.011,0.0000348297,990.216,,,
+99000.0,408.285,0.0000340162,990.549,,,
+99500.0,408.560,0.0000332222,990.881,,,
+100000,408.834,0.0000324473,991.214,,,
+100500,409.108,0.0000316909,991.546,,,
+101000,409.383,0.0000309527,991.879,,,
+101500,409.657,0.0000302321,992.211,,,
+102000,409.931,0.0000295288,992.543,,,
+102500,410.206,0.0000288423,992.875,,,
+103000,410.480,0.0000281722,993.207,,,
+103500,410.754,0.0000275182,993.539,,,
+104000,411.029,0.0000268797,993.871,,,
+104500,411.303,0.0000262564,994.202,,,
+105000,411.590,0.0000256472,994.549,,,
+105500,412.358,0.0000250237,995.477,,,
+106000,413.126,0.0000244164,996.404,,,
+106500,413.894,0.0000238250,997.329,,,
+107000,414.663,0.0000232489,998.254,,,
+107500,415.431,0.0000226878,999.179,,,
+108000,416.199,0.0000221413,1000.10,,,
+108500,416.967,0.0000216088,1001.02,,,
+109000,417.735,0.0000210902,1001.95,,,
+109500,418.503,0.0000205849,1002.87,,,
+110000,419.271,0.0000200926,1003.79,,,
+110500,420.039,0.0000196129,1004.71,,,
+111000,420.807,0.0000191455,1005.62,,,
+111500,421.575,0.0000186901,1006.54,,,
+112000,422.344,0.0000182464,1007.46,,,
+112500,423.112,0.0000178139,1008.37,,,
+113000,423.880,0.0000173924,1009.29,,,
+113500,424.648,0.0000169817,1010.20,,,
+114000,425.416,0.0000165814,1011.12,,,
+114500,426.184,0.0000161912,1012.03,,,
+115000,426.952,0.0000158108,1012.94,,,
+115500,427.720,0.0000154401,1013.85,,,
+116000,428.488,0.0000150787,1014.76,,,
+116500,429.256,0.0000147264,1015.67,,,
+117000,430.024,0.0000143829,1016.58,,,
+117500,430.793,0.0000140480,1017.48,,,
+118000,431.561,0.0000137215,1018.39,,,
+118500,432.329,0.0000134032,1019.30,,,
+119000,433.097,0.0000130927,1020.20,,,
+119500,433.865,0.0000127900,1021.11,,,
+120000,434.633,0.0000124948,1022.01,,,
+120500,435.401,0.0000122070,1022.91,,,
+121000,436.169,0.0000119262,1023.81,,,
+121500,436.937,0.0000116524,1024.72,,,
+122000,437.705,0.0000113853,1025.62,,,
+122500,438.474,0.0000111248,1026.52,,,
+123000,439.242,0.0000108708,1027.41,,,
+123500,440.010,0.0000106229,1028.31,,,
+124000,440.778,0.0000103811,1029.21,,,
+124500,441.546,0.0000101452,1030.11,,,
+125000,442.314,0.00000991510,1031.00,,,
+125500,443.082,0.00000969058,1031.90,,,
+126000,443.850,0.00000947152,1032.79,,,
+126500,444.618,0.00000925778,1033.68,,,
+127000,445.386,0.00000904922,1034.58,,,
+127500,446.154,0.00000884570,1035.47,,,
+128000,446.923,0.00000864710,1036.36,,,
+128500,447.691,0.00000845329,1037.25,,,
+129000,448.459,0.00000826415,1038.14,,,
+129500,449.227,0.00000807954,1039.03,,,
+130000,449.995,0.00000789937,1039.91,,,
+130500,450.763,0.00000772351,1040.80,,,
+131000,451.531,0.00000755186,1041.69,,,
+131500,452.299,0.00000738430,1042.57,,,
+132000,453.067,0.00000722074,1043.46,,,
+132500,453.835,0.00000706107,1044.34,,,
+133000,454.604,0.00000690519,1045.23,,,
+133500,455.372,0.00000675300,1046.11,,,
+134000,456.140,0.00000660442,1046.99,,,
+134500,456.908,0.00000645935,1047.87,,,
+135000,457.676,0.00000631770,1048.75,,,
+135500,458.444,0.00000617938,1049.63,,,
+136000,459.212,0.00000604432,1050.51,,,
+136500,459.980,0.00000591243,1051.39,,,
+137000,460.748,0.00000578363,1052.27,,,
+137500,461.516,0.00000565784,1053.14,,,
+138000,462.284,0.00000553499,1054.02,,,
+138500,463.053,0.00000541501,1054.89,,,
+139000,463.821,0.00000529782,1055.77,,,
+139500,464.589,0.00000518335,1056.64,,,
+140000,465.357,0.00000507154,1057.52,,,
+140500,466.125,0.00000496232,1058.39,,,
+141000,466.893,0.00000485563,1059.26,,,
+141500,467.661,0.00000475139,1060.13,,,
+142000,468.429,0.00000464957,1061.00,,,
+142500,469.197,0.00000455008,1061.87,,,
+143000,469.965,0.00000445289,1062.74,,,
+143500,470.734,0.00000435792,1063.61,,,
+144000,471.502,0.00000426513,1064.47,,,
+144500,472.270,0.00000417446,1065.34,,,
+145000,473.038,0.00000408586,1066.21,,,
+145500,473.806,0.00000399928,1067.07,,,
+146000,474.574,0.00000391467,1067.94,,,
+146500,475.342,0.00000383198,1068.80,,,
+147000,476.110,0.00000375117,1069.66,,,
+147500,476.878,0.00000367219,1070.53,,,
+148000,477.646,0.00000359499,1071.39,,,
+148500,478.415,0.00000351954,1072.25,,,
+149000,479.183,0.00000344579,1073.11,,,
+149500,479.951,0.00000337370,1073.97,,,
+150000,480.719,0.00000330323,1074.83,,,
+150500,481.487,0.00000323433,1075.69,,,
+151000,482.255,0.00000316699,1076.55,,,
+151500,483.023,0.00000310115,1077.40,,,
+152000,483.791,0.00000303678,1078.26,,,
+152500,484.559,0.00000297384,1079.11,,,
+153000,485.327,0.00000291230,1079.97,,,
+153500,486.095,0.00000285214,1080.82,,,
+154000,486.864,0.00000279331,1081.68,,,
+154500,487.170,0.00000273835,1082.02,,,
+155000,487.170,0.00000268618,1082.02,,,
+155500,487.170,0.00000263500,1082.02,,,
+156000,487.170,0.00000258480,1082.02,,,
+156500,487.170,0.00000253555,1082.02,,,
+157000,487.170,0.00000248724,1082.02,,,
+157500,487.170,0.00000243985,1082.02,,,
+158000,487.170,0.00000239336,1082.02,,,
+158500,487.170,0.00000234776,1082.02,,,
+159000,487.170,0.00000230303,1082.02,,,
+159500,487.170,0.00000225915,1082.02,,,
+160000,487.170,0.00000221610,1082.02,,,
+160500,487.170,0.00000217388,1082.02,,,
+161000,487.170,0.00000213246,1082.02,,,
+161500,487.170,0.00000209183,1082.02,,,
+162000,487.170,0.00000205198,1082.02,,,
+162500,487.170,0.00000201288,1082.02,,,
+163000,487.170,0.00000197453,1082.02,,,
+163500,487.170,0.00000193691,1082.02,,,
+164000,487.170,0.00000190000,1082.02,,,
+164500,487.170,0.00000186380,1082.02,,,
+165000,487.170,0.00000182829,1082.02,,,
+165500,487.170,0.00000179346,1082.02,,,
+166000,487.170,0.00000175929,1082.02,,,
+166500,487.170,0.00000172577,1082.02,,,
+167000,487.170,0.00000169289,1082.02,,,
+167500,486.898,0.00000166156,1081.71,,,
+168000,486.130,0.00000163243,1080.86,,,
+168500,485.362,0.00000160377,1080.01,,,
+169000,484.594,0.00000157557,1079.15,,,
+169500,483.825,0.00000154782,1078.30,,,
+170000,483.057,0.00000152052,1077.44,,,
+170500,482.289,0.00000149366,1076.58,,,
+171000,481.521,0.00000146723,1075.73,,,
+171500,480.753,0.00000144123,1074.87,,,
+172000,479.985,0.00000141564,1074.01,,,
+172500,479.217,0.00000139047,1073.15,,,
+173000,478.449,0.00000136571,1072.29,,,
+173500,477.681,0.00000134135,1071.43,,,
+174000,476.913,0.00000131739,1070.57,,,
+174500,476.144,0.00000129382,1069.70,,,
+175000,475.376,0.00000127063,1068.84,,,
+175500,474.608,0.00000124783,1067.98,,,
+176000,473.840,0.00000122539,1067.11,,,
+176500,473.072,0.00000120333,1066.25,,,
+177000,472.304,0.00000118162,1065.38,,,
+177500,471.536,0.00000116027,1064.51,,,
+178000,470.768,0.00000113928,1063.65,,,
+178500,470.000,0.00000111863,1062.78,,,
+179000,469.232,0.00000109832,1061.91,,,
+179500,468.464,0.00000107835,1061.04,,,
+180000,467.695,0.00000105871,1060.17,,,
+180500,466.927,0.00000103940,1059.30,,,
+181000,466.159,0.00000102041,1058.43,,,
+181500,465.391,0.00000100173,1057.55,,,
+182000,464.623,9.83368E-07,1056.68,,,
+182500,463.855,9.65312E-07,1055.81,,,
+183000,463.087,9.47558E-07,1054.93,,,
+183500,462.319,9.30102E-07,1054.06,,,
+184000,461.551,9.12939E-07,1053.18,,,
+184500,460.783,8.96065E-07,1052.31,,,
+185000,460.014,8.79475E-07,1051.43,,,
+185500,459.246,8.63166E-07,1050.55,,,
+186000,458.478,8.47133E-07,1049.67,,,
+186500,457.710,8.31371E-07,1048.79,,,
+187000,456.942,8.15877E-07,1047.91,,,
+187500,456.174,8.00646E-07,1047.03,,,
+188000,455.406,7.85675E-07,1046.15,,,
+188500,454.638,7.70959E-07,1045.27,,,
+189000,453.870,7.56494E-07,1044.38,,,
+189500,453.102,7.42277E-07,1043.50,,,
+190000,452.334,7.28304E-07,1042.61,,,
+190500,451.565,7.14571E-07,1041.73,,,
+191000,450.797,7.01074E-07,1040.84,,,
+191500,450.029,6.87809E-07,1039.95,,,
+192000,449.261,6.74774E-07,1039.07,,,
+192500,448.493,6.61964E-07,1038.18,,,
+193000,447.725,6.49375E-07,1037.29,,,
+193500,446.957,6.37006E-07,1036.40,,,
+194000,446.189,6.24851E-07,1035.51,,,
+194500,445.421,6.12907E-07,1034.62,,,
+195000,444.653,6.01172E-07,1033.72,,,
+195500,443.884,5.89642E-07,1032.83,,,
+196000,443.116,5.78314E-07,1031.94,,,
+196500,442.348,5.67184E-07,1031.04,,,
+197000,441.580,5.56250E-07,1030.15,,,
+197500,440.812,5.45508E-07,1029.25,,,
+198000,440.044,5.34955E-07,1028.35,,,
+198500,439.276,5.24588E-07,1027.45,,,
+199000,438.508,5.14405E-07,1026.56,,,
+199500,437.740,5.04402E-07,1025.66,,,
+200000,436.972,4.94576E-07,1024.76,,,
+200500,436.204,4.84925E-07,1023.85,,,
+201000,435.435,4.75446E-07,1022.95,,,
+201500,434.667,4.66136E-07,1022.05,,,
+202000,433.899,4.56993E-07,1021.15,,,
+202500,433.131,4.48013E-07,1020.24,,,
+203000,432.363,4.39193E-07,1019.34,,,
+203500,431.595,4.30533E-07,1018.43,,,
+204000,430.827,4.22028E-07,1017.53,,,
+204500,430.059,4.13676E-07,1016.62,,,
+205000,429.291,4.05475E-07,1015.71,,,
+205500,428.523,3.97423E-07,1014.80,,,
+206000,427.754,3.89516E-07,1013.89,,,
+206500,426.986,3.81753E-07,1012.98,,,
+207000,426.218,3.74131E-07,1012.07,,,
+207500,425.450,3.66648E-07,1011.16,,,
+208000,424.682,3.59302E-07,1010.24,,,
+208500,423.914,3.52089E-07,1009.33,,,
+209000,423.146,3.45009E-07,1008.41,,,
+209500,422.378,3.38059E-07,1007.50,,,
+210000,421.610,3.31236E-07,1006.58,,,
+210500,420.842,3.24539E-07,1005.66,,,
+211000,420.073,3.17966E-07,1004.75,,,
+211500,419.305,3.11514E-07,1003.83,,,
+212000,418.537,3.05182E-07,1002.91,,,
+212500,417.769,2.98967E-07,1001.99,,,
+213000,417.001,2.92867E-07,1001.07,,,
+213500,416.233,2.86881E-07,1000.14,,,
+214000,415.465,2.81007E-07,999.220,,,
+214500,414.697,2.75242E-07,998.296,,,
+215000,413.929,2.69586E-07,997.371,,,
+215500,413.161,2.64035E-07,996.445,,,
+216000,412.393,2.58589E-07,995.518,,,
+216500,411.624,2.53245E-07,994.591,,,
+217000,410.856,2.48002E-07,993.662,,,
+217500,410.088,2.42858E-07,992.733,,,
+218000,409.320,2.37811E-07,991.803,,,
+218500,408.552,2.32860E-07,990.872,,,
+219000,407.784,2.28003E-07,989.940,,,
+219500,407.016,2.23238E-07,989.007,,,
+220000,406.248,2.18565E-07,988.074,,,
+220500,405.480,2.13980E-07,987.139,,,
+221000,404.712,2.09484E-07,986.204,,,
+221500,403.943,2.05073E-07,985.267,,,
+222000,403.175,2.00748E-07,984.330,,,
+222500,402.407,1.96505E-07,983.392,,,
+223000,401.639,1.92344E-07,982.453,,,
+223500,400.871,1.88264E-07,981.513,,,
+224000,400.103,1.84263E-07,980.573,,,
+224500,399.335,1.80339E-07,979.631,,,
+225000,398.567,1.76492E-07,978.688,,,
+225500,397.799,1.72719E-07,977.745,,,
+226000,397.031,1.69020E-07,976.800,,,
+226500,396.263,1.65393E-07,975.855,,,
+227000,395.494,1.61838E-07,974.909,,,
+227500,394.726,1.58352E-07,973.962,,,
+228000,393.958,1.54934E-07,973.014,,,
+228500,393.190,1.51584E-07,972.065,,,
+229000,392.422,1.48300E-07,971.115,,,
+229500,391.654,1.45081E-07,970.164,,,
+230000,390.886,1.41926E-07,969.212,,,
+230500,390.118,1.38833E-07,968.259,,,
+231000,389.350,1.35802E-07,967.306,,,
+231500,388.582,1.32831E-07,966.351,,,
+232000,387.813,1.29920E-07,965.396,,,
+232500,387.045,1.27066E-07,964.439,,,
+233000,386.304,1.24262E-07,963.515,,,
+233500,385.755,1.21454E-07,962.830,,,
+234000,385.206,1.18705E-07,962.145,,,
+234500,384.658,1.16016E-07,961.460,,,
+235000,384.109,1.13383E-07,960.774,,,
+235500,383.561,1.10806E-07,960.088,,,
+236000,383.012,1.08285E-07,959.401,,,
+236500,382.463,1.05817E-07,958.713,,,
+237000,381.915,1.03402E-07,958.025,,,
+237500,381.366,1.01039E-07,957.337,,,
+238000,380.817,9.87268E-08,956.648,,,
+238500,380.269,9.64641E-08,955.959,,,
+239000,379.720,9.42501E-08,955.269,,,
+239500,379.171,9.20839E-08,954.579,,,
+240000,378.623,8.99644E-08,953.888,,,
+240500,378.074,8.78907E-08,953.196,,,
+241000,377.526,8.58619E-08,952.504,,,
+241500,376.977,8.38771E-08,951.812,,,
+242000,376.428,8.19354E-08,951.119,,,
+242500,375.880,8.00359E-08,950.426,,,
+243000,375.331,7.81777E-08,949.732,,,
+243500,374.782,7.63601E-08,949.038,,,
+244000,374.234,7.45822E-08,948.343,,,
+244500,373.685,7.28431E-08,947.647,,,
+245000,373.136,7.11421E-08,946.951,,,
+245500,372.588,6.94785E-08,946.255,,,
+246000,372.039,6.78513E-08,945.558,,,
+246500,371.490,6.62600E-08,944.860,,,
+247000,370.942,6.47037E-08,944.163,,,
+247500,370.393,6.31817E-08,943.464,,,
+248000,369.845,6.16934E-08,942.765,,,
+248500,369.296,6.02380E-08,942.066,,,
+249000,368.747,5.88148E-08,941.365,,,
+249500,368.199,5.74233E-08,940.665,,,
+250000,367.650,5.60626E-08,939.964,,,
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/simulations/simulations.py b/Design/Vehicle-Sizing/simulations/simulations.py
index d96c812..824cfda 100755
--- a/Design/Vehicle-Sizing/simulations/simulations.py
+++ b/Design/Vehicle-Sizing/simulations/simulations.py
@@ -2,6 +2,8 @@
Simulations is a python based flight simulation package
for rocket and missle trajectory analysis. """
import numpy as np
+import csv
+from scipy import interpolate as inter
__author__ = "Cameron Flannery"
__copyright__ = "Copyright 2018"
@@ -19,7 +21,26 @@ class Rocket(object):
A list of assumptions, capabilities, and limitations
will be added here as features are solidified. """
- def __init__(self, initialConditions, engines, burntime, timestep=1):
+ def import_thrust_vec(self):
+ unit_convert = unit()
+ tlist = []
+ alist = []
+ with open('simulations/ThrustAlt.csv') as csvfile:
+ tareader = csv.reader(csvfile)
+ names = False
+ for i in tareader:
+ if not names:
+ names = True
+ else:
+ tlist.append(float(i[0]))
+ alist.append(unit_convert.mToFt(float(i[1])*1000))
+ return tlist, alist
+
+ def get_thrust(self,alt,t_list,a_list):
+ spline = inter.CubicSpline(a_list,t_list)
+ return spline(alt)
+
+ def __init__(self, initialConditions, engines, burntime, timestep=0.5):
""" Initialization of the Rocket simulation class
Args:
@@ -39,6 +60,7 @@ def __init__(self, initialConditions, engines, burntime, timestep=1):
lift_coefficient, # [1]
bank_angle # [rad]
reference_area # [ft^2]
+ coef_drag # [dimensionless]
engines:
-> Required keywords:
@@ -71,6 +93,7 @@ def __init__(self, initialConditions, engines, burntime, timestep=1):
'Ae',
'Isp',
'reference_area',
+ 'coef_drag'
]
for arg in requiredArgs:
@@ -82,7 +105,7 @@ def __init__(self, initialConditions, engines, burntime, timestep=1):
self.burntime = burntime
self.timestep = timestep
self.CONST()
- #self.atm = atm()
+ self.atm = atm()
self.unit = unit()
def run(self, stopTime=None, stopApogee=None):
@@ -103,15 +126,17 @@ def run(self, stopTime=None, stopApogee=None):
self.mass = [self.initialConditions['mass']]
self.lift_coefficient = [self.initialConditions['lift_coefficient']]
self.bank_angle = [self.initialConditions['bank_angle']]
- self.Cd = [self.calc_Cd(0)]
+ self.Cd = self.initialConditions['coef_drag']
self.drag = [0]
self.dynamic_pressure = [0]
self.rho = [self.STDATM(self.initialConditions['altitude'])[1]]
self.temp = [self.STDATM(self.initialConditions['altitude'])[0]]
+ self.M = [0]
# initialize arrays with values from engines
self.nengines = self.engines['nengines']
- self.thrust = [self.engines['thrust_sl']*self.nengines]
+ self.t_vec, self.a_vec = self.import_thrust_vec()
+ self.thrust = [self.t_vec[0]]
self.thrust_angle = [self.engines['thrust_angle']]
self.Ae = [self.engines['Ae']]
self.Isp = self.engines['Isp']
@@ -119,10 +144,12 @@ def run(self, stopTime=None, stopApogee=None):
# initialize additional values
self.acceleration = [0]
- self.R = [self.Rearth] # [m] initial distance to the center of the earth
+ self.R = [self.Rearth + self.initialConditions['altitude']] # [ft] initial distance to the center of the earth
self.reference_area = self.initialConditions['reference_area']
self.runIter = 0 # iterator
+ self.apogee = False
+
while True:
self.time.append(self.time[self.runIter] + self.timestep)
self.R.append(self.Rearth + self.altitude[self.runIter])
@@ -130,18 +157,20 @@ def run(self, stopTime=None, stopApogee=None):
self.rho.append(rho)
self.temp.append(T)
- M = self.velocity[self.runIter]/sos
- Cd = self.calc_Cd(M)
+ self.M.append(self.velocity[self.runIter]/sos)
# calculate altitude, velocity, and acceleration
self.altitude.append(self.altitude[self.runIter] + self.calc_dalt())
self.velocity.append(self.velocity[self.runIter] + self.calc_deltaV())
- self.drag.append(self.calc_drag(self.velocity[self.runIter], rho, self.reference_area, Cd))
+ self.drag.append(self.calc_drag(self.velocity[self.runIter], rho, self.reference_area, self.Cd))
+ #print(str(self.Cd) + str(self.drag[self.runIter]))
self.acceleration.append(self.calc_accel())
# Thrust
+
if self.time[self.runIter] <= self.burntime:
- self.thrust.append(self.thrust[0])
+ self.thrust.append(self.get_thrust(self.altitude[self.runIter + 1], self.t_vec, self.a_vec))
+ print(self.thrust[self.runIter])
self.mass.append(self.mass[self.runIter] - self.mdot*self.timestep)
else:
self.thrust.append(0)
@@ -149,8 +178,10 @@ def run(self, stopTime=None, stopApogee=None):
self.flight_heading.append(self.flight_heading[0]) # initial values until calcs added
self.flight_angle.append(self.flight_angle[0]) # initial values until calcs added
self.thrust_angle.append(self.thrust_angle[0])
- self.Cd.append(self.Cd[0])
- if self.runIter <= self.burntime * 2:
+ if self.velocity[self.runIter] < 0:
+ self.apogee = True
+
+ if not self.apogee:
self.dynamic_pressure.append(self.maxQ(rho))
# END CONDITIONS
@@ -158,13 +189,10 @@ def run(self, stopTime=None, stopApogee=None):
break
self.runIter += 1
- return (self.altitude, self.velocity, self.acceleration, self.mass, self.time, self.thrust, self.drag, self.dynamic_pressure, self.rho, self.temp)
-
- def calc_Cd(self, M):
- return .55
+ return (self.altitude, self.velocity, self.acceleration, self.mass, self.time, self.thrust, self.drag, self.dynamic_pressure, self.rho, self.temp, self.M)
def calc_drag(self, vel, rho, S, Cd):
- return 1/2*rho*vel**2*S*Cd
+ return (1/2)*rho*(vel**2)*S*Cd
def calc_thrust(self, thrust_sl=None, Ae=None, pe=None, pa=None):
""" calc_thrust determines the thrust """
@@ -185,12 +213,12 @@ def calc_accel(self, thrust=None, thrust_angle=None,
based on the current timestep values.
Args:
- thrust: # [N]
+ thrust: # [lbf]
thrust_angle: # [rad] angle
- drag: # [N]
- mass: # [kg]
+ drag: # [lbf]
+ mass: # [slug]
flight_heading: # [rad] angle
- R: # [m] radius from center of the Earth
+ R: # [ft] radius from center of the Earth
timestep: # [s] timestep
Returns:
@@ -229,12 +257,12 @@ def calc_deltaV(self, thrust=None, thrust_angle=None,
based on the current timestep values.
Args:
- thrust: # [N]
+ thrust: # [lbf]
thrust_angle: # [rad] angle
- drag: # [N]
- mass: # [kg]
+ drag: # [lbf]
+ mass: # [slug]
flight_heading: # [rad] angle
- R: # [m] radius from center of the Earth
+ R: # [ft] radius from center of the Earth
timestep: # [s] timestep
Returns:
@@ -272,8 +300,8 @@ def calc_dalt(self, velocity=None, flight_heading=None, timestep=None):
based on the current timestep values.
Args:
- velocity: # [m/s] velocity at current timestep
- flight_heading: # [m] radius from center of the Earth
+ velocity: # [ft/s] velocity at current timestep
+ flight_heading: # [ft] radius from center of the Earth
timestep: # [s] timestep
Returns:
@@ -311,68 +339,12 @@ def CONST(self):
self.gamma_air = 1.4 # ratio of specific heats
self.Rearth = 2.0902 * 10**7 # [ft]
- # standard atmosphere model (SI units)
- def STDATM(self, altitude):
- layer = -1.0 # gradient layer
- gradient = -self.unit.kToR(0.0019812)
- altitude_base = 0.0
- temperature_base = 518.67
- density_base = 0.00237717
-
- if altitude > 36089:
- layer = 1.0 # isothermal layer
- altitude_base = 36089
- temperature_base = self.unit.kToR(216.65)
- density_base = 0.000706208
- if altitude > 65617:
- layer = -1.0 # gradient layer
- gradient = self.unit.kToR(0.0003048)
- altitude_base = 65617
- temperature_base = 216.65 * 9/5
- density_base = 0.000170834
- if altitude > 104987:
- layer = -1.0 # gradient layer
- gradient = self.unit.kToR(0.00085344)
- altitude_base = 104987
- temperature_base = 228.65*9/5
- density_base = 0.0000256636
- if altitude > 154199:
- layer = 1.0 # isothermal layer
- altitude_base = 154199
- temperature_base = 270.65*9/5
- density_base = 1.47056878 * (10**(-6))
- if altitude > 167323:
- layer = -1.0 # gradient layer
- gradinet = -self.unit.kToR(0.00085344)
- altitude_base = 167323
- temperature_base = 270.65*9/5
- density_base = 0.00000277025
- if altitude > 232940:
- layer = 1.0 # isothermal layer
- altitude_base = 232940
- temperature_base = 214.65*9/5
- density_base = 1.24603 * (10**(-7))
- if layer < 0.0:
- temperature = temperature_base + gradient*(altitude - altitude_base)
- power = -1.0*(self.g0/gradient/self.R_air + 1.0)
- density = density_base*(temperature/temperature_base)**power
+ #Standard atmosphere interpolation:
+ def STDATM(self,alt):
+ if alt < 250000:
+ return (self.atm.get_temp(alt),self.atm.get_rho(alt),self.atm.get_sos(alt))
else:
- temperature = temperature_base
- power = -1.0*self.g0*(altitude - altitude_base)/self.R_air/temperature
- density = density_base*np.exp(power)
- sos = np.sqrt(self.gamma_air*self.R_air*temperature)
-
- '''meAlt = self.unit.ftToM(altitude)
- geAlt = self.atm.geopotentialAlt(meAlt)
- meDensity = self.atm.getDensity(geAlt)
- meTemp = self.atm.getTempK(geAlt)
- temperature = self.unit.kToR(meTemp)
- density = self.unit.kgm3ToSlugFt3(meDensity)
- meSos = np.sqrt(self.gamma_air*self.R_air*temperature)
- sos = self.unit.mToFt(meSos)'''
-
- return (temperature, density, sos)
-
+ return (360,0,940)
def test_Rocket():
burntime = 50 # s
@@ -382,7 +354,7 @@ def test_Rocket():
g0 = 9.81
mdot = nengines*thrust_sl/(g0*Isp)
twratio = 50 # estimated thrust 2 weight ratio
- mstructure = 300 # kg
+ mstructure = 300 # slug
mpropulsion = thrust_sl/(twratio*g0)
mpropellant = mdot*burntime
mass = mpropulsion + mpropellant + mstructure
@@ -411,103 +383,35 @@ def test_Rocket():
return 0
-'''class atm(object):
+class atm(object):
def __init__(self):
- self.molWeight = 28.9644
- self.g = 9.8
- self.R = 8.314
-
- def getTempK(self, geAlt):
- temp = 288.15
- if 0 < geAlt < 11000:
- temp = 288.15 - 0.0065 * geAlt
- elif geAlt < 20000:
- temp = 216.65
- elif geAlt < 32000:
- temp = 216.65 + 0.001 * geAlt
- elif geAlt < 47000:
- temp = 228.65 + 0.0028 * geAlt
- elif geAlt < 51000:
- temp = 270.65
- elif geAlt < 71000:
- temp = 270.65 - 0.0028 * geAlt
- elif geAlt >= 71000:
- temp = 214.65 - 0.002 * geAlt
- return temp
-
- def getTempGrad(self, geAlt):
- if geAlt < 11000:
- return 0.0065
- elif geAlt < 20000:
- return 0
- elif geAlt < 32000:
- return -0.001
- elif geAlt < 47000:
- return -0.0028
- elif geAlt < 51000:
- return 0
- elif geAlt < 71000:
- return 0.0028
- elif geAlt >= 71000:
- return 0.002
-
- #Using this corrected altitude instead of the actual altitude allows us to
- #treat gravity as constant. It is a fairly small difference at low
- #altitudes, since gravity doesn't change very quickly
- def geopotentialAlt(self,alt):
- return alt
-
- def getBasePress(self, geAlt):
- if geAlt < 11000:
- return 101325
- elif geAlt < 20000:
- return 22632.1
- elif geAlt < 32000:
- return 5474.89
- elif geAlt < 47000:
- return 868.019
- elif geAlt < 51000:
- return 110.906
- elif geAlt < 71000:
- return 66.9389
- else:
- return 3.95642
-
- def getBaseAlt(self, geAlt):
- if geAlt < 11000:
- return 0
- elif geAlt < 20000:
- return 11000
- elif geAlt < 32000:
- return 20000
- elif geAlt < 47000:
- return 32000
- elif geAlt < 51000:
- return 47000
- elif geAlt < 71000:
- return 51000
- else:
- return 71000
-
- def getPressure(self, geAlt):
- temp = self.getTempK(geAlt)
- baseAlt = self.getBaseAlt(geAlt)
- baseTemp = self.getTempK(baseAlt)
- basePress = self.getBasePress(geAlt)
- tempGrad = self.getTempGrad(geAlt)
- if tempGrad == 0:
- num = -self.g * self.molWeight * (geAlt - baseAlt)
- den = self.R * baseTemp
- return basePress * np.exp(num/den)
- else:
- num = -self.g * self.molWeight
- den = self.R * tempGrad
- return basePress * (temp / baseTemp)**(num/den)
-
- def getDensity(self, geAlt):
- temp = self.getTempK(geAlt)
- pressure = self.getPressure(geAlt)
- return pressure * self.molWeight /(self.R * temp)'''
+ self.altlist = []
+ self.tlist = []
+ self.rholist = []
+ self.soslist = []
+ with open('simulations/atm.csv') as atmcsv:
+ atmreader = csv.reader(atmcsv)
+ names = False
+ for i in atmreader:
+ if not names:
+ names = True
+ else:
+ self.altlist.append(float(i[0]))
+ self.tlist.append(float(i[1]))
+ self.rholist.append(float(i[2]))
+ self.soslist.append(float(i[3]))
+ self.tspline = inter.CubicSpline(self.altlist,self.tlist)
+ self.rhospline = inter.CubicSpline(self.altlist,self.rholist)
+ self.sosspline = inter.CubicSpline(self.altlist,self.soslist)
+
+ def get_temp(self,alt):
+ return self.tspline(alt)
+
+ def get_rho(self,alt):
+ return self.rhospline(alt)
+
+ def get_sos(self,alt):
+ return self.tspline(alt)
class unit(object):
def kgToLb(self, kg):
@@ -549,5 +453,11 @@ def kToR(self, k):
def kgm3ToSlugFt3(self, kgm3):
return kgm3 * 0.00194032
+ def inToMm(self, inch):
+ return inch*25.4
+
+ def mmToIn(self, mm):
+ return mm/25.4
+
if __name__ == '__main__':
test_Rocket()
diff --git a/Design/Vehicle-Sizing/tank_sizing_2_23.m b/Design/Vehicle-Sizing/tank_sizing_2_23.m
new file mode 100755
index 0000000..7608b79
--- /dev/null
+++ b/Design/Vehicle-Sizing/tank_sizing_2_23.m
@@ -0,0 +1,149 @@
+clear all; close all; clc;
+
+
+% This program is adapted from Huzel and Huang's "Modern Engineering for
+% Design of Liquid-Propellant Rocket Engines" and uses the calculations for
+% tank dimensions found in Chapter 8
+
+%% Lists all required constants and values required for math-ing
+function mass=tankTotalMass(propMass,diam,propPress)
+ flarp = propPress;
+ for i = 1:1000
+ P(i) = i; %tank pressure in psi
+ D = diam; %tank diameter in inches
+ R = D./2; %tank radius, in
+ S = 40000; %yield strength of 6061-T6 alloy in psi
+ Sc = 56000; %compressive yield strength of 6061-T6 in psi
+ FoS = 1.5; %factor of safety
+ v = 0.33; %Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85; %approximate efficiency of welded joints
+ E = 1e7; %6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975; %density of aluminum, lbm./in.^3
+ rho_lox = 0.04122124; %density of LOx, lbm./in.^3
+ rho_rp1 = 0.0292631; %density of RP-1, lbm./in.^3
+ k = 2; %ratio of a./b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2; %obtained from graph on page 292 of H&H book
+ Fc = 3305; %estimated critical loading on rocket during flight, lbf
+ g = 32.2; %gravitational acceleration, ft./s.^3
+
+ mix_ratio = 2.23; %fuel mix ratio, for prop mass calcs and volume
+ m_prop = propMass; %propellant mass in lbm--given from prop team
+ m_rp1 = m_prop ./ (1+mix_ratio); %computes needed amount of RP-1 based on mixture ratio
+ m_lox = m_prop - m_rp1; %remaining propellant must be LOx
+ vol_lox = m_lox ./ rho_lox;%use density of propellants to compute volumes
+ vol_lox = vol_lox .* 1.02; %adds an extra 2% of volume for ullage space
+ vol_rp1 = m_rp1 ./ rho_rp1;
+ vol_rp1 = vol_rp1 .* 1.02; %also adds an extra 2% of volume for ullage
+
+ %not required unless volume is given instead of mass
+ % vol_lox = 16748.707; %volume of oxidizer in in.^3
+ % vol_rp1 = 10579.792; %volume of fuel in in.^3
+ d_pressline = 0.5; %outer diameter of pressurant lines through tanks, in
+ d_annulus = 2; %outer diameter of annular lining, in
+ d_rp1fill = 1; %outer diameter of fill line to rp-1, in
+
+ t_barlows = (P(i).*D)./(2.*S./FoS);
+
+ %% Calculates needed tank thickness based on loading characteristics
+ % Algebraic manipulation of eqn. 8-32 on p. 293 required to caclculate
+ % required cylindrical wall thickness based on loading criteria
+
+ tc_vec = 0:0.001:0.25; %vector of wall thicknesses for testing
+ LHS = 4.*(Fc.*FoS).*(1-v.^2) ./ (E.*pi); %the left-hand side of the eqn. on p.293
+ RHS = (36.*tc_vec.^3 - tc_vec.^5) ./ (6-tc_vec).^3;
+
+ indexer = find(RHS <= LHS); %finds intersection of two curves
+ tc(i) = tc_vec(max(indexer)); %saves tc--cylindrical wall thickness
+
+ %% test to see whether barlows is a bit more accurate than the other
+ if t_barlows >= tc
+ tc(i) = t_barlows;
+ else
+ blerg = true;
+ end
+ %tc = t_barlows;
+ %% Uses required cylindrical wall thickness to estimate bulkhead thickness
+
+ a(i) = R - tc(i); %a is the internal radius, or major axis length of ellipse
+ b(i) = a(i)./2; %minor axis length, or head height--property of 2:1 shape
+ Eprime = 2.*k + (1./sqrt(k.^2-1)).*log((k+sqrt(k.^2-1))./(k-sqrt(k.^2-1)));
+ %eprime is the "design factor" described on p. 292, for weight calcs later
+ %on
+
+ tk = (K.*P.*a(i)) ./ (S.*ew ./ FoS); %knuckle thickness, in
+ tcr = (P(i).*R) ./ (2.*S.*ew ./ FoS); %crown thickness, in
+ tequiv = (tk + tcr) ./ 2; %average bulkhead thickness for weight calcs
+
+ %% Redimensions tanks according to volume and wetted area eqns. given in H&H
+
+ v_endcap = (2.*pi.*a(i).^2.*b(i))./3; %endcap volume capacity, in.^3
+ leftovervol_lox = vol_lox - 2.*v_endcap; %volume left for cylindrical section
+ leftovervol_rp1 = vol_rp1; %vol left for rp-1 cylindrical section
+ %this stays the same since the concave bulkhead in the rp-1 tank eliminates
+ %any volume gained by the lower convex bulkhead, so the cylindrical section
+ %is the only part that will be carrying any "equivalent volume"
+ vcyl_lox = leftovervol_lox; %lox cylinder volume needed to hold remaining propellant
+ vcyl_rp1 = vol_rp1; %rp-1 cylinder volume needed to hold remaining propellant
+
+ cylheight_lox = vcyl_lox ./ (pi.*a(i).^2 - pi.*d_rp1fill.^2 - 2.*pi.*(d_pressline ./ 2).^2); %computes height of cylinders for each propellant
+ cylheight_rp1 = vcyl_rp1 ./ (pi.*a(i).^2 - pi.*(d_pressline ./ 2).^2 - pi.*(d_annulus ./ 2).^2);
+
+ overall_height(i) = cylheight_lox + cylheight_rp1 + 2.*(b(i)+tcr); %head height, with cylindrical sections and two end caps
+
+ %% Computes weights of tank segments also based on given equations
+ %pi.*(outer_diameter.^2 - inner_diameter.^2) .* height .* rho_alum ./ 4
+
+ %w_endcap = (pi.*a.^2.*tequiv.*Eprime.*rho_alum)./(2.*k); %approx. endcap weight, lbm
+ w_endcap = 5.83 + 5.86 + 2.47; %taken from SolidWorks to account for weird, unmath-able geometries
+ %w_cyl_rp1 = 2.*pi.*a.*cylheight_rp1.*tc.*rho_alum;%weight of respective cylindrical sections
+ w_cyl_rp1 = pi.*(R.^2 - a(i).^2) .* cylheight_rp1 .* rho_alum;
+ %w_cyl_lox = 2.*pi.*a.*cylheight_lox.*tc.*rho_alum;
+ w_cyl_lox = pi.*(R.^2 - a(i).^2) .* cylheight_lox .* rho_alum;
+ %w_rp1fill = 2.*pi.*(0.75./2).*cylheight_lox.*0.125.*rho_alum;
+ w_rp1fill = pi.*(1.^2 - 0.75.^2) .* cylheight_lox .* rho_alum ./ 4;
+ %w_helium_rp1 = 2.*pi.*0.125.*cylheight_lox.*0.125.*rho_alum;
+ w_helium_rp1 = pi.*(0.5.^2 - 0.25.^2) .* cylheight_lox .* rho_alum ./ 4;
+ %w_helium_full = 2.*pi.*0.125.*(cylheight_lox+cylheight_rp1).*0.125.*rho_alum;
+ w_helium_full = pi.*(0.5.^2 - 0.25.^2) .* (cylheight_rp1 + cylheight_lox) .* rho_alum ./ 4;
+ %w_annulus = 2.*pi.*((d_annulus - 0.25)./2).*cylheight_rp1.*0.125.*rho_alum;
+ w_annulus = pi.*(2.25.^2 - 2.^2) .* cylheight_rp1 .* rho_alum ./ 4;
+ w_loxpipe = pi.*(1.^2 - 0.75.^2) .* cylheight_rp1 .* rho_alum ./ 4;
+ w_insulation = pi .* ((2.25+0.2.*2).^2 - 2.25.^2) .* cylheight_rp1 .* 0.0058 ./ 4; %0.0058 = density of aerogel in lb./in3 :)
+ dry_weight(i) = w_endcap + w_cyl_rp1 + w_cyl_lox + w_rp1fill + w_helium_rp1 + w_helium_full + w_annulus + w_loxpipe;
+ wet_weight = dry_weight + m_prop;
+
+
+
+ %% Pressurant Tank Sizing Code
+ prop_vol = vol_lox + vol_rp1;
+ prop_press = P;
+ gamma = 5/3; %ratio of specific heats for Helium
+ press_temp = 536.67; %pressurant temp in Rankine
+ R = 10.73159*12^3; %gas constant in imperial units, in3-psi / R-lb-mol
+ molar_mass = 4.003;
+ initial_press = 6000; %initial pressure in bottle, psi
+ final_press = 600; %final pressure at burnout, psi
+ press_tank_diam = 10.5; %outer diameter of pressurant tank, in
+
+ min_tank_thickness = (3^(1/2)/4)*(initial_press*FoS*(press_tank_diam/2))/S; %computes minimum thickness of the aluminum wall
+ hoop_stress = 0.5*(((initial_press*FoS*(press_tank_diam / 2))/(2*min_tank_thickness))+(4*(S)^2 - 3*((initial_press*FoS*(press_tank_diam / 2))/(2*min_tank_thickness))^2)^(0.5));
+ wrap_thickness = ((initial_press * (press_tank_diam/2) * FoS)-(min_tank_thickness*hoop_stress))/(270000);
+ press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass;
+ press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press;
+ press_tank_height = (press_vol - ((4/3)*pi*((press_tank_diam / 2)-min_tank_thickness-wrap_thickness)^3))/(pi*((press_tank_diam / 2)-min_tank_thickness-wrap_thickness)^2) + press_tank_diam;
+ %% Fiberglass Vs. Aerogel and Internal Transfer Tube sizing :)
+ rhoglass = 0.75;
+ rhoaerogel = 10;
+ t_ag = 0.2;
+ t_fg = 0.5;
+ id_pipe = 0.75;
+ od_pipe = 1;
+ t_outerpipe = 0.2;
+
+ %use the aerogel first, my fave
+ height_wall = vol_rp1 ./ ((pi.*((D-tc-tc)./2).^2)- pi.*((od_pipe./2) + t_ag + t_outerpipe).^2);
+
+ end
+ mass = dry_weight(flarp);
+end
+
diff --git a/Design/Vehicle-Sizing/tank_sizing_2_23.py b/Design/Vehicle-Sizing/tank_sizing_2_23.py
new file mode 100755
index 0000000..64a0b6a
--- /dev/null
+++ b/Design/Vehicle-Sizing/tank_sizing_2_23.py
@@ -0,0 +1,167 @@
+import numpy as np
+
+# This program is adapted from Huzel and Huang's "Modern Engineering for
+# Design of Liquid-Propellant Rocket Engines" and uses the calculations for
+# tank dimensions found in Chapter 8
+
+## Lists all required constants and values required for math-ing
+def getTankMass(pressure, diameter, propMass, hePress):
+ P = pressure #input tank pressure in psig
+
+ pi = np.pi
+ D = diameter #tank diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm./in.^3
+ rho_lox = 0.04122124 #density of LOx, lbm./in.^3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm./in.^3
+ k = 2 #ratio of a./b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft./s.^3
+
+ mix_ratio = 2.23 #fuel mix ratio, for prop mass calcs and volume
+ m_prop = propMass #propellant mass in lbm--given from prop team
+ m_rp1 = m_prop / (1+mix_ratio) #computes needed amount of RP-1 based on mixture ratio
+ m_lox = m_prop - m_rp1 #remaining propellant must be LOx
+ vol_lox = m_lox / rho_lox #use density of propellants to compute volumes
+ vol_lox = vol_lox * 1.02 #adds an extra 2# of volume for ullage space
+ vol_rp1 = m_rp1 / rho_rp1
+ vol_rp1 = vol_rp1 * 1.02 #also adds an extra 2# of volume for ullage
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in.^3
+ # vol_rp1 = 10579.792 #volume of fuel in in.^3
+ d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ d_annulus = 2 #outer diameter of annular lining, in
+ d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+
+ t_barlows = (P*D)/(2*S/FoS)
+
+ ## Calculates needed tank thickness based on loading characteristics
+ # Algebraic manipulation of eqn. 8-32 on p. 293 required to caclculate
+ # required cylindrical wall thickness based on loading criteria
+
+ tc_vec = np.arange(0,0.25,0.001) #vector of wall thicknesses for testing
+ LHS = 4*(Fc*FoS)*(1-v**2) / (E*pi) #the left-hand side of the eqn. on p.293
+
+ tc = 0
+ for i in tc_vec:
+ RHS = (36*i**3 - i**5) / (6-i)**3
+ if RHS <= LHS:
+ tc = i
+
+ ## test to see whether barlows is a bit more accurate than the other
+ if t_barlows >= tc:
+ tc = t_barlows
+ #tc = t_barlows
+ ## Uses required cylindrical wall thickness to estimate bulkhead thickness
+
+ a = R - tc #a is the internal radius, or major axis length of ellipse
+ b = a/2 #minor axis length, or head height--property of 2:1 shape
+ Eprime = 2*k + (1/np.sqrt(k**2-1))*np.log((k+np.sqrt(k**2-1))/(k-np.sqrt(k**2-1)))
+ #eprime is the "design factor" described on p. 292, for weight calcs later
+ #on
+
+ tk = (K*P*a) / (S*ew / FoS) #knuckle thickness, in
+ tcr = (P*R) / (2*S*ew / FoS) #crown thickness, in
+ tequiv = (tk + tcr) / 2 #average bulkhead thickness for weight calcs
+
+ ## Redimensions tanks according to volume and wetted area eqns. given in H&H
+
+ v_endcap = (2*pi*a**2*b)/3 #endcap volume capacity, in.^3
+ leftovervol_lox = vol_lox - 2*v_endcap #volume left for cylindrical section
+ leftovervol_rp1 = vol_rp1 #vol left for rp-1 cylindrical section
+ #this stays the same since the concave bulkhead in the rp-1 tank eliminates
+ #any volume gained by the lower convex bulkhead, so the cylindrical section
+ #is the only part that will be carrying any "equivalent volume"
+ vcyl_lox = leftovervol_lox #lox cylinder volume needed to hold remaining propellant
+ vcyl_rp1 = vol_rp1 #rp-1 cylinder volume needed to hold remaining propellant
+
+ cylheight_lox = vcyl_lox / (pi*a**2 - pi*d_rp1fill**2 - 2*pi*(d_pressline / 2)**2) #computes height of cylinders for each propellant
+ cylheight_rp1 = vcyl_rp1 / (pi*a**2 - pi*(d_pressline / 2)**2 - pi*(d_annulus / 2)**2)
+
+ overall_height = cylheight_lox + cylheight_rp1 + 2*(b+tcr) #head height, with cylindrical sections and two end caps
+
+ ## Computes weights of tank segments also based on given equations
+ #pi.*(outer_diameter.^2 - inner_diameter.^2) .* height .* rho_alum ./ 4
+
+ #w_endcap = (pi.*a.^2.*tequiv.*Eprime.*rho_alum)./(2.*k) #approx. endcap weight, lbm
+ w_endcap = 5.82 + 5.29 + 6.81 #taken from SolidWorks to account for weird, unmath-able geometries
+ #w_cyl_rp1 = 2.*pi.*a.*cylheight_rp1.*tc.*rho_alum #weight of respective cylindrical sections
+ w_cyl_rp1 = pi*(R**2 - a**2) * cylheight_rp1 * rho_alum
+ #w_cyl_lox = 2.*pi.*a.*cylheight_lox.*tc.*rho_alum
+ w_cyl_lox = pi*(R**2 - a**2) * cylheight_lox * rho_alum
+ #w_rp1fill = 2.*pi.*(0.75./2).*cylheight_lox.*0.125.*rho_alum
+ w_rp1fill = pi*(1**2 - 0.75**2) * cylheight_lox * rho_alum / 4
+ #w_helium_rp1 = 2.*pi.*0.125.*cylheight_lox.*0.125.*rho_alum
+ w_helium_rp1 = pi*(0.5**2 - 0.25**2) * cylheight_lox * rho_alum / 4
+ #w_helium_full = 2.*pi.*0.125.*(cylheight_lox+cylheight_rp1).*0.125.*rho_alum
+ w_helium_full = pi*(0.5**2 - 0.25**2) * (cylheight_rp1 + cylheight_lox) * rho_alum / 4
+ #w_annulus = 2.*pi.*((d_annulus - 0.25)./2).*cylheight_rp1.*0.125.*rho_alum
+ w_annulus = pi*(2.25**2 - 2**2) * cylheight_rp1 * rho_alum / 4
+ w_loxpipe = pi*(1**2 - 0.75**2) * cylheight_rp1 * rho_alum / 4
+ w_insulation = pi * ((2.25+0.2*2)**2 - 2.25**2) * cylheight_rp1 * 0.0058 / 4 #0.0058 = density of aerogel in lb./in3 :)
+ dry_weight = w_endcap + w_cyl_rp1 + w_cyl_lox + w_rp1fill + w_helium_rp1 + w_helium_full + w_annulus + w_loxpipe
+ wet_weight = dry_weight + m_prop
+
+
+
+ ## Pressurant Tank Sizing Code
+ prop_vol = vol_lox + vol_rp1
+ prop_press = P
+ gamma = 5/3 #ratio of specific heats for Helium
+ press_temp = 536.67 #pressurant temp in Rankine
+ R = 10.73159*12**3 #gas constant in imperial units, in3-psi / R-lb-mol
+ molar_mass = 4.003
+ initial_press = hePress #initial pressure in bottle, psi
+ final_press = P #final pressure at burnout, psi
+ press_tank_diam = 11.198 #outer diameter of pressurant tank, in, based on Ray's SW model
+
+ #min_tank_thickness =
+ #(3^(1/2)/4)*(initial_press*FoS*(press_tank_diam/2))/S #computes minimum
+ #thickness of the aluminum wall based on the PPT slides
+
+ min_tank_thickness = 0.86 #also based on Ray's SW model, for a more accurate estimate
+ hoop_stress = 0.5*(((initial_press*FoS*(press_tank_diam / 2))/(2*min_tank_thickness))+(4*(S)**2 - 3*((initial_press*FoS*(press_tank_diam / 2))/(2*min_tank_thickness))**2)**(0.5))
+ #wrap_thickness = ((initial_press * (press_tank_diam/2) * FoS)-(min_tank_thickness*hoop_stress))/(270000)
+
+ wrap_thickness = 0.131 #based on Ray's actual SW model, subject to change
+ press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass
+ press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press
+ press_tank_height = (press_vol - ((4/3)*pi*((press_tank_diam / 2)-min_tank_thickness-wrap_thickness)**3))/(pi*((press_tank_diam / 2)-min_tank_thickness-wrap_thickness)**2) + press_tank_diam
+
+ #estimates for the mass of the carbon fiber wrap
+ rho_cf = 0.06 #density of carbon fiber (roughly) in in^3
+ presstankwallcfvol = (pi*((press_tank_diam)/2)**2 - pi*((press_tank_diam /2) - wrap_thickness)**2) * (press_tank_height - press_tank_diam)
+ presstankendcapcfvol = (4/3)*pi*(press_tank_diam / 2)**3 - (4/3)*pi*((press_tank_diam/2) - wrap_thickness)**3
+ #sizes the approximate volume of carbon fiber material composing the tank walls
+ m_presstankwallcf = presstankwallcfvol*rho_cf
+ m_presstankcfendcaps = presstankendcapcfvol*rho_cf
+ press_tank_cf_mass = m_presstankwallcf + m_presstankcfendcaps
+
+ #estimates for the mass of the aluminum inner liner
+ presstankwallaluminumvol = (pi*(((press_tank_diam)/2) - wrap_thickness)**2 - pi*((press_tank_diam /2) - wrap_thickness - min_tank_thickness)**2) * (press_tank_height - press_tank_diam)
+ presstankendcapaluminumvol = (4/3)*pi*((press_tank_diam / 2) - wrap_thickness)**3 - (4/3)*pi*((press_tank_diam/2) - wrap_thickness - min_tank_thickness)**3
+ m_presstankwallalum = presstankwallaluminumvol * rho_alum
+ m_presstankendcapaluminum = presstankendcapaluminumvol * rho_alum
+ press_tank_alum_mass = m_presstankwallalum + m_presstankendcapaluminum
+ press_tank_mass = press_tank_cf_mass + press_tank_alum_mass
+
+ ## Fiberglass Vs. Aerogel and Internal Transfer Tube sizing :)
+ rhoglass = 0.75
+ rhoaerogel = 10
+ t_ag = 0.2
+ t_fg = 0.5
+ id_pipe = 0.75
+ od_pipe = 1
+ t_outerpipe = 0.2
+
+ #use the aerogel first, my fave
+ height_wall = vol_rp1 / ((pi*((D-tc-tc)/2)**2)- pi*((od_pipe/2) + t_ag + t_outerpipe)**2)
+ return (dry_weight,press_mass,press_tank_mass)
diff --git a/Design/Vehicle-Sizing/tank_sizing_7_1.py b/Design/Vehicle-Sizing/tank_sizing_7_1.py
new file mode 100644
index 0000000..26a8800
--- /dev/null
+++ b/Design/Vehicle-Sizing/tank_sizing_7_1.py
@@ -0,0 +1,154 @@
+import numpy as np
+
+# This program is adapted from Huzel and Huang's "Modern Engineering for
+# Design of Liquid-Propellant Rocket Engines" and uses the calculations for
+# tank dimensions found in Chapter 8
+
+def get_wall_mass(pressure,diameter,volume):
+ P = pressure #input tank pressure in psig
+
+ D = diameter #tank outer diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm/in**3
+ rho_lox = 0.04122124 #density of LOx, lbm/in**3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm/in**3
+ k = 2 #ratio of a/b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft/s**3
+ pi = np.pi
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in**3
+ # vol_rp1 = 10579.792 #volume of fuel in in**3
+ # d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ # d_annulus = 2 #outer diameter of annular lining, in
+ # d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+ d_pressline = 0
+ d_annulus = 0
+ d_rp1fill = 0
+ #as of new design, all plumbing is external :)
+ t_barlows = (P*D)/(2*S/FoS)
+
+ ## Calculates needed tank thickness based on loading characteristics
+ # Algebraic manipulation of eqn. 8-32 on p. 293 required to caclculate
+ # required cylindrical wall thickness based on loading criteria
+
+ tc_vec = np.arange(0,0.25,0.001) #vector of wall thicknesses for testing
+ LHS = 4*(Fc*FoS)*(1-v**2) / (E*pi) #the left-hand side of the eqn. on p.293
+
+ tc = 0
+ for i in tc_vec:
+ RHS = (36*i**3 - i**5) / (6-i)**3
+ if RHS <= LHS:
+ tc = i
+
+ ## test to see whether barlows is a bit more accurate than the other
+ if t_barlows >= tc:
+ tc = t_barlows
+ #tc = t_barlows
+ ## Uses required cylindrical wall thickness to estimate bulkhead thickness
+
+ a = R - tc #a is the internal radius, or major axis length of ellipse
+ b = a/2 #minor axis length, or head height--property of 2:1 shape
+ Eprime = 2*k + (1/np.sqrt(k**2-1))*np.log((k+np.sqrt(k**2-1))/(k-np.sqrt(k**2-1)))
+ #eprime is the "design factor" described on p. 292, for weight calcs later
+ #on
+
+ tk = (K*P*a) / (S*ew / FoS) #knuckle thickness, in
+ tcr = (P*R) / (2*S*ew / FoS) #crown thickness, in
+ tequiv = (tk + tcr) / 2 #average bulkhead thickness for weight calcs
+
+ ## Redimensions tanks according to volume and wetted area eqns. given in H&H
+
+ v_endcap = (2*pi*a**2*b)/3 #endcap volume capacity, in**3
+
+ leftovervol = volume - 2*v_endcap
+
+ cylheight = leftovervol / (pi * a**2)
+ w_cyl = cylheight * pi * (R**2 - a**2) * rho_alum
+
+ return w_cyl
+
+
+def getTankMass(rp1Press, loxPress, diameter, propMass, hePress):
+ ## Lists all required constants and values required for math-ing
+ D = diameter #tank outer diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm/in**3
+ rho_lox = 0.04122124 #density of LOx, lbm/in**3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm/in**3
+ k = 2 #ratio of a/b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft/s**3
+ pi = np.pi
+
+ mix_ratio = 2.23 #fuel mix ratio, for prop mass calcs and volume
+ m_prop = propMass #propellant mass in lbm--given from prop team
+ m_rp1 = m_prop / (1+mix_ratio) #computes needed amount of RP-1 based on mixture ratio
+ m_lox = m_prop - m_rp1 #remaining propellant must be LOx
+ vol_lox = m_lox / rho_lox#use density of propellants to compute volumes
+ vol_lox = vol_lox * 1.02 #adds an extra 2# of volume for ullage space
+ vol_rp1 = m_rp1 / rho_rp1
+ vol_rp1 = vol_rp1 * 1.02 #also adds an extra 2# of volume for ullage
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in**3
+ # vol_rp1 = 10579.792 #volume of fuel in in**3
+ # d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ # d_annulus = 2 #outer diameter of annular lining, in
+ # d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+ d_pressline = 0
+ d_annulus = 0
+ d_rp1fill = 0
+ #as of new design, all plumbing is external :)
+ ## Computes weights of tank segments also based on given equations
+ #pi*(outer_diameter**2 - inner_diameter**2) * height * rho_alum / 4
+ # weight of bulkheads in lbm for calculating--from SolidWorks
+ loxupper_weight = 5.83
+ loxlower_weight = 5.17
+ rp1upper_weight = 5.29
+ rp1lower_weight = 5.65
+ w_endcaps = loxupper_weight + loxlower_weight + rp1upper_weight + rp1lower_weight
+
+ #weight of respective cylindrical sections
+ w_cyl_rp1 = get_wall_mass(rp1Press,diameter,vol_rp1)
+ w_cyl_lox = get_wall_mass(loxPress,diameter,vol_lox)
+
+ # all plumbing weights are no longer included
+ dry_weight = w_endcaps + w_cyl_rp1 + w_cyl_lox
+ wet_weight = dry_weight + m_prop
+
+ print(w_cyl_lox)
+ print(w_cyl_rp1)
+
+ ## Pressurant Tank Sizing Code
+ prop_vol = vol_lox + vol_rp1
+ prop_press = rp1Press
+ gamma = 5/3 #ratio of specific heats for Helium
+ press_temp = 536.67 #pressurant temp in Rankine
+ R = 10.73159*(12**3) #gas constant in imperial units, in3-psi / R-lb-mol
+ molar_mass = 4.003
+ initial_press = hePress #initial pressure in bottle, psi
+ final_press = rp1Press #final pressure at burnout, psi
+ press_tank_diam = 11 #outer diameter of pressurant tank, in, based on Ray's SW model
+
+
+ press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass
+ press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press
+ # Pressurant Tank sizing calcs also excluded since they suck
+
+ return (dry_weight,press_mass)
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/tank_sizing_8_3.py b/Design/Vehicle-Sizing/tank_sizing_8_3.py
new file mode 100644
index 0000000..3e335d7
--- /dev/null
+++ b/Design/Vehicle-Sizing/tank_sizing_8_3.py
@@ -0,0 +1,152 @@
+import numpy as np
+
+# This program is adapted from Huzel and Huang's "Modern Engineering for
+# Design of Liquid-Propellant Rocket Engines" and uses the calculations for
+# tank dimensions found in Chapter 8
+
+def get_wall_mass(pressure,diameter,volume):
+ P = pressure #input tank pressure in psig
+
+ D = diameter #tank outer diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm/in**3
+ rho_lox = 0.04122124 #density of LOx, lbm/in**3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm/in**3
+ k = 2 #ratio of a/b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft/s**3
+ pi = np.pi
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in**3
+ # vol_rp1 = 10579.792 #volume of fuel in in**3
+ # d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ # d_annulus = 2 #outer diameter of annular lining, in
+ # d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+ d_pressline = 0
+ d_annulus = 0
+ d_rp1fill = 0
+ #as of new design, all plumbing is external :)
+ t_barlows = (P*D)/(2*S/FoS)
+
+ ## Calculates needed tank thickness based on loading characteristics
+ # Algebraic manipulation of eqn. 8-32 on p. 293 required to caclculate
+ # required cylindrical wall thickness based on loading criteria
+
+ tc_vec = np.arange(0,0.25,0.001) #vector of wall thicknesses for testing
+ LHS = 4*(Fc*FoS)*(1-v**2) / (E*pi) #the left-hand side of the eqn. on p.293
+
+ tc = 0
+ for i in tc_vec:
+ RHS = (36*i**3 - i**5) / (6-i)**3
+ if RHS <= LHS:
+ tc = i
+
+ ## test to see whether barlows is a bit more accurate than the other
+ if t_barlows >= tc:
+ tc = t_barlows
+ #tc = t_barlows
+ ## Uses required cylindrical wall thickness to estimate bulkhead thickness
+
+ a = R - tc #a is the internal radius, or major axis length of ellipse
+ b = a/2 #minor axis length, or head height--property of 2:1 shape
+ Eprime = 2*k + (1/np.sqrt(k**2-1))*np.log((k+np.sqrt(k**2-1))/(k-np.sqrt(k**2-1)))
+ #eprime is the "design factor" described on p. 292, for weight calcs later
+ #on
+
+ tk = (K*P*a) / (S*ew / FoS) #knuckle thickness, in
+ tcr = (P*R) / (2*S*ew / FoS) #crown thickness, in
+ tequiv = (tk + tcr) / 2 #average bulkhead thickness for weight calcs
+
+ ## Redimensions tanks according to volume and wetted area eqns. given in H&H
+
+ v_endcap = (2*pi*a**2*b)/3 #endcap volume capacity, in**3
+
+ leftovervol = volume - 2*v_endcap
+
+ cylheight = leftovervol / (pi * a**2)
+ w_cyl = cylheight * pi * (R**2 - a**2) * rho_alum
+
+ return w_cyl
+
+
+def getTankMass(rp1Press, loxPress, diameter, propMass, hePress):
+ ## Lists all required constants and values required for math-ing
+ D = diameter #tank outer diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm/in**3
+ rho_lox = 0.04122124 #density of LOx, lbm/in**3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm/in**3
+ k = 2 #ratio of a/b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft/s**3
+ pi = np.pi
+
+ mix_ratio = 2.23 #fuel mix ratio, for prop mass calcs and volume
+ m_prop = propMass #propellant mass in lbm--given from prop team
+ m_rp1 = m_prop / (1+mix_ratio) #computes needed amount of RP-1 based on mixture ratio
+ m_lox = m_prop - m_rp1 #remaining propellant must be LOx
+ vol_lox = m_lox / rho_lox#use density of propellants to compute volumes
+ vol_lox = vol_lox * 1.02 #adds an extra 2# of volume for ullage space
+ vol_rp1 = m_rp1 / rho_rp1
+ vol_rp1 = vol_rp1 * 1.02 #also adds an extra 2# of volume for ullage
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in**3
+ # vol_rp1 = 10579.792 #volume of fuel in in**3
+ # d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ # d_annulus = 2 #outer diameter of annular lining, in
+ # d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+ d_pressline = 0
+ d_annulus = 0
+ d_rp1fill = 0
+ #as of new design, all plumbing is external :)
+ ## Computes weights of tank segments also based on given equations
+ #pi*(outer_diameter**2 - inner_diameter**2) * height * rho_alum / 4
+ # weight of bulkheads in lbm for calculating--from SolidWorks
+ lox_bulkhead_weights = 11.68
+ rp1_bulkhead_weights = 10.94
+ w_endcaps = lox_bulkhead_weights + rp1_bulkhead_weights
+
+ #weight of respective cylindrical sections
+ w_cyl_rp1 = get_wall_mass(rp1Press,diameter,vol_rp1)
+ w_cyl_lox = get_wall_mass(loxPress,diameter,vol_lox)
+
+ # all plumbing weights are no longer included
+ dry_weight = w_endcaps + w_cyl_rp1 + w_cyl_lox
+ wet_weight = dry_weight + m_prop
+
+ print(w_cyl_lox)
+ print(w_cyl_rp1)
+
+ ## Pressurant Tank Sizing Code
+ prop_vol = vol_lox + vol_rp1
+ prop_press = rp1Press
+ gamma = 5/3 #ratio of specific heats for Helium
+ press_temp = 536.67 #pressurant temp in Rankine
+ R = 10.73159*(12**3) #gas constant in imperial units, in3-psi / R-lb-mol
+ molar_mass = 4.003
+ initial_press = hePress #initial pressure in bottle, psi
+ final_press = rp1Press #final pressure at burnout, psi
+ press_tank_diam = 11 #outer diameter of pressurant tank, in, based on Ray's SW model
+
+
+ press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass
+ press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press
+ # Pressurant Tank sizing calcs also excluded since they suck
+
+ return (dry_weight,press_mass)
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/tank_sizing_9_20.py b/Design/Vehicle-Sizing/tank_sizing_9_20.py
new file mode 100644
index 0000000..496ef8f
--- /dev/null
+++ b/Design/Vehicle-Sizing/tank_sizing_9_20.py
@@ -0,0 +1,152 @@
+import numpy as np
+
+# This program is adapted from Huzel and Huang's "Modern Engineering for
+# Design of Liquid-Propellant Rocket Engines" and uses the calculations for
+# tank dimensions found in Chapter 8
+
+def get_wall_mass(pressure,diameter,volume):
+ P = pressure #input tank pressure in psig
+
+ D = diameter #tank outer diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm/in**3
+ rho_lox = 0.04122124 #density of LOx, lbm/in**3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm/in**3
+ k = 2 #ratio of a/b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft/s**3
+ pi = np.pi
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in**3
+ # vol_rp1 = 10579.792 #volume of fuel in in**3
+ # d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ # d_annulus = 2 #outer diameter of annular lining, in
+ # d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+ d_pressline = 0
+ d_annulus = 0
+ d_rp1fill = 0
+ #as of new design, all plumbing is external :)
+ t_barlows = (P*D)/(2*S/FoS)
+
+ ## Calculates needed tank thickness based on loading characteristics
+ # Algebraic manipulation of eqn. 8-32 on p. 293 required to caclculate
+ # required cylindrical wall thickness based on loading criteria
+
+ tc_vec = np.arange(0,0.25,0.001) #vector of wall thicknesses for testing
+ LHS = 4*(Fc*FoS)*(1-v**2) / (E*pi) #the left-hand side of the eqn. on p.293
+
+ tc = 0
+ for i in tc_vec:
+ RHS = (36*i**3 - i**5) / (6-i)**3
+ if RHS <= LHS:
+ tc = i
+
+ ## test to see whether barlows is a bit more accurate than the other
+ if t_barlows >= tc:
+ tc = t_barlows
+ #tc = t_barlows
+ ## Uses required cylindrical wall thickness to estimate bulkhead thickness
+
+ a = R - tc #a is the internal radius, or major axis length of ellipse
+ b = a/2 #minor axis length, or head height--property of 2:1 shape
+ Eprime = 2*k + (1/np.sqrt(k**2-1))*np.log((k+np.sqrt(k**2-1))/(k-np.sqrt(k**2-1)))
+ #eprime is the "design factor" described on p. 292, for weight calcs later
+ #on
+
+ tk = (K*P*a) / (S*ew / FoS) #knuckle thickness, in
+ tcr = (P*R) / (2*S*ew / FoS) #crown thickness, in
+ tequiv = (tk + tcr) / 2 #average bulkhead thickness for weight calcs
+
+ ## Redimensions tanks according to volume and wetted area eqns. given in H&H
+
+ v_endcap = (2*pi*a**2*b)/3 #endcap volume capacity, in**3
+
+ leftovervol = volume - 2*v_endcap
+
+ cylheight = leftovervol / (pi * a**2)
+ w_cyl = cylheight * pi * (R**2 - a**2) * rho_alum
+
+ return w_cyl, cylheight
+
+
+def getTankMassLen(rp1Press, loxPress, diameter, propMass, hePress):
+ ## Lists all required constants and values required for math-ing
+ D = diameter #tank outer diameter in inches
+ R = D/2 #tank radius, in
+ S = 40000 #yield strength of 6061-T6 alloy in psi
+ Sc = 56000 #compressive yield strength of 6061-T6 in psi
+ FoS = 1.5 #factor of safety
+ v = 0.33 #Poisson's ratio of 6061-T6 alloy, unitless
+ ew = 0.85 #approximate efficiency of welded joints
+ E = 1e7 #6061-T6 modulus of elasticity, psi
+ rho_alum = 0.0975 #density of aluminum, lbm/in**3
+ rho_lox = 0.04122124 #density of LOx, lbm/in**3
+ rho_rp1 = 0.0292631 #density of RP-1, lbm/in**3
+ k = 2 #ratio of a/b, which should be 2:1 due to the semi-elliptical tank head design
+ K = 1.2 #obtained from graph on page 292 of H&H book
+ Fc = 3305 #estimated critical loading on rocket during flight, lbf
+ g = 32.2 #gravitational acceleration, ft/s**3
+ pi = np.pi
+
+ mix_ratio = 2.23 #fuel mix ratio, for prop mass calcs and volume
+ m_prop = propMass #propellant mass in lbm--given from prop team
+ m_rp1 = m_prop / (1+mix_ratio) #computes needed amount of RP-1 based on mixture ratio
+ m_lox = m_prop - m_rp1 #remaining propellant must be LOx
+ vol_lox = m_lox / rho_lox#use density of propellants to compute volumes
+ vol_lox = vol_lox * 1.02 #adds an extra 2# of volume for ullage space
+ vol_rp1 = m_rp1 / rho_rp1
+ vol_rp1 = vol_rp1 * 1.02 #also adds an extra 2# of volume for ullage
+
+ #not required unless volume is given instead of mass
+ # vol_lox = 16748.707 #volume of oxidizer in in**3
+ # vol_rp1 = 10579.792 #volume of fuel in in**3
+ # d_pressline = 0.5 #outer diameter of pressurant lines through tanks, in
+ # d_annulus = 2 #outer diameter of annular lining, in
+ # d_rp1fill = 1 #outer diameter of fill line to rp-1, in
+ d_pressline = 0
+ d_annulus = 0
+ d_rp1fill = 0
+ #as of new design, all plumbing is external :)
+ ## Computes weights of tank segments also based on given equations
+ #pi*(outer_diameter**2 - inner_diameter**2) * height * rho_alum / 4
+ # weight of bulkheads in lbm for calculating--from SolidWorks
+ lox_bulkhead_weights = 11.68
+ rp1_bulkhead_weights = 10.94
+ w_endcaps = lox_bulkhead_weights + rp1_bulkhead_weights
+
+ #weight of respective cylindrical sections
+ w_cyl_rp1, len_rp1 = get_wall_mass(rp1Press,diameter,vol_rp1)
+ w_cyl_lox, len_lox = get_wall_mass(loxPress,diameter,vol_lox)
+
+ # all plumbing weights are no longer included
+ dry_weight = w_endcaps + w_cyl_rp1 + w_cyl_lox
+ wet_weight = dry_weight + m_prop
+
+ #print(w_cyl_lox)
+ #print(w_cyl_rp1)
+
+ ## Pressurant Tank Sizing Code
+ prop_vol = vol_lox + vol_rp1
+ prop_press = rp1Press
+ gamma = 5/3 #ratio of specific heats for Helium
+ press_temp = 536.67 #pressurant temp in Rankine
+ R = 10.73159*(12**3) #gas constant in imperial units, in3-psi / R-lb-mol
+ molar_mass = 4.003
+ initial_press = hePress #initial pressure in bottle, psi
+ final_press = rp1Press #final pressure at burnout, psi
+ press_tank_diam = 11 #outer diameter of pressurant tank, in, based on Ray's SW model
+
+
+ press_mass = ((prop_press * prop_vol) / (R * press_temp)) * (gamma / (1-(final_press/initial_press))) * molar_mass
+ press_vol = (press_mass * (1/molar_mass) * R * press_temp) / initial_press
+ # Pressurant Tank sizing calcs also excluded since they suck
+
+ return dry_weight, press_mass, len_lox, len_rp1
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/tank_test.py b/Design/Vehicle-Sizing/tank_test.py
new file mode 100755
index 0000000..6c0d8fa
--- /dev/null
+++ b/Design/Vehicle-Sizing/tank_test.py
@@ -0,0 +1,3 @@
+import tank_sizing_7_1 as tank
+
+print(tank.getTankMass(700,600,12,1166.27,6000))
\ No newline at end of file
diff --git a/Design/Vehicle-Sizing/tankinterface.py b/Design/Vehicle-Sizing/tankinterface.py
deleted file mode 100644
index 3758175..0000000
--- a/Design/Vehicle-Sizing/tankinterface.py
+++ /dev/null
@@ -1,75 +0,0 @@
-import numpy as np
-import tanksim
-
-# Begin importing text file stuff...yay!
-file = open('input.txt', 'r')
-# this opens the file 'input.txt' from whatever directory the program is
-# saved to--make sure to download it or move it to the same directory!
-
-prop_diam_text = file.readlines(1) # reads first line of the input file
-for line in prop_diam_text:
- prop_diam_stuff = line.split() # saves split results of first line
-diam = float(prop_diam_stuff[1]) # saves proper variables from that array, converted to float
-
-prop_press_text = file.readlines(2) # continues to read down the input file
-for line in prop_press_text:
- prop_press_stuff = line.split()
-lox_press = float(prop_press_stuff[1])
-rp1_press = lox_press # can be better worked into the code later, but should be the same
-''' Quick note here: I'd already written the code such that it would allow for two different
-tank pressure inputs before adding the input text file capability, and I really didn't want
-to go back and rewrite all my code at the risk of missing a variable somewhere or skewing an
-equation. Leaving it like this also makes it a lot easier down the road if we decide we'd like
-to keep the two tanks at different pressures for some reason. It also makes it a lot easier to
-tell which tanks you're doing calculations for if they have different variable names, rather than
-just a generic "tank pressure".'''
-
-fos_text = file.readlines(3)
-for line in fos_text:
- fos_stuff = line.split()
-fos = float(fos_stuff[1])
-
-press_diam_text = file.readlines(4)
-for line in press_diam_text:
- press_diam_stuff = line.split()
-press_tank_diam = float(press_diam_stuff[1])
-
-press_ipress_text = file.readlines(5)
-for line in press_ipress_text:
- press_ipress_stuff = line.split()
-initial_press = float(press_ipress_stuff[1])
-
-press_fpress_text = file.readlines(6)
-for line in press_fpress_text:
- press_fpress_stuff = line.split()
-final_press = float(press_fpress_stuff[1])
-
-file.close() # closes the input file once everything's read in
-
-testtank = tanksim.tank(diam,lox_press,fos,press_tank_diam,initial_press,final_press,796.618,357.228)
-tankSpecs = testtank.tankCalc()
-pressSpecs = testtank.pressTankCalc()
-
-tank_mass = tankSpecs['tank_mass']
-total_height = tankSpecs['total_height']
-lox_height = tankSpecs['lox_height']
-rp1_height = tankSpecs['rp1_height']
-
-press_vol = pressSpecs['press_vol']
-press_mass = pressSpecs['press_mass']
-tank_height = pressSpecs['tank_height']
-
-print('The propellant tank diameter is ' + str(diam) + ' in')
-print('The LOx tank pressure is ' + str(lox_press) + ' psi')
-print('The RP-1 tank pressure is ' + str(rp1_press) + ' psi')
-print('The total mass is ' + str(round(tank_mass, 3)) + ' lbs')
-print('The total tank height is ' + str(round(total_height, 3)) + ' in')
-print('The LOx tank is ' + str(round(lox_height, 3)) + ' in high')
-print('The RP-1 tank is ' + str(round(rp1_height, 3)) + ' in high')
-print(tank_mass * lox_height / total_height)
-print(tank_mass * rp1_height / total_height)
-
-print('The helium tank diameter is ' + str(press_tank_diam) + ' in')
-print('The volume of helium needed is ' + str(round(press_vol, 3)) + ' in^3')
-print('The mass of helium needed is ' + str(round(press_mass, 3)) + ' lbm')
-print('The pressurant tank is ' + str(round(tank_height, 3)) + ' in high')
diff --git a/Design/Vehicle-Sizing/tanksim.py b/Design/Vehicle-Sizing/tanksim.py
deleted file mode 100644
index 2f139ef..0000000
--- a/Design/Vehicle-Sizing/tanksim.py
+++ /dev/null
@@ -1,191 +0,0 @@
-import numpy as np
-
-class tank:
- def __init__(self,diam,press,fos,pressDiam,initial_press,final_press,m_lox,m_rp1):
- self.pi = np.pi
- self.rho_lox = 0.04122124 # density of LOx as given in Vehicle Sizing spreadsheet V1, lbm/in^3
- self.rho_rp1 = 0.0292631 # density of RP-1, MS Vehicle Sizing V1
- self.rho_alum = 0.0975 # density of Aluminum 6061-T6, the likely choice for tanks
- self.ys_alum = 40030.488 # yield strength of 6061-T6
- self.diam = diam
- self.lox_press = press
- self.rp1_press = press
- self.fos = fos
- self.press_tank_diam = pressDiam
- self.initial_press = initial_press
- self.final_press = final_press
- self.k = 0.725158 # Roundness factor for 2:1 elliptical heads, as given by [insert link here]
- self.Ef = 0.85 # joint efficiency of any welded joints, might change or not be used
- self.m_lox = m_lox
- self.m_rp1 = m_rp1
- self.tubediam = 0.83 # OD for transfer tube, in (for subtracting volume)
- self.lox_rectangle_len = 1.322
- self.rp1_rectangle_len = 1.048
- self.gamma = 5 / 3; # the ratio of specific heats for the gas equations
- self.press_temp = 536.67 # gives temperature of pressurant in *R
- self.gasConst = 10.73159*12**3 # gas constant in imperial, in^3-psi / *R-lbmol
- self.molar_mass = 4.003 # also for gas equations, lbm/lbmol
- self.vol_mounting_lox = 2.35
- self.vol_mounting_rp1 = 1.64
- self.vh_com_lox = (((self.diam / 2) - 0.5)**3 * 0.5 * (self.pi/24) * 2) - self.vol_mounting_lox
- self.vh_com_rp1 = (((self.diam / 2) - 0.5)**3 * 0.5 * (self.pi/24) * 2) - self.vol_mounting_rp1
-
- def volume(self,mass,density):
- return mass/density
-
- def tankThickness(self,pressure,diameter,ys,fos):
- return (pressure * diameter) / (2 * ys / fos)
-
- def headThickness(self,pressure,diameter,k,Ef,ys,fos):
- return (pressure * diameter * k) / ((2 * Ef * ys / fos) - (0.2 * pressure))
-
- def mountRectangleVolume(self,rectangleLen):
- indVol = 0.5**2 * rectangleLen
- totVol = indVol * 6
- return totVol
-
- def headInnerVolume(self,diameter,headThickness,rectangleLen):
- totalVolume = (diameter - (2 * headThickness))**3 * 0.5 * (self.pi / 24) * 2
- return totalVolume - self.mountRectangleVolume(rectangleLen)
-
- def LOxTankWallHeight(self,loxVolume,diameter,headVolume,tankThickness):
- return (loxVolume - (headVolume + self.vh_com_lox)) / (self.pi * ((diameter - 2 * tankThickness)/2)**2)
-
- def RP1TankWallHeight(self,rp1Volume,diameter,tankThickness):
- return (rp1Volume) / (self.pi * (((diameter - (2 * tankThickness))/2)**2 - (self.tubediam / 2)**2))
-
- def LOxTankVolume(self,headVolume,diameter,tankThickness,wallHeight):
- return (self.vh_com_lox + headVolume) + (self.pi * ((diameter - (2 * tankThickness))/2)**2 * wallHeight)
-
- def RP1TankVolume(self,diameter,tankThickness,wallHeight):
- return (self.pi * ((diameter - (2 * tankThickness))/2)**2 * wallHeight)
-
- def intHeadHeight(self,diameter,headThickness):
- return (diameter - 2 * headThickness) / 4
-
- def extHeadHeight(self,intHeadHeight,headThickness):
- return intHeadHeight + headThickness
-
- def loxTankHeight(self,extHeadHeight,wallHeight):
- return 2 * extHeadHeight + wallHeight
-
- def rp1TankHeight(self,extHeadHeight,wallHeight):
- return extHeadHeight + wallHeight
-
- def totalTankHeight(self,rp1ExtHeadHeight,loxExtHeadHeight,rp1TankWallHeight,loxTankWallHeight):
- return rp1ExtHeadHeight + loxExtHeadHeight + rp1TankWallHeight + loxTankWallHeight
-
- def CADSpecs(self,diameter,rp1TankThickness,loxTankThickness):
- id_lox = diameter - 2 * loxTankThickness # inside diameter of the tanks, in
- id_rp1 = diameter - 2 * rp1TankThickness
- KRi_lox = 0.17 * id_lox # knuckle radii and crown radii of ellipses, inside and out, in
- CRi_lox = 0.9 * id_lox
- KRo_lox = 0.17 * diameter
- CRo_lox = 0.9 * diameter
- KRi_rp1 = 0.17 * id_rp1
- CRi_rp1 = 0.9 * id_rp1
- KRo_rp1 = 0.17 * diameter
- CRo_rp1 = 0.9 * diameter
- return {'id_lox': id_lox,
- 'id_rp1': id_rp1,
- 'KRi_lox': KRi_lox,
- 'CRi_lox': CRi_lox,
- 'KRo_lox': KRo_lox,
- 'CRo_lox': CRo_lox,
- 'KRi_rp1': KRi_rp1,
- 'CRi_rp1': CRi_rp1,
- 'KRo_rp1': KRo_rp1,
- 'CRo_rp1': CRo_rp1}
-
- def headMetalVolume(self,diameter,headInnerVolume):
- return ((diameter**3) * 0.5 * (self.pi / 24) * 2) - headInnerVolume
-
- def wallMetalVolume(self,diameter,wallHeight,wallThickness):
- return (self.pi * (diameter / 2)**2 * wallHeight) - (self.pi * (((diameter - 2 * wallThickness)/2)**2) * wallHeight)
-
- def commonBulkheadVolume(self,diameter):
- return ((((diameter / 2) - 0.5)**3 * 0.5 * (self.pi / 24) * 2) * 2) + self.vol_mounting_rp1 + self.vol_mounting_lox
-
- def totalMetalVolume(self,loxHeadMetalVolume,rp1HeadMetalVolume,loxWallMetalVolume,rp1WallMetalVolume,commonBulkheadMetal):
- return loxHeadMetalVolume + rp1HeadMetalVolume + loxWallMetalVolume + rp1WallMetalVolume + commonBulkheadMetal
-
- def totalPropVol(self, loxMass, rp1Mass, loxDen, rp1Den):
- return self.volume(loxMass,loxDen) + self.volume(rp1Mass,rp1Den)
-
- def pressMass(self,propPress,propVol,finalPress,initialPress):
- return ((propPress * propVol) / (self.gasConst * self.press_temp)) * (self.gamma / (1-(finalPress/initialPress))) * self.molar_mass
-
- def pressVol(self,pressMass,initialPress):
- return (pressMass * (1/self.molar_mass) * self.gasConst * self.press_temp) / initialPress
-
- def pressTankHeight(self,pressVol,pressTankDiam):
- return ((pressVol - (4/3) * self.pi * (pressTankDiam / 2)**3) / (self.pi * (pressTankDiam / 2)**2)) + pressTankDiam
-
- def pressTankCalc(self):
- prop_vol = self.totalPropVol(self.m_lox,self.m_rp1,self.rho_lox,self.rho_rp1)
- press_mass = self.pressMass(self.lox_press,prop_vol,self.final_press,self.initial_press)
- press_vol = self.pressVol(press_mass,self.initial_press)
- tank_height = self.pressTankHeight(press_vol,self.press_tank_diam)
- return {'press_mass': press_mass,
- 'press_vol': press_vol,
- 'tank_height': tank_height}
-
- def tankCalc(self):
- vol_lox = self.volume(self.m_lox,self.rho_lox)
- vol_rp1 = self.volume(self.m_rp1,self.rho_rp1)
- t_lox = self.tankThickness(self.lox_press,self.diam,self.ys_alum,self.fos)
- t_rp1 = self.tankThickness(self.rp1_press,self.diam,self.ys_alum,self.fos)
- th_lox = self.headThickness(self.lox_press,self.diam,self.k,self.Ef,self.ys_alum,self.fos)
- th_rp1 = self.headThickness(self.rp1_press,self.diam,self.k,self.Ef,self.ys_alum,self.fos)
- vh_lox = self.headInnerVolume(self.diam,th_lox,self.lox_rectangle_len)
- vh_rp1 = self.headInnerVolume(self.diam,th_rp1,self.rp1_rectangle_len)
- sh_lox = self.LOxTankWallHeight(vol_lox,self.diam,vh_lox,t_lox)
- sh_rp1 = self.RP1TankWallHeight(vol_rp1,self.diam,t_rp1)
- vol_loxtank = self.LOxTankVolume(vh_lox,self.diam,t_lox,sh_lox)
- vol_rp1tank = self.RP1TankVolume(self.diam,t_rp1,sh_rp1)
- hi_lox = self.intHeadHeight(self.diam,th_lox)
- ho_lox = self.extHeadHeight(hi_lox,th_lox)
- hi_rp1 = self.intHeadHeight(self.diam,th_rp1)
- ho_rp1 = self.extHeadHeight(hi_rp1,th_rp1)
- lox_height = self.loxTankHeight(ho_lox,sh_lox)
- rp1_height = self.rp1TankHeight(ho_rp1,sh_rp1)
- total_height = self.totalTankHeight(ho_rp1,ho_lox,sh_rp1,sh_lox)
- CAD_specs = self.CADSpecs(self.diam,t_rp1,t_lox)
- loxheadmetal = self.headMetalVolume(self.diam,vh_lox)
- rp1headmetal = self.headMetalVolume(self.diam,vh_rp1)
- metalwalllox = self.wallMetalVolume(self.diam,sh_lox,t_lox)
- metalwallrp1 = self.wallMetalVolume(self.diam,sh_rp1,t_rp1)
- lox_total_rect_volume = self.mountRectangleVolume(self.lox_rectangle_len)
- rp1_total_rect_volume = self.mountRectangleVolume(self.rp1_rectangle_len)
- commonBulkheadMetal = self.commonBulkheadVolume(self.diam)
- metalvolume = self.totalMetalVolume(loxheadmetal,rp1headmetal,metalwalllox,metalwallrp1,commonBulkheadMetal)
- tank_mass = metalvolume * self.rho_alum
- return {'vol_lox': vol_lox,
- 'vol_rp1': vol_rp1,
- 't_lox': t_lox,
- 't_rp1': t_rp1,
- 'th_lox': th_lox,
- 'th_rp1': th_rp1,
- 'vh_lox': vh_lox,
- 'vh_rp1': vh_rp1,
- 'sh_lox': sh_lox,
- 'sh_rp1': sh_rp1,
- 'vol_loxtank': vol_loxtank,
- 'vol_rp1tank': vol_rp1tank,
- 'hi_lox': hi_lox,
- 'ho_lox': ho_lox,
- 'hi_rp1': hi_rp1,
- 'ho_rp1': ho_rp1,
- 'lox_height': lox_height,
- 'rp1_height': rp1_height,
- 'total_height': total_height,
- 'CAD_specs': CAD_specs,
- 'loxheadmetal': loxheadmetal,
- 'rp1headmetal': rp1headmetal,
- 'metalwalllox': metalwalllox,
- 'metalwallrp1': metalwallrp1,
- 'lox_total_rect_volume': lox_total_rect_volume,
- 'rp1_total_rect_volume': rp1_total_rect_volume,
- 'commonBulkheadMetal': commonBulkheadMetal,
- 'metalvolume': metalvolume,
- 'tank_mass': tank_mass}
diff --git a/Design/Vehicle-Sizing/variable_thrust.py b/Design/Vehicle-Sizing/variable_thrust.py
new file mode 100644
index 0000000..6707cb1
--- /dev/null
+++ b/Design/Vehicle-Sizing/variable_thrust.py
@@ -0,0 +1,161 @@
+import numpy as np
+
+def natural_cubic_spline(xi, yi, xtarget):
+ np.testing.assert_approx_equal(len(xi), len(yi), err_msg='lengths are not equal')
+ diff = (xi[j+1] - xi[j] for j in range(len(xi) - 1))
+ for i in diff:
+ if i <= 0:
+ raise Exception('x values are not ordered')
+
+ n = len(xi)
+ M = np.zeros(n)
+ rhs = np.zeros(n,1)
+ hi = diff
+ for i in range(1,n-1):
+ M[i,i-1] = hi[i-1]
+ M[i,i] = 2*(hi[i-1]+hi[i])
+ M[i,i+1] = hi[i]
+ rhs[i] = 3*(((yi[i+1] -yi[i])/(xi[i+1] - xi[i])) - ((yi[i] - yi[i-1])/(xi[i] - xi[i-1])))
+
+ M[1,1] = 1
+ M[1,2] = 0
+ M[n,n] = 1
+ M[n,n-1] = 0
+ rhs[1] = 0
+ rhs[n] = 0
+
+ a = np.zeros(n-1)
+ b = np.zeros(n-1)
+ d = np.zeros(n-1)
+ C = np.linalg.solve(M,rhs)
+ for i in range(n-1):
+ a[i] = yi[i]
+ d[i] = (c[i+1] - c[i])/(3*hi[i])
+ b[i] = (yi[i+1] - yi[i]) / (hi[i]) - (c[i+1]+2*c[i])*hi[i]/3
+
+
+ slist = []
+ for i in range(n-1):
+ f = lambda x : a[i] + b[i]*(x - xi[i]) + c[i]*(x - xi[i])**2 + d*(x - xi[i])**3
+ slist.append(f)
+ S = np.array(slist)
+
+ for i in range(n-1):
+ if xtarget >= xi[i] and xtarget <= xi[i+1]:
+ ytarget = S[i](xtarget)
+ if xtarget > xi[-1]:
+ ytarget = S[i](xi[-1])
+ return ytarget
+
+def Thrust_Chamber_Design(Thrust,Impulse):
+ Pc = 650 # psi
+ Pc_atm = Pc/14.6959
+ P_Launch = 0.849 # atm
+ Pe = .5*P_Launch # atm ("Summerfield Criterion")
+ P_amb = P_Exit # atm
+ Burn_Time = Impulse/Thrust # sec
+
+ dPe = [34, 33, 34, 33, 33, 33, 34, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33]
+ hPe = [1, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 33, 34, 35, 36, 37, 38, 39, 39,
+ 40, 41, 42, 43, 43, 44, 45, 45, 46, 47, 47]
+
+ Rmin = 2.20 # O/F lowest value of mixture ratio
+ P = Pc_atm - 25 # atm atm of pressure ofer 25 atm
+ dPc_R = 25/49 # atm/pixel x-axis increments
+ n_pix_Pc_R = P//dPc_R # pixels # of pixels past 25 atm on x-axis
+ if n_pix_Pc_R < 1:
+ n_pix_Pc_R = 1
+ dR = .45/341 # units/pixel y-axis increments
+ n_dPe = dPe[n_pix_Pc_R - 1] # pixels dPe for desired chamber pressure
+ n_pix_Pe = n_dPe*(1-1/.9*(Pe-.1))
+ Mixture_Ratio = Rmin + dR*(n_pix_Pe + hPe[n_pix_Pc_R - 1])
+
+ dRT = [30, 30, 30, 30, 30, 30, 31, 31, 32, 32, 32, 32, # number of pixels between Ratio curves (2.2 and 2.3)
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35,
+ 34, 35, 35, 35, 36, 35, 36, 36, 35, 36, 36, 36]
+
+ hRT = [10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, # number of pixels between Tmin and bottom curve
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31, 32,
+ 33, 34, 35, 35, 36, 37, 37, 38, 39, 40, 40, 41,
+ 42, 42, 43, 44, 44, 45, 45, 46, 47, 47, 48, 48]
+
+ Tmin = 3350 # K lowest value of temperature
+ dPc_T = 25/48 # atm/pixel x-axis increments
+ n_pix_Pc_T = P//dPc_T # pixels # of pixels past 25 atm on x-axis
+ if n_pix_Pc_T < 1:
+ n_pix_Pc_T = 1
+ dT = 600/341 # K/pixel y-axis increments
+ n_dRT = dRT[n_pix_Pc_T] # pixels dRT for desired chamber pressure
+ n_pix_RT = n_dRT/.1*(R-2.2) # pixels # of pixels above bottom curve
+
+ T_Chamber = Tmin + dT*(n_pix_RT + hRT[n_pix_Pc_T]) # Kelvin
+
+ dRM = [74, 74, 74, 74, 74, 75, 75, 74, 75, 75, 75, 75, # number of pixels between Ratio curves (2.2 and 2.3)
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76,
+ 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77]
+
+ hRM = [32, 33, 33, 34, 35, 35, 36, 37, 37, 38, 38, 39, # # of pixels between Mmin and bottom curve
+ 40, 40, 41, 41, 42, 43, 43, 44, 44, 45, 45, 46,
+ 46, 47, 47, 47, 48, 48, 49, 49, 49, 50, 50, 50,
+ 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54]
+
+ Mmin = 20.8 # amu lowest value of weight
+ dPc_M = 25/48 # atm/pixel x-axis increments
+ n_pix_Pc_M = P//dPc_M # pixels # of pixels past 25 atm on x-axis
+ if n_pix_Pc_M < 1:
+ n_pix_Pc_M = 1
+ dM = 2/341 # amu/pixel y-axis increments
+ n_dRM = dRM[n_pix_Pc_M] # pixels dRT for desired chamber pressure
+ n_pix_RM = n_dRM/.1*(R-2.2) # pixels # of pixels above bottom curve
+
+ Gas_Molecular_Weight = Mmin + dM*(n_pix_RM + hRM[n_pix_Pc_M]) # amu
+
+ dRy = [46, 46.5, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, # number of pixels between Ratio curves (2.2 and 2.3)
+ 47, 47, 47, 47, 47.5, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48.5, 48.5, 48, 48.5, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49]
+
+ hRy = [58, 56.5, 55, 54, 53, 52, 50.5, 49, 48, 47, 46, 45.5, # number of pixels between ymin and bottom curve
+ 45, 44, 43, 42, 41, 40, 39, 38, 37, 36.5, 36, 35,
+ 34, 33, 32, 31.5, 31, 30, 29, 28, 27.5, 27, 26, 25.5,
+ 25, 24, 23.5, 23, 22.5, 22, 21, 20.5, 20, 19.5, 19]
+
+ ymin = 1.219 # amu lowest value of specific heat ratio
+ dPc_y = 25/47 # atm/pixel x-axis increments
+ n_pix_Pc_y = P//dPc_y # pixels # of pixels past 25 atm on x-axis
+ if n_pix_Pc_y < 1:
+ n_pix_Pc_y = 1
+
+ dy = .021/341 # amu/pixel y-axis increments
+ n_dRy = dRy[n_pix_Pc_y] # pixels dRy for desired chamber pressure
+ n_pix_Ry = n_dRy*(1-1/.1*(R-2.2)) # pixels # of pixels above bottom curve
+
+ y = ymin + dy*(n_pix_Ry + hRy[n_pix_Pc_y]) # Cp/Cv
+
+ g = 32.1740*12 # in/s^2
+ R = 1545.348963*12 # in-lbf/lb-mol-R
+ FS = 1.75 # Safety Factor
+ Stress = 115000 # psi High temperature yield stress of inconel walling (http://www.specialmetals.com/assets/smc/documents/inconel_alloy_718.pdf)
+ L_star = 45 # in
+
+ P_Chamber = P_Chamber_psi/14.6959 # atm
+ T_Chamber_R = 1.8*T_Chamber # Rankine
+
+ lamda = .983
+ e = ( ((2/(y+1))**(1/(y-1))) * (P_Chamber/P_Exit)**(1/y) ) / np.sqrt(((y+1)/(y-1)) * (1-(P_Exit/P_Chamber)**((y-1)/y)) )
+ C_star = lamda*np.sqrt( g*y*R*T_Chamber_R/Gas_Molecular_Weight )/( y*np.sqrt( (2/(y+1))**((y+1)/(y-1)) ) )
+ Cf = lamda*(np.sqrt( ((2*y**2)/(y-1)) * ((2/(y+1))**((y+1)/(y-1))) * (1-(P_Exit/P_Chamber)**((y-1)/y) )) + E*((P_Exit-P_amb)/P_Chamber))
+ Isp = lamda*C_star*Cf/g
+ M = Thrust/Isp; # lbs/s
+ M_RP1 = M/(1+Mixture_Ratio); # lbs/s
+ M_LOX = M - M_RP1; # lbs/s
+
+ Propellant_Mass = M*Burn_Time # lbs
+ LOx_Mass = M_LOX*Burn_Time # lbs
+ RP1_Mass = M_RP1*Burn_Time # lbs
\ No newline at end of file
diff --git a/README.md b/README.md
old mode 100644
new mode 100755