47 #ifndef PACKAGES_XPETRA_SUP_UTILS_XPETRA_ITERATOROPS_HPP_ 
   48 #define PACKAGES_XPETRA_SUP_UTILS_XPETRA_ITERATOROPS_HPP_ 
   54 #include "Xpetra_CrsMatrixWrap.hpp" 
   56 #include "Xpetra_Map.hpp" 
   57 #include "Xpetra_StridedMap.hpp" 
   58 #include "Xpetra_StridedMapFactory.hpp" 
   59 #include "Xpetra_MapExtractor.hpp" 
   67   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
   74               bool call_FillComplete_on_result = 
true,
 
   75               bool doOptimizeStorage = 
true,
 
   76               const std::string & label = std::string(),
 
   77               const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
 
   79     typedef LocalOrdinal  
LO;
 
   80     typedef GlobalOrdinal 
GO;
 
   84                                "XpetraExt::MatrixMatrix::Jacobi: row map of C is not same as row map of A")
 
   86                                "XpetraExt::MatrixMatrix::Jacobi: row map of C is not same as row map of B");
 
   90     bool haveMultiplyDoFillComplete = call_FillComplete_on_result && doOptimizeStorage;
 
   93 #ifndef HAVE_XPETRA_EPETRAEXT 
   99 #ifdef HAVE_XPETRA_TPETRA 
  103       const RCP<Tpetra::Vector<SC,LO,GO,NO> > & tpD = 
toTpetra(Dinv);
 
  110     if (call_FillComplete_on_result && !haveMultiplyDoFillComplete) {
 
  111       RCP<Teuchos::ParameterList> fillParams = rcp(
new Teuchos::ParameterList());
 
  112       fillParams->set(
"Optimize Storage", doOptimizeStorage);
 
  119     C.
CreateView(
"stridedMaps", rcpA, 
false, rcpB, 
false); 
 
  122 #if defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES) 
  129                                          bool call_FillComplete_on_result,
 
  130                                          bool doOptimizeStorage,
 
  131                                          const std::string & label,
 
  132                                          const Teuchos::RCP<Teuchos::ParameterList>& params);
 
  135 #if defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES) 
  142                                                bool call_FillComplete_on_result,
 
  143                                                bool doOptimizeStorage,
 
  144                                                const std::string & label,
 
  145                                                const Teuchos::RCP<Teuchos::ParameterList>& params);
 
  155   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
  157 #undef XPETRA_ITERATOROPS_SHORT 
  162     Jacobi(
SC omega, 
const Vector& Dinv, 
const Matrix& A, 
const Matrix& B, RCP<Matrix> C_in, Teuchos::FancyOStream &fos, 
const std::string& label, RCP<ParameterList>& params) {
 
  166       RCP<Matrix> C = C_in;
 
  167       if (C == Teuchos::null) {
 
  171         fos << 
"Reuse C pattern" << std::endl;
 
  175       Xpetra::Jacobi<Scalar,LocalOrdinal,GlobalOrdinal,Node>(omega, Dinv, A, B, *C, 
true, 
true,label,params);
 
  176       C->CreateView(
"stridedMaps", rcpFromRef(A), 
false, rcpFromRef(B), 
false);
 
  185 #define XPETRA_ITERATOROPS_SHORT 
void Jacobi(Scalar omega, const Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Dinv, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &C, bool call_FillComplete_on_result=true, bool doOptimizeStorage=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
 
void Jacobi< double, int, long long, EpetraNode >(double omega, const Xpetra::Vector< double, int, long long, EpetraNode > &Dinv, const Xpetra::Matrix< double, int, long long, EpetraNode > &A, const Xpetra::Matrix< double, int, long long, EpetraNode > &B, Xpetra::Matrix< double, int, long long, EpetraNode > &C, bool call_FillComplete_on_result, bool doOptimizeStorage, const std::string &label, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
 
static RCP< Matrix > Build(const RCP< const Map > &rowMap)
 
Exception throws to report errors in the internal logical of the program. 
 
Xpetra utility class containing iteration operators. 
 
static RCP< Matrix > Jacobi(SC omega, const Vector &Dinv, const Matrix &A, const Matrix &B, RCP< Matrix > C_in, Teuchos::FancyOStream &fos, const std::string &label, RCP< ParameterList > ¶ms)
 
virtual void fillComplete(const RCP< const Map > &domainMap, const RCP< const Map > &rangeMap, const RCP< ParameterList > ¶ms=null)=0
Signal that data entry is complete, specifying domain and range maps. 
 
virtual bool isFillComplete() const =0
Returns true if fillComplete() has been called and the matrix is in compute mode. ...
 
void CreateView(viewLabel_t viewLabel, const RCP< const Map > &rowMap, const RCP< const Map > &colMap)
 
void Jacobi< double, int, int, EpetraNode >(double omega, const Xpetra::Vector< double, int, int, EpetraNode > &Dinv, const Xpetra::Matrix< double, int, int, EpetraNode > &A, const Xpetra::Matrix< double, int, int, EpetraNode > &B, Xpetra::Matrix< double, int, int, EpetraNode > &C, bool call_FillComplete_on_result, bool doOptimizeStorage, const std::string &label, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
 
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
 
virtual Teuchos::RCP< const Map > getRangeMap() const =0
The Map associated with the range of this operator, which must be compatible with Y...
 
virtual const RCP< const Map > & getRowMap() const 
Returns the Map that describes the row distribution in this matrix. 
 
static RCP< Tpetra::CrsMatrix< SC, LO, GO, NO > > Op2NonConstTpetraCrs(RCP< Matrix > Op)
 
virtual Teuchos::RCP< const Map > getDomainMap() const =0
The Map associated with the domain of this operator, which must be compatible with X...
 
Xpetra-specific matrix class. 
 
static RCP< const Tpetra::CrsMatrix< SC, LO, GO, NO > > Op2TpetraCrs(RCP< Matrix > Op)