47 #ifndef PACKAGES_XPETRA_SUP_UTILS_XPETRA_ITERATOROPS_HPP_ 48 #define PACKAGES_XPETRA_SUP_UTILS_XPETRA_ITERATOROPS_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);
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)
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< 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...
static RCP< Matrix > Build(const RCP< const Map > &rowMap, size_t maxNumEntriesPerRow, Xpetra::ProfileType pftype=Xpetra::DynamicProfile)
Constructor specifying the number of non-zeros for all rows.
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)