forked from osqp/osqp
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlin_sys.c
84 lines (66 loc) · 2.46 KB
/
lin_sys.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "lin_sys.h"
#include "qdldl_interface.h" // Include only this solver in the same directory
#ifdef ENABLE_MKL_PARDISO
# include "pardiso_interface.h"
# include "pardiso_loader.h"
#endif /* ifdef ENABLE_MKL_PARDISO */
#ifndef EMBEDDED
// Load linear system solver shared library
c_int load_linsys_solver(enum linsys_solver_type linsys_solver) {
switch (linsys_solver) {
case QDLDL_SOLVER:
// We do not load QDLDL solver. We have the source.
return 0;
# ifdef ENABLE_MKL_PARDISO
case MKL_PARDISO_SOLVER:
// Load Pardiso library
return lh_load_pardiso(OSQP_NULL);
# endif /* ifdef ENABLE_MKL_PARDISO */
default: // QDLDL
return 0;
}
}
// Unload linear system solver shared library
c_int unload_linsys_solver(enum linsys_solver_type linsys_solver) {
switch (linsys_solver) {
case QDLDL_SOLVER:
// We do not load QDLDL solver. We have the source.
return 0;
# ifdef ENABLE_MKL_PARDISO
case MKL_PARDISO_SOLVER:
// Unload Pardiso library
return lh_unload_pardiso();
# endif /* ifdef ENABLE_MKL_PARDISO */
default: // QDLDL
return 0;
}
}
// Initialize linear system solver structure
// NB: Only the upper triangular part of P is stuffed!
LinSysSolver* init_linsys_solver(const csc *P,
const csc *A,
c_float sigma,
c_float *rho_vec,
enum linsys_solver_type linsys_solver,
c_int polish) {
switch (linsys_solver) {
case QDLDL_SOLVER:
return (LinSysSolver *)init_linsys_solver_qdldl(P,
A,
sigma,
rho_vec,
polish);
# ifdef ENABLE_MKL_PARDISO
case MKL_PARDISO_SOLVER:
return (LinSysSolver *)init_linsys_solver_pardiso(P, A, sigma, rho_vec,
polish);
# endif /* ifdef ENABLE_MKL_PARDISO */
default: // QDLDL
return (LinSysSolver *)init_linsys_solver_qdldl(P,
A,
sigma,
rho_vec,
polish);
}
}
#endif /* ifndef EMBEDDED */