ROL
function/test_10.cpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Rapid Optimization Library (ROL) Package
5// Copyright (2014) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact lead developers:
38// Drew Kouri (dpkouri@sandia.gov) and
39// Denis Ridzal (dridzal@sandia.gov)
40//
41// ************************************************************************
42// @HEADER
43
49#include "ROL_StdVector.hpp"
50#include "ROL_Stream.hpp"
51#include "Teuchos_GlobalMPISession.hpp"
52
53#include <iostream>
54
55template<class Real>
57public:
59
60 void value(ROL::Vector<Real> &c, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
61 ROL::Ptr<std::vector<Real> > cp
62 = dynamic_cast<ROL::StdVector<Real>&>(c).getVector();
63 ROL::Ptr<const std::vector<Real> > up
64 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
65 ROL::Ptr<const std::vector<Real> > zp
66 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
67
68 Real half(0.5), two(2);
69 // C(0) = U(0) - Z(0)
70 (*cp)[0] = (*up)[0]-(*zp)[0];
71 // C(1) = 0.5 * (U(0) + U(1) - Z(0))^2
72 (*cp)[1] = half*std::pow((*up)[0]+(*up)[1]-(*zp)[0],two);
73 }
74
76 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
77 ROL::Ptr<std::vector<Real> > jvp
78 = dynamic_cast<ROL::StdVector<Real>&>(jv).getVector();
79 ROL::Ptr<const std::vector<Real> > vp
80 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
81 ROL::Ptr<const std::vector<Real> > up
82 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
83 ROL::Ptr<const std::vector<Real> > zp
84 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
85 (*jvp)[0] = (*vp)[0];
86 (*jvp)[1] = ((*up)[0] + (*up)[1] - (*zp)[0]) * ((*vp)[0] + (*vp)[1]);
87 }
88
90 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
91 ROL::Ptr<std::vector<Real> > jvp
92 = dynamic_cast<ROL::StdVector<Real>&>(jv).getVector();
93 ROL::Ptr<const std::vector<Real> > vp
94 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
95 ROL::Ptr<const std::vector<Real> > up
96 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
97 ROL::Ptr<const std::vector<Real> > zp
98 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
99 (*jvp)[0] = -(*vp)[0];
100 (*jvp)[1] = ((*zp)[0] - (*up)[0] - (*up)[1]) * (*vp)[0];
101 }
102
104 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
105 ROL::Ptr<std::vector<Real> > ajvp
106 = dynamic_cast<ROL::StdVector<Real>&>(ajv).getVector();
107 ROL::Ptr<const std::vector<Real> > vp
108 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
109 ROL::Ptr<const std::vector<Real> > up
110 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
111 ROL::Ptr<const std::vector<Real> > zp
112 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
113 (*ajvp)[0] = (*vp)[0] + ((*up)[0] + (*up)[1] - (*zp)[0]) * (*vp)[1];
114 (*ajvp)[1] = ((*up)[0] + (*up)[1] - (*zp)[0]) * (*vp)[1];
115 }
116
118 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
119 ROL::Ptr<std::vector<Real> > ajvp
120 = dynamic_cast<ROL::StdVector<Real>&>(ajv).getVector();
121 ROL::Ptr<const std::vector<Real> > vp
122 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
123 ROL::Ptr<const std::vector<Real> > up
124 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
125 ROL::Ptr<const std::vector<Real> > zp
126 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
127 (*ajvp)[0] = ((*zp)[0] - (*up)[0] - (*up)[1]) * (*vp)[1] - (*vp)[0];
128 }
129
131 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
132 ROL::Ptr<std::vector<Real> > ahwvp
133 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
134 ROL::Ptr<const std::vector<Real> > wp
135 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
136 ROL::Ptr<const std::vector<Real> > vp
137 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
138 ROL::Ptr<const std::vector<Real> > up
139 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
140 ROL::Ptr<const std::vector<Real> > zp
141 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
142 (*ahwvp)[0] = (*wp)[1] * ((*vp)[0] + (*vp)[1]);
143 (*ahwvp)[1] = (*wp)[1] * ((*vp)[0] + (*vp)[1]);
144 }
145
147 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
148 ROL::Ptr<std::vector<Real> > ahwvp
149 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
150 ROL::Ptr<const std::vector<Real> > wp
151 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
152 ROL::Ptr<const std::vector<Real> > vp
153 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
154 ROL::Ptr<const std::vector<Real> > up
155 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
156 ROL::Ptr<const std::vector<Real> > zp
157 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
158 (*ahwvp)[0] = -(*wp)[1] * ((*vp)[0] + (*vp)[1]);
159 }
160
162 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
163 ROL::Ptr<std::vector<Real> > ahwvp
164 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
165 ROL::Ptr<const std::vector<Real> > wp
166 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
167 ROL::Ptr<const std::vector<Real> > vp
168 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
169 ROL::Ptr<const std::vector<Real> > up
170 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
171 ROL::Ptr<const std::vector<Real> > zp
172 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
173 (*ahwvp)[0] = -(*wp)[1] * (*vp)[0];
174 (*ahwvp)[1] = -(*wp)[1] * (*vp)[0];
175 }
176
178 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
179 ROL::Ptr<std::vector<Real> > ahwvp
180 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
181 ROL::Ptr<const std::vector<Real> > wp
182 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
183 ROL::Ptr<const std::vector<Real> > vp
184 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
185 ROL::Ptr<const std::vector<Real> > up
186 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
187 ROL::Ptr<const std::vector<Real> > zp
188 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
189 (*ahwvp)[0] = (*wp)[1] * (*vp)[0];
190 }
191};
192
193template<class Real>
195public:
197
198 void value(ROL::Vector<Real> &c, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
199 ROL::Ptr<std::vector<Real> > cp
200 = dynamic_cast<ROL::StdVector<Real>&>(c).getVector();
201 ROL::Ptr<const std::vector<Real> > up
202 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
203 ROL::Ptr<const std::vector<Real> > zp
204 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
205
206 const Real one(1), two(2);
207 // C = exp(U) - (Z^2 + 1)
208 (*cp)[0] = std::exp((*up)[0])-(std::pow((*zp)[0],two) + one);
209 }
210
212 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
213 ROL::Ptr<std::vector<Real> > jvp
214 = dynamic_cast<ROL::StdVector<Real>&>(jv).getVector();
215 ROL::Ptr<const std::vector<Real> > vp
216 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
217 ROL::Ptr<const std::vector<Real> > up
218 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
219 ROL::Ptr<const std::vector<Real> > zp
220 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
221 (*jvp)[0] = std::exp((*up)[0]) * (*vp)[0];
222 }
223
225 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
226 ROL::Ptr<std::vector<Real> > jvp
227 = dynamic_cast<ROL::StdVector<Real>&>(jv).getVector();
228 ROL::Ptr<const std::vector<Real> > vp
229 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
230 ROL::Ptr<const std::vector<Real> > up
231 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
232 ROL::Ptr<const std::vector<Real> > zp
233 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
234
235 const Real two(2);
236 (*jvp)[0] = -two * (*zp)[0] * (*vp)[0];
237 }
238
240 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
241 ROL::Ptr<std::vector<Real> > ajvp
242 = dynamic_cast<ROL::StdVector<Real>&>(ajv).getVector();
243 ROL::Ptr<const std::vector<Real> > vp
244 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
245 ROL::Ptr<const std::vector<Real> > up
246 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
247 ROL::Ptr<const std::vector<Real> > zp
248 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
249 (*ajvp)[0] = std::exp((*up)[0]) * (*vp)[0];
250 }
251
253 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
254 ROL::Ptr<std::vector<Real> > ajvp
255 = dynamic_cast<ROL::StdVector<Real>&>(ajv).getVector();
256 ROL::Ptr<const std::vector<Real> > vp
257 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
258 ROL::Ptr<const std::vector<Real> > up
259 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
260 ROL::Ptr<const std::vector<Real> > zp
261 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
262
263 const Real two(2);
264 (*ajvp)[0] = -two * (*zp)[0] * (*vp)[0];
265 }
266
268 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
269 ROL::Ptr<std::vector<Real> > ijvp
270 = dynamic_cast<ROL::StdVector<Real>&>(ijv).getVector();
271 ROL::Ptr<const std::vector<Real> > vp
272 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
273 ROL::Ptr<const std::vector<Real> > up
274 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
275 ROL::Ptr<const std::vector<Real> > zp
276 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
277 (*ijvp)[0] = (*vp)[0] / std::exp((*up)[0]);
278 }
279
281 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
282 ROL::Ptr<std::vector<Real> > ijvp
283 = dynamic_cast<ROL::StdVector<Real>&>(ijv).getVector();
284 ROL::Ptr<const std::vector<Real> > vp
285 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
286 ROL::Ptr<const std::vector<Real> > up
287 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
288 ROL::Ptr<const std::vector<Real> > zp
289 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
290 (*ijvp)[0] = (*vp)[0] / std::exp((*up)[0]);
291 }
292
294 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
295 ROL::Ptr<std::vector<Real> > ahwvp
296 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
297 ROL::Ptr<const std::vector<Real> > wp
298 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
299 ROL::Ptr<const std::vector<Real> > vp
300 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
301 ROL::Ptr<const std::vector<Real> > up
302 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
303 ROL::Ptr<const std::vector<Real> > zp
304 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
305 (*ahwvp)[0] = std::exp((*up)[0]) * (*wp)[0] * (*vp)[0];
306 }
307
309 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
310 ROL::Ptr<std::vector<Real> > ahwvp
311 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
312 ROL::Ptr<const std::vector<Real> > wp
313 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
314 ROL::Ptr<const std::vector<Real> > vp
315 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
316 ROL::Ptr<const std::vector<Real> > up
317 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
318 ROL::Ptr<const std::vector<Real> > zp
319 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
320 (*ahwvp)[0] = static_cast<Real>(0);
321 }
322
324 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
325 ROL::Ptr<std::vector<Real> > ahwvp
326 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
327 ROL::Ptr<const std::vector<Real> > wp
328 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
329 ROL::Ptr<const std::vector<Real> > vp
330 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
331 ROL::Ptr<const std::vector<Real> > up
332 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
333 ROL::Ptr<const std::vector<Real> > zp
334 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
335 (*ahwvp)[0] = static_cast<Real>(0);
336 }
337
339 const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
340 ROL::Ptr<std::vector<Real> > ahwvp
341 = dynamic_cast<ROL::StdVector<Real>&>(ahwv).getVector();
342 ROL::Ptr<const std::vector<Real> > wp
343 = dynamic_cast<const ROL::StdVector<Real>&>(w).getVector();
344 ROL::Ptr<const std::vector<Real> > vp
345 = dynamic_cast<const ROL::StdVector<Real>&>(v).getVector();
346 ROL::Ptr<const std::vector<Real> > up
347 = dynamic_cast<const ROL::StdVector<Real>&>(u).getVector();
348 ROL::Ptr<const std::vector<Real> > zp
349 = dynamic_cast<const ROL::StdVector<Real>&>(z).getVector();
350 (*ahwvp)[0] = static_cast<Real>(-2) * (*wp)[0] * (*vp)[0];
351 }
352};
353
354typedef double RealT;
355
356int main(int argc, char *argv[]) {
357
358 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
359
360 // This little trick lets us print to std::cout only if a (dummy) command-line argument is provided.
361 int iprint = argc - 1;
362 ROL::Ptr<std::ostream> outStream;
363 ROL::nullstream bhs; // outputs nothing
364 if (iprint > 0)
365 outStream = ROL::makePtrFromRef(std::cout);
366 else
367 outStream = ROL::makePtrFromRef(bhs);
368
369 int errorFlag = 0;
370
371 // *** Example body.
372
373 try {
374
375 int dim = 2;
376 int dimz = 1;
377 ROL::Ptr<std::vector<RealT> > ustd = ROL::makePtr<std::vector<RealT>>(dim);
378 ROL::Ptr<std::vector<RealT> > dustd = ROL::makePtr<std::vector<RealT>>(dim);
379 ROL::Ptr<std::vector<RealT> > zstd = ROL::makePtr<std::vector<RealT>>(dimz);
380 ROL::Ptr<std::vector<RealT> > dzstd = ROL::makePtr<std::vector<RealT>>(dimz);
381 ROL::Ptr<std::vector<RealT> > cstd = ROL::makePtr<std::vector<RealT>>(dim);
382 ROL::Ptr<std::vector<RealT> > czstd = ROL::makePtr<std::vector<RealT>>(dimz);
383 ROL::Ptr<std::vector<RealT> > sstd = ROL::makePtr<std::vector<RealT>>(dimz);
384 ROL::Ptr<std::vector<RealT> > dsstd = ROL::makePtr<std::vector<RealT>>(dimz);
385
386 (*ustd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
387 (*ustd)[1] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
388 (*dustd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
389 (*dustd)[1] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
390 (*zstd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
391 (*dzstd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
392 (*cstd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
393 (*cstd)[1] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
394 (*czstd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
395 (*sstd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
396 (*dsstd)[0] = static_cast<RealT>(rand())/static_cast<RealT>(RAND_MAX);
397
398 ROL::Ptr<ROL::Vector<RealT> > u = ROL::makePtr<ROL::StdVector<RealT>>(ustd);
399 ROL::Ptr<ROL::Vector<RealT> > du = ROL::makePtr<ROL::StdVector<RealT>>(dustd);
400 ROL::Ptr<ROL::Vector<RealT> > z = ROL::makePtr<ROL::StdVector<RealT>>(zstd);
401 ROL::Ptr<ROL::Vector<RealT> > dz = ROL::makePtr<ROL::StdVector<RealT>>(dzstd);
402 ROL::Ptr<ROL::Vector<RealT> > c = ROL::makePtr<ROL::StdVector<RealT>>(cstd);
403 ROL::Ptr<ROL::Vector<RealT> > cz = ROL::makePtr<ROL::StdVector<RealT>>(czstd);
404 ROL::Ptr<ROL::Vector<RealT> > s = ROL::makePtr<ROL::StdVector<RealT>>(sstd);
405 ROL::Ptr<ROL::Vector<RealT> > ds = ROL::makePtr<ROL::StdVector<RealT>>(dsstd);
406
413
414 ROL::Ptr<ROL::Constraint_SimOpt<RealT> > valCon = ROL::makePtr<valConstraint<RealT>>();
415 valCon->checkAdjointConsistencyJacobian_1(*c,*du,*u,*s,true,*outStream);
416 valCon->checkAdjointConsistencyJacobian_2(*c,*dz,*u,*s,true,*outStream);
417 valCon->checkApplyJacobian_1(*u,*s,*du,*c,true,*outStream);
418 valCon->checkApplyJacobian_2(*u,*s,*ds,*c,true,*outStream);
419 valCon->checkApplyJacobian(x,dx,*c,true,*outStream);
420 valCon->checkApplyAdjointHessian_11(*u,*s,*c,*du,*u,true,*outStream);
421 valCon->checkApplyAdjointHessian_12(*u,*s,*c,*du,*s,true,*outStream);
422 valCon->checkApplyAdjointHessian_21(*u,*s,*c,*ds,*u,true,*outStream);
423 valCon->checkApplyAdjointHessian_22(*u,*s,*c,*ds,*s,true,*outStream);
424 valCon->checkApplyAdjointHessian(x,*c,dx,x,true,*outStream);
425
426 ROL::Ptr<ROL::Constraint_SimOpt<RealT> > redCon = ROL::makePtr<redConstraint<RealT>>();
427 redCon->checkAdjointConsistencyJacobian_1(*cz,*ds,*s,*z,true,*outStream);
428 redCon->checkAdjointConsistencyJacobian_2(*cz,*dz,*s,*z,true,*outStream);
429 redCon->checkInverseJacobian_1(*cz,*ds,*s,*z,true,*outStream);
430 redCon->checkInverseAdjointJacobian_1(*ds,*cz,*s,*z,true,*outStream);
431 redCon->checkApplyJacobian_1(*s,*z,*ds,*cz,true,*outStream);
432 redCon->checkApplyJacobian_2(*s,*z,*dz,*cz,true,*outStream);
433 redCon->checkApplyJacobian(y,dy,*cz,true,*outStream);
434 redCon->checkApplyAdjointHessian_11(*s,*z,*cz,*ds,*s,true,*outStream);
435 redCon->checkApplyAdjointHessian_12(*s,*z,*cz,*ds,*z,true,*outStream);
436 redCon->checkApplyAdjointHessian_21(*s,*z,*cz,*dz,*s,true,*outStream);
437 redCon->checkApplyAdjointHessian_22(*s,*z,*cz,*dz,*z,true,*outStream);
438 redCon->checkApplyAdjointHessian(y,*cz,dy,y,true,*outStream);
439
440 ROL::CompositeConstraint_SimOpt<RealT> con(valCon,redCon,*c,*cz,*u,*s,*z);
441 con.checkAdjointConsistencyJacobian_1(*c,*du,*u,*z,true,*outStream);
442 con.checkAdjointConsistencyJacobian_2(*c,*dz,*u,*z,true,*outStream);
443 con.checkApplyJacobian_1(*u,*z,*du,*c,true,*outStream);
444 con.checkApplyJacobian_2(*u,*z,*dz,*c,true,*outStream);
445 con.checkApplyJacobian(w,dw,*c,true,*outStream);
446 con.checkApplyAdjointHessian_11(*u,*z,*c,*du,*u,true,*outStream);
447 con.checkApplyAdjointHessian_12(*u,*z,*c,*du,*z,true,*outStream);
448 con.checkApplyAdjointHessian_21(*u,*z,*c,*dz,*u,true,*outStream);
449 con.checkApplyAdjointHessian_22(*u,*z,*c,*dz,*z,true,*outStream);
450 con.checkApplyAdjointHessian(w,*c,dw,w,true,*outStream);
451 }
452 catch (std::logic_error& err) {
453 *outStream << err.what() << "\n";
454 errorFlag = -1000;
455 }; // end try
456
457 if (errorFlag != 0)
458 std::cout << "End Result: TEST FAILED\n";
459 else
460 std::cout << "End Result: TEST PASSED\n";
461
462 return 0;
463
464}
465
Defines a no-output stream class ROL::NullStream and a function makeStreamPtr which either wraps a re...
Defines a composite equality constraint operator interface for simulation-based optimization.
Defines the constraint operator interface for simulation-based optimization.
virtual Real checkAdjointConsistencyJacobian_1(const Vector< Real > &w, const Vector< Real > &v, const Vector< Real > &u, const Vector< Real > &z, const bool printToStream=true, std::ostream &outStream=std::cout)
Check the consistency of the Jacobian and its adjoint. This is the primary interface.
std::vector< std::vector< Real > > checkApplyJacobian_1(const Vector< Real > &u, const Vector< Real > &z, const Vector< Real > &v, const Vector< Real > &jv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
std::vector< std::vector< Real > > checkApplyJacobian_2(const Vector< Real > &u, const Vector< Real > &z, const Vector< Real > &v, const Vector< Real > &jv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
virtual Real checkAdjointConsistencyJacobian_2(const Vector< Real > &w, const Vector< Real > &v, const Vector< Real > &u, const Vector< Real > &z, const bool printToStream=true, std::ostream &outStream=std::cout)
Check the consistency of the Jacobian and its adjoint. This is the primary interface.
std::vector< std::vector< Real > > checkApplyAdjointHessian_21(const Vector< Real > &u, const Vector< Real > &z, const Vector< Real > &p, const Vector< Real > &v, const Vector< Real > &hv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
, , , ,
std::vector< std::vector< Real > > checkApplyAdjointHessian_11(const Vector< Real > &u, const Vector< Real > &z, const Vector< Real > &p, const Vector< Real > &v, const Vector< Real > &hv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
std::vector< std::vector< Real > > checkApplyAdjointHessian_22(const Vector< Real > &u, const Vector< Real > &z, const Vector< Real > &p, const Vector< Real > &v, const Vector< Real > &hv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
std::vector< std::vector< Real > > checkApplyAdjointHessian_12(const Vector< Real > &u, const Vector< Real > &z, const Vector< Real > &p, const Vector< Real > &v, const Vector< Real > &hv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
, , , ,
virtual std::vector< std::vector< Real > > checkApplyJacobian(const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &jv, const std::vector< Real > &steps, const bool printToStream=true, std::ostream &outStream=std::cout, const int order=1)
Finite-difference check for the constraint Jacobian application.
virtual std::vector< std::vector< Real > > checkApplyAdjointHessian(const Vector< Real > &x, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &hv, const std::vector< Real > &step, const bool printToScreen=true, std::ostream &outStream=std::cout, const int order=1)
Finite-difference check for the application of the adjoint of constraint Hessian.
Provides the ROL::Vector interface for scalar values, to be used, for example, with scalar constraint...
Defines the linear algebra or vector space interface for simulation-based optimization.
Defines the linear algebra or vector space interface.
Definition: ROL_Vector.hpp:84
void applyAdjointHessian_12(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the optimization-space derivative of the adjoint of the constraint simulation-space Jacobian at...
void applyAdjointHessian_21(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the simulation-space derivative of the adjoint of the constraint optimization-space Jacobian at...
void applyAdjointJacobian_2(ROL::Vector< Real > &ajv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the adjoint of the partial constraint Jacobian at , , to vector . This is the primary interface...
void applyJacobian_1(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the partial constraint Jacobian at , , to the vector .
void applyInverseAdjointJacobian_1(ROL::Vector< Real > &ijv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the inverse of the adjoint of the partial constraint Jacobian at , , to the vector .
void applyInverseJacobian_1(ROL::Vector< Real > &ijv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the inverse partial constraint Jacobian at , , to the vector .
void applyAdjointHessian_11(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the simulation-space derivative of the adjoint of the constraint simulation-space Jacobian at ...
void applyAdjointJacobian_1(ROL::Vector< Real > &ajv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the adjoint of the partial constraint Jacobian at , , to the vector . This is the primary inter...
void applyJacobian_2(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the partial constraint Jacobian at , , to the vector .
void value(ROL::Vector< Real > &c, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Evaluate the constraint operator at .
void applyAdjointHessian_22(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the optimization-space derivative of the adjoint of the constraint optimization-space Jacobian ...
void value(ROL::Vector< Real > &c, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Evaluate the constraint operator at .
void applyAdjointHessian_12(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the optimization-space derivative of the adjoint of the constraint simulation-space Jacobian at...
void applyAdjointHessian_22(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the optimization-space derivative of the adjoint of the constraint optimization-space Jacobian ...
void applyAdjointJacobian_1(ROL::Vector< Real > &ajv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the adjoint of the partial constraint Jacobian at , , to the vector . This is the primary inter...
void applyJacobian_2(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the partial constraint Jacobian at , , to the vector .
void applyAdjointJacobian_2(ROL::Vector< Real > &ajv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the adjoint of the partial constraint Jacobian at , , to vector . This is the primary interface...
void applyAdjointHessian_11(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the simulation-space derivative of the adjoint of the constraint simulation-space Jacobian at ...
void applyJacobian_1(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the partial constraint Jacobian at , , to the vector .
void applyAdjointHessian_21(ROL::Vector< Real > &ahwv, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v, const ROL::Vector< Real > &u, const ROL::Vector< Real > &z, Real &tol)
Apply the simulation-space derivative of the adjoint of the constraint optimization-space Jacobian at...
int main(int argc, char *argv[])
double RealT
constexpr auto dim