44 #include "Thyra_DefaultProductVectorSpace.hpp" 45 #include "Thyra_VectorStdOps.hpp" 46 #include "Thyra_MultiVectorStdOps.hpp" 47 #include "Thyra_SpmdVectorSpaceBase.hpp" 48 #include "Thyra_VectorSpaceTester.hpp" 49 #include "Thyra_TestingTools.hpp" 50 #include "Epetra_Vector.h" 51 #include "Teuchos_GlobalMPISession.hpp" 55 #include "Teuchos_UnitTestHarness.hpp" 61 using Teuchos::ptrFromRef;
63 using Teuchos::rcp_dynamic_cast;
67 void runVectorSpaceTesterTest(
const int emptyProc,
68 Teuchos::FancyOStream &out,
bool &success)
70 using Thyra::VectorSpaceBase;
71 using Thyra::SpmdVectorSpaceBase;
72 using Thyra::MultiVectorBase;
74 RCP<const VectorSpaceBase<double> > vs;
75 RCP<const Epetra_Map> epetra_map;
76 createEpetraVsAndMap(
g_localDim, outArg(vs), outArg(epetra_map), emptyProc);
77 const int numProcs = epetra_map->Comm().NumProc();
79 if (emptyProc >= numProcs) {
80 out <<
"emptyProc = " << emptyProc <<
" >= numProcs = " << numProcs
81 <<
": Skipping this test case!\n";
85 const Ordinal dimMultiplier = (emptyProc < 0 ? numProcs : numProcs-1);
87 TEST_EQUALITY(vs->dim(),
g_localDim * dimMultiplier);
89 const RCP<const SpmdVectorSpaceBase<double> > spmd_vs =
90 rcp_dynamic_cast<
const SpmdVectorSpaceBase<double> >(vs,
true);
92 TEST_EQUALITY(spmd_vs->localSubDim(), as<int>(epetra_map->NumMyElements()));
94 Thyra::VectorSpaceTester<double> vectorSpaceTester;
95 const double tol = 100.0 * Teuchos::ScalarTraits<double>::eps();
96 vectorSpaceTester.warning_tol((0.1)*tol);
97 vectorSpaceTester.error_tol(tol);
98 vectorSpaceTester.show_all_tests(g_show_all_tests);
99 vectorSpaceTester.dump_all(g_dumpAll);
100 TEST_ASSERT(vectorSpaceTester.check(*vs, &out));
104 void runCreateVectorUnitTest(
const int emptyProc,
105 Teuchos::FancyOStream &out,
bool &success)
107 using Thyra::VectorBase;
108 using Thyra::VectorSpaceBase;
109 using Thyra::MultiVectorBase;
111 RCP<const VectorSpaceBase<double> > vs;
112 RCP<const Epetra_Map> epetra_map;
113 createEpetraVsAndMap(
g_localDim, outArg(vs), outArg(epetra_map), emptyProc);
114 const int numProcs = epetra_map->Comm().NumProc();
116 if (emptyProc >= numProcs) {
117 out <<
"emptyProc = " << emptyProc <<
" >= numProcs = " << numProcs
118 <<
": Skipping this test case!\n";
122 const RCP<Epetra_Vector> epetra_vec = rcp(
new Epetra_Vector(*epetra_map));
124 const RCP<Epetra_Vector> epetra_vec2 =
126 TEST_EQUALITY(epetra_vec, epetra_vec2);
128 const RCP<const Epetra_Vector> const_epetra_vec2 =
130 TEST_EQUALITY(epetra_vec.getConst(), const_epetra_vec2);
142 typedef Teuchos::GlobalMPISession GMPIS;
143 const RCP<const Epetra_Comm> epetra_comm = getEpetraComm();
144 TEST_EQUALITY(epetra_comm->NumProc(), GMPIS::getNProc());
145 TEST_EQUALITY(epetra_comm->MyPID(), GMPIS::getRank());
147 TEST_EQUALITY(comm->getSize(), GMPIS::getNProc());
148 TEST_EQUALITY(comm->getRank(), GMPIS::getRank());
150 TEST_EQUALITY(epetra_comm2->NumProc(), GMPIS::getNProc());
151 TEST_EQUALITY(epetra_comm2->MyPID(), GMPIS::getRank());
157 runVectorSpaceTesterTest(-1, out, success);
163 runVectorSpaceTesterTest(0, out, success);
169 runVectorSpaceTesterTest(1, out, success);
175 runVectorSpaceTesterTest(Teuchos::GlobalMPISession::getNProc()-1, out, success);
181 runCreateVectorUnitTest(0, out, success);
187 runCreateVectorUnitTest(1, out, success);
193 runCreateVectorUnitTest(Teuchos::GlobalMPISession::getNProc()-1, out, success);
200 TEUCHOS_UNIT_TEST( EpetraThyraWrappers, get_Epetra_MultiVector_singleBlockProductVector )
202 using Thyra::VectorSpaceBase;
203 using Thyra::MultiVectorBase;
205 RCP<const VectorSpaceBase<double> > vs;
206 RCP<const Epetra_Map> epetra_map;
207 createEpetraVsAndMap(
g_localDim, outArg(vs), outArg(epetra_map));
209 const RCP<const VectorSpaceBase<double> > pvs = Thyra::productVectorSpace(vs, 1);
211 const RCP<MultiVectorBase<double> > pmv = Thyra::createMembers(pvs, 1);
213 const double alpha = 3.5;
214 Thyra::assign<double>( pmv.ptr(), alpha );
216 const RCP<Epetra_MultiVector> epetra_mv =
219 const RCP<MultiVectorBase<double> > mv2 =
222 Thyra::testRelNormDiffErr<double>(
223 "*pmv->col(0)", *pmv->col(0),
224 "*mv2->col(0)", *mv2->col(0),
RCP< Epetra_MultiVector > get_Epetra_MultiVector(const Epetra_Map &map, const RCP< MultiVectorBase< double > > &mv)
Get a non-const Epetra_MultiVector view from a non-const MultiVectorBase object if possible...
RCP< MultiVectorBase< double > > create_MultiVector(const RCP< Epetra_MultiVector > &epetra_mv, const RCP< const VectorSpaceBase< double > > &range, const RCP< const VectorSpaceBase< double > > &domain=Teuchos::null)
Create a non-const MultiVectorBase object from a non-const Epetra_MultiVector object.
TEUCHOS_UNIT_TEST(EpetraOperatorWrapper, basic)
RCP< VectorBase< double > > create_Vector(const RCP< Epetra_Vector > &epetra_v, const RCP< const VectorSpaceBase< double > > &space)
Create a non-const VectorBase object from a non-const Epetra_Vector object.
RCP< Epetra_Vector > get_Epetra_Vector(const Epetra_Map &map, const RCP< VectorBase< double > > &v)
Get a non-const Epetra_Vector view from a non-const VectorBase object if possible.
RCP< const Epetra_Comm > get_Epetra_Comm(const Teuchos::Comm< Ordinal > &comm)
Get (or create) and Epetra_Comm given a Teuchos::Comm object.
RCP< const Teuchos::Comm< Ordinal > > create_Comm(const RCP< const Epetra_Comm > &epetraComm)
Given an Epetra_Comm object, return an equivalent Teuchos::Comm object.