12#ifndef XPETRA_MATRIXFACTORY_DEF_HPP
13#define XPETRA_MATRIXFACTORY_DEF_HPP
17#include "Xpetra_BlockedCrsMatrix.hpp"
21template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
26template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
31template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
33 return rcp(
new CrsMatrixWrap(rowMap, colMap, maxNumEntriesPerRow));
36template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
38 return rcp(
new CrsMatrixWrap(rowMap, colMap, NumEntriesPerRowToAlloc));
41template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
48 return rcp(
new CrsMatrixWrap(rowMap, colMap, lclMatrix, params));
51template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
60 return rcp(
new CrsMatrixWrap(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
63template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
65 return rcp(
new CrsMatrixWrap(rowMap, NumEntriesPerRowToAlloc));
68template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
73template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
80template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
85 if (bdiagonal == Teuchos::null) {
87 LocalOrdinal numMyElements = diagonal->getMap()->getLocalNumElements();
92 for (LocalOrdinal i = 0; i < numMyElements; ++i) {
93 mtx->insertGlobalValues(myGlobalElements[i],
94 Teuchos::tuple<GlobalOrdinal>(myGlobalElements[i]),
95 Teuchos::tuple<Scalar>(vals[i]));
101 for (
size_t r = 0; r < bdiagonal->getBlockedMap()->getNumMaps(); ++r) {
102 if (!bdiagonal->getMultiVector(r).
is_null()) {
104 bop->setMatrix(r, r, Build(subvec->getVector(0)));
108 mtx = BuildCopy(bop);
114template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
115RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
MatrixFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Build(
const RCP<const Matrix>& sourceMatrix,
const Import& importer,
const RCP<const Map>& domainMap,
const RCP<const Map>& rangeMap,
const Teuchos::RCP<Teuchos::ParameterList>& params) {
117 if (crsOp == Teuchos::null)
122 if (newCrs->hasMatrix())
125 return Teuchos::null;
128template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
129RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
MatrixFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Build(
const RCP<const Matrix>& sourceMatrix,
const Export& exporter,
const RCP<const Map>& domainMap,
const RCP<const Map>& rangeMap,
const Teuchos::RCP<Teuchos::ParameterList>& params) {
131 if (crsOp == Teuchos::null)
138template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
139RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
MatrixFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Build(
const RCP<const Matrix>& sourceMatrix,
const Import& RowImporter,
const Import& DomainImporter,
const RCP<const Map>& domainMap,
const RCP<const Map>& rangeMap,
const Teuchos::RCP<Teuchos::ParameterList>& params) {
141 if (crsOp == Teuchos::null)
146 if (newCrs->hasMatrix())
149 return Teuchos::null;
152template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
153RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
MatrixFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Build(
const RCP<
const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
const Xpetra::Export<LocalOrdinal, GlobalOrdinal, Node>& RowExporter,
const Xpetra::Export<LocalOrdinal, GlobalOrdinal, Node>& DomainExporter,
const RCP<
const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
const RCP<
const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
const Teuchos::RCP<Teuchos::ParameterList>& params) {
155 if (crsOp == Teuchos::null)
160 if (newCrs->hasMatrix())
163 return Teuchos::null;
166template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
167RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
MatrixFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::BuildCopy(
const RCP<
const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> A,
bool setFixedBlockSize) {
169 if (input == Teuchos::null)
179 for (
size_t r = 0; r < input->Rows(); ++r) {
180 for (
size_t c = 0; c < input->Cols(); ++c)
181 if (input->getMatrix(r, c) != Teuchos::null) {
186 bop->setMatrix(r, c, mat);
190 if (input->isFillComplete())
#define XPETRA_MONITOR(funcName)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap)
Constructor for empty matrix (intended use is an import/export target - can't insert entries directly...
Concrete implementation of Xpetra::Matrix.
KokkosSparse::CrsMatrix< impl_scalar_type, LocalOrdinal, execution_space, void, typename local_graph_type::size_type > local_matrix_type
The specialization of Kokkos::CrsMatrix that represents the part of the sparse matrix on each MPI pro...
Exception indicating invalid cast attempted.
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildCopy(const RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A, bool setFixedBlockSize=true)
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildCopy(const RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A, bool setFixedBlockSize=true)
static RCP< Matrix > Build(const RCP< const Map > &rowMap)
Xpetra-specific matrix class.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)