62 #include "Teuchos_oblackholestream.hpp" 63 #include "Teuchos_GlobalMPISession.hpp" 67 int main(
int argc,
char *argv[]) {
69 using Teuchos::RCP;
using Teuchos::rcp;
71 typedef std::vector<RealT> vector;
78 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
81 int iprint = argc - 1;
82 Teuchos::RCP<std::ostream> outStream;
83 Teuchos::oblackholestream bhs;
85 outStream = Teuchos::rcp(&std::cout,
false);
87 outStream = Teuchos::rcp(&bhs,
false);
90 Teuchos::oblackholestream oldFormatState;
91 oldFormatState.copyfmt(std::cout);
99 RCP<vector> a_rcp = rcp(
new vector {4.0,2.0,1.0,3.0} );
100 RCP<vector> ai_rcp = rcp(
new vector {3.0/10.0, -2.0/10.0, -1.0/10.0, 4.0/10.0} );
102 RCP<vector> x1_rcp = rcp(
new vector {1.0,-1.0} );
103 RCP<vector> b1_rcp = rcp(
new vector(2) );
105 RCP<vector> x2_rcp = rcp(
new vector(2) );
106 RCP<vector> b2_rcp = rcp(
new vector {3.0,-1.0} );
108 RCP<vector> y3_rcp = rcp(
new vector {-2.0,1.0} );
109 RCP<vector> c3_rcp = rcp(
new vector(2) );
111 RCP<vector> y4_rcp = rcp(
new vector(2) );
112 RCP<vector> c4_rcp = rcp(
new vector {-6.0,1.0} );
114 StdLinearOperator A(a_rcp);
115 StdLinearOperator Ai(ai_rcp);
117 SV x1(x1_rcp); SV x2(x2_rcp); SV y3(y3_rcp); SV y4(y4_rcp);
118 SV b1(b1_rcp); SV b2(b2_rcp); SV c3(c3_rcp); SV c4(c4_rcp);
120 RealT tol = ROL::ROL_EPSILON<RealT>();
123 *outStream <<
"\nTest 1: Matrix multiplication" << std::endl;
125 *outStream <<
"x = [" << (*x1_rcp)[0] <<
"," << (*x1_rcp)[1] <<
"]" << std::endl;
126 *outStream <<
"b = [" << (*b1_rcp)[0] <<
"," << (*b1_rcp)[1] <<
"]" << std::endl;
129 RealT error1 = b1.norm();
130 errorFlag += error1 > tol;
131 *outStream <<
"Error = " << error1 << std::endl;
134 *outStream <<
"\nTest 2: Linear solve" << std::endl;
135 A.applyInverse(*x2_rcp,*b2_rcp,tol);
136 *outStream <<
"x = [" << (*x2_rcp)[0] <<
"," << (*x2_rcp)[1] <<
"]" << std::endl;
137 *outStream <<
"b = [" << (*b2_rcp)[0] <<
"," << (*b2_rcp)[1] <<
"]" << std::endl;
140 RealT error2 = x2.norm();
141 errorFlag += error2 > tol;
142 *outStream <<
"Error = " << error2 << std::endl;
145 *outStream <<
"\nTest 3: Transposed matrix multiplication" << std::endl;
146 A.applyAdjoint(*c3_rcp,*y3_rcp,tol);
147 *outStream <<
"y = [" << (*y3_rcp)[0] <<
"," << (*y3_rcp)[1] <<
"]" << std::endl;
148 *outStream <<
"c = [" << (*c3_rcp)[0] <<
"," << (*c3_rcp)[1] <<
"]" << std::endl;
151 RealT error3 = c3.norm();
152 errorFlag += error3 > tol;
153 *outStream <<
"Error = " << error3 << std::endl;
156 *outStream <<
"\nTest 4: Linear solve with transpose" << std::endl;
157 A.applyAdjointInverse(y4,c4,tol);
158 *outStream <<
"y = [" << (*y4_rcp)[0] <<
"," << (*y4_rcp)[1] <<
"]" << std::endl;
159 *outStream <<
"c = [" << (*c4_rcp)[0] <<
"," << (*c4_rcp)[1] <<
"]" << std::endl;
162 RealT error4 = y4.norm();
163 errorFlag += error4 > tol;
164 *outStream <<
"Error = " << error4 << std::endl;
166 *outStream <<
"x1 = "; x1.print(*outStream);
167 Ai.applyInverse(b1,x1,tol);
168 *outStream <<
"b1 = "; b1.print(*outStream);
170 *outStream <<
"b1 = "; b1.print(*outStream);
171 A.applyInverse(x1,b1,tol);
172 *outStream <<
"x1 = "; x1.print(*outStream);
174 *outStream <<
"x1 = "; x1.print(*outStream);
178 catch (std::logic_error err) {
179 *outStream << err.what() <<
"\n";
184 std::cout <<
"End Result: TEST FAILED\n";
186 std::cout <<
"End Result: TEST PASSED\n";
189 std::cout.copyfmt(oldFormatState);
Provides the std::vector implementation to apply a linear operator, which is a std::vector representa...
Provides the std::vector implementation of the ROL::Vector interface.
int main(int argc, char *argv[])