16 #include <deal.II/lac/trilinos_solver.h> 18 #ifdef DEAL_II_WITH_TRILINOS 20 # include <deal.II/base/conditional_ostream.h> 21 # include <deal.II/lac/trilinos_sparse_matrix.h> 22 # include <deal.II/lac/trilinos_vector_base.h> 23 # include <deal.II/lac/trilinos_precondition.h> 27 DEAL_II_NAMESPACE_OPEN
33 const unsigned int gmres_restart_parameter)
35 output_solver_details (output_solver_details),
36 gmres_restart_parameter (gmres_restart_parameter)
52 solver_name (solver_name),
82 (
new Epetra_LinearProblem(const_cast<Epetra_CrsMatrix *>(&A.
trilinos_matrix()),
102 (
new Epetra_LinearProblem(&A,
114 const ::Vector<double> &b,
122 ExcDimensionMismatch(x.
size(), A.
n()));
124 ExcDimensionMismatch(b.size(), A.
m()));
126 ExcMessage (
"Can only work in serial when using deal.II vectors."));
128 ExcMessage (
"Matrix is not compressed. Call compress() method."));
131 Epetra_Vector ep_b (View, A.
range_partitioner(),
const_cast<double *
>(b.begin()));
147 const ::Vector<double> &b,
152 Epetra_Vector ep_x (View, A.OperatorDomainMap(), x.
begin());
153 Epetra_Vector ep_b (View, A.OperatorRangeMap(),
const_cast<double *
>(b.begin()));
167 const ::parallel::distributed::Vector<double> &b,
176 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(b.local_size()),
180 Epetra_Vector ep_b (View, A.
range_partitioner(),
const_cast<double *
>(b.begin()));
196 const ::parallel::distributed::Vector<double> &b,
202 A.OperatorDomainMap().NumMyElements());
203 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(b.local_size()),
204 A.OperatorRangeMap().NumMyElements());
206 Epetra_Vector ep_x (View, A.OperatorDomainMap(), x.
begin());
207 Epetra_Vector ep_b (View, A.OperatorRangeMap(),
const_cast<double *
>(b.begin()));
230 solver.SetAztecOption(AZ_solver, AZ_cg);
233 solver.SetAztecOption(AZ_solver, AZ_cgs);
236 solver.SetAztecOption(AZ_solver, AZ_gmres);
240 solver.SetAztecOption(AZ_solver, AZ_bicgstab);
243 solver.SetAztecOption(AZ_solver, AZ_tfqmr);
246 Assert (
false, ExcNotImplemented());
253 ierr =
solver.SetPrecOperator (const_cast<Epetra_Operator *>
258 solver.SetAztecOption(AZ_precond,AZ_none);
263 solver.SetAztecOption (AZ_conv, AZ_noscaled);
276 "option not implemented"));
279 "numerical breakdown"));
282 "loss of precision"));
285 "GMRES Hessenberg ill-conditioned"));
309 output_solver_details (output_solver_details)
328 const unsigned int restart_parameter)
330 output_solver_details (output_solver_details),
331 restart_parameter (restart_parameter)
352 output_solver_details (output_solver_details)
364 solver_name = bicgstab;
373 output_solver_details (output_solver_details)
394 output_solver_details (output_solver_details)
414 const std::string &solver_type)
416 output_solver_details (output_solver_details),
417 solver_type(solver_type)
465 ExcMessage (std::string (
"You tried to select the solver type <") +
467 "> but this solver is not supported by Trilinos either " 468 "because it does not exist, or because Trilinos was not " 469 "configured for its use.")
476 verbose_cout <<
"Starting symbolic factorization" << std::endl;
477 ierr =
solver->SymbolicFactorization();
480 verbose_cout <<
"Starting numeric factorization" << std::endl;
481 ierr =
solver->NumericFactorization();
484 verbose_cout <<
"Starting solve" << std::endl;
507 (
new Epetra_LinearProblem(const_cast<Epetra_CrsMatrix *>(&A.
trilinos_matrix()),
519 const ::Vector<double> &b)
525 ExcDimensionMismatch(x.
size(), A.
n()));
527 ExcDimensionMismatch(b.size(), A.
m()));
529 ExcMessage (
"Can only work in serial when using deal.II vectors."));
531 Epetra_Vector ep_b (View, A.
range_partitioner(),
const_cast<double *
>(b.begin()));
547 const ::parallel::distributed::Vector<double> &b)
551 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(b.local_size()),
554 Epetra_Vector ep_b (View, A.
range_partitioner(),
const_cast<double *
>(b.begin()));
567 DEAL_II_NAMESPACE_CLOSE
569 #endif // DEAL_II_WITH_PETSC SolverCG(SolverControl &cn, const AdditionalData &data=AdditionalData())
bool output_solver_details
void do_solve(const PreconditionBase &preconditioner)
#define AssertDimension(dim1, dim2)
virtual State check(const unsigned int step, const double check_value)
std_cxx11::shared_ptr< Epetra_LinearProblem > linear_problem
void solve(const SparseMatrix &A, VectorBase &x, const VectorBase &b)
const bool output_solver_details
const AdditionalData additional_data
const AdditionalData additional_data
std_cxx11::shared_ptr< Epetra_LinearProblem > linear_problem
::ExceptionBase & ExcMessage(std::string arg1)
AdditionalData(const bool output_solver_details=false, const unsigned int restart_parameter=30)
const AdditionalData additional_data
bool output_solver_details
#define AssertThrow(cond, exc)
const AdditionalData additional_data
void solve(const SparseMatrix &A, VectorBase &x, const VectorBase &b, const PreconditionBase &preconditioner)
SolverControl & solver_control
bool output_solver_details
std_cxx11::shared_ptr< Epetra_Operator > preconditioner
bool output_solver_details
SolverCGS(SolverControl &cn, const AdditionalData &data=AdditionalData())
Stop iteration, goal reached.
SolverBase(SolverControl &cn)
#define Assert(cond, exc)
AdditionalData(const bool output_solver_details=false)
SolverBicgstab(SolverControl &cn, const AdditionalData &data=AdditionalData())
SolverControl & solver_control
SolverControl & control() const
bool output_solver_details
const Epetra_CrsMatrix & trilinos_matrix() const
double last_value() const
SolverTFQMR(SolverControl &cn, const AdditionalData &data=AdditionalData())
AdditionalData(const bool output_solver_details=false)
unsigned int last_step() const
const AdditionalData additional_data
AdditionalData(const bool output_solver_details=false, const std::string &solver_type="Amesos_Klu")
SolverDirect(SolverControl &cn, const AdditionalData &data=AdditionalData())
const AdditionalData additional_data
bool output_solver_details
unsigned int max_steps() const
std_cxx11::shared_ptr< Amesos_BaseSolver > solver
std::pair< size_type, size_type > local_range() const
const Epetra_MultiVector & trilinos_vector() const
AdditionalData(const bool output_solver_details=false)
SolverControl & control() const
unsigned int restart_parameter
const Epetra_Map & domain_partitioner() const DEAL_II_DEPRECATED
AdditionalData(const bool output_solver_details=false, const unsigned int gmres_restart_parameter=30)
SolverGMRES(SolverControl &cn, const AdditionalData &data=AdditionalData())
const AdditionalData additional_data
size_type local_size() const
const Epetra_Map & range_partitioner() const DEAL_II_DEPRECATED
AdditionalData(const bool output_solver_details=false)
const unsigned int gmres_restart_parameter