Thanks for the clarification Wolfgang. This has alleviated my fear of some improper choices on my part.
I did some further testing and can give the following update. Instead of choosing initial guess as zero (for Inv(M) as well as for the Schur complement system) if I take that as a random vector, defined as follows: #define frand()((double) rand()/(RAND_MAX+1.0)) the number of iterations for Identity preconditioner has increased substantially. The number of iterations are increased for approximate Schur complement preconditioner too, but they are somewhat bounded. However, now the cost of the approximate Schur complement preconditioner approach is almost half of the Identity preconditioner approach. Moreover, now the same choice of tolerance for Inv(M) and S (I finally settled at 1e-08) gives the favorable results as compared to the altered choices (like those observed from zero initial guess). I'm not sure if it has to do something with the data of the problem which I chose such that the analytic solution is Sin(pi*x)Sin(pi*y). I'd gladly share my numerical results. However, this I can do only towards the end of July as I'll be out of office from Monday for almost 3 weeks. Bests, Satyendra On Fri, Jun 25, 2010 at 21:20, Wolfgang Bangerth <[email protected]> wrote: > > You'll have to play around with tolerances. The basic problem is that if you > make the tolerances smaller you'll need more iterations (and more time) in > the inner solver. On the other hand, if you make the tolerance too large, > then the inner problem is not solved accurately enough. This means that every > multiplication with the Schur complement that the outer CG sees is slight > different because it is not > B^T M^-1 B > but in fact something of the form > B^T Q B > where Q is the result of an inaccurate inner solve with M. The problem now is > that the inner CG solver's actions depend on the right hand side vector, i.e. > Q=Q(r_k) where r_k is the vector with which you want to solve, which changes > from iteration k to k+1. In other words, CG thinks it is multiplying with the > Schur complement each time, but in reality the matrix changes slightly each > time because > B^T Q(r_k) B > changes. CG is not prepared to handle this situation and loses orthogonality > of its iteration vectors, which leads to drastically increased numbers of > iterations. The only way to avoid this is to (i) use a tight inner tolerance, > (ii) use a different outer solver that is not quite so sensitive, such as > GMRES. > > Since you did all these experiments, would you be interested in offering some > text that we could add to the results section that summarizes what you found? _______________________________________________ dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii
