|
Ifpack2 Templated Preconditioning Package
Version 1.0
|
00001 /*@HEADER 00002 // *********************************************************************** 00003 // 00004 // Ifpack2: Tempated Object-Oriented Algebraic Preconditioner Package 00005 // Copyright (2009) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // This library is free software; you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as 00012 // published by the Free Software Foundation; either version 2.1 of the 00013 // License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, but 00016 // WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00023 // USA 00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00025 // 00026 // *********************************************************************** 00027 //@HEADER 00028 */ 00029 00030 //----------------------------------------------------- 00031 // Ifpack2::BorderedOperator is a translation of the 00032 // LOCA_BorderedSolver_EpetraHouseholder 00033 // implementation written by Eric Phipps. 00034 // DMD. 00035 //------------------------------------------------------ 00036 00037 00038 #ifndef IFPACK2_BORDEREDOPERATOR_DECL_HPP 00039 #define IFPACK2_BORDEREDOPERATOR_DECL_HPP 00040 00041 #include "Ifpack2_ConfigDefs.hpp" 00042 #include "Kokkos_DefaultNode.hpp" 00043 00044 #include "Tpetra_Operator.hpp" 00045 #include "Teuchos_ParameterList.hpp" 00046 #include "Teuchos_ScalarTraits.hpp" 00047 #include <iostream> 00048 00049 namespace Ifpack2 { 00051 00073 template<class Scalar, class LocalOrdinal = int, class GlobalOrdinal = LocalOrdinal, class Node = Kokkos::DefaultNode::DefaultNodeType > 00074 class BorderedOperator : virtual public Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node > { 00075 00076 public: 00077 00079 virtual ~BorderedOperator(){} 00080 00083 00085 virtual const Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > & getDomainMap() const; 00086 00088 virtual const Teuchos::RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > & getRangeMap() const; 00089 00090 00091 bool hasTransposeApply() const; 00092 00093 00095 void apply(const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X, 00096 Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y, 00097 Teuchos::ETransp mode = Teuchos::NO_TRANS, 00098 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(), 00099 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const; 00100 00102 00104 BorderedOperator(const Teuchos::RCP< const Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A); 00105 00106 private: 00107 00109 Teuchos::RCP<const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > A_; 00110 00111 };//class BorderedOperator 00112 00113 }//namespace Ifpack2 00114 00115 #endif // IFPACK2_BORDEREDOPERATOR_DECL_HPP
1.7.6.1