Author: Numerical Algorithms Group.