# [Trilinos-Users] AztecOO Convergence

Ammar T. Al-Sayegh alsayegh at purdue.edu
Mon Nov 21 13:50:40 MST 2005

```Mike,

Just to cofirm, if A and b of an Epetra_LinearProblem being
solved in a single processor are exactly the same as A and b
of an Epetra_LinearProblem being solved in two processors,
then the solution, x, should be 100% identical in both cases
when AZ_precond is set to AZ_none. Is this correct?

I will try to trace my A and b before each run of solver.iterate()
in the single- and dual-processor cases and check whether there
is a variation in A and b between the two cases to track any coding
error.

-ammar

----- Original Message -----
From: "Mike Heroux" <maherou at sandia.gov>
To: "'Ammar T. Al-Sayegh'" <alsayegh at purdue.edu>; <trilinos-users at software.sandia.gov>
Sent: Monday, November 21, 2005 3:21 PM
Subject: RE: [Trilinos-Users] AztecOO Convergence

> Ammar,
>
> Note that, if your matrix is singular, then there are two basic
> possibilities:
>
> 1) Your right-hand-side b is in the range of the operator A.  In other
> words, there is an x such that A*x = b.  Furthermore, there are many vectors
> that are solutions, since any vector y from the null space of A can be added
> to x and A(x+y) = b.  If you are getting two solutions to your problem in
> this case, say x1 and x2, and both have a small residual (norm(b-A*x1) and
> norm(b-A*x2) are both small) then you might check the norm of A*(x1-x2).  If
> this value is small, then x1 and x2 are two particular solutions to the
> singular problem and x1-x2 is a vector in the null space of A.
>
> 2) Your right-hand-side b is not in the range of A.  Then there is NO x such
> that A*x = b.  This second case can happen in a partial way due to floating
> point arithmetic errors.  In these cases, b may be analytically in the range
> but numerically slightly out of the range.  This might explain why you
> cannot get your error below a certain tolerance.
>
>
> If you are using unpreconditioned GMRES, there is little chance that you are
> getting two wildly different particular solutions, so if you are seeing very
> different results on 1 and 2 processors, it suggests a coding error (at
> least to me).
>
>
> Mike
>
>> -----Original Message-----
>> From: trilinos-users-bounces at software.sandia.gov
>> [mailto:trilinos-users-bounces at software.sandia.gov] On Behalf
>> Of Ammar T. Al-Sayegh
>> Sent: Monday, November 21, 2005 1:59 PM
>> To: trilinos-users at software.sandia.gov
>> Subject: Re: [Trilinos-Users] AztecOO Convergence
>>
>> Randal,
>>
>> Thank you for the elaborate explanation. Your reasoning makes
>> sense, and I tried to follow your advice and disable the
>> preconditioner. However, I got hit by another issue. Now it
>> says that my GMRES Hessenberg matrix is ill-conditioned,
>> which perhaps is right because I'm dealing with nonlinear
>> analysis of a structure that's reaching instability, i.e.
>> having it's stiffness matrix getting close to being singular.
>> The thing that I can't make sense of, though, is that why it
>> works fine just fine with a single processor but not with two
>> processors even when preconditioner is disabled?
>>
>> I don't mind the additional time cost if there is a way to
>> get the same level of numerical accuracy of when using
>> multiple processors as in the case with a single processor.
>>
>>
>> -ammar
>>
>>
>> ----- Original Message -----
>> From: "Randall Bramley" <bramley at cs.indiana.edu>
>> To: "Ammar T. Al-Sayegh" <alsayegh at purdue.edu>
>> Cc: <trilinos-users at software.sandia.gov>
>> Sent: Monday, November 21, 2005 11:01 AM
>> Subject: Re: [Trilinos-Users] AztecOO Convergence
>>
>>
>> >
>> >> In AztecOO, why does convergence deteriorate as the number
>> >> of processors is increased?
>> >
>> > At last, a question I can answer. :-)
>> >
>> > The preprocessing is usually block diagonal, and as the number of
>> > processors increases, the blocks become smaller - in the limit, the
>> > preconditioner becomes diagonal scaling.  Fewer processors leads to
>> > the block becoming larger, in the limit becoming an incomplete
>> > factorization on the whole matrix.  This is generally a more
>> > accurate preconditioner since it brings in more
>> off-diagonal elements
>> > and hence accounts for longer-range interactions in the
>> linear system.
>> >
>> > So it's normal to have the quality of preconditioning lower
>> (and hence
>> > number of iterations higher) when the number of processors
>> increases.
>> >
>> >> Is there any options one can use to eliminate this problem?
>> >>
>> >> Are there any particular solvers which will yield same
>> >> convergence regardless of the number of processors?
>> >
>> > Yes, but they are not good ones to choose: use no preconditioning or
>> > just diagonal scaling.  But you're likely to find the wall clock
>> > time increases over letting the number of iterations increase.
>> >
>> > -Randall Bramley
>> >
>>
>> _______________________________________________
>> Trilinos-Users mailing list
>> Trilinos-Users at software.sandia.gov
>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>>
>
>
>

```