void emptyProcVectorSpaceTester(const int rootRank, FancyOStream &out, bool &success) { const Ordinal localDim = g_localDim; PRINT_VAR(localDim); const RCP<const DefaultSpmdVectorSpace<Scalar> > vs = createZeroEleProcVS<Scalar>(localDim, rootRank); typedef Teuchos::ScalarTraits<Scalar> ST; typedef typename ST::magnitudeType ScalarMag; ScalarMag tol = as<ScalarMag>(100.0) * ScalarTraits<ScalarMag>::eps(); Thyra::VectorSpaceTester<Scalar> vectorSpaceTester; vectorSpaceTester.warning_tol(ScalarMag(0.1)*tol); vectorSpaceTester.error_tol(tol); vectorSpaceTester.show_all_tests(g_show_all_tests); vectorSpaceTester.dump_all(g_dump_objects); Thyra::VectorStdOpsTester<Scalar> vectorStdOpsTester; vectorStdOpsTester.warning_tol(ScalarMag(0.1)*tol); vectorStdOpsTester.error_tol(tol); Thyra::MultiVectorStdOpsTester<Scalar> multiVectorStdOpsTester; multiVectorStdOpsTester.warning_tol(ScalarMag(0.1)*tol); multiVectorStdOpsTester.error_tol(tol); if (g_dumpRTOps) { RTOpPack::set_SPMD_apply_op_dump_out(rcpFromRef(out)); } out << "\nTesting the VectorSpaceBase interface of vs ...\n"; TEST_ASSERT(vectorSpaceTester.check(*vs, &out)); out << "\nTesting standard vector ops for vs ...\n"; TEST_ASSERT(vectorStdOpsTester.checkStdOps(*vs, &out)); out << "\nTesting standard multivector ops for vs ...\n"; TEST_ASSERT(multiVectorStdOpsTester.checkStdOps(*vs, &out)); RTOpPack::set_SPMD_apply_op_dump_out(Teuchos::null); }
bool run_product_space_tests( const int n ,const int numBlocks ,const typename Teuchos::ScalarTraits<Scalar>::magnitudeType &tol ,const bool showAllTests ,const bool dumpAll ,Teuchos::FancyOStream *out_arg ) { using Thyra::relErr; using Teuchos::OSTab; using Teuchos::rcp; using Teuchos::RCP; typedef Teuchos::ScalarTraits<Scalar> ST; typedef typename ST::magnitudeType ScalarMag; RCP<Teuchos::FancyOStream> out = Teuchos::fancyOStream(rcp(out_arg,false)); if(out.get()) *out << "\n*** Entering run_product_space_tests<"<<ST::name()<<">(...) ...\n"; bool success = true, result; Thyra::VectorSpaceTester<Scalar> vectorSpaceTester; vectorSpaceTester.warning_tol(ScalarMag(0.1)*tol); vectorSpaceTester.error_tol(tol); vectorSpaceTester.show_all_tests(showAllTests); vectorSpaceTester.dump_all(dumpAll); Thyra::VectorStdOpsTester<Scalar> vectorStdOpsTester; vectorStdOpsTester.warning_tol(ScalarMag(0.1)*tol); vectorStdOpsTester.error_tol(tol); Teuchos::Array<RCP<const Thyra::VectorSpaceBase<Scalar> > > vecSpaces(numBlocks); const RCP<const Teuchos::Comm<Thyra::Ordinal> > comm = Teuchos::DefaultComm<Thyra::Ordinal>::getComm(); const int numProcs = size(*comm); RCP<const Thyra::VectorSpaceBase<Scalar> > spaceBlock = Thyra::defaultSpmdVectorSpace<Scalar>(comm,n,-1); for( int i = 0; i < numBlocks; ++i ) vecSpaces[i] = spaceBlock; if(out.get()) *out << "\nA) Performing basic tests on product vectors with SPMD constituent vectors ...\n"; if(out.get()) *out << "\nCreating a product space ps with numBlocks="<<numBlocks<<" and n="<<n<<"vector elements per block ...\n"; RCP<Thyra::DefaultProductVectorSpace<Scalar> > ps = rcp(new Thyra::DefaultProductVectorSpace<Scalar>(numBlocks,&vecSpaces[0])); if(out.get()) *out << "\nps->numBlocks()="; result = ps->numBlocks() == numBlocks; if(!result) success = false; if(out.get()) *out << ps->numBlocks() << " == numBlocks=" << numBlocks << " : " << ( result ? "passed" : "failed" ) << std::endl; if(out.get()) *out << "\nTesting the product space ps ...\n"; if(out.get()) *out << "\nps->dim()="; result = ps->dim() == numProcs*n*numBlocks; if(!result) success = false; if(out.get()) *out << ps->dim() << " == numProcs*n*numBlocks=" << numProcs*n*numBlocks << " : " << ( result ? "passed" : "failed" ) << std::endl; if(out.get()) *out << "\nTesting the VectorSpaceBase interface of ps ...\n"; TEUCHOS_TEST_ASSERT(vectorSpaceTester.check(*ps, out.get()), *out, success); if(out.get()) *out << "\nTesting standard vector ops for ps ...\n"; TEUCHOS_TEST_ASSERT(vectorStdOpsTester.checkStdOps(*ps, out.get()), *out, success); if(out.get()) *out << "\nB) Testing a nested product space of product vector spaces called pps ...\n"; Teuchos::Array<RCP<const Thyra::VectorSpaceBase<Scalar> > > blockVecSpaces(numBlocks); for( int i = 0; i < numBlocks; ++i ) blockVecSpaces[i] = ps; RCP<Thyra::DefaultProductVectorSpace<Scalar> > pps = rcp(new Thyra::DefaultProductVectorSpace<Scalar> (numBlocks,&blockVecSpaces[0])); if(out.get()) *out << "\nTesting the VectorSpaceBase interface of pps ...\n"; TEUCHOS_TEST_ASSERT(vectorSpaceTester.check(*pps, out.get()), *out, success); if(out.get()) *out << "\nTesting standard vector ops for pps ...\n"; TEUCHOS_TEST_ASSERT(vectorStdOpsTester.checkStdOps(*pps, out.get()), *out, success); if(out.get()) *out << "\n*** Leaving run_product_space_tests<"<<ST::name()<<">(...) ...\n"; return success; } // end run_product_space_tests() [Doxygen looks for this!]