TEUCHOS_UNIT_TEST(assembly_engine, z_basic_epetra_vtpetra) { TEUCHOS_ASSERT(tLinearOp!=Teuchos::null); TEUCHOS_ASSERT(eLinearOp!=Teuchos::null); TEUCHOS_ASSERT(tVector!=Teuchos::null); TEUCHOS_ASSERT(eVector!=Teuchos::null); Thyra::LinearOpTester<double> tester; tester.set_all_error_tol(1e-14); tester.show_all_tests(true); tester.dump_all(true); tester.num_random_vectors(200); { const bool result = tester.compare( *tLinearOp, *eLinearOp, Teuchos::ptrFromRef(out) ); TEST_ASSERT(result); } { const bool result = Thyra::testRelNormDiffErr( "Tpetra",*tVector, "Epetra",*eVector, "linear_properties_error_tol()", 1e-14, "linear_properties_warning_tol()", 1e-14, &out); TEST_ASSERT(result); } }
TEUCHOS_UNIT_TEST(assembly_engine, z_basic_epetra_vtpetra) { PHX::InitializeKokkosDevice(); TEUCHOS_ASSERT(tLinearOp!=Teuchos::null); TEUCHOS_ASSERT(eLinearOp!=Teuchos::null); TEUCHOS_ASSERT(tVector!=Teuchos::null); TEUCHOS_ASSERT(eVector!=Teuchos::null); Thyra::LinearOpTester<double> tester; tester.set_all_error_tol(1e-14); tester.show_all_tests(true); tester.dump_all(true); tester.num_random_vectors(200); { const bool result = tester.compare( *tLinearOp, *eLinearOp, Teuchos::ptrFromRef(out) ); TEST_ASSERT(result); } { const bool result = Thyra::testRelNormDiffErr( "Tpetra",*tVector, "Epetra",*eVector, "linear_properties_error_tol()", 1e-14, "linear_properties_warning_tol()", 1e-14, &out); TEST_ASSERT(result); } // Need to kill global objects so that memory leaks on kokkos ref // count pointing doesn't trigger test failure. eLinearOp = Teuchos::null; tLinearOp = Teuchos::null; eVector = Teuchos::null; tVector = Teuchos::null; PHX::FinalizeKokkosDevice(); }
// Testing Parameter Support TEUCHOS_UNIT_TEST(model_evaluator_blocked_hessians, d2f_dp2) { typedef panzer::Traits::RealType RealType; typedef Thyra::VectorBase<RealType> VectorType; typedef Thyra::SpmdVectorBase<RealType> SpmdVectorType; typedef Thyra::LinearOpBase<RealType> OperatorType; using Teuchos::RCP; using Teuchos::rcp_dynamic_cast; typedef Thyra::ModelEvaluatorBase::InArgs<double> InArgs; typedef Thyra::ModelEvaluatorBase::OutArgs<double> OutArgs; typedef panzer::ModelEvaluator<double> PME; bool distr_param_on = true; AssemblyPieces ap; buildAssemblyPieces(distr_param_on,ap); int pIndex = -1; std::vector<Teuchos::RCP<Teuchos::Array<std::string> > > p_names; std::vector<Teuchos::RCP<Teuchos::Array<double> > > p_values; bool build_transient_support = true; RCP<PME> me = Teuchos::rcp(new PME(ap.fmb,ap.rLibrary,ap.lof,p_names,p_values,Teuchos::null,ap.gd,build_transient_support,0.0)); const double DENSITY_VALUE = 3.7; const double TEMPERATURE_VALUE = 2.0; const double PERTURB_VALUE = 0.1; // add distributed parameter { RCP<ThyraObjFactory<double> > th_param_lof = rcp_dynamic_cast<ThyraObjFactory<double> >(ap.param_lof); RCP<VectorType> param_density = Thyra::createMember(th_param_lof->getThyraDomainSpace()); Thyra::assign(param_density.ptr(),DENSITY_VALUE); pIndex = me->addDistributedParameter("DENSITY_P",th_param_lof->getThyraDomainSpace(), ap.param_ged,param_density,ap.param_dofManager); } me->setupModel(ap.wkstContainer,ap.physicsBlocks,ap.bcs, *ap.eqset_factory, *ap.bc_factory, ap.cm_factory, ap.cm_factory, ap.closure_models, ap.user_data,false,""); // panzer::printMeshTopology(out,*ap.dofManager); RCP<OperatorType> D2fDp2 = me->create_DfDp_op(pIndex); // test hessian { RCP<VectorType> x = Thyra::createMember(*me->get_x_space()); Thyra::assign(x.ptr(),TEMPERATURE_VALUE); RCP<VectorType> dx = Thyra::createMember(*me->get_x_space()); Thyra::assign(dx.ptr(),PERTURB_VALUE); InArgs in_args = me->createInArgs(); in_args.set_x(x); in_args.set_alpha(1.0/0.1); in_args.set_beta(1.0); me->evalModel_D2fDp2(pIndex,in_args,dx,D2fDp2); out << "D2fDp2 = \n" << Teuchos::describe(*D2fDp2,Teuchos::VERB_EXTREME) << std::endl; } RCP<OperatorType> W = me->create_DfDp_op(pIndex); { RCP<VectorType> x = Thyra::createMember(*me->get_x_space()); Thyra::assign(x.ptr(),TEMPERATURE_VALUE); InArgs in_args = me->createInArgs(); in_args.set_x(x); in_args.set_alpha(1.0); in_args.set_beta(0.0); OutArgs out_args = me->createOutArgs(); out_args.set_DfDp(pIndex,W); me->evalModel(in_args,out_args); out << "W = \n" << Teuchos::describe(*W,Teuchos::VERB_EXTREME) << std::endl; } Thyra::LinearOpTester<double> tester; tester.show_all_tests(true); tester.set_all_error_tol(1e-15); tester.num_random_vectors(20); double scaling_of_dfdp = PERTURB_VALUE/DENSITY_VALUE; Teuchos::FancyOStream fout(Teuchos::rcpFromRef(std::cout)); const bool op_cmp = tester.compare( *Thyra::scaleAndAdjoint(scaling_of_dfdp,Thyra::NOTRANS,W.getConst()), *D2fDp2, Teuchos::ptrFromRef(fout)); TEST_ASSERT(op_cmp); }