@@ -259,28 +259,28 @@ int main()
259259* print solution info
260260************************************************/
261261
262- printf ("\nHPIPM returned with flag %i.\n" , hpipm_status );
263- if (hpipm_status == 0 )
262+ printf ("\nHPIPM returned with flag %i.\n" , hpipm_status );
263+ if (hpipm_status == 0 )
264264 {
265- printf ("\n -> QP solved!\n" );
265+ printf ("\n -> QP solved!\n" );
266266 }
267267 else if (hpipm_status == 1 )
268268 {
269- printf ("\n -> Solver failed! Maximum number of iterations reached\n" );
269+ printf ("\n -> Solver failed! Maximum number of iterations reached\n" );
270270 }
271271 else if (hpipm_status == 2 )
272272 {
273- printf ("\n -> Solver failed! Minimum step lenght reached\n" );
273+ printf ("\n -> Solver failed! Minimum step lenght reached\n" );
274274 }
275275 else if (hpipm_status == 2 )
276276 {
277- printf ("\n -> Solver failed! NaN in computations\n" );
277+ printf ("\n -> Solver failed! NaN in computations\n" );
278278 }
279279 else
280280 {
281- printf ("\n -> Solver failed! Unknown return flag\n" );
281+ printf ("\n -> Solver failed! Unknown return flag\n" );
282282 }
283- printf ("\nAverage solution time over %i runs: %e [s]\n" , nrep , time_ipm );
283+ printf ("\nAverage solution time over %i runs: %e [s]\n" , nrep , time_ipm );
284284 printf ("\n\n" );
285285
286286/************************************************
@@ -390,7 +390,7 @@ int main()
390390
391391 double time_pred = hpipm_toc (& timer ) / nrep ;
392392
393- printf ("\nAverage prediction time over %i runs: %e [s]\n" , nrep , time_pred );
393+ printf ("\nAverage prediction time over %i runs: %e [s]\n" , nrep , time_pred );
394394 printf ("\n\n" );
395395
396396 // predicted solution
@@ -429,9 +429,62 @@ int main()
429429* sensitivity of solution of QP
430430************************************************/
431431
432+ #if 1
433+
434+ // new sol struct
435+ void * seed_mem = malloc (qp_sol_size );
436+ struct d_ocp_qp_sol seed ;
437+ d_ocp_qp_sol_create (& dim , & seed , seed_mem );
438+
439+ void * sens_mem = malloc (qp_sol_size );
440+ struct d_ocp_qp_sol sens ;
441+ d_ocp_qp_sol_create (& dim , & sens , sens_mem );
442+
443+ // set seeds to zero
444+ d_ocp_qp_sol_set_zero (& seed );
445+
446+ // set I to param
447+ double * seed_x0 = malloc (nx [0 ]* sizeof (double ));
448+ for (ii = 0 ; ii < nx [0 ]; ii ++ )
449+ seed_x0 [ii ] = 0.0 ;
450+ int index = 0 ;
451+ seed_x0 [index ] = 1.0 ;
452+ int stage = 0 ;
453+ d_ocp_qp_sol_set_lam_lbx (stage , seed_x0 , & seed );
454+ d_ocp_qp_sol_set_lam_ubx (stage , seed_x0 , & seed );
455+
456+ // sensitivity solution
457+ d_ocp_qp_ipm_sens (& qp , & seed , & sens , & arg , & workspace );
458+
459+ // u
460+ printf ("\nu_sens = \n" );
461+ for (ii = 0 ; ii <=N ; ii ++ )
462+ {
463+ d_ocp_qp_sol_get_u (ii , & sens , u );
464+ d_print_mat (1 , nu [ii ], u , 1 );
465+ }
466+
467+ // x
468+ printf ("\nx_sens = \n" );
469+ for (ii = 0 ; ii <=N ; ii ++ )
470+ {
471+ d_ocp_qp_sol_get_x (ii , & sens , x );
472+ d_print_mat (1 , nx [ii ], x , 1 );
473+ }
474+
475+ // pi
476+ printf ("\npi_sens = \n" );
477+ for (ii = 0 ; ii < N ; ii ++ )
478+ {
479+ d_ocp_qp_sol_get_pi (ii , & sens , pi );
480+ d_print_mat (1 , nx [ii + 1 ], pi , 1 );
481+ }
482+
483+ #else
484+
432485 void * qp2_mem = malloc (qp_size );
433486 struct d_ocp_qp qp2 ;
434- d_ocp_qp_create (& dim , & qp2 , qp1_mem );
487+ d_ocp_qp_create (& dim , & qp2 , qp2_mem );
435488
436489 // new sol struct
437490 void * qp_sol2_mem = malloc (qp_sol_size );
@@ -483,17 +536,21 @@ int main()
483536 d_print_mat (1 , nx [ii + 1 ], pi , 1 );
484537 }
485538
539+ #endif
540+
486541/************************************************
487542* free memory and return
488543************************************************/
489544
490- free (dim_mem );
491- free (qp_mem );
492- free (qp1_mem );
493- free (qp2_mem );
545+ free (dim_mem );
546+ free (qp_mem );
547+ free (qp1_mem );
548+ // free(qp2_mem);
494549 free (qp_sol_mem );
495550 free (qp_sol1_mem );
496- free (qp_sol2_mem );
551+ //free(qp_sol2_mem);
552+ free (seed_mem );
553+ free (sens_mem );
497554 free (ipm_arg_mem );
498555 free (ipm_mem );
499556
0 commit comments