46#include "Thyra_VectorSpaceTester.hpp"
47#include "Thyra_VectorStdOpsTester.hpp"
48#include "Thyra_MultiVectorStdOpsTester.hpp"
49#include "Thyra_VectorStdOps.hpp"
50#include "Thyra_MultiVectorStdOps.hpp"
51#include "Thyra_LinearOpTester.hpp"
52#include "Thyra_DefaultProductVector.hpp"
53#include "Thyra_TestingTools.hpp"
54#include "Thyra_ScaledLinearOpBase.hpp"
55#include "Thyra_RowStatLinearOpBase.hpp"
56#include "Thyra_VectorStdOps.hpp"
57#include "Tpetra_CrsMatrix.hpp"
76using Teuchos::rcp_dynamic_cast;
77using Teuchos::inOutArg;
100template<
class Scalar>
101RCP<const VectorSpaceBase<Scalar> >
108template<
class Scalar>
109RCP<Tpetra::Operator<Scalar> >
113 typedef Tpetra::Map<>::global_ordinal_type
GO;
153 const Scalar
two =
static_cast<Scalar
>( 2.0);
154 const Scalar
posOne =
static_cast<Scalar
>(+1.0);
155 const Scalar
negOne =
static_cast<Scalar
>(-1.0);
192 Teuchos::UnitTestRepository::getCLP().setOption(
193 "show-all-tests",
"no-show-all-tests", &
showAllTests,
"Show all tests or not" );
194 Teuchos::UnitTestRepository::getCLP().setOption(
195 "dump-all",
"no-dump-all", &
dumpAll,
"Dump all objects being tested" );
196 Teuchos::UnitTestRepository::getCLP().setOption(
229 TEST_ASSERT(nonnull(
vs));
230 out <<
"vs = " << *
vs;
257 rcp(
new Tpetra::Vector<Scalar>(
tpetraMap));
294 rcp(
new Tpetra::Vector<Scalar>(
tpetraMap));
325 typedef Tpetra::Map<>::local_ordinal_type
LO;
326 typedef Tpetra::Map<>::global_ordinal_type
GO;
327 typedef Tpetra::Map<>::node_type
NODE;
330 const int numCols = 3;
337 Tpetra::createLocalMapWithNode<LO,GO,NODE>(
343 rcp(
new Tpetra::MultiVector<Scalar>(
tpetraMap, numCols));
377 typedef Tpetra::Map<>::local_ordinal_type
LO;
378 typedef Tpetra::Map<>::global_ordinal_type
GO;
379 typedef Tpetra::Map<>::node_type
NODE;
382 const int numCols = 3;
389 Tpetra::createLocalMapWithNode<LO,GO,NODE>(
395 rcp(
new Tpetra::MultiVector<Scalar>(
tpetraMap, numCols));
433 TEST_ASSERT(nonnull(
v));
434 TEST_EQUALITY(
v->space(),
vs);
497 const int numCols = 3;
504 ConverterT::getTpetraMultiVector(
mv);
505 TEST_ASSERT(nonnull(
tmv));
506 TEST_EQUALITY(
as<Ordinal>(
tmv->getMap()->getGlobalNumElements()),
vs->dim());
512 ConverterT::getTpetraMultiVector(
v);
513 TEST_ASSERT(nonnull(
tmv));
514 TEST_EQUALITY(
as<Ordinal>(
tmv->getMap()->getGlobalNumElements()),
vs->dim());
519 TEST_THROW(ConverterT::getTpetraMultiVector(
pv), std::logic_error);
534 const int numCols = 3;
541 ConverterT::getConstTpetraMultiVector(
mv);
542 TEST_ASSERT(nonnull(
tmv));
543 TEST_EQUALITY(
as<Ordinal>(
tmv->getMap()->getGlobalNumElements()),
vs->dim());
549 ConverterT::getConstTpetraMultiVector(
v);
550 TEST_ASSERT(nonnull(
tmv));
551 TEST_EQUALITY(
as<Ordinal>(
tmv->getMap()->getGlobalNumElements()),
vs->dim());
556 TEST_THROW(ConverterT::getConstTpetraMultiVector(
pv), std::logic_error);
586 out <<
"\nCheck that operator returns the right thing ...\n";
591 const Scalar
sum_y = sum(*
y);
595 out <<
"\nCheck the general LinearOp interface ...\n";
632 ConverterT::getTpetraOperator(
thyraOp);
644 ConverterT::getTpetraOperator(
thyraOp);
677 ConverterT::getConstTpetraOperator(
thyraOp);
689 ConverterT::getConstTpetraOperator(
thyraOp);
706 "lookupAndAssertTimer(): timer \"" << label <<
"\" was not present in Teuchos::TimeMonitor."
707 " Unit test not valid.");
712#define CHECK_TPETRA_FUNC_CALL_INCREMENT( timerStr, tpetraCode, thyraCode ) \
714 out << "\nTesting that Thyra calls down to " << timerStr << "\n"; \
716 const RCP<const Time> timer = lookupAndAssertTimer(timerStr); \
717 const int countBefore = timer->numCalls(); \
719 const int countAfter = timer->numCalls(); \
720 TEST_EQUALITY( countAfter, countBefore+1 ); \
729 typedef typename ST::magnitudeType
Magnitude;
736 const int numCols = 3;
741 A = createMembers(
vs, numCols),
742 B = createMembers(
vs, numCols);
744 tA = TOVE::getTpetraMultiVector(
A),
745 tB = TOVE::getTpetraMultiVector(
B);
752 "Tpetra::MultiVector::putScalar()",
753 tA->putScalar(ST::zero()),
754 Thyra::assign(
A.ptr(), ST::zero())
758 "Tpetra::MultiVector::dot()",
764 "Tpetra::MultiVector::dot()",
766 A->range()->scalarProds(*
A, *
B,
avScal() )
832#ifdef TPETRA_TEUCHOS_TIME_MONITOR
833# define TPETRA_TIMER_TESTS(SCALAR) \
834 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, UseTpetraImplementations, SCALAR )
836# define TPETRA_TIMER_TESTS(SCALAR)
845#ifdef HAVE_THYRA_TPETRA_EPETRA
853 using Teuchos::outArg;
854 using Teuchos::rcp_dynamic_cast;
858 const RCP<Tpetra::Operator<Scalar> > tpetraOp =
859 createTriDiagonalTpetraOperator<Scalar>(
g_localDim);
861 const RCP<LinearOpBase<Scalar> > thyraOp =
864 const RCP<Thyra::TpetraLinearOp<Scalar> > thyraTpetraOp =
867 RCP<const Epetra_Operator> epetraOp;
872 thyraTpetraOp->getEpetraOpView( outArg(epetraOp), outArg(epetraOpTransp),
873 outArg(epetraOpApplyAs), outArg(epetraOpAdjointSupport) );
875 if (
typeid(Scalar) ==
typeid(double)) {
876 TEST_ASSERT(nonnull(epetraOp));
877 const RCP<const Epetra_RowMatrix> epetraRowMatrix =
878 rcp_dynamic_cast<const Epetra_RowMatrix>(epetraOp,
true);
879 int numRowEntries = -1;
880 epetraRowMatrix->NumMyRowEntries(1, numRowEntries);
882 Array<double> row_values(numRowEntries);
883 Array<int> row_indices(numRowEntries);
884 epetraRowMatrix->ExtractMyRowCopy(1, numRowEntries, numRowEntries,
885 row_values.getRawPtr(), row_indices.getRawPtr());
892 TEST_ASSERT(is_null(epetraOp));
935 rowStatOp->getRowStat(Thyra::RowStatLinearOpBaseUtils::ROW_STAT_INV_ROW_SUM,
937 rowStatOp->getRowStat(Thyra::RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM,
985 rowStatOp->getRowStat(Thyra::RowStatLinearOpBaseUtils::ROW_STAT_INV_ROW_SUM,
987 rowStatOp->getRowStat(Thyra::RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM,
1000 rowStatOp->getRowStat(Thyra::RowStatLinearOpBaseUtils::ROW_STAT_ROW_SUM,
1003 out <<
"row_sums after left scaling by inv_row_sum = " << *
row_sums;
1018 out <<
"row_sums after right scaling by inv_row_sum = " << *
row_sums;
1028#define THYRA_TPETRA_THYRA_WRAPPERS_INSTANT(SCALAR) \
1030 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1031 convertTpetraToThyraComm, SCALAR ) \
1033 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1034 createVectorSpace, SCALAR ) \
1036 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1037 createVector, SCALAR ) \
1039 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1040 createConstVector, SCALAR ) \
1042 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1043 createMultiVector, SCALAR ) \
1045 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1046 createConstMultiVector, SCALAR ) \
1048 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1049 TeptraVectorSpace, SCALAR ) \
1051 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1052 vectorSpaceTester, SCALAR ) \
1054 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1055 vectorStdOpsTester, SCALAR ) \
1057 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1058 multiVectorStdOpsTester, SCALAR ) \
1060 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1061 getTpetraMultiVector, SCALAR ) \
1063 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1064 getConstTpetraMultiVector, SCALAR ) \
1066 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1067 TpetraLinearOp, SCALAR ) \
1069 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1070 createLinearOp, SCALAR ) \
1072 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1073 createConstLinearOp, SCALAR ) \
1075 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1076 TpetraLinearOp_EpetraRowMatrix, SCALAR ) \
1078 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1079 TpetraLinearOp_RowStatLinearOpBase, SCALAR ) \
1081 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( TpetraThyraWrappers, \
1082 TpetraLinearOp_ScaledLinearOpBase, SCALAR ) \
#define TEST_EQUALITY_CONST(v1, v2)
#define TEST_THROW(code, ExceptType)
#define TEST_INEQUALITY(v1, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
#define THYRA_TPETRA_THYRA_WRAPPERS_INSTANT(SCALAR)
#define CHECK_TPETRA_FUNC_CALL_INCREMENT(timerStr, tpetraCode, thyraCode)
static Teuchos::RCP< const Comm< OrdinalType > > getComm()
Concrete Thyra::LinearOpBase subclass for Tpetra::Operator.
EApplyEpetraOpAs
Determine how the apply an Epetra_Operator as a linear operator.
EAdjointEpetraOp
Determine if adjoints are supported on Epetra_Opeator or not.
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
TypeTo as(const TypeFrom &t)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
RCP< const VectorBase< Scalar > > createConstVector(const RCP< const Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector, const RCP< const VectorSpaceBase< Scalar > > space=Teuchos::null)
RCP< const TpetraMap_t > createTpetraMap(const int localDim)
RCP< const MultiVectorBase< Scalar > > createConstMultiVector(const RCP< const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraMultiVector, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< const VectorSpaceBase< Scalar > > createVectorSpace(const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &tpetraMap)
Create a Thyra::VectorSpaceBase object given a Tpetra::Map.
RCP< VectorBase< Scalar > > createVector(const RCP< Tpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraVector, const RCP< const VectorSpaceBase< Scalar > > space=Teuchos::null)
RCP< Tpetra::Operator< Scalar > > createTriDiagonalTpetraOperator(const int numLocalRows)
Teuchos::RCP< Teuchos::Time > lookupAndAssertTimer(const std::string &label)
RCP< MultiVectorBase< Scalar > > createMultiVector(const RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraMultiVector, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< LinearOpBase< Scalar > > createLinearOp(const RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraOperator, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< const LinearOpBase< Scalar > > createConstLinearOp(const RCP< const Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &tpetraOperator, const RCP< const VectorSpaceBase< Scalar > > rangeSpace=Teuchos::null, const RCP< const VectorSpaceBase< Scalar > > domainSpace=Teuchos::null)
RCP< const Teuchos::Comm< Ordinal > > convertTpetraToThyraComm(const RCP< const Teuchos::Comm< int > > &tpetraComm)
Given an Tpetra Teuchos::Comm<int> object, return an equivalent Teuchos::Comm<Ordinal> object.
RCP< const VectorSpaceBase< Scalar > > createTpetraVectorSpace(const int localDim)
TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(Comm, ReduceSum, PacketType)