Ifpack2 Templated Preconditioning Package Version 1.0
Loading...
Searching...
No Matches
Ifpack2_Preconditioner.hpp
Go to the documentation of this file.
1/*@HEADER
2// ***********************************************************************
3//
4// Ifpack2: Templated Object-Oriented Algebraic Preconditioner Package
5// Copyright (2009) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
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 Michael A. Heroux (maherou@sandia.gov)
38//
39// ***********************************************************************
40//@HEADER
41*/
42
44
45#ifndef IFPACK2_PRECONDITIONER_HPP
46#define IFPACK2_PRECONDITIONER_HPP
47
48#include "Ifpack2_ConfigDefs.hpp"
49#include "Tpetra_Operator.hpp"
50#include "Tpetra_RowMatrix.hpp"
51#include "Teuchos_ParameterList.hpp"
52#include "Teuchos_ScalarTraits.hpp"
53#include <iostream>
54
55namespace Ifpack2 {
56
99template<class Scalar =
100 Tpetra::Operator<>::scalar_type,
101 class LocalOrdinal =
102 typename Tpetra::Operator<Scalar>::local_ordinal_type,
103 class GlobalOrdinal =
104 typename Tpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type,
105 class Node =
106 typename Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
108 virtual public Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
109public:
111 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType magnitude_type;
112
114 virtual ~Preconditioner(){}
115
117
118
123 virtual Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >
124 getDomainMap () const = 0;
125
130 virtual Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >
131 getRangeMap () const = 0;
132
138 virtual void
139 apply (const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
140 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y,
141 Teuchos::ETransp mode = Teuchos::NO_TRANS,
142 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
143 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const = 0;
145
147 virtual void setParameters (const Teuchos::ParameterList& List) = 0;
148
149 virtual bool supportsZeroStartingSolution () { return false; };
150
152 virtual void setZeroStartingSolution (bool zeroStartingSolution) { TEUCHOS_ASSERT(false); };
153
163 virtual void initialize() = 0;
164
166 virtual bool isInitialized() const = 0;
167
177 virtual void compute() = 0;
178
180 virtual bool isComputed() const = 0;
181
183 virtual Teuchos::RCP<const Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > getMatrix() const = 0;
184
186 virtual int getNumInitialize() const = 0;
187
189 virtual int getNumCompute() const = 0;
190
192 virtual int getNumApply() const = 0;
193
195 virtual double getInitializeTime() const = 0;
196
198 virtual double getComputeTime() const = 0;
199
201 virtual double getApplyTime() const = 0;
202};
203
204}//namespace Ifpack2
205
206#endif // IFPACK2_PRECONDITIONER_HPP
Interface for all Ifpack2 preconditioners.
Definition Ifpack2_Preconditioner.hpp:108
virtual double getComputeTime() const =0
The time (in seconds) spent in compute().
virtual void setZeroStartingSolution(bool zeroStartingSolution)
Set this preconditioner's parameters.
Definition Ifpack2_Preconditioner.hpp:152
virtual bool isInitialized() const =0
True if the preconditioner has been successfully initialized, else false.
Teuchos::ScalarTraits< Scalar >::magnitudeType magnitude_type
The type of the magnitude (absolute value) of a matrix entry.
Definition Ifpack2_Preconditioner.hpp:111
virtual void compute()=0
Set up the numerical values in this preconditioner.
virtual int getNumCompute() const =0
The number of calls to compute().
virtual Teuchos::RCP< const Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getMatrix() const =0
The input matrix given to the constructor.
virtual int getNumApply() const =0
The number of calls to apply().
virtual double getApplyTime() const =0
The time (in seconds) spent in apply().
virtual void setParameters(const Teuchos::ParameterList &List)=0
Set this preconditioner's parameters.
virtual void apply(const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const =0
Apply the preconditioner to X, putting the result in Y.
virtual ~Preconditioner()
Destructor.
Definition Ifpack2_Preconditioner.hpp:114
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const =0
The range Map of this operator.
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const =0
The domain Map of this operator.
virtual bool isComputed() const =0
True if the preconditioner has been successfully computed, else false.
virtual void initialize()=0
Set up the graph structure of this preconditioner.
virtual double getInitializeTime() const =0
The time (in seconds) spent in initialize().
virtual int getNumInitialize() const =0
The number of calls to initialize().
Preconditioners and smoothers for Tpetra sparse matrices.
Definition Ifpack2_AdditiveSchwarz_decl.hpp:74