Calculation verification

Reproducible equation checks, with a deliberately limited scope.

This is not third-party certification, laboratory validation, or proof that every fitting dataset is correct. The results below come from executing the real static/js/fittings.js and static/js/duct-calc.js in Node, not from manually entered passing values.

Recorded results

Loading the recorded benchmark artifact. No pass status is assumed.

Case / quantityIndependent expectedEngine actualUnitResult

Download actual results (JSON) · Download cold round-duct project

What is checked

Each numeric check uses |actual − expected| ≤ absolute tolerance + relative tolerance × |expected|. Most checks use 1×10⁻⁹ absolute and 2×10⁻⁶ relative; discrete selection and imposed Co use exact comparisons. These tight numerical allowances cover conversion rounding and solver roundoff, not engineering/model accuracy. Every check's own units and tolerances are in the JSON.

Equations and coefficient reference

Reference arithmetic uses V = Q/A, Pv = ρV²/2, Dh = 4A/perimeter, and Darcy-Weisbach Δpf = f(L/Dh)Pv. Rectangular Dh = 2WH/(W+H). The turbulent Darcy factor solves 1/√f = −2 log10[ε/(3.7Dh) + 2.51/(Re√f)] with bisection in 1/√f, separately from the engine's Newton solver.[1]

Fitting loss is Δp = Co × Pv.[1] In the imposed elbow case, Pv is calculated from the section's own area and flow. Co is inseparable from its reference velocity: do not apply a common-duct coefficient to branch-local Pv without conversion. Junction reference selection and empirical Co generation are outside this suite.

Roughness is imposed at 0.09144 mm (0.0003 ft), not independently measured. Air-property constants, the ideal-gas and Sutherland expressions, altitude model, and the 249.089 Pa per inch-water convention are disclosed in the artifact. The reference converts CFM using exact 0.3048³/60; the engine's rounded conversion accounts for the small differences.

Reproduce it

  1. Save any current project first. Download the cold round-duct project above.
  2. Open the calculator and import the JSON using its project import control. The same object is accepted by APP.importProject(data).
  3. Confirm 0 ft altitude, 0°F, 2000 CFM, 16-inch round duct, 100 ft, galvanized spiral material, and no fittings. Click Calculate.
  4. Compare the raw section friction loss with cold-zero-f → frictionLoss_inWG in the JSON. The UI rounds the displayed value. The saved 15% allowance is separate; do not compare the margin-adjusted figure or fan static pressure to raw friction.

node --test lib/readiness-benchmarks.test.js
node lib/readiness-benchmarks.js --write static/verification/readiness-benchmarks.json

The runner exits nonzero if a comparison fails or execution errors. The artifact records generation time and SHA-256 hashes of the two engine inputs. Engine ID pressure-2026-09-08 is separate from the application version. These are recorded results, not a live check of the currently deployed browser code.

Not checked

Sources

[1] SMACNA, Duct Design Fundamentals, Patrick J. Brooks, P.E., Utah ASHRAE presentation — “Pressure Losses” slides: Darcy-Weisbach, hydraulic diameter, Colebrook and coefficient × velocity pressure. The source supports the equations, not endorsement of this software or its generated numbers.