75 void casadi_daqp_work(
const casadi_daqp_prob<T1>* p, casadi_int* sz_arg, casadi_int* sz_res, casadi_int* sz_iw, casadi_int* sz_w) {
76 casadi_qp_work(p->
qp, sz_arg, sz_res, sz_iw, sz_w);
98 void casadi_daqp_init(
casadi_daqp_data<T1>* d,
const T1*** arg, T1*** res, casadi_int** iw, T1** w) {
107 d->
daqp.H = *w; *w += nx*nx;
108 d->
daqp.A = *w; *w += na*nx;
109 d->
daqp.blower = *w; *w += p->
qp->nz;
110 d->
daqp.bupper = *w; *w += p->
qp->nz;
111 d->
res.lam = *w; *w += p->
qp->nz;
112 d->
daqp.sense = (
int*) *iw; *iw += p->
qp->nz;
120 template<
typename T1>
121 int casadi_daqp_solve(
casadi_daqp_data<T1>* d,
const double** arg,
double** res, casadi_int* iw,
double* w) {
129 for (i=0;i<p_qp->
nx;++i) {
130 d->
daqp.sense[i] = d_qp->
lbx[i]==d_qp->
ubx[i] ? 5 : 0;
132 for (i=0;i<p_qp->
na;++i) {
133 d->
daqp.sense[p_qp->
nx+i] = d_qp->
lba[i]==d_qp->
uba[i] ? 5 : 0;
139 d->
work.settings =
const_cast<DAQPSettings*
>(&p->
settings);
141 casadi_densify(d->
qp->h, d->
prob->qp->sp_h, d->
daqp.H, 0);
142 casadi_densify(d->
qp->a, d->
prob->qp->sp_a, d->
daqp.A, 1);
143 casadi_copy(d_qp->
lbx, p_qp->
nx, d->
daqp.blower);
144 casadi_copy(d_qp->
lba, p_qp->
na, d->
daqp.blower+p_qp->
nx);
145 casadi_copy(d_qp->
ubx, p_qp->
nx, d->
daqp.bupper);
146 casadi_copy(d_qp->
uba, p_qp->
na, d->
daqp.bupper+p_qp->
nx);
147 d->
daqp.f =
const_cast<T1*
>(d_qp->
g);
149 flag = setup_daqp(&d->
daqp,&d->
work,&(d->
res.setup_time));
150 if (flag<0)
return 1;
152 casadi_copy(d->
res.lam, p_qp->
nx, d_qp->
lam_x);
153 casadi_copy(d->
res.lam+p_qp->
nx, p_qp->
na, d_qp->
lam_a);
154 if (d_qp->
f) *d_qp->
f = d->
res.fval;
155 d->
work.settings = 0;
156 free_daqp_workspace(&d->
work);
157 free_daqp_ldp(&d->
work);
160 d_qp->
success = d->
res.exitflag==EXIT_OPTIMAL;
const casadi_daqp_prob< T1 > * prob
casadi_qp_data< T1 > * qp
const casadi_qp_prob< T1 > * qp