Skip to content

Commit

Permalink
Check in osqp_ functions that workspace is created
Browse files Browse the repository at this point in the history
  • Loading branch information
gbanjac committed May 29, 2019
1 parent a5a9591 commit 2228996
Show file tree
Hide file tree
Showing 6 changed files with 343 additions and 99 deletions.
55 changes: 30 additions & 25 deletions docs/examples/setup-and-solve.rst
Expand Up @@ -116,39 +116,44 @@ C
c_int n = 2;
c_int m = 3;
// Problem settings
OSQPSettings * settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
// Exitflag
c_int exitflag = 0;
// Structures
OSQPWorkspace * work; // Workspace
OSQPData * data; // OSQPData
// Workspace structures
OSQPWorkspace *work;
OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
OSQPData *data = (OSQPData *)c_malloc(sizeof(OSQPData));
// Populate data
data = (OSQPData *)c_malloc(sizeof(OSQPData));
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
// Define Solver settings as default
osqp_set_default_settings(settings);
settings->alpha = 1.0; // Change alpha parameter
if (data) {
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
}
// Define solver settings as default
if (settings) {
osqp_set_default_settings(settings);
settings->alpha = 1.0; // Change alpha parameter
}
// Setup workspace
osqp_setup(&work, data, settings);
exitflag = osqp_setup(&work, data, settings);
// Solve Problem
osqp_solve(work);
// Cleanup
osqp_cleanup(work);
c_free(data->A);
c_free(data->P);
c_free(data);
c_free(settings);
return 0;
if (data) {
if (data->A) c_free(data->A);
if (data->P) c_free(data->P);
c_free(data);
}
if (settings) c_free(settings);
return exitflag;
};
48 changes: 26 additions & 22 deletions docs/examples/update-matrices.rst
Expand Up @@ -156,28 +156,31 @@ C
c_int n = 2;
c_int m = 3;
// Problem settings
OSQPSettings * settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
// Exitflag
c_int exitflag = 0;
// Structures
OSQPWorkspace * work; // Workspace
OSQPData * data; // OSQPData
// Workspace structures
OSQPWorkspace *work;
OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
OSQPData *data = (OSQPData *)c_malloc(sizeof(OSQPData));
// Populate data
data = (OSQPData *)c_malloc(sizeof(OSQPData));
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
if (data) {
data = (OSQPData *)c_malloc(sizeof(OSQPData));
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
}
// Define Solver settings as default
osqp_set_default_settings(settings);
if (settings) osqp_set_default_settings(settings);
// Setup workspace
osqp_setup(&work, data, settings);
exitflag = osqp_setup(&work, data, settings);
// Solve problem
osqp_solve(work);
Expand All @@ -191,11 +194,12 @@ C
osqp_solve(work);
// Cleanup
osqp_cleanup(work);
c_free(data->A);
c_free(data->P);
c_free(data);
c_free(settings);
return 0;
if (data) {
if (data->A) c_free(data->A);
if (data->P) c_free(data->P);
c_free(data);
}
if (settings) c_free(settings);
return exitflag;
};
51 changes: 27 additions & 24 deletions docs/examples/update-vectors.rst
Expand Up @@ -154,28 +154,30 @@ C
c_int n = 2;
c_int m = 3;
// Problem settings
OSQPSettings * settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
// Exitflag
c_int exitflag = 0;
// Structures
OSQPWorkspace * work; // Workspace
OSQPData * data; // OSQPData
// Workspace structures
OSQPWorkspace *work;
OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
OSQPData *data = (OSQPData *)c_malloc(sizeof(OSQPData));
// Populate data
data = (OSQPData *)c_malloc(sizeof(OSQPData));
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
// Define Solver settings as default
osqp_set_default_settings(settings);
if (data) {
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
}
// Define solver settings as default
if (settings) osqp_set_default_settings(settings);
// Setup workspace
osqp_setup(&work, data, settings);
exitflag = osqp_setup(&work, data, settings);
// Solve problem
osqp_solve(work);
Expand All @@ -188,11 +190,12 @@ C
osqp_solve(work);
// Cleanup
osqp_cleanup(work);
c_free(data->A);
c_free(data->P);
c_free(data);
c_free(settings);
return 0;
if (data) {
if (data->A) c_free(data->A);
if (data->P) c_free(data->P);
c_free(data);
}
if (settings) c_free(settings);
return exitflag;
};
46 changes: 25 additions & 21 deletions examples/osqp_demo.c
Expand Up @@ -17,38 +17,42 @@ int main(int argc, char **argv) {
c_int n = 2;
c_int m = 3;

// Problem settings
OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
// Exitflag
c_int exitflag = 0;

// Structures
OSQPWorkspace *work; // Workspace
OSQPData *data; // OSQPData
// Workspace structures
OSQPWorkspace *work;
OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));
OSQPData *data = (OSQPData *)c_malloc(sizeof(OSQPData));

// Populate data
data = (OSQPData *)c_malloc(sizeof(OSQPData));
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
if (data) {
data->n = n;
data->m = m;
data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);
data->q = q;
data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);
data->l = l;
data->u = u;
}

// Define solver settings as default
osqp_set_default_settings(settings);
if (settings) osqp_set_default_settings(settings);

// Setup workspace
osqp_setup(&work, data, settings);
exitflag = osqp_setup(&work, data, settings);

// Solve Problem
osqp_solve(work);

// Clean workspace
osqp_cleanup(work);
c_free(data->A);
c_free(data->P);
c_free(data);
c_free(settings);

return 0;
if (data) {
if (data->A) c_free(data->A);
if (data->P) c_free(data->P);
c_free(data);
}
if (settings) c_free(settings);

return exitflag;
}
16 changes: 15 additions & 1 deletion src/auxil.c
Expand Up @@ -797,7 +797,21 @@ c_int validate_data(const OSQPData *data) {
if (!data) {
# ifdef PRINTING
c_eprint("Missing data");
# endif /* ifdef PRINTING */
# endif
return 1;
}

if (!(data->P)) {
# ifdef PRINTING
c_eprint("Missing matrix P");
# endif
return 1;
}

if (!(data->A)) {
# ifdef PRINTING
c_eprint("Missing matrix A");
# endif
return 1;
}

Expand Down

0 comments on commit 2228996

Please sign in to comment.