Implemented a better interface and Gauss-Seidel preconditioner