complete wave algo