works with non-constant coefficient alpha, as well as non-uniform mesh