10 #ifndef PACKAGES_XPETRA_SUP_UTILS_XPETRA_ITERATOROPS_HPP_
11 #define PACKAGES_XPETRA_SUP_UTILS_XPETRA_ITERATOROPS_HPP_
15 #include "Xpetra_Matrix.hpp"
16 #include "Xpetra_MatrixMatrix.hpp"
17 #include "Xpetra_CrsMatrixWrap.hpp"
19 #include "Xpetra_Map.hpp"
20 #include "Xpetra_StridedMap.hpp"
21 #include "Xpetra_StridedMapFactory.hpp"
22 #include "Xpetra_MapExtractor.hpp"
23 #include "Xpetra_MatrixFactory.hpp"
24 #include "Xpetra_BlockedCrsMatrix.hpp"
30 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
37 bool call_FillComplete_on_result =
true,
38 bool doOptimizeStorage =
true,
39 const std::string& label = std::string(),
40 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
42 typedef LocalOrdinal LO;
43 typedef GlobalOrdinal GO;
47 "XpetraExt::MatrixMatrix::Jacobi: row map of C is not same as row map of A")
49 "XpetraExt::MatrixMatrix::Jacobi: row map of C is not same as row map of B");
53 bool haveMultiplyDoFillComplete = call_FillComplete_on_result && doOptimizeStorage;
56 #ifndef HAVE_XPETRA_EPETRAEXT
62 #ifdef HAVE_XPETRA_TPETRA
66 const RCP<Tpetra::Vector<SC, LO, GO, NO> >& tpD =
toTpetra(Dinv);
73 if (call_FillComplete_on_result && !haveMultiplyDoFillComplete) {
74 RCP<Teuchos::ParameterList> fillParams = rcp(
new Teuchos::ParameterList());
75 fillParams->set(
"Optimize Storage", doOptimizeStorage);
82 C.
CreateView(
"stridedMaps", rcpA,
false, rcpB,
false);
85 #if defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES)
92 bool call_FillComplete_on_result,
93 bool doOptimizeStorage,
94 const std::string& label,
95 const Teuchos::RCP<Teuchos::ParameterList>& params);
98 #if defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES)
105 bool call_FillComplete_on_result,
106 bool doOptimizeStorage,
107 const std::string& label,
108 const Teuchos::RCP<Teuchos::ParameterList>& params);
118 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
120 #undef XPETRA_ITERATOROPS_SHORT
124 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) {
128 RCP<Matrix> C = C_in;
129 if (C == Teuchos::null) {
133 fos <<
"Reuse C pattern" << std::endl;
136 Xpetra::Jacobi<Scalar, LocalOrdinal, GlobalOrdinal, Node>(omega, Dinv, A, B, *C,
true,
true, label, params);
137 C->CreateView(
"stridedMaps", rcpFromRef(A),
false, rcpFromRef(B),
false);
145 #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)
virtual const RCP< const Map > & getRowMap() const
Returns the Map that describes the row distribution in this matrix.
Exception throws to report errors in the internal logical of the program.
Xpetra utility class containing iteration operators.
static RCP< const Tpetra::CrsMatrix< SC, LO, GO, NO > > Op2TpetraCrs(RCP< Matrix > Op)
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)
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
virtual const Teuchos::RCP< const map_type > getRangeMap() const =0
The Map associated with the range of this operator, which must be compatible with Y...
static RCP< Tpetra::CrsMatrix< SC, LO, GO, NO > > Op2NonConstTpetraCrs(RCP< Matrix > Op)
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)
static RCP< Matrix > Build(const RCP< const Map > &rowMap)
virtual const Teuchos::RCP< const map_type > getDomainMap() const =0
The Map associated with the domain of this operator, which must be compatible with X...
Xpetra-specific matrix class.