A fast, new computational algorithm for free oscillations and surface waves