int main(int argc, char *argv[]) { Teuchos::GlobalMPISession mpiSession(&argc, &argv); // This little trick lets us print to std::cout only if a (dummy) command-line argument is provided. int iprint = argc - 1; Teuchos::RCP<std::ostream> outStream; Teuchos::oblackholestream bhs; // outputs nothing if (iprint > 0) outStream = Teuchos::rcp(&std::cout, false); else outStream = Teuchos::rcp(&bhs, false); int errorFlag = 0; // *** Example body. try { ROL::ZOO::Objective_Rosenbrock<RealT> obj; int dim = 100; // Set problem dimension. Must be even. // Set parameters. Teuchos::ParameterList parlist; parlist.sublist("Step").sublist("Line Search").sublist("Descent Method").set("Type", "Newton-Krylov"); parlist.sublist("Status Test").set("Gradient Tolerance",1.e-12); parlist.sublist("Status Test").set("Step Tolerance",1.e-14); parlist.sublist("Status Test").set("Iteration Limit",100); // Define algorithm. ROL::Algorithm<RealT> algo("Line Search",parlist); // Iteration Vector Teuchos::RCP<std::vector<RealT> > x_rcp = Teuchos::rcp( new std::vector<RealT> (dim, 0.0) ); // Set Initial Guess for (int i=0; i<dim/2; i++) { (*x_rcp)[2*i] = -1.2; (*x_rcp)[2*i+1] = 1.0; } ROL::StdVector<RealT> x(x_rcp); // Run Algorithm algo.run(x, obj, true, *outStream); // Get True Solution Teuchos::RCP<std::vector<RealT> > xtrue_rcp = Teuchos::rcp( new std::vector<RealT> (dim, 1.0) ); ROL::StdVector<RealT> xtrue(xtrue_rcp); // Compute Error x.axpy(-1.0, xtrue); RealT abserr = x.norm(); RealT relerr = abserr/xtrue.norm(); *outStream << std::scientific << "\n Absolute Error: " << abserr; *outStream << std::scientific << "\n Relative Error: " << relerr << "\n"; if ( relerr > sqrt(ROL::ROL_EPSILON<RealT>()) ) { errorFlag += 1; } } catch (std::logic_error err) { *outStream << err.what() << "\n"; errorFlag = -1000; }; // end try if (errorFlag != 0) std::cout << "End Result: TEST FAILED\n"; else std::cout << "End Result: TEST PASSED\n"; return 0; }
int main(int argc, char *argv[]) { Teuchos::GlobalMPISession mpiSession(&argc, &argv); // This little trick lets us print to std::cout only if a (dummy) command-line argument is provided. int iprint = argc - 1; Teuchos::RCP<std::ostream> outStream; Teuchos::oblackholestream bhs; // outputs nothing if (iprint > 0) outStream = Teuchos::rcp(&std::cout, false); else outStream = Teuchos::rcp(&bhs, false); int errorFlag = 0; // *** Example body. try { int dim = 10; Teuchos::ParameterList parlist; std::string jsonFileName("parameters.json"); parlist.setName("Imported from " + jsonFileName); // Load json parameters into a Teuchos::ParameterList ROL::JSON_Parameters(jsonFileName,parlist); Teuchos::RCP<ROL::Step<RealT> > step; ROL::stepFactory<RealT>(parlist,step); // Define Status Test RealT gtol = parlist.get("Gradient Tolerance",1e-12); RealT stol = parlist.get("Step Tolerance",1e-14); int maxit = parlist.get("Maximum Number of Iterations",100); ROL::StatusTest<RealT> status(gtol, stol, maxit); ROL::DefaultAlgorithm<RealT> algo(*step,status,false); Teuchos::RCP<std::vector<RealT> > x_rcp = Teuchos::rcp(new std::vector<RealT> (dim, 1.0) ); Teuchos::RCP<std::vector<RealT> > k_rcp = Teuchos::rcp(new std::vector<RealT> (dim, 0.0) ); ROL::StdVector<RealT> x(x_rcp); Teuchos::RCP<ROL::Vector<RealT> > k = Teuchos::rcp(new ROL::StdVector<RealT>(k_rcp) ); for(int i=0;i<dim;++i) { (*k_rcp)[i] = i+1.0; } ROL::ZOO::Objective_Zakharov<RealT> obj(k); // Run Algorithm std::vector<std::string> output = algo.run(x, obj, false); for ( unsigned i = 0; i < output.size(); i++ ) { std::cout << output[i]; } // Get True Solution Teuchos::RCP<std::vector<RealT> > xtrue_rcp = Teuchos::rcp( new std::vector<RealT> (dim, 0.0) ); ROL::StdVector<RealT> xtrue(xtrue_rcp); // Compute Error x.axpy(-1.0, xtrue); RealT abserr = x.norm(); *outStream << std::scientific << "\n Absolute Error: " << abserr; if ( abserr > sqrt(ROL::ROL_EPSILON) ) { errorFlag += 1; } // Make an XML file containing the supplied parameters Teuchos::writeParameterListToXmlFile(parlist,"parameters.xml"); } catch (std::logic_error err) { *outStream << err.what() << "\n"; errorFlag = -1000; }; // end try if (errorFlag != 0) std::cout << "End Result: TEST FAILED\n"; else std::cout << "End Result: TEST PASSED\n"; return 0; }