MILU0Preconditioner
is the only preconditioner optimized for sparse storage and though the only one that will improve performance.It implements both the standard and the modified ILU0 algorithm (default is the modified one). Have you tried both? Use the
UseModified
property or the constructor overload to choose between the two versions.What's the status of the iterator after solving the system (check the
monitor.Status
property)?EDIT: To have more control over the iteration process, you might want to setup the iterator by yourself:
int iterationsLimit = 500;
double tolerance = 1e-8;
var iterator = new Iterator<double>(
new IterationCountStopCriterion<double>(iterationsLimit),
new ResidualStopCriterion<double>(tolerance),
new DivergenceStopCriterion<double>()
);
var solver = new BiCgStab();
var preconditioner = new MILU0Preconditioner(true);
preconditioner.Initialize(matrix);
solver.Solve(matrix, b, x, iterator, preconditioner);