I have a sparse $5\,656\,236 * 5\,656\,236$ matrix $A$ with $166\,526\,888$ non-zero elements. The matrix comes from using the finite element method on a linear elasticity problem and is positive semi-definite. I'm trying to use the preconditioned conjugate gradient method to solve it, particularly, the pcg() function in MATLAB.Can I expect this to converge at all? I triedL = ichol(A);[u,flag,res,iter,resvec] = pcg(A,F,1e-6,max_ter,L,L');But it does not seem to converge at all. The residual starts by increasing a lot and after 2000 iterations (which takes some hours) the relative residual is up at $10^4$.So I guess my question is, how would you attack a system of this size? I'm sure there are a lot of ways to lure the method into converging faster. Any hints and tips are welcome!
Matlab preconditioned conjugate gradient on big matrix
matrices;matlab
The MATLAB function ichol computes by default the zero fill-in variant of the incomplete Cholesky factorisation. You could try to allow more fill-in (and thus try to improve the preconditioner) by using a drop tolerance, e.g.:L = ichol(A,struct('type','ict','droptol',1e-03,'michol','on'));Also note, that single level preconditioners such as ILU (or ICHOL), sparse inverses, simple splittings etc. do not scale well for large problem sizes. So if the above won't work, you could try to use algebraic multigrid (AMG). There are AMG packages which are well-suited for solving linear elasticity, e.g., BoomerAMG from Hypre or ML in Trilinos (as far as I know, ML has also a Matlab interface). If you don't like C/C++, you might consider trying PyAMG which is in Python (build upon NumPy and SciPy).