23 "Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
28 "Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
30 return tmp_ECrsMtx->getEpetra_CrsMatrix();
39 "Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
45 return tmp_ECrsMtx->getEpetra_CrsMatrixNonConst();
94 return tmp_ECrsMtx->getTpetra_CrsMatrix();
106 return tmp_ECrsMtx->getTpetra_CrsMatrixNonConst();
110const Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Op2TpetraCrs(
const Matrix& Op) {
118 return *tmp_TCrsMtx->getTpetra_CrsMatrix();
126Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Op2NonConstTpetraCrs(
const Matrix& Op) {
134 return *Teuchos::rcp_const_cast<Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>(tmp_TCrsMtx->getTpetra_CrsMatrix());
142bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraCrs(
RCP<Matrix> Op) {
144 if (crsOp == Teuchos::null)
return false;
147 if (tmp_ECrsMtx == Teuchos::null)
191const Tpetra::BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Op2TpetraBlockCrs(
const Matrix& Op) {
197 return *tmp_BlockCrs->getTpetra_BlockCrsMatrix();
204Tpetra::BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Op2NonConstTpetraBlockCrs(
const Matrix& Op) {
210 return *tmp_BlockCrs->getTpetra_BlockCrsMatrixNonConst();
217bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraBlockCrs(
RCP<Matrix> Op) {
219 if (crsOp == Teuchos::null)
return false;
222 if (tmp_BlockCrs == Teuchos::null)
249bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraBlockCrs(
const Matrix& Op) {
258 const tcrs_matrix_type& A,
bool transposeA,
const typename tcrs_matrix_type::scalar_type alpha,
259 const tcrs_matrix_type& B,
bool transposeB,
const typename tcrs_matrix_type::scalar_type beta) {
264 using Teuchos::rcp_implicit_cast;
265 using Teuchos::rcpFromRef;
269 using transposer_type = Tpetra::RowMatrixTransposer<SC, LO, GO, NO>;
270 using import_type = Tpetra::Import<LO, GO, NO>;
273 Aprime = transposer_type(Aprime).createTranspose();
275 if (A.isFillComplete() && B.isFillComplete()) {
278 addParams->set(
"Call fillComplete",
false);
280 Tpetra::MatrixMatrix::add<SC, LO, GO, NO>(beta, transposeB, B, alpha,
false, *Aprime, *C, Teuchos::null, Teuchos::null, addParams);
281 return rcp_implicit_cast<Matrix>(
rcp(
new CrsWrap(rcp_implicit_cast<CrsType>(
rcp(
new XTCrsType(C))))));
289 Bprime = transposer_type(Bprime).createTranspose();
291 if (!(Aprime->getRowMap()->isSameAs(*(Bprime->getRowMap())))) {
292 auto import = rcp(new import_type(Bprime->getRowMap(), Aprime->getRowMap()));
293 Bprime = Tpetra::importAndFillCompleteCrsMatrix<tcrs_matrix_type>(Bprime, *
import, Aprime->getDomainMap(), Aprime->getRangeMap());
296 LO numLocalRows = Aprime->getLocalNumRows();
299 for (LO i = 0; i < numLocalRows; i++) {
300 allocPerRow[i] = Aprime->getNumEntriesInLocalRow(i) + Bprime->getNumEntriesInLocalRow(i);
305 Tpetra::MatrixMatrix::Add<SC, LO, GO, NO>(
306 *Aprime,
false, alpha,
307 *Bprime,
false, beta,
309 return rcp(
new CrsWrap(rcp_implicit_cast<CrsType>(
rcp(
new XTCrsType(C)))));
316void Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::epetraExtMult(
const Matrix& A,
bool transposeA,
const Matrix& B,
bool transposeB,
Matrix& C,
bool fillCompleteResult) {
325 if (fillCompleteResult) {
326 errCode = EpetraExt::MatrixMatrix::Multiply(epA, transposeA, epB, transposeB, Ctemp,
true);
332 errCode = EpetraExt::MatrixMatrix::Multiply(epA, transposeA, epB, transposeB, Ctemp,
false);
335 long long* globalElementList =
nullptr;
336 Crowmap.MyGlobalElementsPtr(globalElementList);
338 for (
int i = 0; i < numLocalRows; i++) {
343 for (
int i = 0; i < numLocalRows; i++) {
344 int gid = globalElementList[i];
354 std::ostringstream buf;
356 std::string msg =
"EpetraExt::MatrixMatrix::Multiply returned nonzero error code " + buf.str();
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.