[Trilinos-Users] AztecOO AZ_reuse question
Heroux, Michael A
maherou at sandia.gov
Wed Mar 2 07:56:42 MST 2011
Siva,
It's been a while since I have looked at this, but there is a method called
ConstructPreconditioner (I think), that will do what you want, rather than
doing a single iteration. Also, as long as the inner AztecOO object remains
alive, you do not have to set the AZ_reuse flag.
I think the issue you have is that you are mixing the old and new
programming styles.
Finally, I think there might be an example in the AztecOO directories that
show an inner outer usage.
Mike
On 3/2/11 1:54 AM, "Siva Rajamanickam" <srajama at sandia.gov> wrote:
> I am trying to use AztecOO for both inner and outer iterations in a new
> preconditioner. I create my new Ifpack style preconditioner. Set that as a
> preconditioner for my AztecOO solver (solver1) for outer iteration.
>
> Inside my new preconditioner's compute
> I create another AztecOO solver (solver2) (for inner iteration), set a
> smaller problem (for the Schur complement) and the other options. Set
> AZ_keep_info to 1, do a dummy iterate() so the preconditioner gets
> constructed. Then I set AZ_pre_calc to AZ_reuse and exit out of my compute.
>
> Inside my new preconditioner's ApplyInverse
> I use the solver to solve for the Schur complement system. The expectation
> is that solve will use the already constructed preconditioner. However, I get
>
> 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:
> 1) Total number of unknowns.
> 2) options[AZ_overlap]
> 3) options[AZ_scaling]
> 4) options[AZ_precond]
> 5) options[AZ_reorder]
> 6) options[AZ_type_overlap]
> 7) options[AZ_subdomain_solve]
> 8) options[AZ_graph_fill]
> 9) params[AZ_ilut_fill]
> 10) params[AZ_drop]
> 11) data_org[AZ_name]
> XXXP14 '*! 1.0266XXX -7923 208
> ( -7923, 208 373793856) ==> P14 '*! 1.0266
> ( -914901, 15872 373827424) ==> vblock in gmres0
> ( -914901, 512 373746480) ==> ptrs in gmres0
> ( -914901, 10200 373817136) ==> general in gmres0
> ( 2073, 80 373754000) ==> T48 +1! 1.0295
> ( 2073, 208 373740272) ==> P48 +1! 1.0295
> ( 2077, 112 373740064) ==> x_reord P14 '*! 1.0266
> ( 2077, 612 373770976) ==> bindx P14 '*! 1.0266
> ( 2077, 1224 373738576) ==> val P14 '*! 1.0266
> ( 2077, 60 373748016) ==> iu P14 '*! 1.0266
> ( 2077, 60 373747856) ==> ordering P14 '*! 1.0266
> ( 2077, 60 373692640) ==> inv_ordering P14 '*! 1.0266
> ( 2077, 224 373692320) ==> A_over P14 '*! 1.0266
> ( 2077, 80 373768608) ==> T14 '*! 1.0266
> ( 2077, 208 373768320) ==> P14 '*! 1.0266
>
> I tried setting the first 10 of the options in my compute explicitly, but that
> doesn't help. I don't how to set the data_org.
>
> The following two cases work:
> 1. If I create a new solver every time inside my ApplyInverse method then it
> works fine. But that is terribly inefficient.
>
> 2. I tried two consecutive dummy iterate() calls within my compute then it
> works fine as well.
>
> Here is some pseudo code
> Inside the class definition I do
> Teuchos::RCP<Epetra_CrsMatrix> Sbar_;
> AztecOO *solver_;
> Epetra_MultiVector *Xs;
> Epetra_MultiVector *Bs;
>
> In the compute I do
> solver_ = new AztecOO() ;
> int err = solver_->SetUserMatrix(Sbar_.get());
> solver_->SetAztecOption(AZ_solver, AZ_gmres);
> solver_->SetAztecOption(AZ_precond, AZ_dom_decomp);
> // Do a dummy iterate to construct the preconditioner
> Epetra_Map BsMap(-1, Snr_, SRowElems_, 0, A_->Comm());
> Xs = new Epetra_MultiVector(BsMap, 1);
> Bs = new Epetra_MultiVector(BsMap, 1);
> Bs->PutScalar(1.0);
> solver_->SetLHS(Xs);
> solver_->SetRHS(Bs);
> solver_->Iterate(30, 1e-10);
>
> solver_->SetAztecOption(AZ_pre_calc, AZ_reuse);
>
> cout <<"Calling one more time in setup itself " << endl;
> Bs->PutScalar(2.0);
> solver_->Iterate(30, 1e-10); // This works
>
> In the ApplyInverse
> Xs->PutScalar(0.0);
> Bs to random value
> solver_->Iterate(30, 1e-10); // This fails
>
> Any help will be appreciated.
>
> Thanks
> Siva
>
>
>
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> http://software.sandia.gov/mailman/listinfo/trilinos-users
>
More information about the Trilinos-Users
mailing list