[Trilinos-Users] Aztec, DD-prec and reuse

Simone Deparis deparis at MIT.EDU
Wed Jan 4 08:19:46 MST 2006


Mike Heroux wrote:
> Simone,
> It is possible to reuse a native AztecOO preconditioner (e.g., the
> preconditioner obtained by setting options[AZ_precond] = AZ_dom_decomp and
> options[AZ_subdomain_solve] = AZ_ilut) in one of two ways:
> (1) By setting options[AZ_pre_calc] = AZ_reuse prior to calling the
> Iterate() method the first time.  The actual preconditioner will be
> constructed when the Iterate() method tries to use the preconditioner for
> the first time.

Setting reuse before calling Iterate gives the following error at the
first time I solve:
Error:  Did not find previous factorization (requested
        by setting options[AZ_pre_calc] to AZ_reuse).
        To find this factorization, the following
        parameters must match the previous factorization:

> (2) You can also explicitly construct and destroy AztecOO's native
> preconditioners by use the AztecOO's ConstructPreconditioner() and
> DestroyPreconditioner() methods.  ConstructPreconditioner() creates a
> persistent copy of an AztecOO  native internal preconditioner that remains
> viable until DestroyPreconditioner() is called or the AztecOO object is
> destroyed.  The exact type of preconditioner that is constructed is
> determined by the same options[AZ_precond] etc. as above. 

Same error as above.

I went through the source code of ztec and I have the impression that
reuse works only with external preconditioners, setted via SetPrecMatrix()
Am I wrong?

>>In a later stage, I would like to build M starting from P and 
>>use M as a preconditioner to A, via something like:
>>  Epetra_Operator* M = P->GetPrecOperator()
>>  A->SetPrecOperator(M);
>>  Epetra_RowMat* M =P->GetPrecMatrix();
>>  A->SetPrecMatrix(M);
>>Do you think that this is feasible?
> I am not quite sure what you mean here.  Since P is an Epetra_CrsMatrix,
> there is no GetPrecOperator() or GetPrecMatrix() methods.  If you want to
> reuse a preconditioner from a previous call to Iterate(), you can use one of
> the two ways listed above.
> Mike

What I mean here is:
I have A, P and M, suvh that:
P is a preconditioner for A
M is a preconditioner for P that comes from AZ_dom_decomp

I would like to build M from P (using ConstructPreconditioner) but use M
as a preconditioner for A

Thank yo

More information about the Trilinos-Users mailing list