Ifpack2 Templated Preconditioning Package Version 1.0
Loading...
Searching...
No Matches
Ifpack2_BorderedOperator_decl.hpp
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
43//-----------------------------------------------------
44// Ifpack2::BorderedOperator is a translation of the
45// LOCA_BorderedSolver_EpetraHouseholder
46// implementation written by Eric Phipps.
47// DMD.
48//------------------------------------------------------
49
50
51#ifndef IFPACK2_BORDEREDOPERATOR_DECL_HPP
52#define IFPACK2_BORDEREDOPERATOR_DECL_HPP
53
54#include "Ifpack2_ConfigDefs.hpp"
55#include "Tpetra_Operator.hpp"
56#include "Teuchos_ParameterList.hpp"
57#include "Teuchos_ScalarTraits.hpp"
58#include <iostream>
59
60namespace Ifpack2 {
62
84template<class Scalar,
85 class LocalOrdinal = typename Tpetra::Operator<Scalar>::local_ordinal_type,
86 class GlobalOrdinal = typename Tpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type,
87 class Node = typename Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
89 virtual public Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node > {
90public:
92 BorderedOperator (const Teuchos::RCP<const Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& A);
93
95 virtual ~BorderedOperator() {}
96
98
99
101 virtual Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > getDomainMap() const;
102
104 virtual Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > getRangeMap() const;
105
107 bool hasTransposeApply() const;
108
110 void
111 apply (const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
112 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y,
113 Teuchos::ETransp mode = Teuchos::NO_TRANS,
114 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
115 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const;
117
118private:
120 Teuchos::RCP<const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > A_;
121};
122
123}//namespace Ifpack2
124
125#endif // IFPACK2_BORDEREDOPERATOR_DECL_HPP
Ifpack2 bordered operator.
Definition: Ifpack2_BorderedOperator_decl.hpp:89
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The range Map of this operator. It must be compatible with Y.getMap().
Definition: Ifpack2_BorderedOperator_def.hpp:73
bool hasTransposeApply() const
Whether this operator can apply the transpose or conjugate transpose.
Definition: Ifpack2_BorderedOperator_def.hpp:80
virtual ~BorderedOperator()
Destructor.
Definition: Ifpack2_BorderedOperator_decl.hpp:95
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
Apply the bordered operator.
Definition: Ifpack2_BorderedOperator_def.hpp:88
virtual Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The domain Map of this operator. It must be compatible with X.getMap().
Definition: Ifpack2_BorderedOperator_def.hpp:66
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:74