IDR(s) is a robust and efficient short recurrence Krylov subspace method for solving large nonsymmetric systems of linear equations. On this page you can find reports and papers that describe IDR(s), MATLAB, Python, and FORTRAN implementations for IDR(s), and examples of how to use the codes.
Version of August 2010. This is the
bi-ortho variant of IDR(s) (with enhancements) that is described in
 (see below).
The most important changes with respect to version of December 2008 are:
Preconditioner can be passed in decomposed form;
Matrix-vector multiplication and preconditioning operations can be defined by functions;
Residual smoothing (optional);
Residual replacements to achieve accuracy close to machine precision (optional).
example_idrs.m (needs idrs.m).
This MATLAB script defines a 3D discretised convection-diffusion-reaction problem on the unit cube. The parameters can be changed via a user interface to create a different test problem. The problem is solved with IDR(1), IDR(2), IDR(4), IDR(8), and with the built-in MATLAB routines for (full) GMRES and Bi-CGSTAB. The picture below shows the convergence of the methods for the default parameters, which specify a highly non-symmetric and indefinite problem consisting of about 60,000 equations.
Idrs.py: this file contains a Python implementation of IDR(s). It is a direct translation of the matlab implementation described above, with the same functionalities. It has been written and made available by Reinaldo Astudillo (Delft University of Technology).
idrs_f90.tar: This file contains an advanced F90/F95 implementation of IDR(s) for systems with multiple right-hand sides. It comes with a real and a complex test problem that explain how to use the code. Feedback is welcome!
idrs_Arash.tar: this file contains a simple F90/F95 implementation of IDR(s). It has been written and made available by Arash Ghasemi (National Center for Computational Engineering, University of Tennessee).