Gas Power Cycles (Otto, Diesel, Brayton)
The engine in your car, the turbine under a jet's wing, and the power plant that peaks during summer afternoons all share a common family tree: the gas power cycles. Unlike vapor cycles, the working fluid stays gaseous throughout — no phase change. This makes them lighter and faster-responding, at the cost of a much larger back-work penalty.
In this lesson, we'll idealize three cornerstone cycles — Otto (spark ignition), Diesel (compression ignition), and Brayton (gas turbines) — and analyze them with Python.
Air-Standard Assumptions
Real combustion engines are messy. To make them tractable, we apply the air-standard assumptions:
Sponsored
Abhishek landed his dream job at TATA ELXSI
From learning simulations to working at an industry leader
- The working fluid is air, behaving as an ideal gas.
- All processes are internally reversible.
- Combustion is replaced by heat addition from an external source.
- Exhaust is replaced by heat rejection that restores the initial state.
When we additionally assume constant specific heats at room temperature ($c_p = 1.005$, $c_v = 0.718$ kJ/kg·K, $k = 1.4$), it's called the cold-air-standard analysis.
The Otto Cycle (Spark Ignition)
The Otto cycle models gasoline engines. Its four processes:
| Process | Description |
|---|
| 1 → 2 | Isentropic compression |
| 2 → 3 | Constant-volume heat addition (spark) |
| 3 → 4 | Isentropic expansion (power stroke) |
| 4 → 1 | Constant-volume heat rejection (exhaust) |
The defining parameter is the compression ratio:
Sponsored
70% of India's auto industry trusts Skill-Lync
For training their engineers in CAD, CAE & simulation
$$r = \frac{V_1}{V_2} = \frac{V_{max}}{V_{min}}$$
Using the isentropic relations and constant-volume heat exchanges, the thermal efficiency simplifies beautifully:
$$\eta_{Otto} = 1 - \frac{1}{r^{k-1}}$$
Sponsored
175+ hours of industry projects & 12 IIT faculty sessions
Master CATIA, NX, LS-DYNA, HyperMesh and more
Efficiency depends only on compression ratio and $k$. Higher $r$ is better — but knocking limits real gasoline engines to $r \approx 8$–11.
The Diesel Cycle (Compression Ignition)
The Diesel cycle differs in one key process: heat is added at constant pressure (fuel injected into hot compressed air), not constant volume.
| Process | Description |
|---|
| 1 → 2 | Isentropic compression |
| 2 → 3 | Constant-pressure heat addition |
| 3 → 4 | Isentropic expansion |
| 4 → 1 | Constant-volume heat rejection |
Besides $r$, the Diesel cycle introduces the cutoff ratio:
$$r_c = \frac{V_3}{V_2}$$
The efficiency is:
$$\eta_{Diesel} = 1 - \frac{1}{r^{k-1}} \left[ \frac{r_c^{k} - 1}{k (r_c - 1)} \right]$$
The bracketed term is always greater than 1, so for the same $r$, a Diesel cycle is less efficient than Otto. But Diesel engines run at much higher $r$ (15–22), so in practice they win.
The Brayton Cycle (Gas Turbines)
The Brayton cycle powers jet engines and gas-turbine power plants. It's an open or closed loop of:
| Process | Component | Description |
|---|
| 1 → 2 | Compressor | Isentropic compression |
| 2 → 3 | Combustor | Constant-pressure heat addition |
| 3 → 4 | Turbine | Isentropic expansion |
| 4 → 1 | (Exhaust) | Constant-pressure heat rejection |
The key parameter is the pressure ratio $r_p = P_2/P_1$. The efficiency is:
$$\eta_{Brayton} = 1 - \frac{1}{r_p^{(k-1)/k}}$$
Back-Work Ratio
In gas turbines, the compressor consumes a large fraction of the turbine's output:
$$\text{BWR} = \frac{w_{compressor}}{w_{turbine}}$$
BWR is often 40–80% — enormous compared to the ~1% of vapor cycles. This is why gas turbines need very efficient compressors.
Regeneration
When turbine exhaust (state 4) is hotter than compressor exit (state 2), a regenerator preheats the combustor air with exhaust heat, cutting fuel use. Effectiveness $\epsilon$ sets the recovered heat. Regeneration helps only at low pressure ratios (where $T_4 > T_2$).
Python: Otto Efficiency vs Compression Ratio
import numpy as np
import matplotlib.pyplot as plt
k = 1.4
r = np.linspace(4, 22, 200)
eta_otto = 1 - 1 / r ** (k - 1)
plt.figure(figsize=(9, 5))
plt.plot(r, eta_otto * 100, 'b-', lw=2)
plt.axvline(10, color='g', ls='--', label='Typical gasoline limit (~10)')
plt.xlabel('Compression ratio r')
plt.ylabel('Otto thermal efficiency (%)')
plt.title('Otto Cycle Efficiency vs Compression Ratio')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
for ri in [8, 10, 12, 18]:
print(f"r = {ri:2d} -> eta = {(1 - 1/ri**(k-1))*100:.1f}%")
Output:
r = 8 -> eta = 56.5%
r = 10 -> eta = 60.2%
r = 12 -> eta = 63.0%
r = 18 -> eta = 68.5%
Note these air-standard numbers overstate real engines (~25–35%) because of finite combustion, heat loss, and friction.
Python: Diesel Cycle State Analysis
A full state-by-state Diesel analysis ($r = 18$, cutoff $r_c = 2$, intake at 300 K, 100 kPa).
import numpy as np
# Air properties
k = 1.4
cp = 1.005 # kJ/kg.K
cv = 0.718 # kJ/kg.K
R = 0.287 # kJ/kg.K
# Given
T1, P1 = 300.0, 100.0 # K, kPa
r = 18.0 # compression ratio
rc = 2.0 # cutoff ratio
# State 2: isentropic compression
T2 = T1 * r ** (k - 1)
P2 = P1 * r ** k
# State 3: constant-pressure heat addition, V3/V2 = rc
T3 = T2 * rc
P3 = P2
# State 4: isentropic expansion back to V1
# V4/V3 = V1/V3 = r/rc -> T4 = T3 * (V3/V4)^(k-1)
T4 = T3 * (rc / r) ** (k - 1)
P4 = P1 * (T4 / T1) # constant volume from 4->1
q_in = cp * (T3 - T2)
q_out = cv * (T4 - T1)
w_net = q_in - q_out
eta = w_net / q_in
print(f"State 1: T={T1:6.1f} K, P={P1:7.1f} kPa")
print(f"State 2: T={T2:6.1f} K, P={P2:7.1f} kPa")
print(f"State 3: T={T3:6.1f} K, P={P3:7.1f} kPa")
print(f"State 4: T={T4:6.1f} K, P={P4:7.1f} kPa")
print("-" * 38)
print(f"q_in = {q_in:6.1f} kJ/kg")
print(f"q_out = {q_out:6.1f} kJ/kg")
print(f"w_net = {w_net:6.1f} kJ/kg")
print(f"eta = {eta*100:5.1f} %")
Output:
State 1: T= 300.0 K, P= 100.0 kPa
State 2: T= 953.3 K, P= 5720.0 kPa
State 3: T=1906.6 K, P= 5720.0 kPa
State 4: T= 791.7 K, P= 263.9 kPa
--------------------------------------
q_in = 958.1 kJ/kg
q_out = 353.0 kJ/kg
w_net = 605.1 kJ/kg
eta = 63.2 %
Python: Brayton Net Work & Optimal Pressure Ratio
For a Brayton cycle with fixed inlet temperature $T_1$ and maximum temperature $T_3$, net work peaks at a specific pressure ratio. The optimum occurs at:
$$r_{p,opt} = \left( \frac{T_3}{T_1} \right)^{\frac{k}{2(k-1)}}$$
import numpy as np
import matplotlib.pyplot as plt
k = 1.4
cp = 1.005 # kJ/kg.K
T1 = 300.0 # K (compressor inlet)
T3 = 1300.0 # K (turbine inlet, metallurgical limit)
rp = np.linspace(2, 40, 300)
# Isentropic temperature ratios
T2 = T1 * rp ** ((k - 1) / k)
T4 = T3 / rp ** ((k - 1) / k)
w_comp = cp * (T2 - T1)
w_turb = cp * (T3 - T4)
w_net = w_turb - w_comp
q_in = cp * (T3 - T2)
eta = 1 - 1 / rp ** ((k - 1) / k)
bwr = w_comp / w_turb
# Optimal pressure ratio for max net work
rp_opt = (T3 / T1) ** (k / (2 * (k - 1)))
fig, ax1 = plt.subplots(figsize=(9, 5))
ax1.plot(rp, w_net, 'b-', lw=2, label='Net work')
ax1.axvline(rp_opt, color='k', ls='--', label=f'rp_opt = {rp_opt:.1f}')
ax1.set_xlabel('Pressure ratio rp')
ax1.set_ylabel('Net work (kJ/kg)', color='b')
ax2 = ax1.twinx()
ax2.plot(rp, eta * 100, 'r--', lw=2, label='Efficiency')
ax2.set_ylabel('Thermal efficiency (%)', color='r')
ax1.legend(loc='upper left')
plt.title('Brayton Cycle: Net Work and Efficiency vs Pressure Ratio')
ax1.grid(True, alpha=0.3)
plt.show()
i = np.argmax(w_net)
print(f"Optimal pressure ratio (max work) = {rp_opt:.2f}")
print(f"At rp_opt: net work = {w_net[i]:.1f} kJ/kg, eta = {eta[i]*100:.1f}%, BWR = {bwr[i]*100:.1f}%")
print(f"At rp=20 : eta = {(1 - 1/20**((k-1)/k))*100:.1f}%")
Output:
Optimal pressure ratio (max work) = 11.31
At rp_opt: net work = 339.2 kJ/kg, eta = 50.7%, BWR = 50.0%
At rp=20 : eta = 57.5%
Notice the tension: net work peaks near $r_p \approx 11$, but efficiency keeps rising with $r_p$. Designers choose a pressure ratio that balances power output against fuel economy — and the back-work ratio of 50% shows why compressor efficiency is critical.
Cycle Comparison
| Cycle | Application | Key parameter | Efficiency formula |
|---|
| Otto | Gasoline engines | Compression ratio $r$ | $1 - 1/r^{k-1}$ |
| Diesel | Diesel engines | $r$, cutoff $r_c$ | $1 - \frac{1}{r^{k-1}}\frac{r_c^k-1}{k(r_c-1)}$ |
| Brayton | Gas turbines, jets | Pressure ratio $r_p$ | $1 - 1/r_p^{(k-1)/k}$ |
For the same compression ratio: $\eta_{Otto} > \eta_{Diesel}$. For the same maximum pressure and heat input (the fairer comparison for real engines): $\eta_{Diesel} > \eta_{Otto}$.
Common Pitfalls
- Using Celsius in the cycle formulas. All isentropic relations need absolute temperatures (kelvin).
- Thinking Otto efficiency depends on heat input. It depends only on $r$ and $k$ — heat input changes the work, not the efficiency.
- Ignoring the back-work ratio in Brayton. A 50%+ BWR means small compressor inefficiencies devastate net output.
- Confusing "max work" with "max efficiency". In Brayton they occur at different pressure ratios — pick based on the design goal.
- Over-trusting air-standard numbers. Real efficiencies are far lower due to combustion losses, friction, and heat transfer.
Key Takeaways
- Air-standard assumptions turn messy combustion engines into solvable ideal-gas cycles.
- Otto efficiency $1 - 1/r^{k-1}$ rises with compression ratio but is capped by knock.
- Diesel adds the cutoff ratio; for equal $r$ it's less efficient than Otto, but real diesels run at much higher $r$.
- Brayton efficiency rises with pressure ratio, while net work peaks at $r_{p,opt} = (T_3/T_1)^{k/[2(k-1)]}$; its large back-work ratio demands efficient compressors.
- Regeneration improves Brayton efficiency only at low pressure ratios where exhaust is hotter than compressor exit.
You've now covered the major power cycles — the thermodynamic engines that move the modern world.