43 #ifndef IFPACK2_CONTAINER_HPP 44 #define IFPACK2_CONTAINER_HPP 49 #include <Ifpack2_ConfigDefs.hpp> 50 #include <Tpetra_RowMatrix.hpp> 51 #include <Teuchos_ParameterList.hpp> 52 #include <Teuchos_Describable.hpp> 54 #include <type_traits> 102 template<
class MatrixType>
105 typedef typename MatrixType::scalar_type scalar_type;
106 typedef typename MatrixType::local_ordinal_type local_ordinal_type;
107 typedef typename MatrixType::global_ordinal_type global_ordinal_type;
108 typedef typename MatrixType::node_type node_type;
110 typedef Tpetra::RowMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> row_matrix_type;
112 static_assert(std::is_same<MatrixType, row_matrix_type>::value,
113 "Ifpack2::Container: Please use MatrixType = Tpetra::RowMatrix.");
126 Container (
const Teuchos::RCP<const row_matrix_type>& matrix,
127 const Teuchos::ArrayView<const local_ordinal_type>& localRows) :
128 inputMatrix_ (matrix),
129 localRows_ (localRows.begin (), localRows.end ())
131 TEUCHOS_TEST_FOR_EXCEPTION(
132 matrix.is_null (), std::invalid_argument,
"Ifpack2::Container: " 133 "The constructor's input matrix must be non-null.");
170 return localRows_ ();
191 virtual void setParameters (
const Teuchos::ParameterList& List) = 0;
212 apply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X,
213 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y,
214 Teuchos::ETransp mode = Teuchos::NO_TRANS,
215 scalar_type alpha = Teuchos::ScalarTraits<scalar_type>::one (),
216 scalar_type beta = Teuchos::ScalarTraits<scalar_type>::zero ())
const = 0;
239 weightedApply (
const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X,
240 Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y,
241 const Tpetra::Vector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& D,
242 Teuchos::ETransp mode = Teuchos::NO_TRANS,
243 scalar_type alpha = Teuchos::ScalarTraits<scalar_type>::one (),
244 scalar_type beta = Teuchos::ScalarTraits<scalar_type>::zero ())
const = 0;
247 virtual std::ostream&
print (std::ostream& os)
const = 0;
251 Teuchos::RCP<const row_matrix_type> inputMatrix_;
254 Teuchos::Array<local_ordinal_type> localRows_;
258 template <
class MatrixType>
260 operator<< (std::ostream& os, const Ifpack2::Container<MatrixType>& obj)
262 return obj.print (os);
267 #endif // IFPACK2_CONTAINER_HPP virtual void apply(const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const =0
Compute Y := alpha * M^{-1} X + beta*Y.
virtual void initialize()=0
Do all set-up operations that only require matrix structure.
Teuchos::ArrayView< const local_ordinal_type > getLocalRows() const
Local indices of the rows of the input matrix that belong to this block.
Definition: Ifpack2_Container.hpp:169
virtual size_t getNumRows() const =0
The number of rows in the diagonal block.
virtual bool isComputed() const =0
Return true if the container has been successfully computed.
virtual void weightedApply(const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &Y, const Tpetra::Vector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &D, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const =0
Compute Y := alpha * diag(D) * M^{-1} (diag(D) * X) + beta*Y.
virtual void compute()=0
Extract the local diagonal block and prepare the solver.
Interface for creating and solving a local linear problem.
Definition: Ifpack2_Container.hpp:103
virtual void setParameters(const Teuchos::ParameterList &List)=0
Set parameters.
virtual std::ostream & print(std::ostream &os) const =0
Print basic information about the container to os.
virtual ~Container()
Destructor.
Definition: Ifpack2_Container.hpp:137
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:72
Container(const Teuchos::RCP< const row_matrix_type > &matrix, const Teuchos::ArrayView< const local_ordinal_type > &localRows)
Constructor.
Definition: Ifpack2_Container.hpp:126
virtual bool isInitialized() const =0
Return true if the container has been successfully initialized.
Teuchos::RCP< const row_matrix_type > getMatrix() const
The input matrix to the constructor.
Definition: Ifpack2_Container.hpp:147