Wave Scattering Variables
This was the first major programming project I did. I believe it was all in FORTRAN, owing mostly to the fact that I started it in 1982 under the direction of Derek Rowell, when people believed that all engineering software must be written in FORTRAN or it couldn't be any good.
The basic challenge was to provide a simulation package that could simulate duct systems in a variety of configurations, including linear components such as straight, uniform ducts, changes in size, and plenums, but also including non-linear elements such as dampers and fans.
The technique we used relied on wave dispersion theory, in which the physical variables effort and flow are replaced by unit-less U and V coordinates, representing upward and downward flowing waves as they propagate through the medium. By putting the waves in simulated delay buffers, one avoids having to model the complete distributed system, without sacrificing fidelity.
The wave scattering variables rely on a concept of characteristic impedance that is used in the conversion to and from pressure and flow. At junctions, the characteristic impedance interactics with endpoint resistance or a change in impedance in a simple linear relationship, resulting in simple block diagrams that are easily modularized for efficient simulations.
This work also made use of bond graph modeling, which Hank Paynter at M.I.T. championed so well. The bond graph modelling allowed for the mixture of nonlinear elements into the simulation while providing numerical stability guarantees that are often hard to come by otherwise.
It's a bit surprising this technique hasn't made its way into more simulation systems. I sure found it useful in the 6 degree-of-freedom simulation system I put together at Na Software, and that is used in the simulation from the connected links app in the archives section.