10#ifndef PACKAGES_MUELU_ADAPTERS_AZTECOO_MUELU_AZTECEPETRAOPERATOR_CPP_
11#define PACKAGES_MUELU_ADAPTERS_AZTECOO_MUELU_AZTECEPETRAOPERATOR_CPP_
13#include "Xpetra_EpetraMultiVector.hpp"
14#include "Xpetra_CrsMatrixWrap.hpp"
15#include "Xpetra_EpetraCrsMatrix.hpp"
17#include "MueLu_config.hpp"
18#include "MueLu_RefMaxwell.hpp"
23#if defined(HAVE_MUELU_SERIAL) and defined(HAVE_MUELU_EPETRA)
30 const Xpetra::EpetraMultiVectorT<GO, NO> eX(Teuchos::rcpFromRef(
const_cast<Epetra_MultiVector&
>(X)));
31 Xpetra::EpetraMultiVectorT<GO, NO> eY(Teuchos::rcpFromRef(Y));
35 Teuchos::RCP<Xpetra::EpetraMultiVectorT<GO, NO>> tmpY = Teuchos::rcp(
new Xpetra::EpetraMultiVectorT<GO, NO>(eY.getMap(), eY.getNumVectors()));
37 xOp_->apply(eX, *tmpY);
39 eY.update(1.0, *tmpY, 0.0);
46 }
catch (std::exception& e) {
48 std::cerr <<
"Caught an exception in MueLu::AztecEpetraOperator::ApplyInverse():" << std::endl
49 << e.what() << std::endl;
55const Epetra_Comm& AztecEpetraOperator::Comm()
const {
56 const Epetra_Map emap = Xpetra::toEpetra(xOp_->getDomainMap());
60const Epetra_Map& AztecEpetraOperator::OperatorDomainMap()
const {
62 RCP<Xpetra::Matrix<SC, LO, GO, NO>> A = Teuchos::rcp_dynamic_cast<MueLu::RefMaxwell<SC, LO, GO, NO>>(xOp_)->getJacobian();
63 RCP<const Xpetra::CrsMatrixWrap<SC, LO, GO, NO>> crsOp = rcp_dynamic_cast<const Xpetra::CrsMatrixWrap<SC, LO, GO, NO>>(A);
64 if (crsOp == Teuchos::null)
65 throw Exceptions::BadCast(
"Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
66 const RCP<const Xpetra::EpetraCrsMatrixT<GO, NO>>& tmp_ECrsMtx = rcp_dynamic_cast<const Xpetra::EpetraCrsMatrixT<GO, NO>>(crsOp->getCrsMatrix());
67 if (tmp_ECrsMtx == Teuchos::null)
68 throw Exceptions::BadCast(
"Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
69 return tmp_ECrsMtx->getEpetra_CrsMatrixNonConst()->DomainMap();
74 Teuchos::RCP<const Map> map = xOp_->getDomainMap();
75 return Xpetra::toEpetra(map);
78const Epetra_Map& AztecEpetraOperator::OperatorRangeMap()
const {
80 RCP<Xpetra::Matrix<SC, LO, GO, NO>> A = Teuchos::rcp_dynamic_cast<MueLu::RefMaxwell<SC, LO, GO, NO>>(xOp_)->getJacobian();
81 RCP<const Xpetra::CrsMatrixWrap<SC, LO, GO, NO>> crsOp = rcp_dynamic_cast<const Xpetra::CrsMatrixWrap<SC, LO, GO, NO>>(A);
82 if (crsOp == Teuchos::null)
83 throw Exceptions::BadCast(
"Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
84 const RCP<const Xpetra::EpetraCrsMatrixT<GO, NO>>& tmp_ECrsMtx = rcp_dynamic_cast<const Xpetra::EpetraCrsMatrixT<GO, NO>>(crsOp->getCrsMatrix());
85 if (tmp_ECrsMtx == Teuchos::null)
86 throw Exceptions::BadCast(
"Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
87 return tmp_ECrsMtx->getEpetra_CrsMatrixNonConst()->RangeMap();
92 Teuchos::RCP<const Map> map = xOp_->getRangeMap();
93 return Xpetra::toEpetra(map);
const Epetra_Comm & Comm() const
Preconditioner (wrapped as a Xpetra::Operator) for Maxwell's equations in curl-curl form.
Namespace for MueLu classes and methods.