100 template<
typename T1>
101 int casadi_madnlp_constr_jac_structure(libmad_int* I, libmad_int* J,
void* user_data)
104 const casadi_int *colind, *row;
109 casadi_int ncol = p->sp_a[1];
113 for (cc=0; cc<ncol; ++cc) {
114 for (el=colind[cc]; el<colind[cc+1]; ++el) {
124 template<
typename T1>
125 int casadi_madnlp_lag_hess_structure(libmad_int* I, libmad_int* J,
void* user_data)
128 const casadi_int *colind, *row;
133 casadi_int ncol = p->sp_h[1];
137 for (cc=0; cc<ncol; ++cc) {
138 for (el=colind[cc]; el<colind[cc+1]; ++el) {
148 template<
typename T1>
149 int casadi_madnlp_eval_constr_jac(
const T1* w, T1* res,
void* user_data) {
154 d_oracle->
arg[0] = w;
155 d_oracle->
arg[1] = d_nlp->p;
156 d_oracle->
res[0] = res;
158 return calc_function(&d->
prob->nlp_jac_g, d_oracle);
162 template<
typename T1>
163 int casadi_madnlp_eval_constr(
const T1* w, T1* res,
void* user_data) {
168 d_oracle->
arg[0] = w;
169 d_oracle->
arg[1] = d_nlp->p;
170 d_oracle->
res[0] = res;
172 return calc_function(&d->
prob->nlp_g, d_oracle);
176 template<
typename T1>
177 int casadi_madnlp_eval_obj_grad(
const T1* w, T1* res,
void* user_data) {
185 d_oracle->
arg[0] = w;
186 d_oracle->
arg[1] = d_nlp->p;
187 d_oracle->
res[0] = res;
188 return calc_function(&d->
prob->nlp_grad_f, d_oracle);
192 template<
typename T1>
193 int casadi_madnlp_eval_obj(
const T1* w, T1* res,
void* user_data) {
201 d_oracle->
arg[0] = w;
202 d_oracle->
arg[1] = d_nlp->p;
203 d_oracle->
res[0] = res;
204 return calc_function(&d->
prob->nlp_f, d_oracle);
208 template<
typename T1>
209 int casadi_madnlp_eval_lag_hess(T1 objective_scale,
const T1* w,
const T1* lam,
210 T1* res,
void* user_data){
216 d_oracle->
arg[0] = w;
217 d_oracle->
arg[1] = d_nlp->p;
218 d_oracle->
arg[2] = &objective_scale;
219 d_oracle->
arg[3] = lam;
220 d_oracle->
res[0] = res;
222 return calc_function(&d->
prob->nlp_hess_l, d_oracle);
235 template<
typename T1>
243 template<
typename T1>
245 madnlp_delete_solver(d->
solver);
247 madnlp_delete_stats(d->
stats);
253 template<
typename T1>
254 void casadi_madnlp_work(
const casadi_madnlp_prob<T1>* p, casadi_int* sz_arg, casadi_int* sz_res, casadi_int* sz_iw, casadi_int* sz_w) {
255 casadi_nlpsol_work(p->
nlp, sz_arg, sz_res, sz_iw, sz_w);
258 *sz_w = casadi_max(*sz_w, 2*(p->
nlp->nx+p->
nlp->ng));
262 template<
typename T1>
263 void casadi_madnlp_set_work(
casadi_madnlp_data<T1>* d,
const T1*** arg, T1*** res, casadi_int** iw, T1** w) {
272 template<
typename T1>
281 ret = libmad_nlpmodel_create(&(d->
cnlp_model),
283 p_nlp->
nx, p_nlp->
ng,
285 casadi_madnlp_constr_jac_structure<T1>,
286 casadi_madnlp_lag_hess_structure<T1>,
287 casadi_madnlp_eval_obj<T1>,
288 casadi_madnlp_eval_constr<T1>,
289 casadi_madnlp_eval_obj_grad<T1>,
290 casadi_madnlp_eval_constr_jac<T1>,
291 casadi_madnlp_eval_lag_hess<T1>,
294 if (ret != 0)
return -1;
296 ret = libmad_nlpmodel_set_numerics(d->
cnlp_model,
297 d_nlp->
z, d_nlp->
lam + p_nlp->
nx,
300 if (ret != 0)
return -2;
302 if (ret != 0)
return -3;
308 template<
typename T1>
315 madnlp_delete_solver(d->
solver);
316 if (ret!=0)
return -1;
319 ret = madnlp_get_obj(d->
stats, &(d_nlp->
objective));
if (ret != 0)
return -2;
321 ret = madnlp_get_solution(d->
stats, d_nlp->
z);
if (ret != 0)
return -2;
323 ret = madnlp_get_bound_multipliers(d->
stats, d_nlp->
lam);
if (ret != 0)
return -2;
325 ret = madnlp_get_constraints(d->
stats, d_nlp->
z + p_nlp->
nx);
if (ret != 0)
return -2;
327 ret = madnlp_get_multipliers(d->
stats, d_nlp->
lam + p_nlp->
nx);
if (ret != 0)
return -2;
330 ret = madnlp_get_success(d->
stats, &(success_b));
if (ret != 0)
return -2;
333 ret = madnlp_get_status(d->
stats, &status);
if (ret != 0)
return -2;
casadi_nlpsol_data< T1 > * nlp
int unified_return_status
MadNLPExecutionStats * stats
const casadi_madnlp_prob< T1 > * prob
OracleCallback nlp_hess_l
const casadi_nlpsol_prob< T1 > * nlp
OracleCallback nlp_grad_f