The evidence
Sixty-three checks against things that existed before the code did — and the two largest pieces of work I did on this project, neither of which is in it.
1What a check has to be
A test that compares a program against itself proves the program is consistent, which is not the claim I am making.
So: a derivative against finite differences. A burn rate against its own integral. A cylinder head against a flow bench. A firing order against the casting. A shock tube against its exact solution. And the thesis against a Fourier transform. Nothing in the model was fitted to any of it, which is the only reason agreement means anything.
windsor — inspection
every number this project quotes, checked against something outside it
measured expected
THE LINKAGE
dV/dtheta against central differences rel 6.6e-11 < 1.0e-08 ok
piston acceleration, likewise rel 3.4e-10 < 1.0e-08 ok
piston travel at BDC is the stroke rel 0.0e+00 < 1.0e-12 ok
V(BDC)/V(TDC) is the compression ratio rel 1.9e-16 < 1.0e-12 ok
eight bores of it come to a 302 301.6 ci 301 to 302 ok
THE FIRE
burn rate integrates to its burn fraction rel 3.9e-07 < 1.0e-05 ok
and that fraction is the stated efficiency rel 0.0e+00 < 1.0e-06 ok
nothing burns before the spark so ok
gamma sags from cold charge to flame 1.246 1.2 to 1.28 ok
sound travels faster in hot exhaust 592.3 m/s 560 to 620 ok
2The engine, against Ford
| model | Ford, 1968 302-2V (gross) | |
|---|---|---|
| peak torque | 307 lb-ft @ 1985 | 295 lb-ft @ 2400 |
| peak power | 206 hp @ 4994 | 210 hp @ 4400 |
Within four percent and two, with nothing fitted. The magnitudes are close and the curve is too broad — torque peaks 400 rpm low, power 600 high — which is the intake runner tuning that is still missing, and which I will come back to at the bottom of this page.
It was ten percent optimistic with the power peak a thousand rpm high until the carburettor’s venturis went in. A two-barrel engine breathes through a hole that cannot be opened, and that is most of why the 2V made its power at 4400 where the 4V made more at 4800. I had been modelling a throttle. The throttle was never the limit.
3The cylinder head, against a flow bench
Curtain area, a discharge coefficient, a throat cap. How fast that coefficient sags past its peak is the only number in the port model fitted to anything at all, and this is the thing it is fitted to.
| lift | model | published, stock C8OE-F |
|---|---|---|
| 0.400 in | 153.5 cfm | ~150 cfm |
| 0.426 in — the cam’s peak | 149.9 cfm | — |
The head is already past its best at the lift the camshaft actually reaches. That is not a defect in the model. It is what a stock 302 head does, and it is why peak effective area lands exactly where Ford put the lobe.
4The indicator card
Watt’s diagram, wide open and throttled, drawn to the same scale so the two can be compared honestly. Pressure is logarithmic here, so the area enclosed is not the work — the work is printed underneath it.
THROTTLE CLOSED
59.4 |
42.5 |
30.4 |
21.7 |
15.5 |
11.1 |
8.0 |.##
5.7 |. ###
4.1 | . #####
2.9 | ... #####
2.1 | .. ######
1.5 | ................................
1.1 |.... ..... ##########.........................
0.8 |. ...... ############ .
0.5 |.. ....... ###############
0.4 | .. ........
0.3 | .. ...........
0.2 | ........................................................
bar +------------------------------------------------------------
TDC volume BDC
gross 0.97 bar pumping -0.93 bar net 0.03 bar peak 7.3 bar
# power . exhaust . intake . compression
Throttled, the engine spends 96% of everything it makes on
breathing. Wide open it spends 1%. That is the whole cost of
controlling a petrol engine by making it difficult to breathe, and it
is why a diesel, which throttles on fuel alone, is more efficient at
part load and barely more efficient at full.Ninety-six percent of everything it makes, spent on suffocating itself. The throttle is the most wasteful control mechanism nobody has replaced, and this is the number that says so.
5The fuel, which is what stops the engine
Livengood–Wu over Douaud–Eyzat: the end gas spends dt/τ of its patience each instant and goes off when the account reaches one.
It reports an index and not a verdict — the threshold belongs to the CFR engine Douaud and Eyzat fitted the delay on, and a value of 1 means autoignition in that chamber, not in a Ford wedge. Dividing by five to make the stock engine read 1.0 would be fitting the model to flatter itself, so the constant stays as published and the number is reported raw. What survives the recalibration is every comparison, and the comparisons are what compression ratio and advance are actually chosen by.
WHAT STOPS THE ENGINE
knock is an index and not a verdict; these are all comparisons
worse at low rpm: more time to cook so ok
worse with sixteen more degrees of advance so ok
worse on 87 octane than on 94 so ok
worse at 11.5:1 than at 9.5:1 so ok
quieter on a rich mixture than on stoich so ok
so compression ratio, advance and octane are one decision, not three
Which makes 9.5:1, 34° of advance and whatever was in the tank in 1968 one decision instead of three.
6The thesis, against a Fourier transform
Half-order energy is the signature of a train that repeats every two revolutions instead of one, which is exactly what a lopsided bank does and an even one does not. I stated the thesis before I wrote the transform. The transform did not care, and agreed.
THE THESIS
half-order energy is the signature of a pulse train that repeats
every two revolutions instead of one. one bank, at idle:
cross-plane bank, half-order share 0.6983 at least 0.3 ok
flat-plane bank, half-order share 0.0009409 0 to 0.1 ok
the cross-plane bank carries far more of it 742x ok
that ratio is the entire project, and it came out of four throw angles
63 checks, all of them true.Ninety-nine percent of the energy sits below 90 Hz, where the burble lives, and there is nothing measurable at all above 1.4 kHz.
7The solver I built, measured and took out
The exhaust is two delay lines per pipe, which is exact for a linear wave and wrong for a blowdown, so its source is clamped at Mach 1. Rather than leave that as an apology in a comment, I wrote the solver that would have fixed it: a second-order MUSCL-Hancock finite-volume Euler solver with an HLL flux, verified against Sod’s shock tube to one part in 10⁵.
Wired in place of the delay lines it worked. No clamp anywhere, pipe pressures physically correct, and header length finally became worth 14% of torque with a peak at 1.2 m — where the old builder’s rule predicts 1.10 m. It agreed with sixty years of exhaust shops.
Then I took it out. It cost seven times the runtime, and it collapsed the one measurement this project exists to make: the ratio between the two crankshafts went from 118× to 1×. An engine that cannot tell the two cranks apart is of no use to me, however good its shocks are.
A delay line has no numerical dissipation. It is the exact solution to the linear problem, not an approximation to it, while any finite-volume scheme is diffusive everywhere. For a problem that is mostly linear propagation with occasional violence, the cruder-looking model is the more faithful one.
What survives is a measurement. riemann.hpp is still in the tree, still verified, and its job now is to say precisely what the shipped model cannot do.
WHAT THE PIPES ARE NOT
exhaust.hpp models a pipe as two delay lines, which is exact for a
LINEAR wave and clamps its source at Mach 1 because a blowdown is not
one. riemann.hpp is the nonlinear solver that says what that costs.
shock tube, against the exact solution rel 1.0e-05 < 2.0e-03 ok
and it invented no mass doing it rel 1.5e-14 < 1.0e-12 ok
and destroyed no energy either rel 7.7e-15 < 1.0e-12 ok
the blowdown front's speed down the pipe 1409 m/s 580 to 2500 ok
which is FASTER than sound ahead of it 137% over ok
sound in 900 K exhaust is 586 m/s, and a linear wave travels at exactly
that. this one does not, because it is a shock: its crest is hotter than
the gas ahead and is carried forward by the flow behind, so it outruns
its own front. it is why the crack of an exhaust is sharper at the pipe
than it was at the valve, and the engine here cannot reproduce it.8The runners, three times
Intake runner tuning I built three times and shipped none. As a waveguide it tuned correctly and put peak torque within 90 rpm of Ford’s, and could not be held below 2000 rpm at any damping. As a Helmholtz resonator it was perfectly stable and moved the torque peak the wrong way. As eight runners sharing one junction it found two things worth more than the feature.
The junction was not the blocker. Sharing redistributes energy between runners; it does not dissipate any. Eight low-loss pipes passing a wave around still have it afterwards.
Length mattered more. At 0.30 m the ram gain came out at 34% where a stock log manifold is worth a few percent — and that is what made the engine unholdable, for a reason I had not expected to learn from a program I wrote myself.
A torque-controlled brake sitting on a rising torque curve is an unstable equilibrium. Speed up a little, make more torque, speed up more. Ram tuning is precisely the thing that makes a torque curve locally rise, so the dyno slid into the resonance instead of holding short of it.
That is real engine-and-dynamometer physics and not a defect in either, which is why modern cells are speed-controlled. The dyno was not broken. It was doing exactly what a dyno does, at me.
Shortened to 0.18 m the gain falls to 4% and the curve comes out smooth — and it still could not be held between 1000 and 1500 rpm. Not at any controller gain from 0.6 to 12 N·m per rpm, not with a fresh engine per point, not with the load lagged. I do not know why. It is written at the bottom of induction.hpp as the next thing to find out, because it is more useful than the explanation I would have had to invent in order not to write it down.
9What a failing check means
Several of the sixty-three belong to this engine — the flow bench, the cam card, the firing orders. Build a different one and they will fail honestly. That is the check working, not breaking. How to build a different one →