10 #ifndef __MITTELMANNDISTRCNTRLNEUMA_HPP__ 11 #define __MITTELMANNDISTRCNTRLNEUMA_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;
71 virtual bool get_starting_point(
Index n,
bool init_x,
Number*
x,
106 bool& use_x_scaling,
Index n,
108 bool& use_g_scaling,
Index m,
146 virtual bool fint_cont_dydy_alwayszero()
const =0;
151 virtual bool fint_cont_dudu_alwayszero()
const =0;
156 virtual bool fint_cont_dydu_alwayszero()
const =0;
167 virtual bool d_cont_dydy_alwayszero()
const =0;
172 virtual bool d_cont_dudu_alwayszero()
const =0;
177 virtual bool d_cont_dydu_alwayszero()
const =0;
242 return (N_+2)*(N_+2) + (j-1) + (N_)*(i-1);
248 return (j-1) + N_*(i-1);
279 printf(
"N has to be at least 1.");
290 Number u_init = (ub_u+lb_u)/2.;
292 SetBaseParameters(N, lb_y, ub_y, lb_u, ub_u, b_0j, b_1j, b_i0, b_i1, u_init);
299 return sin(2.*pi_*x1)*sin(2.*pi_*x2);
304 Number diff_y = y-y_d_cont(x1,x2);
305 return 0.5*(diff_y*diff_y + alpha_*u*u);
310 return y-y_d_cont(x1,x2);
426 printf(
"N has to be at least 1.");
437 Number u_init = (ub_u+lb_u)/2.;
439 SetBaseParameters(N, lb_y, ub_y, lb_u, ub_u, b_0j, b_1j, b_i0, b_i1, u_init);
446 return sin(2.*pi_*x1)*sin(2.*pi_*x2);
451 Number diff_y = y-y_d_cont(x1,x2);
452 return 0.5*diff_y*diff_y;
457 return y-y_d_cont(x1,x2);
574 printf(
"N has to be at least 1.");
585 Number u_init = (ub_u+lb_u)/2.;
587 SetBaseParameters(N, lb_y, ub_y, lb_u, ub_u, b_0j, b_1j, b_i0, b_i1, u_init);
599 return u*(M_*u - K_*y);
610 return 2.*M_*u - K_*y;
648 return y*(u + b_*y - a(x1,x2));
653 return (u + 2.*b_*y -a(x1,x2));
710 return 7. + 4.*sin(2.*pi_*x1*x2);
virtual bool fint_cont_dydu_alwayszero() const
returns true if 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.
Number * x
Input: Starting point Output: Optimal solution.
const Number pi_
Value of pi (made available for convenience)
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 fint_cont(Number x1, Number x2, Number y, Number u) const
Integrant in objective function.
Class for all IPOPT specific calculated quantities.
Number * y_d_
Array for the target profile for y.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow & jCol, 0 for C style, 1 for Fortran style
virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
Class implementating Example 6.
virtual bool fint_cont_dydu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
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_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.
Number Number Index m
Number of constraints.
const Number pi_
Value of pi (made available for convenience)
virtual Number fint_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
Index y_index(Index i, Index j) const
Translation of mesh point indices to NLP variable indices for y(x_ij)
virtual Number fint_cont_du(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
virtual bool fint_cont_dudu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
Number x1_grid(Index i) const
Compute the grid coordinate for given index in x1 direction.
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.
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_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
Number ub_u_
overall upper bound on u
virtual bool fint_cont_dudu_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.
double Number
Type of all numbers.
Number lb_u_
overall lower bound on u
virtual Number fint_cont(Number x1, Number x2, Number y, Number u) const
Integrant in objective function.
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.
virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function 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_dydu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual bool fint_cont_dydy_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
Class implementating Example 5.
const Number pi_
Value of pi (made available for convenience)
virtual Number d_cont(Number x1, Number x2, Number y, Number u) const
Forcing function for the elliptic equation.
Base class for distributed control problems with homogeneous Neumann boundary conditions,...
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 fint_cont_dy(Number x1, Number x2, Number y, Number u) const
First 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.
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.
Number u_init_
Initial value for the constrols u.
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
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 fint_cont(Number x1, Number x2, Number y, Number u) const
Integrant in objective function.
virtual ~MittelmannDistCntrlNeumA1()
virtual Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
virtual ~MittelmannDistCntrlNeumA2()
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 Number fint_cont_dydy(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 Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
virtual Number d_cont_dydu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of forcing function 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 Number fint_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of fint_cont w.r.t.
Index pde_index(Index i, Index j) const
Translation of interior mesh point indices to the corresponding PDE constraint number.
Class implementating Example 4.
MittelmannDistCntrlNeumA2()
Class to organize all the data required by the algorithm.
virtual bool d_cont_dydy_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.
Number Number Index Number Number Index Index Index Eval_F_CB Eval_G_CB eval_g
Callback function for evaluating constraint functions.
Number x2_grid(Index i) const
Compute the grid coordinate for given index in x2 direction.
int Index
Type of all indices of vectors, matrices etc.
virtual Number d_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of forcing function w.r.t.
Number b_i0_
Value of beta function (in Neumann boundary condition) for (x1,0) bounray.
Number ub_y_
overall upper bound on y
virtual bool fint_cont_dudu_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
Number b_1j_
Value of beta function (in Neumann boundary condition) for (1,x2) bounray.
Number Number * x_scaling
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.
Number a(Number x1, Number x2) const
const Number alpha_
Value for parameter alpha in objective functin.
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
Class implemented the NLP discretization of.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
Number Number Number * g_scaling
Index N_
Number of mesh points in one dimension (excluding boundary)
virtual bool d_cont_dudu_alwayszero() const
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
First partial derivative of forcing function w.r.t.
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
virtual bool fint_cont_dydy_alwayszero() const
returns true if 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 Number fint_cont_dudu(Number x1, Number x2, Number y, Number u) const
Second partial derivative of fint_cont w.r.t.
Number lb_y_
overall lower bound on y
Number b_i1_
Value of beta function (in Neumann boundary condition) for (x1,1) bounray.
MittelmannDistCntrlNeumA3()
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_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 bool d_cont_dudu_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual bool fint_cont_dydy_alwayszero() const
returns true if second partial derivative of fint_cont w.r.t.
virtual ~MittelmannDistCntrlNeumA3()
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 y_d_cont(Number x1, Number x2) const
Profile function for initial y.
virtual bool fint_cont_dydu_alwayszero() const
returns true if second partial derivative of fint_cont 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.
Number Number Index Number Number Index Index Index Eval_F_CB eval_f
Callback function for evaluating objective function.
MittelmannDistCntrlNeumA1()
Number b_0j_
Value of beta function (in Neumann boundary condition) for (0,x2) bounray.
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 bool d_cont_dydu_alwayszero() const
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
First partial derivative of forcing function w.r.t.