include/deal.II/lac/trilinos_solver.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: trilinos_solver.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2008, 2009, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
00010 //
00011 //---------------------------------------------------------------------------
00012 #ifndef __deal2__trilinos_solver_h
00013 #define __deal2__trilinos_solver_h
00014 
00015 
00016 #include <deal.II/base/config.h>
00017 
00018 #ifdef DEAL_II_USE_TRILINOS
00019 
00020 #  include <deal.II/base/std_cxx1x/shared_ptr.h>
00021 #  include <deal.II/lac/exceptions.h>
00022 #  include <deal.II/lac/solver_control.h>
00023 #  include <deal.II/lac/vector.h>
00024 
00025 #  include <Epetra_LinearProblem.h>
00026 #  include <AztecOO.h>
00027 #  include <Epetra_Operator.h>
00028 #  include <Amesos.h>
00029 
00030 DEAL_II_NAMESPACE_OPEN
00031 
00032 namespace TrilinosWrappers
00033 {
00034                                    // forward declarations
00035   class SparseMatrix;
00036   class VectorBase;
00037   class PreconditionBase;
00038 
00039 
00060   class SolverBase
00061   {
00062     public:
00063 
00078       enum SolverName {cg, cgs, gmres, bicgstab, tfqmr} solver_name;
00079 
00086       struct AdditionalData
00087       {
00101         AdditionalData (const bool         output_solver_details   = false,
00102                         const unsigned int gmres_restart_parameter = 30);
00103 
00109         const bool output_solver_details;
00110 
00115         const unsigned int gmres_restart_parameter;
00116       };
00117 
00123       SolverBase (SolverControl  &cn);
00124 
00133       SolverBase (const enum SolverName  solver_name,
00134                   SolverControl         &cn);
00135 
00139       virtual ~SolverBase ();
00140 
00152       void
00153       solve (const SparseMatrix     &A,
00154              VectorBase             &x,
00155              const VectorBase       &b,
00156              const PreconditionBase &preconditioner);
00157 
00176       void
00177       solve (const SparseMatrix           &A,
00178              ::Vector<double>       &x,
00179              const ::Vector<double> &b,
00180              const PreconditionBase       &preconditioner);
00181 
00186       SolverControl & control() const;
00187 
00191       DeclException1 (ExcTrilinosError,
00192                       int,
00193                       << "An error with error number " << arg1
00194                       << " occured while calling a Trilinos function");
00195 
00196     protected:
00197 
00210       SolverControl &solver_control;
00211 
00212     private:
00213 
00222       std_cxx1x::shared_ptr<Epetra_LinearProblem> linear_problem;
00223 
00229       AztecOO solver;
00230 
00235       const AdditionalData additional_data;
00236 
00237   };
00238 
00239 
00240 
00248   class SolverCG : public SolverBase
00249   {
00250     public:
00257       struct AdditionalData
00258       {
00263         AdditionalData (const bool output_solver_details = false);
00264 
00270         bool output_solver_details;
00271       };
00272 
00283       SolverCG (SolverControl        &cn,
00284                 const AdditionalData &data = AdditionalData());
00285 
00286     protected:
00291       const AdditionalData additional_data;
00292   };
00293 
00294 
00295 
00303   class SolverCGS : public SolverBase
00304   {
00305     public:
00311       struct AdditionalData
00312       {
00317         AdditionalData (const bool output_solver_details = false);
00318 
00324         bool output_solver_details;
00325       };
00326 
00337       SolverCGS (SolverControl        &cn,
00338                  const AdditionalData &data = AdditionalData());
00339 
00340     protected:
00345       const AdditionalData additional_data;
00346   };
00347 
00348 
00349 
00356   class SolverGMRES : public SolverBase
00357   {
00358     public:
00364       struct AdditionalData
00365       {
00372           AdditionalData (const bool         output_solver_details = false,
00373                           const unsigned int restart_parameter = 30);
00374 
00380           bool output_solver_details;
00381 
00386           unsigned int restart_parameter;
00387       };
00388 
00399       SolverGMRES (SolverControl        &cn,
00400                    const AdditionalData &data = AdditionalData());
00401 
00402     protected:
00407       const AdditionalData additional_data;
00408   };
00409 
00410 
00411 
00419   class SolverBicgstab : public SolverBase
00420   {
00421     public:
00427       struct AdditionalData
00428       {
00433         AdditionalData (const bool output_solver_details = false);
00434 
00440         bool output_solver_details;
00441       };
00442 
00453       SolverBicgstab (SolverControl        &cn,
00454                       const AdditionalData &data = AdditionalData());
00455 
00456     protected:
00461       const AdditionalData additional_data;
00462   };
00463 
00464 
00465 
00473   class SolverTFQMR : public SolverBase
00474   {
00475     public:
00481       struct AdditionalData
00482       {
00487         AdditionalData (const bool output_solver_details = false);
00488 
00494         bool output_solver_details;
00495       };
00496 
00507       SolverTFQMR (SolverControl        &cn,
00508                    const AdditionalData &data = AdditionalData());
00509 
00510     protected:
00515       const AdditionalData additional_data;
00516   };
00517 
00518 
00519 
00527   class SolverDirect
00528   {
00529     public:
00530 
00537       struct AdditionalData
00538       {
00543         AdditionalData (const bool output_solver_details = false);
00544 
00550         bool output_solver_details;
00551       };
00552 
00558       SolverDirect (SolverControl  &cn,
00559                     const AdditionalData &data = AdditionalData());
00560 
00564       virtual ~SolverDirect ();
00565 
00574       void
00575       solve (const SparseMatrix     &A,
00576              VectorBase             &x,
00577              const VectorBase       &b);
00578 
00597       void
00598       solve (const SparseMatrix           &A,
00599              ::Vector<double>       &x,
00600              const ::Vector<double> &b);
00601 
00606       SolverControl & control() const;
00607 
00611       DeclException1 (ExcTrilinosError,
00612                       int,
00613                       << "An error with error number " << arg1
00614                       << " occured while calling a Trilinos function");
00615 
00616     private:
00617 
00630       SolverControl &solver_control;
00631 
00640       std_cxx1x::shared_ptr<Epetra_LinearProblem> linear_problem;
00641 
00647       std_cxx1x::shared_ptr<Amesos_BaseSolver> solver;
00648 
00653       const AdditionalData additional_data;
00654 
00655   };
00656 
00657 }
00658 
00659 DEAL_II_NAMESPACE_CLOSE
00660 
00661 #endif // DEAL_II_USE_TRILINOS
00662 
00663 /*----------------------------   trilinos_solver.h     ---------------------------*/
00664 
00665 #endif
00666 /*----------------------------   trilinos_solver.h     ---------------------------*/
00667 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Wed May 23 2012 12:03:30 by doxygen 1.7.3