This is a simple model of the Space Shuttle Main Engine (SSME) performance. It is based on the data from the Dr. Rodney Bowersox:
| Combustion Chamber Data | |
|---|---|
| Fuel | Hydrogen |
| Oxidizer | |
| Fuel/Oxidizer Ratio |
0.166 |
| Hydrogen Injection Temperature | 850 K |
| Oxygen Injection Temperature | 530 K |
| Combustion Chamber Pressure | 204 atm |
| Nozzle Geometry | |
|---|---|
| 5.15 in | |
| 45.35 in | |
| 32.00 deg |
We begin with computing the equivalence ratio
From here we are to calculate the standard heat of formation by:
Where exchanger.py.
Which is then applied to our chemical equation:
Note: notice the
From here we can sum the molar enthalpies of formation to get the first estimate of the first reaction enthalpy:
We are to then interpolate this value from the given turn tables to get the actual value of the combustion temperature for Oxygen First Enthalpy Exchanger. This is done in exchanger.py. At the end of this process we have the combustion temperature for the Oxygen First Enthalpy Exchanger,
For the Combustion Chamber we wil using the two sub-reactions:
From here we are to calculate the Gibbs Free Energy of each species.
For
For
Where Iterater.py file.
Looking at For
| Species | |||
|---|---|---|---|
| 1 | 0 | -1 | |
| 0 | 1 | 1 | |
| 0 | 1 | 1 |
We know that:
Where;
We can then solve for
Here we know that the fuel is
Where
Resulting in us having 4 unknown values with only 2 equations. This a signal to us prompting the Law of Mass Action. When solving for the Moler Fraction of each species we get:
Similarly for the
| Species | |||
|---|---|---|---|
| 1 | 0 | -1 | |
| 0 | 2 | 2 |
After this we know have to solve a system of coupled equations:
We can then solve for
| Species | |||||||
|---|---|---|---|---|---|---|---|
Now to calculate
We perform this step to calculate the gas constant
Resulting in use getting a gamma of:
Begin by defining our Area Ratio:
We can for Mach number scipy.optimize.fsolve, which returns the roots of a non-linear function. After solving for
After Solving for these values we can then calculate the mass flow rate:
Then once you have the mass flow rate you can calculate the thrust, specific impulse, and thrust coefficient:
flowchart
A[Givens] --> B[Parameters]
B --> SSME
D -->|def| FCC
FCC1 --> |req| Request
Request --> |return| del_h_hat
phi --> FCC2
T_alg --> |req| Request
Request --> |return| T_alg
E -->|def| Comb
Gibbs --> |req| Request
Request --> |return| Gibbs
cpval --> |req| Request
Request --> |return| cpval
N --> |def| Nozzle
subgraph SSME[SSMEMain.py]
C[Read in Givens] --> phi["equivalence ratio"]
phi --> D[FCC]
D--> E[Comb Chamber]
E --> N[Nozzle]
end
subgraph FCC[FCC]
FCC1["h_(i)(InjectionTemp)"]
b_hat["b_hat_table"]
del_h_hat["del_h_hat_(i)"]
b_hat --> del_h_hat
FCC2["mols_(i)"]
h_total["del_h_total"]
T_alg["T_algorithm"]
del_h_hat --> h_total
FCC2 --> h_total
h_total --> T_alg
end
subgraph Iter["Iterater.py"]
Request["Request_(i) (input,output)"]
Request --> |"(T,h)"|Iter1
Request --> |"(h,T)"|Iter2
Request --> |"(T,g)"|Iter3
Request --> |"(T,cp)"|Iter4
Request --> |"(T,S)"|Iter5
Iter1["(i)_tableH = (i)_table_f"]
Iter2["(i)_tableT"]
Iter3["(i)_tableg"]
Iter4["(i)_table_cp"]
Iter5["(i)_tableS"]
MachS["MachSolve"]
end
subgraph Comb["Comb Chamber"]
Atom["Atom Balance"]
Gibbs["Gibbs Free Energy"]
gibbs_r["g_reaction"]
LMA["LawOfMassAction_df"]
cpval["cp_values_(i)"]
Gibbs --> gibbs_r
gibbs_r --> k_n["K_(n)"]
T_alg --> k_n
Atom --> eq["equations"]
eq --> sol["solution(s)"]
k_n --> eq
sol --> LMA
cpval --> LMA
LMA --> R["R"]
R --> cv["cv"]
cv --> gamma["gamma"]
end
subgraph Nozzle["Nozzle"]
A_r["Area Ratio"]
gam["gamma"]
gam --> Mach
A_r --> Mach
Mach -->|req| MachS
MachS --> |return|Mach
Mach --> mdot["mdot"]
Mach --> T_e["T_e"]
Mach --> p_e["p_e"]
Mach --> v_e["v_e"]
v_e --> Thrust["Thrust"]
mdot --> Thrust
p_e --> Thrust
c_T["c_T"]
Thrust --> c_T
Thrust --> Isp["Isp"]
end
subgraph Mach["mach"]
end