FEI Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
fei_Solver_AztecOO.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_AztecOO_h_
44#define _fei_Solver_AztecOO_h_
45
46
48
49#ifdef HAVE_FEI_AZTECOO
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
61class AztecOO;
64
65#ifdef HAVE_FEI_ML
66#include <ml_include.h>
67#include <ml_epetra_preconditioner.h>
68#endif
69
72class Solver_AztecOO : public fei::Solver, private fei::Logger {
73 public:
77 Solver_AztecOO();
78
81 virtual ~Solver_AztecOO();
82
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 AztecOO& getAztecOO();
127
128 Teuchos::ParameterList& get_ParameterList();
129
130 void setMaxIters(int maxits) {maxIters_ = maxits;}
131 void setTolerance(double tol) {tolerance_ = tol;}
132 void setUseTranspose(bool useTrans) {useTranspose_ = useTrans;}
133
134 void setUseML(bool useml);
135
136 private:
137 int setup_ml_operator(AztecOO& azoo, Epetra_CrsMatrix* A);
138
139 private:
140 AztecOO* azoo_;
141 double tolerance_;
142 int maxIters_;
143 bool useTranspose_;
144 Teuchos::ParameterList* paramlist_;
145
146 Epetra_LinearProblem *linProb;
147
148 bool useML_;
149#ifdef HAVE_FEI_ML
150 Epetra_Operator* ml_prec_;
151 bool ml_defaults_set_;
152 int *ml_aztec_options_;
153 double *ml_aztec_params_;
154#endif
155
156 std::string name_;
157 std::string dbgprefix_;
158}; //class Solver_AztecOO
159
160#endif // HAVE_FEI_AZTECOO
161
162#endif
virtual int solve(fei::LinearSystem *linearSystem, fei::Matrix *preconditioningMatrix, const fei::ParameterSet &parameterSet, int &iterationsTaken, int &status)