All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Xpetra_TpetraOperator.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Xpetra: A linear algebra interface package
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 #ifndef XPETRA_TPETRAOPERATOR_HPP
47 #define XPETRA_TPETRAOPERATOR_HPP
48 
50 
51 #include <Tpetra_Operator.hpp>
52 
53 #include "Xpetra_Map.hpp"
54 #include "Xpetra_TpetraMap.hpp"
55 #include "Xpetra_MultiVector.hpp"
56 #include "Xpetra_TpetraMultiVector.hpp"
57 #include "Xpetra_Operator.hpp"
58 
59 #include "Xpetra_Utils.hpp"
60 
61 namespace Xpetra {
62 
63  template <class Scalar = Operator<>::scalar_type,
64  class LocalOrdinal = typename Operator<Scalar>::local_ordinal_type,
65  class GlobalOrdinal = typename Operator<Scalar, LocalOrdinal>::global_ordinal_type,
66  class Node = typename Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
67  class TpetraOperator : public Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > {
68  public:
70 
73  XPETRA_MONITOR("TpetraOperator::getDomainMap()");
74  return toXpetra(op_->getDomainMap());
75  }
76 
79  XPETRA_MONITOR("TpetraOperator::getRangeMap()");
80  return toXpetra(op_->getRangeMap());
81  }
82 
84 
89  virtual void
93  Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
94  Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const {
95  op_->apply(toTpetra(X), toTpetra(Y), mode, alpha, beta);
96  }
97 
99  virtual bool hasTransposeApply() const {
100  return op_->hasTransposeApply();
101  }
102 
104 
106 
107 
109  std::string description() const { XPETRA_MONITOR("TpetraOperator::description"); return op_->description(); }
110 
113  XPETRA_MONITOR("TpetraOperator::describe"); op_->describe(out, verbLevel);
114  }
115 
117 
119 
120 
122  TpetraOperator(const Teuchos::RCP<Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node> > &op) : op_(op) { } //TODO removed const
123 
125 
126  private:
129 
130  }; // TpetraOperator class
131 
132 
133 
134 #if ((!defined(HAVE_TPETRA_INST_SERIAL)) && (!defined(HAVE_TPETRA_INST_INT_INT)))
135  // specialization for Tpetra Map on EpetraNode and GO=int
136  template <>
137  class TpetraOperator<double, int, int, EpetraNode>
138  : public Operator< double, int, int, EpetraNode > {
139  public:
140  typedef double Scalar;
141  typedef int GlobalOrdinal;
142  typedef int LocalOrdinal;
143  typedef EpetraNode Node;
144 
146 
149  return Teuchos::null;
150  }
151 
154  return Teuchos::null;
155  }
156 
158 
163  virtual void
168  Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const { }
169 
171  virtual bool hasTransposeApply() const { return false; }
172 
174 
176 
177 
179  std::string description() const { return std::string(""); }
180 
183 
185 
187 
188 
190  TpetraOperator(const Teuchos::RCP<Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node> > &op) { }
191 
193 
194  }; // TpetraOperator class
195 #endif
196 
197 
198 #if ((!defined(HAVE_TPETRA_INST_SERIAL)) && (!defined(HAVE_TPETRA_INST_INT_LONG_LONG)))
199  // specialization for Tpetra Map on EpetraNode and GO=int
200  template <>
201  class TpetraOperator<double, int, long long, EpetraNode>
202  : public Operator< double, int, long long, EpetraNode > {
203  public:
204  typedef double Scalar;
205  typedef long long GlobalOrdinal;
206  typedef int LocalOrdinal;
207  typedef EpetraNode Node;
208 
210 
213  return Teuchos::null;
214  }
215 
218  return Teuchos::null;
219  }
220 
222 
227  virtual void
232  Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const { }
233 
235  virtual bool hasTransposeApply() const { return false; }
236 
238 
240 
241 
243  std::string description() const { return std::string(""); }
244 
247 
249 
251 
252 
254  TpetraOperator(const Teuchos::RCP<Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node> > &op) { }
255 
257 
258  }; // TpetraOperator class
259 #endif
260 
261 
262 } // Xpetra namespace
263 
264 #define XPETRA_TPETRAOPERATOR_SHORT
265 #endif // XPETRA_TPETRAOPERATOR_HPP
virtual void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, 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
Computes the operator-multivector application.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The Map associated with the domain of this operator, which must be compatible with X...
std::string description() const
A simple one-line description of this object.
virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
std::string description() const
A simple one-line description of this object.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with the given verbosity level to a FancyOStream.
RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > op_
The Tpetra::Operator which this class wraps.
virtual Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The Map associated with the domain of this operator, which must be compatible with X...
virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
TpetraOperator(const Teuchos::RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &op)
TpetraOperator constructor to wrap a Tpetra::Operator object.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with the given verbosity level to a FancyOStream.
virtual void apply(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Xpetra::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
Computes the operator-multivector application.
static const EVerbosityLevel verbLevel_default
TpetraOperator(const Teuchos::RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &op)
TpetraOperator constructor to wrap a Tpetra::Operator object.
std::string description() const
A simple one-line description of this object.
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
virtual void apply(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, Xpetra::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
Computes the operator-multivector application.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The Map associated with the range of this operator, which must be compatible with Y...
virtual Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The Map associated with the range of this operator, which must be compatible with Y...
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with the given verbosity level to a FancyOStream.
virtual Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The Map associated with the domain of this operator, which must be compatible with X...
#define XPETRA_MONITOR(funcName)
TpetraOperator(const Teuchos::RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &op)
TpetraOperator constructor to wrap a Tpetra::Operator object.
virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
virtual Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The Map associated with the range of this operator, which must be compatible with Y...