Carnot Cycle & the Limits of Heat Engines
In 1824, Sadi Carnot proved that no heat engine operating between two fixed temperatures can be more efficient than a fully reversible engine — and derived exactly what that maximum efficiency is. The result is startling: it depends only on the temperatures, not on the working fluid, engine design, or fuel. Understanding why reveals the deepest connection between work, heat, and entropy.
1. Heat Engines and the Second Law
A heat engine absorbs heat Q_h from a hot reservoir at temperature T_h, converts some of it into work W, and dumps the remainder Q_c into a cold reservoir at T_c. Energy conservation gives:
Carnot's theorem states that all reversible engines operating between the same two temperatures have identical efficiency, and any irreversible engine has a strictly lower efficiency.
2. The Four Reversible Processes
1 → 2 Isothermal Expansion
Gas expands at T_h absorbing Q_h. Work W₁₂ = nRT_h·ln(V₂/V₁). Temperature constant → internal energy unchanged.
2 → 3 Adiabatic Expansion
Gas expands with no heat exchange. Temperature drops from T_h to T_c. Work W₂₃ = nCᵥ(T_h − T_c). PVᵞ = const.
3 → 4 Isothermal Compression
Gas compressed at T_c rejecting Q_c. Work W₃₄ = −nRT_c·ln(V₃/V₄). Must expel heat to maintain temperature.
4 → 1 Adiabatic Compression
Gas compressed back to initial state. Temperature rises from T_c to T_h. Work W₄₁ = −nCᵥ(T_h − T_c).
The adiabatic steps cancel each other in work (W₂₃ + W₄₁ = 0), so the net work of the cycle equals the difference of the two isothermal works.
3. PV Diagram and Work
On a pressure–volume diagram, the enclosed area is the net work output per cycle:
4. Carnot Efficiency
Combining Q_h and Q_c, the logarithm cancels, leaving a remarkably clean result:
This result is profound: efficiency depends only on the ratio T_c/T_h. A perfect engine at room temperature and body temperature (T_h=310 K, T_c=293 K) has a maximum efficiency of merely 5.5%.
5. Entropy and the TS Diagram
Entropy S is defined via reversible heat exchange: dS = δQ_rev / T. The Carnot cycle is a rectangle on a temperature–entropy diagram:
6. Real Engines: Otto, Diesel, Stirling
Real thermodynamic cycles approximate the Carnot ideal in different ways:
Otto Cycle
Gasoline engine. Two adiabats + two isochores (constant volume). η_Otto = 1 − r^(1−γ), r = compression ratio. Typical η ≈ 25–35%.
Diesel Cycle
Compression ignition. Two adiabats + one isochore + one isobar. Higher compression ratio r than Otto → slightly better efficiency ≈ 35–45%.
Stirling Cycle
Two isotherms + two isochores with a regenerator. Theoretically achieves Carnot efficiency! Used in solar dish concentrators and submarines.
Rankine Cycle
Steam power plant cycle. Pump → boiler → turbine → condenser. Real plants use reheat and regeneration to approach 40–42% efficiency.
7. JavaScript Simulation
// Carnot cycle simulation — ideal gas, n moles
const R = 8.314; // J/(mol·K)
function carnotCycle(n, Th, Tc, V1, gamma = 1.4) {
// Adiabatic constraint: V2/V1 = (Th/Tc)^(1/(γ-1))
const adRatio = Math.pow(Th / Tc, 1 / (gamma - 1));
const V2 = V1 * adRatio;
// Isothermal expansion gives V3 = V2*(Tc/Th)^(1/(γ-1)) ... simplified:
const V4 = V1; // adiabatic compression returns to V1
const V3 = V2 * adRatio; // symmetric adiabatic
const Qh = n * R * Th * Math.log(V2 / V1);
const Qc = n * R * Tc * Math.log(V3 / V4);
const W = Qh - Qc;
const eta = 1 - Tc / Th;
return { Qh, Qc, W, eta, V1, V2, V3, V4, Th, Tc };
}
// Generate PV curve points for plotting
function pvCurve(type, V_start, V_end, T_or_K, n, gamma, steps = 60) {
const pts = [];
for (let i = 0; i <= steps; i++) {
const V = V_start + (V_end - V_start) * i / steps;
let P;
if (type === 'isothermal') {
P = n * R * T_or_K / V;
} else { // adiabatic: PVᵞ = K
P = T_or_K / Math.pow(V, gamma);
}
pts.push({V, P});
}
return pts;
}
// Draw PV diagram on canvas
function drawPV(ctx, cycle, W, H) {
const {Qh, Qc, Th, Tc, V1, V2, V3, V4} = cycle;
const n = 1, gamma = 1.4;
const P1 = n * R * Th / V1;
const K_ad12 = P1 * Math.pow(V1, gamma); // adiabatic constant 2→3
const allV = [V1,V2,V3,V4], allP = [P1];
allP.push(n*R*Th/V2, n*R*Tc/V3, n*R*Tc/V4);
const vMin = Math.min(...allV), vMax = Math.max(...allV);
const pMin = Math.min(...allP) * 0.8, pMax = Math.max(...allP) * 1.2;
const toX = v => 60 + (v-vMin)/(vMax-vMin) * (W-80);
const toY = p => H-50 - (p-pMin)/(pMax-pMin) * (H-80);
ctx.clearRect(0, 0, W, H);
ctx.strokeStyle = '#f97316'; ctx.lineWidth = 2;
ctx.beginPath();
const segments = [
pvCurve('isothermal', V1, V2, Th, n, gamma),
pvCurve('adiabatic', V2, V3, K_ad12, n, gamma),
pvCurve('isothermal', V3, V4, Tc, n, gamma),
pvCurve('adiabatic', V4, V1, K_ad12*0.5, n, gamma)
];
let first = true;
for (const seg of segments) {
for (const {V, P} of seg) {
first ? ctx.moveTo(toX(V), toY(P)) : ctx.lineTo(toX(V), toY(P));
first = false;
}
}
ctx.closePath();
ctx.fillStyle = '#f9731620'; ctx.fill(); ctx.stroke();
}
// Example usage
const cycle = carnotCycle(1, 600, 300, 0.001);
console.log(`η = ${(cycle.eta*100).toFixed(1)}%`); // η = 50.0%
8. Applications and Limits
- Power plants: Modern combined-cycle gas turbines (T_h ≈ 1500 K, T_c ≈ 300 K) reach theoretical η_max ≈ 80%, but achieve ~60% in practice through two-stage conversion.
- Heat pumps and refrigerators: The Carnot cycle run in reverse is a refrigerator (COP = T_c/(T_h−T_c)) or heat pump (COP = T_h/(T_h−T_c)).
- Endoreversible engines: Curzon-Ahlborn efficiency (η_CA = 1 − √(T_c/T_h)) gives realistic predictions for engines optimised for maximum power rather than efficiency.
- Second Law limits: No process can reduce total entropy — Carnot efficiency is the irreducible upper bound set by this law.
- Thermoelectric devices: Peltier coolers and Seebeck generators approach Carnot only at low temperature differences; typical efficiency is 5–10%.