Create two 256x256 RGB textures, call them foo and bar.
The R channel will store current height of wave. The G channel will store the previous height of wave (allowing you to derive velocity).
... each frame ...
render_to(bar)
sample_from(foo)
/* insert fancy partial differential algorithm */
foo,bar = bar,foo
In other words, you're "ping pong"-ing between two textures.Now if you set an arbitrary texel to, say, 1.0 (maximum), that texel will propogate outwards as if it were a ripple.
Bonus: the result is a seamless tilable texture.
Look up "toyshop rain" for the exact details. But I used this method to augment an ingame lake surface's normal map (thunderstorm effect --- rippling raindrops propagating across the lake). This was in 2007, running on 2007 hardware. GPGPU need not apply.