Engineering · Why trust a number
Every number can be traced to where it came from.
This page is for the engineer deciding whether HFG's results can be defended: how the mechanism is solved, how one output is traced end to end, what is deliberately not modelled, what has been verified, and how validation will be published.
01 · Method
Solved in three dimensions. Measured, never typed.
The mechanism
One degree of freedom, solved directly.
With the rack fixed, a double-wishbone corner has one degree of freedom. HFG solves the minimal system — the two wishbone rotations about their actual chassis axes and the upright's spin about the ball-joint axis — against three conditions: the upright is rigid, the tie rod keeps its length, and a drive condition pins the position.
Because wishbones rotate about their real pivot axes, anti-dive built into the side view and castor built into the plan view are exact, not a planar approximation. The pushrod and bell crank are solved afterwards: they are driven by the mechanism, not part of it.
The measurements
Outputs of the mechanism.
There is no input box for motion ratio, roll-centre height, camber gain or anti-dive. Design inputs — spring rate, bar diameter, link length — are stored; results are measured off the solved geometry every time.
Instant centres come from the velocities of the ball joints, which stays correct for canted pivot axes where extending the wishbone lines does not. A centre at infinity is reported as infinity, not as a large number.
Sweeps
Continuation through travel.
A sweep solves the corner station by station, each starting from its neighbour's solution, so the solver stays on the physical branch of the mechanism. Rates such as camber gain, bump steer and motion ratio are derivatives of the swept, exact geometry.
Strength
Calculated member strength.
Loads are traced through the suspension members and checked for stress and yield, buckling and rod-end or joint rating. This is analytical engineering calculation, not finite-element analysis.
02 · Traceability
One number, followed from hardpoint to handling.
A worked trace on HFG's example F1000 geometry, calculated when this site is built, by the same solver port the homepage runs. Inputs are marked; every other value is derived from the row above it.
| Step | Quantity | Relationship | Value |
|---|---|---|---|
| Geometry | Hardpoints | Input — the corner's hardpoints | table below |
| Solve | Static camber · castor · KPI | Measured off the solved wheel and steering axes | −2.00° · 5.19° · 6.48° |
| Solve | Scrub radius · mechanical trail | Steering axis meets the ground | 29.7 · 17.3 mm |
| Measure | Motion ratio | MR = d(damper) / d(wheel) | 0.462 |
| Input | Spring rate | Stored design input | 100 N/mm |
| Stiffen | Wheel rate | Kw = Ks · MR² | 21.3 N/mm |
| Stiffen | Ride frequency | f = √(Kw / m) / 2π, m = 98 kg | 2.35 Hz |
| Stiffen | Front roll stiffness, springs | Kφ = Kw · t² / 2, t = 1568 mm | 457 N·m/° |
| Vehicle | Front share of roll stiffness | Against the rear axle's 450 N·m/° | 50.4 % |
| Vehicle | Roll centres, front · rear | Contact patch → front-view instant centre, both sides | 75.7 · 92.4 mm |
| Vehicle | Roll gradient | Sprung mass × roll-arm ÷ total roll stiffness | 1.05 °/g |
The inputs: front-left hardpoints of the example vehicle
| Hardpoint | X | Y | Z |
|---|---|---|---|
| Upper wishbone, front pivot | 110.0 | 430.0 | 275.0 |
| Upper wishbone, rear pivot | −130.0 | 430.0 | 255.0 |
| Lower wishbone, front pivot | 120.0 | 290.0 | 105.0 |
| Lower wishbone, rear pivot | −140.0 | 290.0 | 115.0 |
| Upper ball joint | −14.0 | 715.0 | 345.0 |
| Lower ball joint | 6.0 | 740.0 | 125.0 |
| Wheel centre | 0.0 | 775.0 | 254.0 |
| Tie rod, inner | −95.0 | 315.0 | 138.0 |
| Tie rod, outer | −95.0 | 720.0 | 165.0 |
| Pushrod, lower | 0.0 | 640.0 | 145.0 |
| Pushrod, upper | 65.0 | 300.0 | 400.0 |
| Bell crank, pivot | −30.0 | 300.0 | 400.0 |
| Coilover, bell-crank end | −30.0 | 232.0 | 451.0 |
| Coilover, chassis end | −295.0 | 232.0 | 451.0 |
In HFG, the chain continues: roll gradient and load transfer feed the dynamics channels, optimisation targets and track studies.
03 · Open Equations
Not a black box.
The Open Equations Bar shows the relationship behind a calculated output: the equation, the variables it used and the assumptions that apply. Open means inspectable — HFG is not open-source software.
Motion ratio
MR = d(damper) / d(wheel)
Measured through the real linkage, so it changes with travel.
Wheel rate
Kw = Ks · MR²
The leading term; a rising-rate linkage adds its own stiffness through d(MR)/dz.
Instant centre
vIC = 0
Where the projected velocity of the upright vanishes — from ball-joint velocities.
Camber
γ = −asin(nz)
From the solved wheel spin axis, in three dimensions.
Roll and pitch stiffness
K(θ) = d²U / dθ²
From stored energy across the swept motion, so linkage non-linearity is included.
Ride frequency
f = √(Kw / m) / 2π
How a target frequency becomes a spring rate, and back.
04 · Assumptions and limits
What is deliberately not modelled.
Stated so nobody assumes otherwise. None of these is approximated with an invented number: a missing input is reported with the reason the analysis needs it.
- Compliance: links are rigid — no bushing rates, no chassis torsional stiffness, no deflection under load.
- Gyroscopic effects of the rotating wheels and driveline.
- Aerodynamic maps beyond a simple downforce and drag model.
- Tyre transient behaviour: relaxation length, thermal state, wear.
- Differential internals beyond the powertrain model.
- Member strength is analytical, not finite-element analysis.
05 · Verification and validation
What is verified, and what is not yet validated.
Two different questions, kept apart. Verification asks whether the software computes what it should. Validation asks whether what it computes matches a physical test. The first table below is verification only. The second is for validation, and it stays empty until there is test data to publish.
Verification: benchmarks with exact answers
Three linkages simple enough to be solved exactly by plane geometry, each solved twice: once by the three-dimensional solver port these pages run, and once by that geometry, in code that shares nothing with the solver. The rows are calculated when this site is built, and a row outside its allowed difference stops the build. They are evidence that the solver solves its equations correctly. They say nothing about how a real car behaves.
Benchmark A
Converging wishbones.
Both pivot axes are parallel to X, so the corner moves in one plane and its front view is a four-bar linkage. The wishbone lines meet 1500 mm inboard of the wheel centre and 100 mm above the ground, which makes the answers checkable by hand.
Benchmark B
Equal, parallel wishbones.
A parallelogram. The upright cannot turn and the instant centre is at infinity: the case a solver must report as infinity, not as a very large number.
Benchmark C
Inclined pivot axes.
Benchmark A pitched 5° about the axle line. The axes slope in side view, the ball joints no longer move in transverse planes and the wheel steers as it rises: a three-dimensional case that still has an exact answer.
| Quantity | Reference | Solver port | Difference | Assumptions |
|---|---|---|---|---|
| A · Camber through ±30 mm of wheel travel | −1.329605° at +30 mm 0.968861° at −30 mm Four-bar linkage in the front view: the upper ball joint is where the upper wishbone's circle meets the circle of upright length about the lower ball joint. The lower wishbone's angle at each travel is found by bisection. | −1.329605° at +30 mm 0.968861° at −30 mm 3-D solve at 25 stations, each started from its neighbour; camber read off the solved wheel axis. | 3 × 10−11 ° largest of 25 stations | Both wishbone axes parallel to X, so the motion is planar. Rigid links, no static camber or toe. |
| A · Bump steer through ±30 mm | 0° at every station The tie rod repeats the lower wishbone in the front view, so the planar motion keeps its length without turning the wheel. | 1 × 10−10 ° at most Toe read off the solved wheel axis at the same 25 stations. | 1 × 10−10 ° largest of 25 stations | Tie rod: inner end on the lower wishbone's axis, outer end level with the lower ball joint. Rack fixed. |
| A · Front-view instant centre at the design position | (−750.0000, 100.0000) mm Both wishbone lines, extended until they meet. | (−750.0000, 100.0000) mm Where the perpendiculars to the two ball joints' velocities meet; velocities by central difference over ±0.02 mm of travel. | 2 × 10−6 mm distance between the two points | Y from the centreline, Z from the ground. |
| A · Roll-centre height at the design position | 50.0000 mm Line from the contact patch through the instant centre, read at the centreline: 100 × 750 ÷ 1500 mm. | 50.0000 mm Both corners solved, the right one mirrored; the two contact patch → instant centre lines intersected. | 2 × 10−7 mm allowed 10−2 mm | Symmetric axle, 1500 mm track. Thin wheel: the contact patch is the lowest point of the wheel. |
| A · Camber gain at the design position | −0.038197 °/mm −1 ÷ FVSA, the front-view swing-arm length: 1500 mm from the wheel centre to the instant centre. | −0.038197 °/mm Central difference of the solved camber over ±0.1 mm of travel. | 9 × 10−10 °/mm allowed 10−7 °/mm | Travel is measured at the wheel centre. |
| B · Camber change through ±30 mm | 0° at every station A parallelogram: the upright is carried without turning. | 5 × 10−14 ° at most 3-D solve at 25 stations; camber read off the solved wheel axis. | 5 × 10−14 ° largest of 25 stations | Wishbones equal in length, parallel, and level at the design position. |
| B · Front-view instant centre | At infinity Parallel wishbone lines never meet. | At infinity The two velocity perpendiculars are parallel, and the solver reports no finite centre rather than a very large number. | None both report no finite centre | Equal, parallel wishbones, as in the row above. |
| C · Camber through ±30 mm, pivot axes inclined 5° | −1.330324° at +30 mm 0.968191° at −30 mm The same four-bar solution in the pitched plane: camber = −asin(sin ψ · cos 5°), with ψ the upright's rotation at travel ÷ cos 5°. | −1.330324° at +30 mm 0.968191° at −30 mm 3-D solve at 25 stations, as for A. | 2 × 10−11 ° largest of 25 stations | Benchmark A pitched 5° about the axle line: both wishbone axes slope in side view and the ball joints no longer move in transverse planes. |
| C · Bump steer through ±30 mm, pivot axes inclined 5° | 0.116409° at +30 mm −0.084714° at −30 mm The same solution: toe = atan(tan ψ · sin 5°). | 0.116409° at +30 mm −0.084714° at −30 mm Toe read off the solved wheel axis at the same 25 stations. | 1 × 10−10 ° largest of 25 stations | Toe-in positive. The tie rod is pitched with the rest of the corner. |
| C · Front-view instant centre, pivot axes inclined 5° | (−755.5025, 98.6003) mm The upright turns about the pitched instant axis; each ball joint's velocity perpendicular passes through the point where that axis crosses the joint's own transverse plane. | (−755.5025, 98.6003) mm From the ball-joint velocities, as for A. | 2 × 10−6 mm distance between the two points | Once pitched, the ball joints are still 10.1 mm apart in X (castor), so the two perpendiculars are aimed at different points of the axis. |
The inputs: hardpoints of the three benchmarks
| Hardpoint | X | Y | Z |
|---|---|---|---|
| A · Upper wishbone, front pivot | 125.000 | 425.000 | 335.000 |
| A · Upper wishbone, rear pivot | −125.000 | 425.000 | 335.000 |
| A · Lower wishbone, front pivot | 125.000 | 250.000 | 140.000 |
| A · Lower wishbone, rear pivot | −125.000 | 250.000 | 140.000 |
| A · Upper ball joint | −15.000 | 675.000 | 385.000 |
| A · Lower ball joint | 15.000 | 700.000 | 158.000 |
| A · Wheel centre | 0.000 | 750.000 | 250.000 |
| A · Tie rod, inner | −100.000 | 250.000 | 140.000 |
| A · Tie rod, outer | −100.000 | 700.000 | 158.000 |
| B · Upper wishbone, front pivot | 125.000 | 250.000 | 380.000 |
| B · Upper wishbone, rear pivot | −125.000 | 250.000 | 380.000 |
| B · Lower wishbone, front pivot | 125.000 | 250.000 | 150.000 |
| B · Lower wishbone, rear pivot | −125.000 | 250.000 | 150.000 |
| B · Upper ball joint | −15.000 | 700.000 | 380.000 |
| B · Lower ball joint | 15.000 | 700.000 | 150.000 |
| B · Wheel centre | 0.000 | 750.000 | 250.000 |
| B · Tie rod, inner | −100.000 | 250.000 | 150.000 |
| B · Tie rod, outer | −100.000 | 700.000 | 150.000 |
| C · Upper wishbone, front pivot | 131.933 | 425.000 | 323.782 |
| C · Upper wishbone, rear pivot | −117.116 | 425.000 | 345.571 |
| C · Lower wishbone, front pivot | 114.937 | 250.000 | 129.524 |
| C · Lower wishbone, rear pivot | −134.111 | 250.000 | 151.313 |
| C · Upper ball joint | −3.177 | 675.000 | 385.794 |
| C · Lower ball joint | 6.925 | 700.000 | 157.043 |
| C · Wheel centre | 0.000 | 750.000 | 250.000 |
| C · Tie rod, inner | −109.207 | 250.000 | 149.134 |
| C · Tie rod, outer | −107.638 | 700.000 | 167.066 |
The application
Over 3,700 automated tests.
HFG's solvers run headless and are regression-tested: checks that the software computes what it is meant to compute. That is verification too. It is not evidence that a car behaves that way.
This website
The demonstrator is tested too.
The browser port used on these pages is tested against the same invariants as HFG's own suite: alignment reads back exactly, rigid lengths are conserved, left and right agree to 10⁻¹², and every contact patch stays on the ground. The benchmarks above are part of this website's test suite.
Validation: comparison with physical test data
Every case will state its reference source, the test conditions and the method, beside HFG's result, the difference and the assumptions. No cases are published yet: this table fills when correlation data exists, not before.
| Quantity | Reference source | Test conditions | Method | HFG result | Difference | Assumptions |
|---|---|---|---|---|---|---|
| No validation cases published yet. | ||||||