43 #ifndef IFPACK2_SPARSECONTAINER_DECL_HPP
44 #define IFPACK2_SPARSECONTAINER_DECL_HPP
51 #include "Tpetra_MultiVector.hpp"
52 #include "Tpetra_Map.hpp"
53 #include "Tpetra_RowMatrix.hpp"
54 #include "Tpetra_CrsMatrix.hpp"
55 #include "Teuchos_ParameterList.hpp"
58 #ifdef HAVE_IFPACK2_AMESOS2
59 #include "Ifpack2_Details_Amesos2Wrapper.hpp"
133 template<
typename MatrixType,
typename InverseType>
144 typedef MatrixType matrix_type;
150 typedef InverseType inverse_type;
152 typedef typename Container<MatrixType>::scalar_type scalar_type;
153 typedef typename Container<MatrixType>::local_ordinal_type local_ordinal_type;
154 typedef typename Container<MatrixType>::global_ordinal_type global_ordinal_type;
155 typedef typename Container<MatrixType>::node_type node_type;
157 typedef typename Container<MatrixType>::mv_type mv_type;
158 typedef typename Container<MatrixType>::map_type map_type;
159 typedef typename Container<MatrixType>::vector_type vector_type;
161 typedef typename Container<MatrixType>::import_type import_type;
163 typedef typename InverseType::scalar_type InverseScalar;
164 typedef typename InverseType::local_ordinal_type InverseLocalOrdinal;
165 typedef typename InverseType::global_ordinal_type InverseGlobalOrdinal;
166 typedef typename InverseType::node_type InverseNode;
168 typedef typename Tpetra::MultiVector<InverseScalar, InverseLocalOrdinal, InverseGlobalOrdinal, InverseNode> inverse_mv_type;
169 typedef typename Tpetra::CrsMatrix<InverseScalar, InverseLocalOrdinal, InverseGlobalOrdinal, InverseNode> InverseCrs;
170 typedef typename Tpetra::Map<InverseLocalOrdinal, InverseGlobalOrdinal, InverseNode> InverseMap;
172 typedef typename Container<MatrixType>::HostView HostView;
173 typedef typename inverse_mv_type::dual_view_type::t_host HostViewInverse;
175 static_assert(std::is_same<MatrixType,
176 Tpetra::RowMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type>>::value,
"Ifpack2::SparseContainer: Please use MatrixType = Tpetra::RowMatrix.");
186 typedef typename Container<MatrixType>::row_matrix_type row_matrix_type;
201 const Teuchos::Array<Teuchos::Array<local_ordinal_type> >& partitions,
202 const Teuchos::RCP<const import_type>& importer,
204 scalar_type DampingFactor);
207 const Teuchos::Array<local_ordinal_type>& localRows);
223 virtual void setParameters(
const Teuchos::ParameterList& List);
246 Teuchos::ETransp mode = Teuchos::NO_TRANS,
247 scalar_type alpha = Teuchos::ScalarTraits<scalar_type>::one(),
248 scalar_type beta = Teuchos::ScalarTraits<scalar_type>::zero())
const;
257 Teuchos::ETransp mode = Teuchos::NO_TRANS,
258 scalar_type alpha = Teuchos::ScalarTraits<scalar_type>::one(),
259 scalar_type beta = Teuchos::ScalarTraits<scalar_type>::zero())
const;
268 virtual std::ostream&
print(std::ostream& os)
const;
279 describe (Teuchos::FancyOStream &out,
280 const Teuchos::EVerbosityLevel verbLevel =
281 Teuchos::Describable::verbLevel_default)
const;
307 applyImpl (inverse_mv_type& X,
311 Teuchos::ETransp mode,
313 InverseScalar beta)
const;
316 std::vector<Teuchos::RCP<InverseCrs>> diagBlocks_;
319 mutable std::vector<inverse_mv_type> invX;
321 mutable std::vector<inverse_mv_type> invY;
330 mutable std::vector<Teuchos::Ptr<InverseType>> Inverses_;
331 mutable std::vector<map_type> localMaps_;
337 Teuchos::RCP<Teuchos::Comm<int>> localComm_;
341 Teuchos::ParameterList List_;
346 #endif // IFPACK2_SPARSECONTAINER_HPP