FEI Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
fei_Solver_Belos.hpp
Go to the documentation of this file.
1/*
2// @HEADER
3// ************************************************************************
4// FEI: Finite Element Interface to Linear Solvers
5// Copyright (2005) Sandia Corporation.
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the
8// U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Alan Williams (william@sandia.gov)
38//
39// ************************************************************************
40// @HEADER
41*/
42
43#ifndef _fei_Solver_Belos_hpp_
44#define _fei_Solver_Belos_hpp_
45
46
48
49#ifdef HAVE_FEI_BELOS
50
51#include <fei_macros.hpp>
52#include <fei_Solver.hpp>
53#include <fei_Logger.hpp>
54
55#ifdef HAVE_FEI_TEUCHOS
56namespace Teuchos {
57 class ParameterList;
58}
59#endif
60
62namespace Belos {
63template<class Scalar,class MV,class OP> class SolverManager;
64}
65
66#ifdef HAVE_FEI_ML
67#include <ml_include.h>
68#include <ml_epetra_preconditioner.h>
69#endif
70
73class Solver_Belos : public fei::Solver, private fei::Logger {
74 public:
78 Solver_Belos();
79
82 virtual ~Solver_Belos();
83
97 int solve(fei::LinearSystem* linearSystem,
98 fei::Matrix* preconditioningMatrix,
99 int numParams,
100 const char* const* solverParams,
101 int& iterationsTaken,
102 int& status);
103
120 int solve(fei::LinearSystem* linearSystem,
121 fei::Matrix* preconditioningMatrix,
122 const fei::ParameterSet& parameterSet,
123 int& iterationsTaken,
124 int& status);
125
126 Teuchos::ParameterList& get_ParameterList();
127
128 void setMaxIters(int maxits) {maxIters_ = maxits;}
129 void setTolerance(double tol) {tolerance_ = tol;}
130 void setUseTranspose(bool useTrans) {useTranspose_ = useTrans;}
131
132 void setUseML(bool useml);
133
134 private:
135 int setup_ml_operator(AztecOO& azoo, Epetra_CrsMatrix* A);
136
137 private:
138 Teuchos::RCP<Belos::SolverManager<double,Epetra_MultiVector,Epetra_Operator> > belos_solver_manager_;
139 double tolerance_;
140 int maxIters_;
141 bool useTranspose_;
142 Teuchos::RCP<Teuchos::ParameterList> paramlist_;
143
144 bool useML_;
145#ifdef HAVE_FEI_ML
146 ML_Epetra::MultiLevelPreconditioner* ml_prec_;
147 bool ml_defaults_set_;
148 int *ml_aztec_options_;
149 double *ml_aztec_params_;
150#endif
151
152 std::string name_;
153 std::string dbgprefix_;
154}; //class Solver_Belos
155
156#endif // HAVE_FEI_BELOS
157
158#endif
virtual int solve(fei::LinearSystem *linearSystem, fei::Matrix *preconditioningMatrix, const fei::ParameterSet &parameterSet, int &iterationsTaken, int &status)
Definition: fei_Solver.cpp:65