The most important changes with respect to
the December 2008 version are:
The preconditioner can be passed in decomposed form.
Matrix-vector multiplication and preconditioning operations
can be defined by functions.
Optional residual smoothing.
Optional residual replacements to achieve accuracy close to machine
precision.
test_idrs.tgz:
a test set of 11 examples (also includes
idrs.m).
This manual describes
idrs.m).
and the accompanying test set.
example_idrs.m:
(requires
idrs.m):
a Matlab script that generates a 3D, discretized
Convection-Diffusion-Reaction problem on the unit cube.
The parameters can be changed via a user interface in order to generate
different test problems.
The picture below shows the convergence behavior of
IDR(1),
IDR(2),
IDR(4),
IDR(8),
and the built-in Matlab routines
for (full) GMRES and Bi-CGSTAB when solving the test
problem with default parameters, which
yields a highly non-symmetric and indefinite system of
approximately 60,000 equations.
An Ocean Circulation Problem.
We use
this test problem
to illustrate the flexibility of the
IDR(\(s\))
function
idrs.m,
by combining subdomain deflation
(cf. J. Frank and C. Vuik. On the construction of deflation-based
preconditioners. SIAM Journal on Scientific Computing, 23:442-462,2001)
and IDR(\(s\)),
without modifying
idrs.m.
Python
idrs:
a direct translation of the Matlab version described above.
Provided by
Reinaldo
Astudillo (Delft University of Technology).
The package includes IDR(s) methods for standard linear systems, and special variants for solving sequences of shifted linear systems. The preconditioners that are included can be applied to both standard and shifted problems. The package supports a number of standard matrix formats, and user defined formats can be easily included. The package conforms to the Fortran 2018 standard, it is stand alone (no external libraries are needed) and is parallelised using standard Fortran features. It comes with many examples.