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

Mike Heroux maherou at sandia.gov
Tue Jan 3 10:47:31 MST 2006


> Is it possible to reuse the DD-preconditioner or even to get 
> a Epetra_RowMat pointer to it?
> I mean:
> I have an
>   Epetra_CrsMatrix A
> and a Preconditioner
>   Epetra_CrsMatrix P
> I solve Ax = b by GMRES preconditioned by P.
> When solving for P^{-1} inside GMRES, I use GMRES 
> preconditioned with overlapped DD from aztec (combined with 
> AZ_ilut) (lets call this second precondtioner M).
> As you may guess, I would like to keep M (the preconditioner 
> to P), as well as its ilut factorization.
> As far as I understand, I can't use
>   ConstructPreconditioner(condest)
> nor AZ_reuse, since my preoconditioner M is internal (not 
> setted by SetPrecOperator or SetPrecMatrix, but builded by aztec).
> Do you have any idea, please?

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.

(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. 

> +++++++++++++++++++++++++++++
> 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);
> or
>   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.


More information about the Trilinos-Users mailing list