From: hartmann Date: Thu, 24 Jun 2004 15:07:42 +0000 (+0000) Subject: According to the SolverGMRES::AdditionalData class the PETScWrappers::SolverGMRES... X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e62ad3112b8bbd71c7e5c5766d88366f702629d;p=dealii-svn.git According to the SolverGMRES::AdditionalData class the PETScWrappers::SolverGMRES::AdditionalData class now also takes an additional flag indicating the use of left or right preconditioning. git-svn-id: https://svn.dealii.org/trunk@9468 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/lac/include/lac/petsc_solver.h b/deal.II/lac/include/lac/petsc_solver.h index c189ff6386..983d05115b 100644 --- a/deal.II/lac/include/lac/petsc_solver.h +++ b/deal.II/lac/include/lac/petsc_solver.h @@ -537,13 +537,20 @@ namespace PETScWrappers * 30, i.e. do a restart every 30 * iterations. */ - AdditionalData (const unsigned int restart_parameter = 30); + AdditionalData (const unsigned int restart_parameter = 30, + const bool right_preconditioning = false); /** * Maximum number of * tmp vectors. */ unsigned int restart_parameter; + + /** + * Flag for right + * preconditioning. + */ + bool right_preconditioning; }; /** @@ -580,7 +587,7 @@ namespace PETScWrappers */ SolverGMRES (SolverControl &cn, const MPI_Comm &mpi_communicator = PETSC_COMM_SELF, - const AdditionalData &data = AdditionalData(30)); + const AdditionalData &data = AdditionalData(30,false)); protected: /** diff --git a/deal.II/lac/source/petsc_solver.cc b/deal.II/lac/source/petsc_solver.cc index 6b1d3d2d70..70487b688b 100644 --- a/deal.II/lac/source/petsc_solver.cc +++ b/deal.II/lac/source/petsc_solver.cc @@ -363,9 +363,11 @@ namespace PETScWrappers /* ---------------------- SolverGMRES ------------------------ */ SolverGMRES::AdditionalData:: - AdditionalData (const unsigned int restart_parameter) + AdditionalData (const unsigned int restart_parameter, + const bool right_preconditioning) : - restart_parameter (restart_parameter) + restart_parameter (restart_parameter), + right_preconditioning (right_preconditioning) {} @@ -418,6 +420,14 @@ namespace PETScWrappers ierr = (*fun_ptr)(ksp,additional_data.restart_parameter); AssertThrow (ierr == 0, ExcPETScError(ierr)); + + // Set preconditioning side to + // right + if (additional_data.right_preconditioning) + { + ierr = KSPSetPreconditionerSide(ksp, PC_RIGHT); + AssertThrow (ierr == 0, ExcPETScError(ierr)); + } }