Go to the documentation of this file.
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;
105 bool& use_x_scaling,
Index n,
107 bool& use_g_scaling,
Index m,
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.));
Number x1_grid(Index i) const
Compute the grid coordinate for given index in x1 direction.
virtual Number b_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
void SetBaseParameters(Index N, Number alpha, Number lb_y, Number ub_y, Number lb_u, Number ub_u, Number u_init)
Method for setting the internal parameters that define the problem.
Class to organize all the data required by the algorithm.
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function 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 Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function w.r.t.
MittelmannBndryCntrlNeumBase(const MittelmannBndryCntrlNeumBase &)
virtual Number d_cont(Number x1, Number x2, Number y) const =0
Forcing function for the elliptic equation.
Index u1j_index(Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij) on {1} x (0,...
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.
MittelmannBndryCntrlNeumBase()
Constructor.
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
Number u_init_
Initial value for the constrols u.
virtual bool b_cont_dydy_alwayszero() const
returns true if 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 lb_u_
overall lower bound on u
virtual Number d_cont_dydy(Number x1, Number x2, Number y) const
Second partial derivative of forcing function w.r.t y,y.
Class implemented the NLP discretization of.
virtual Number d_cont_dydy(Number x1, Number x2, Number y) const
Second partial derivative of forcing function w.r.t y,y.
Class implementating Example 7.
Class for all IPOPT specific calculated quantities.
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) const
Forcing function for the elliptic equation.
Class implementating Example 5.
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First partial derivative of forcing function w.r.t.
double Number
Type of all numbers.
MittelmannBndryCntrlNeum1 & operator=(const MittelmannBndryCntrlNeum1 &)
Number x2_grid(Index j) const
Compute the grid coordinate for given index in x2 direction.
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 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.
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
virtual ~MittelmannBndryCntrlNeum3()
MittelmannBndryCntrlNeum1()
virtual Number b_cont_du(Number x1, Number x2, Number y, Number u) const =0
First partial derivative of b_cont w.r.t.
Number * x
Input: Starting point Output: Optimal solution.
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.
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.
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 b_cont_dydy_alwayszero() const =0
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 Number d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
int Index
Type of all indices of vectors, matrices etc.
Number alpha_
Weighting parameter for the control target deviation functional in the objective.
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const
Function in Neuman boundary condition.
MittelmannBndryCntrlNeum3 & operator=(const MittelmannBndryCntrlNeum3 &)
Index N_
Number of mesh points in one dimension (excluding boundary)
virtual ~MittelmannBndryCntrlNeum2()
MittelmannBndryCntrlNeum4(const MittelmannBndryCntrlNeum4 &)
MittelmannBndryCntrlNeum2 & operator=(const MittelmannBndryCntrlNeum2 &)
virtual Number y_d_cont(Number x1, Number x2) const =0
Target profile function for y (and initial guess function)
virtual bool InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
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 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 Number b_cont_dy(Number x1, Number x2, Number y, Number u) const
First partial derivative of b_cont w.r.t.
MittelmannBndryCntrlNeum1(const MittelmannBndryCntrlNeum1 &)
virtual Number b_cont(Number x1, Number x2, Number y, Number u) const =0
Function in Neuman boundary condition.
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.
Index y_index(Index i, Index j) const
Translation of mesh point indices to NLP variable indices for y(x_ij)
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
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.
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
MittelmannBndryCntrlNeum3(const MittelmannBndryCntrlNeum3 &)
virtual bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value)
Method to return the objective value.
Base class for boundary control problems with Neumann boundary conditions, as formulated by Hans Mitt...
virtual Number b_cont_dy(Number x1, Number x2, Number y, Number u) const =0
First partial derivative of b_cont w.r.t.
MittelmannBndryCntrlNeum4()
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
virtual ~MittelmannBndryCntrlNeum1()
virtual bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g)
Method to return the constraint residuals.
virtual Number d_cont_dy(Number x1, Number x2, Number y) const
First 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 b_cont_dydy_alwayszero() const
returns true if second 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 ub_y_
overall upper bound on y
virtual Number d_cont_dydy(Number x1, Number x2, Number y) const =0
Second partial derivative of forcing function 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 d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
MittelmannBndryCntrlNeum4 & operator=(const MittelmannBndryCntrlNeum4 &)
Number Number Number * g_scaling
Number lb_y_
overall lower bound on y
Number ub_u_
overall upper bound on u
virtual bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f)
Method to return the gradient of the objective.
virtual Number d_cont_dy(Number x1, Number x2, Number y) const =0
First partial derivative of forcing function w.r.t.
Number Number * g
Values of constraint at final point (output only - ignored if set to NULL)
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.
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
MittelmannBndryCntrlNeum3()
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
Index u0j_index(Index j) const
Translation of mesh point indices to NLP variable indices for u(x_ij) on {0} x (0,...
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...
virtual ~MittelmannBndryCntrlNeumBase()
Default destructor.
virtual Number d_cont(Number x1, Number x2, Number y) const
Forcing function for the elliptic equation.
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const =0
Second partial derivative of b_cont w.r.t.
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
MittelmannBndryCntrlNeumBase & operator=(const MittelmannBndryCntrlNeumBase &)
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.
MittelmannBndryCntrlNeum2(const MittelmannBndryCntrlNeum2 &)
virtual ~MittelmannBndryCntrlNeum4()
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 InitializeProblem(Index N)
Initialize internal parameters, where N is a parameter determining the problme size.
Number * y_d_
Array for the target profile for y.
virtual Number b_cont_dydy(Number x1, Number x2, Number y, Number u) const
Second partial derivative of b_cont w.r.t.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow & jCol, 0 for C style, 1 for Fortran style
virtual bool d_cont_dydy_alwayszero() const
returns true if second partial derivative of d_cont w.r.t.
MittelmannBndryCntrlNeum2()
Class implementating Example 8.
Number Number * x_scaling
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 d_cont_dydy_alwayszero() const =0
returns true if second partial derivative of d_cont w.r.t.
virtual Number y_d_cont(Number x1, Number x2) const
Target profile function for y.
Number Number Index m
Number of constraints.
Class implementating Example 6.