Ipopt 3.11.9
Loading...
Searching...
No Matches
MittelmannDistCntrlNeumA.hpp
Go to the documentation of this file.
1// Copyright (C) 2005, 2006 International Business Machines and others.
2// All Rights Reserved.
3// This code is published under the Eclipse Public License.
4//
5// $Id: MittelmannDistCntrlNeumA.hpp 2005 2011-06-06 12:55:16Z stefan $
6//
7// Authors: Andreas Waechter IBM 2005-10-18
8// based on MyNLP.hpp
9
10#ifndef __MITTELMANNDISTRCNTRLNEUMA_HPP__
11#define __MITTELMANNDISTRCNTRLNEUMA_HPP__
12
13#include "IpTNLP.hpp"
14#include "RegisteredTNLP.hpp"
15
16#ifdef HAVE_CONFIG_H
17#include "config.h"
18#else
19#include "configall_system.h"
20#endif
21
22#ifdef HAVE_CMATH
23# include <cmath>
24#else
25# ifdef HAVE_MATH_H
26# include <math.h>
27# else
28# error "don't have header file for math"
29# endif
30#endif
31
32#ifdef HAVE_CSTDIO
33# include <cstdio>
34#else
35# ifdef HAVE_STDIO_H
36# include <stdio.h>
37# else
38# error "don't have header file for stdio"
39# endif
40#endif
41
42using namespace Ipopt;
43
51{
52public:
56
59
63 virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g,
64 Index& nnz_h_lag, IndexStyleEnum& index_style);
65
67 virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u,
68 Index m, Number* g_l, Number* g_u);
69
71 virtual bool get_starting_point(Index n, bool init_x, Number* x,
72 bool init_z, Number* z_L, Number* z_U,
73 Index m, bool init_lambda,
74 Number* lambda);
75
77 virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value);
78
80 virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f);
81
83 virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g);
84
89 virtual bool eval_jac_g(Index n, const Number* x, bool new_x,
90 Index m, Index nele_jac, Index* iRow, Index *jCol,
91 Number* values);
92
97 virtual bool eval_h(Index n, const Number* x, bool new_x,
98 Number obj_factor, Index m, const Number* lambda,
99 bool new_lambda, Index nele_hess, Index* iRow,
100 Index* jCol, Number* values);
101
103
106 bool& use_x_scaling, Index n,
108 bool& use_g_scaling, Index m,
110
115 virtual void finalize_solution(SolverReturn status,
116 Index n, const Number* x, const Number* z_L, const Number* z_U,
117 Index m, const Number* g, const Number* lambda,
118 Number obj_value,
119 const IpoptData* ip_data,
122
123protected:
128 Number ub_y, Number lb_u, Number ub_u,
129 Number b_0j, Number b_1j, Number b_i0, Number b_i1,
130 Number u_init);
131
135 virtual Number y_d_cont(Number x1, Number x2) const =0;
137 virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const =0;
139 virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const =0;
141 virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const =0;
143 virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const =0;
146 virtual bool fint_cont_dydy_alwayszero() const =0;
148 virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const =0;
151 virtual bool fint_cont_dudu_alwayszero() const =0;
153 virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const =0;
156 virtual bool fint_cont_dydu_alwayszero() const =0;
158 virtual Number d_cont(Number x1, Number x2, Number y, Number u) const =0;
160 virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const =0;
162 virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const =0;
164 virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const =0;
167 virtual bool d_cont_dydy_alwayszero() const =0;
169 virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const =0;
172 virtual bool d_cont_dudu_alwayszero() const =0;
174 virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const =0;
177 virtual bool d_cont_dydu_alwayszero() const =0;
179
180private:
195
229
234 inline Index y_index(Index i, Index j) const
235 {
236 return j + (N_+2)*i;
237 }
240 inline Index u_index(Index i, Index j) const
241 {
242 return (N_+2)*(N_+2) + (j-1) + (N_)*(i-1);
243 }
246 inline Index pde_index(Index i, Index j) const
247 {
248 return (j-1) + N_*(i-1);
249 }
251 inline Number x1_grid(Index i) const
252 {
253 return h_*(Number)i;
254 }
256 inline Number x2_grid(Index i) const
257 {
258 return h_*(Number)i;
259 }
261};
262
265{
266public:
268 :
269 pi_(4.*atan(1.)),
270 alpha_(0.001)
271 {}
272
275
276 virtual bool InitializeProblem(Index N)
277 {
278 if (N<1) {
279 printf("N has to be at least 1.");
280 return false;
281 }
282 Number lb_y = -1e20;
283 Number ub_y = 0.371;
284 Number lb_u = -8.;
285 Number ub_u = 9.;
286 Number b_0j = 1.;
287 Number b_1j = 1.;
288 Number b_i0 = 1.;
289 Number b_i1 = 1.;
290 Number u_init = (ub_u+lb_u)/2.;
291
292 SetBaseParameters(N, lb_y, ub_y, lb_u, ub_u, b_0j, b_1j, b_i0, b_i1, u_init);
293 return true;
294 }
295protected:
297 virtual Number y_d_cont(Number x1, Number x2) const
298 {
299 return sin(2.*pi_*x1)*sin(2.*pi_*x2);
300 }
302 virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
303 {
304 Number diff_y = y-y_d_cont(x1,x2);
305 return 0.5*(diff_y*diff_y + alpha_*u*u);
306 }
308 virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
309 {
310 return y-y_d_cont(x1,x2);
311 }
312
314 virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
315 {
316 return alpha_*u;
317 }
319 virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const
320 {
321 return 1.;
322 }
325 virtual bool fint_cont_dydy_alwayszero() const
326 {
327 return false;
328 }
330 virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
331 {
332 return alpha_;
333 }
336 virtual bool fint_cont_dudu_alwayszero() const
337 {
338 return false;
339 }
341 virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
342 {
343 return 0.;
344 }
347 virtual bool fint_cont_dydu_alwayszero() const
348 {
349 return true;
350 }
352 virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
353 {
354 return -exp(y) - u;
355 }
357 virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
358 {
359 return -exp(y);
360 }
362 virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const
363 {
364 return -1.;
365 }
367 virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const
368 {
369 return -exp(y);
370 }
373 virtual bool d_cont_dydy_alwayszero() const
374 {
375 return false;
376 }
378 virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const
379 {
380 return 0.;
381 }
384 virtual bool d_cont_dudu_alwayszero() const
385 {
386 return true;
387 }
389 virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
390 {
391 return 0.;
392 }
395 virtual bool d_cont_dydu_alwayszero() const
396 {
397 return true;
398 }
399private:
405
406 const Number pi_;
409};
410
413{
414public:
416 :
417 pi_(4.*atan(1.))
418 {}
419
422
423 virtual bool InitializeProblem(Index N)
424 {
425 if (N<1) {
426 printf("N has to be at least 1.");
427 return false;
428 }
429 Number lb_y = -1e20;
430 Number ub_y = 0.371;
431 Number lb_u = -8.;
432 Number ub_u = 9.;
433 Number b_0j = 1.;
434 Number b_1j = 1.;
435 Number b_i0 = 1.;
436 Number b_i1 = 1.;
437 Number u_init = (ub_u+lb_u)/2.;
438
439 SetBaseParameters(N, lb_y, ub_y, lb_u, ub_u, b_0j, b_1j, b_i0, b_i1, u_init);
440 return true;
441 }
442protected:
444 virtual Number y_d_cont(Number x1, Number x2) const
445 {
446 return sin(2.*pi_*x1)*sin(2.*pi_*x2);
447 }
449 virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
450 {
451 Number diff_y = y-y_d_cont(x1,x2);
452 return 0.5*diff_y*diff_y;
453 }
455 virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
456 {
457 return y-y_d_cont(x1,x2);
458 }
459
461 virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
462 {
463 return 0.;
464 }
466 virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const
467 {
468 return 1.;
469 }
472 virtual bool fint_cont_dydy_alwayszero() const
473 {
474 return false;
475 }
477 virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
478 {
479 return 0.;
480 }
483 virtual bool fint_cont_dudu_alwayszero() const
484 {
485 return true;
486 }
488 virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
489 {
490 return 0.;
491 }
494 virtual bool fint_cont_dydu_alwayszero() const
495 {
496 return true;
497 }
499 virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
500 {
501 return -exp(y) - u;
502 }
504 virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
505 {
506 return -exp(y);
507 }
509 virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const
510 {
511 return -1.;
512 }
514 virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const
515 {
516 return -exp(y);
517 }
520 virtual bool d_cont_dydy_alwayszero() const
521 {
522 return false;
523 }
525 virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const
526 {
527 return 0.;
528 }
531 virtual bool d_cont_dudu_alwayszero() const
532 {
533 return true;
534 }
536 virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
537 {
538 return 0.;
539 }
542 virtual bool d_cont_dydu_alwayszero() const
543 {
544 return true;
545 }
546private:
552
553 const Number pi_;
554};
555
558{
559public:
561 :
562 pi_(4.*atan(1.)),
563 M_(1.),
564 K_(0.8),
565 b_(1.)
566 {}
567
570
571 virtual bool InitializeProblem(Index N)
572 {
573 if (N<1) {
574 printf("N has to be at least 1.");
575 return false;
576 }
577 Number lb_y = 3.;//-1e20;
578 Number ub_y = 6.09;
579 Number lb_u = 1.4;
580 Number ub_u = 1.6;
581 Number b_0j = 1.;
582 Number b_1j = 0.;
583 Number b_i0 = 1.;
584 Number b_i1 = 0.;
585 Number u_init = (ub_u+lb_u)/2.;
586
587 SetBaseParameters(N, lb_y, ub_y, lb_u, ub_u, b_0j, b_1j, b_i0, b_i1, u_init);
588 return true;
589 }
590protected:
592 virtual Number y_d_cont(Number x1, Number x2) const
593 {
594 return 6.;
595 }
597 virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
598 {
599 return u*(M_*u - K_*y);
600 }
602 virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
603 {
604 return -K_*u;
605 }
606
608 virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
609 {
610 return 2.*M_*u - K_*y;
611 }
613 virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const
614 {
615 return 0.;
616 }
619 virtual bool fint_cont_dydy_alwayszero() const
620 {
621 return true;
622 }
624 virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
625 {
626 return 2.*M_;
627 }
630 virtual bool fint_cont_dudu_alwayszero() const
631 {
632 return false;
633 }
635 virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
636 {
637 return -K_;
638 }
641 virtual bool fint_cont_dydu_alwayszero() const
642 {
643 return false;
644 }
646 virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
647 {
648 return y*(u + b_*y - a(x1,x2));
649 }
651 virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
652 {
653 return (u + 2.*b_*y -a(x1,x2));
654 }
656 virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const
657 {
658 return y;
659 }
661 virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const
662 {
663 return 2.*b_;
664 }
667 virtual bool d_cont_dydy_alwayszero() const
668 {
669 return false;
670 }
672 virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const
673 {
674 return 0.;
675 }
678 virtual bool d_cont_dudu_alwayszero() const
679 {
680 return true;
681 }
683 virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
684 {
685 return 1.;
686 }
689 virtual bool d_cont_dydu_alwayszero() const
690 {
691 return false;
692 }
693private:
699
700 const Number pi_;
701 /*@name constrants appearing in problem formulation */
703 const Number M_;
704 const Number K_;
705 const Number b_;
707 //* Auxiliary function for state equation */
708 inline Number a(Number x1, Number x2) const
709 {
710 return 7. + 4.*sin(2.*pi_*x1*x2);
711 }
712};
713
714#endif
Number * x
Input: Starting point Output: Optimal solution.
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
Number Number * g
Values of constraint at final point (output only - ignored if set to NULL)
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
Number Number * x_scaling
Number obj_scaling
Number Number Number * g_scaling
Number Number Index m
Number of constraints.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow & jCol, 0 for C style, 1 for Fortran style
Class for all IPOPT specific calculated quantities.
Class to organize all the data required by the algorithm.
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
Definition IpTNLP.hpp:80
Class implementating Example 4.
virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
MittelmannDistCntrlNeumA1 & operator=(const MittelmannDistCntrlNeumA1 &)
MittelmannDistCntrlNeumA1(const MittelmannDistCntrlNeumA1 &)
virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
virtual bool InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
virtual bool fint_cont_dydy_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
const Number pi_
Value of pi (made available for convenience)
virtual bool d_cont_dydu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t y,y.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t.
virtual bool d_cont_dudu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
Integrant in objective function.
virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t.
virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
Forcing function for the elliptic equation.
virtual bool fint_cont_dudu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual bool fint_cont_dydu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
const Number alpha_
Value for parameter alpha in objective functin.
virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
Class implementating Example 5.
virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
MittelmannDistCntrlNeumA2 & operator=(const MittelmannDistCntrlNeumA2 &)
virtual bool fint_cont_dydy_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual bool d_cont_dydu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
const Number pi_
Value of pi (made available for convenience)
MittelmannDistCntrlNeumA2(const MittelmannDistCntrlNeumA2 &)
virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
virtual bool d_cont_dudu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t.
virtual bool InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
virtual bool fint_cont_dydu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
Forcing function for the elliptic equation.
virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t.
virtual bool fint_cont_dudu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
Integrant in objective function.
virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t y,y.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
Class implementating Example 6.
virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
Integrant in objective function.
virtual bool fint_cont_dydu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual bool fint_cont_dydy_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
Number a(Number x1, Number x2) const
MittelmannDistCntrlNeumA3(const MittelmannDistCntrlNeumA3 &)
virtual bool fint_cont_dudu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t y,y.
virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
MittelmannDistCntrlNeumA3 & operator=(const MittelmannDistCntrlNeumA3 &)
virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
const Number pi_
Value of pi (made available for convenience)
virtual Number y_d_cont(Number x1, Number x2) const
Profile function for initial y.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual bool InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
Forcing function for the elliptic equation.
virtual bool d_cont_dudu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t.
virtual bool d_cont_dydu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function w.r.t.
Base class for distributed control problems with homogeneous Neumann boundary conditions,...
void SetBaseParameters(Index N, Number lb_y, Number ub_y, Number lb_u, Number ub_u, Number b_0j, Number b_1j, Number b_i0, Number b_i1, Number u_init)
Method for setting the internal parameters that define the problem.
Number b_i0_
Value of beta function (in Neumann boundary condition) for (x1,0) bounray.
Number b_0j_
Value of beta function (in Neumann boundary condition) for (0,x2) bounray.
virtual bool fint_cont_dydu_alwayszero() const =0
returns true if second partial derivative of fint_cont w.r.t.
virtual bool d_cont_dydy_alwayszero() const =0
returns true if second partial derivative of d_cont w.r.t.
virtual bool fint_cont_dudu_alwayszero() const =0
returns true if second partial derivative of fint_cont w.r.t.
virtual bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u)
Method to return the bounds for my problem.
Number ub_y_
overall upper bound on y
virtual Number d_cont_dudu(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of forcing function w.r.t.
virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const =0
First partial derivative of forcing function w.r.t.
virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const =0
First partial derivative of fint_cont w.r.t.
virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const =0
Integrant in objective function.
virtual Number d_cont(Number x1, Number x2, Number y, Number u) const =0
Forcing function for the elliptic equation.
virtual bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g)
Method to return the constraint residuals.
Number b_i1_
Value of beta function (in Neumann boundary condition) for (x1,1) bounray.
virtual bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value)
Method to return the objective value.
MittelmannDistCntrlNeumABase()
Constructor.
virtual Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of fint_cont w.r.t.
virtual bool get_scaling_parameters(Number &obj_scaling, bool &use_x_scaling, Index n, Number *x_scaling, bool &use_g_scaling, Index m, Number *g_scaling)
Method for returning scaling parameters.
Number lb_u_
overall lower bound on u
virtual bool get_starting_point(Index n, bool init_x, Number *x, bool init_z, Number *z_L, Number *z_U, Index m, bool init_lambda, Number *lambda)
Method to return the starting point for the algorithm.
virtual bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style)
Method to return some info about the nlp.
Number u_init_
Initial value for the constrols u.
virtual bool fint_cont_dydy_alwayszero() const =0
returns true if second partial derivative of fint_cont w.r.t.
Number ub_u_
overall upper bound on u
virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of forcing function w.r.t.
Index pde_index(Index i, Index j) const
Translation of interior mesh point indices to the corresponding PDE constraint number.
Index u_index(Index i, Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij)
virtual Number d_cont_dydy(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of forcing function w.r.t.
virtual void finalize_solution(SolverReturn status, Index n, const Number *x, const Number *z_L, const Number *z_U, Index m, const Number *g, const Number *lambda, Number obj_value, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
This method is called after the optimization, and could write an output file with the optimal profile...
virtual bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f)
Method to return the gradient of the objective.
Number lb_y_
overall lower bound on y
MittelmannDistCntrlNeumABase & operator=(const MittelmannDistCntrlNeumABase &)
virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of fint_cont w.r.t.
virtual bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values)
Method to return: 1) The structure of the jacobian (if "values" is NULL) 2) The values of the jacobia...
virtual bool d_cont_dydu_alwayszero() const =0
returns true if second partial derivative of d_cont w.r.t.
Number * y_d_
Array for the target profile for y.
Index y_index(Index i, Index j) const
Translation of mesh point indices to NLP variable indices for y(x_ij)
Number x1_grid(Index i) const
Compute the grid coordinate for given index in x1 direction.
virtual bool d_cont_dudu_alwayszero() const =0
returns true if second partial derivative of d_cont w.r.t.
virtual Number d_cont_du(Number x1, Number x2, Number y, Number u) const =0
First partial derivative of forcing function w.r.t.
virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const =0
First partial derivative of fint_cont w.r.t.
Number x2_grid(Index i) const
Compute the grid coordinate for given index in x2 direction.
virtual Number fint_cont_dydy(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of fint_cont w.r.t.
MittelmannDistCntrlNeumABase(const MittelmannDistCntrlNeumABase &)
virtual bool eval_h(Index n, const Number *x, bool new_x, Number obj_factor, Index m, const Number *lambda, bool new_lambda, Index nele_hess, Index *iRow, Index *jCol, Number *values)
Method to return: 1) The structure of the hessian of the lagrangian (if "values" is NULL) 2) The valu...
Number b_1j_
Value of beta function (in Neumann boundary condition) for (1,x2) bounray.
virtual ~MittelmannDistCntrlNeumABase()
Default destructor.
Index N_
Number of mesh points in one dimension (excluding boundary)
virtual Number y_d_cont(Number x1, Number x2) const =0
Target profile function for y (and initial guess function)
Class implemented the NLP discretization of.
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
int Index
Type of all indices of vectors, matrices etc.
Definition IpTypes.hpp:19
double Number
Type of all numbers.
Definition IpTypes.hpp:17