10 #ifndef __MITTELMANNBNDRYCNTRLNEUM_HPP__ 11 #define __MITTELMANNBNDRYCNTRLNEUM_HPP__ 19 #include "configall_system.h" 28 # error "don't have header file for math" 38 # error "don't have header file for stdio" 42 using namespace Ipopt;
70 virtual bool get_starting_point(
Index n,
bool init_x,
Number*
x,
72 Index m,
bool init_lambda,
105 bool& use_x_scaling,
Index n,
107 bool& use_g_scaling,
Index m,
142 virtual bool d_cont_dydy_alwayszero()
const =0;
153 virtual bool b_cont_dydy_alwayszero()
const =0;
209 return (N_+2)*(N_+2) + j-1;
215 return (N_+2)*(N_+2) + N_ + j-1;
221 return (N_+2)*(N_+2) + 2*N_ + j-1;
227 return (N_+2)*(N_+2) + 3*N_ + j-1;
255 printf(
"N has to be at least 1.");
263 Number u_init = (ub_u+lb_u)/2.;
265 SetBaseParameters(N, alpha, lb_y, ub_y, lb_u, ub_u, u_init);
272 return 2. - 2.*(x1*(x1-1.) + x2*(x2-1.));
342 printf(
"N has to be at least 1.");
350 Number u_init = (ub_u+lb_u)/2.;
352 SetBaseParameters(N, alpha, lb_y, ub_y, lb_u, ub_u, u_init);
359 return 2. - 2.*(x1*(x1-1.) + x2*(x2-1.));
429 printf(
"N has to be at least 1.");
437 Number u_init = (ub_u+lb_u)/2.;
439 SetBaseParameters(N, alpha, lb_y, ub_y, lb_u, ub_u, u_init);
446 return 2. - 2.*(x1*(x1-1.) + x2*(x2-1.));
516 printf(
"N has to be at least 1.");
524 Number u_init = (ub_u+lb_u)/2.;
526 SetBaseParameters(N, alpha, lb_y, ub_y, lb_u, ub_u, u_init);
533 return 2. - 2.*(x1*(x1-1.) + x2*(x2-1.));
virtual Number d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
Number * x
Input: Starting point Output: Optimal solution.
virtual Number b_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
virtual Number d_cont_dydy(Number x1, Number x2, Number y) const
Second partial derivative of forcing function w.r.t y,y.
virtual Number b_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
Index ui0_index(Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij) on (0,1) x {0} boudnary...
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
Class for all IPOPT specific calculated quantities.
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow & jCol, 0 for C style, 1 for Fortran style
Index y_index(Index i, Index j) const
Translation of mesh point indices to NLP variable indices for y(x_ij)
Number ub_u_
overall upper bound on u
Number Number Index m
Number of constraints.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
virtual Number d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function w.r.t.
virtual ~MittelmannBndryCntrlNeum2()
Index u0j_index(Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij) on {0} x (0,1) boudnary.
virtual bool InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
virtual ~MittelmannBndryCntrlNeum1()
Number Number * g
Values of constraint at final point (output only - ignored if set to NULL)
Number Number Index Number Number Index Index Index Eval_F_CB Eval_G_CB Eval_Grad_F_CB Eval_Jac_G_CB Eval_H_CB eval_h
Callback function for evaluating Hessian of Lagrangian function.
double Number
Type of all numbers.
MittelmannBndryCntrlNeum1()
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function w.r.t.
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function w.r.t.
virtual Number b_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
Number Number Index Number Number Index Index Index Eval_F_CB Eval_G_CB Eval_Grad_F_CB eval_grad_f
Callback function for evaluating gradient of objective function.
Number lb_y_
overall lower bound on y
Number * y_d_
Array for the target profile for y.
Number ub_y_
overall upper bound on y
MittelmannBndryCntrlNeum3()
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 b_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_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_dydy(Number x1, Number x2, Number y) const
Second partial derivative of forcing function w.r.t y,y.
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
virtual Number b_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
Number Number Index Number Number Index Index Index Eval_F_CB Eval_G_CB Eval_Grad_F_CB Eval_Jac_G_CB eval_jac_g
Callback function for evaluating Jacobian of constraint functions.
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
virtual bool InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
virtual bool b_cont_dydy_alwayszero() const
returns true if second partial derivative of b_cont w.r.t.
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
Class implementating Example 7.
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
Class implementating Example 5.
virtual Number d_cont_dydy(Number x1, Number x2, Number y) const
Second partial derivative of forcing function w.r.t y,y.
virtual ~MittelmannBndryCntrlNeum3()
virtual Number d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
virtual Number d_cont_dydy(Number x1, Number x2, Number y) const
Second partial derivative of forcing function w.r.t y,y.
Class to organize all the data required by the algorithm.
Number Number Index Number Number Index Index Index Eval_F_CB Eval_G_CB eval_g
Callback function for evaluating constraint functions.
virtual Number b_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
virtual bool b_cont_dydy_alwayszero() const
returns true if second partial derivative of b_cont w.r.t.
Number u_init_
Initial value for the constrols u.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
int Index
Type of all indices of vectors, matrices etc.
virtual ~MittelmannBndryCntrlNeum4()
Index ui1_index(Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij) on (0,1) x {1} boudnary...
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
virtual Number b_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
Index u1j_index(Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij) on {1} x (0,1) boudnary.
Number Number * x_scaling
virtual Number d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
Class implementating Example 8.
Number x1_grid(Index i) const
Compute the grid coordinate for given index in x1 direction.
MittelmannBndryCntrlNeum2()
Class implemented the NLP discretization of.
Class implementating Example 6.
Base class for boundary control problems with Neumann boundary conditions, as formulated by Hans Mitt...
Number lb_u_
overall lower bound on u
Number Number Number * g_scaling
Number x2_grid(Index j) const
Compute the grid coordinate for given index in x2 direction.
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
virtual Number b_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
Index N_
Number of mesh points in one dimension (excluding boundary)
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
virtual bool b_cont_dydy_alwayszero() const
returns true if second partial derivative of b_cont w.r.t.
Number Number Index Number Number Index Index Index Eval_F_CB eval_f
Callback function for evaluating objective function.
MittelmannBndryCntrlNeum4()
Number alpha_
Weighting parameter for the control target deviation functional in the objective. ...
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function w.r.t.
virtual bool b_cont_dydy_alwayszero() const
returns true if second partial derivative of b_cont w.r.t.