[Trilinos-Users] Anasazi Block Krylov Schur Trouble With Preconditioners

Davood Ansari david.ansari at gmail.com
Mon Feb 25 20:51:47 MST 2008

*Hi everyone

Well, I am trying to modify the example with Anasazi BKS to fit into my
The major change I am making is that I use ifpack preconditioner other than
of the example ( BlockKrylovSchurEpetraExGenAztecOO.cpp ). The issue is
that the code numerically fails when any preconditioner other than that of
the original
code ( BlockKrylovSchurEpetraExGenAztecOO.cpp ) is used. The error message

Aztec status AZ_ill_cond: GMRES hessenberg ill-conditioned
Error! Caught exception in BlockKrylovSchur::iterate() at iteration 1
terminate called after throwing an instance of 'Anasazi::OperatorError'
  what():  /opt/Trilinos/Parallel/include/AnasaziEpetraAdapter.hpp:792:

Throw number = 1

Throw test that evaluated to true: Op.Apply( x, y ) != 0

Error in Epetra_Operator::Apply()!

*For the above case I had used the following chunk of code to build my
preconditioner: (I have also tried
preconditioners form ifpack's factory class )
    Teuchos::RCP<Ifpack_IlukGraph> IlukGraph;
    Teuchos::RCP<Ifpack_CrsRiluk> ILUK;
    // This block examaplifies the use of Ifpack (without using the Factory
class) derived from example progrma from Michael A. Heroux
    if (prec_ilu_fill>-1)
        Epetra_Time timer(Comm);
        double elapsed_time = timer.ElapsedTime();
        IlukGraph = Teuchos::rcp( new Ifpack_IlukGraph((*A).Graph(),
prec_ilu_fill, prec_ptn_overlap) );
        ILUK = Teuchos::rcp( new Ifpack_CrsRiluk(*IlukGraph) );
        int initerr = ILUK->InitValues(*A);
        if (initerr!=0) cout << Comm << "InitValues error = " << initerr;

        elapsed_time = timer.ElapsedTime() - elapsed_time;
        if(rank == 0)
            cout << " done." << std::endl;
            cout << "\tTime to construct " << prec_type << " preconditioner:
" << elapsed_time << "sec."<<endl;

*The original code, however, uses the following chunk to build the

*    Teuchos::RCP<Ifpack_CrsIct> ICT;
    ICT = Teuchos::rcp( new Ifpack_CrsIct(*A, prec_drop_tol, prec_ilut_fill)
    int initerr = ICT->InitValues(*A);
    if (initerr != 0) cout << "\tInitValues error = " << initerr ;
    int info = ICT->Factor();
    assert( info==0 );

    if (rank==0)
        bool transA = false;
        double Cond_Est;
        ICT->Condest(transA, Cond_Est);
        cout << "\tCondition number estimate for this preconditoner = " <<
Cond_Est << endl;

*Any idea why should other preconditioners (or even ICT made through the
ifpack factory) should lead to this failure ?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://software.sandia.gov/mailman/private/trilinos-users/attachments/20080226/daa45cc0/attachment-0001.html

More information about the Trilinos-Users mailing list