Reorganise iterative solvers so as to build elegantly both with and without OpenCL