scs 0.4.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +1 -1
  5. data/lib/scs/ffi.rb +2 -2
  6. data/lib/scs/version.rb +1 -1
  7. data/lib/scs.rb +3 -3
  8. data/vendor/scs/CITATION.cff +2 -2
  9. data/vendor/scs/CMakeLists.txt +305 -171
  10. data/vendor/scs/Makefile +44 -19
  11. data/vendor/scs/README.md +1 -1
  12. data/vendor/scs/include/glbopts.h +34 -14
  13. data/vendor/scs/include/linsys.h +8 -8
  14. data/vendor/scs/include/scs.h +6 -2
  15. data/vendor/scs/include/scs_blas.h +4 -0
  16. data/vendor/scs/include/scs_types.h +3 -1
  17. data/vendor/scs/include/scs_work.h +9 -8
  18. data/vendor/scs/include/util.h +1 -1
  19. data/vendor/scs/linsys/cpu/direct/private.c +32 -153
  20. data/vendor/scs/linsys/cpu/direct/private.h +6 -6
  21. data/vendor/scs/linsys/cpu/indirect/private.c +9 -22
  22. data/vendor/scs/linsys/cpu/indirect/private.h +4 -2
  23. data/vendor/scs/linsys/csparse.c +140 -12
  24. data/vendor/scs/linsys/csparse.h +10 -17
  25. data/vendor/scs/linsys/gpu/gpu.c +4 -4
  26. data/vendor/scs/linsys/gpu/gpu.h +1 -1
  27. data/vendor/scs/linsys/gpu/indirect/private.c +15 -26
  28. data/vendor/scs/linsys/mkl/direct/private.c +182 -0
  29. data/vendor/scs/linsys/mkl/direct/private.h +38 -0
  30. data/vendor/scs/linsys/scs_matrix.c +11 -5
  31. data/vendor/scs/scs.mk +40 -27
  32. data/vendor/scs/src/cones.c +17 -161
  33. data/vendor/scs/src/exp_cone.c +399 -0
  34. data/vendor/scs/src/linalg.c +17 -3
  35. data/vendor/scs/src/normalize.c +4 -2
  36. data/vendor/scs/src/rw.c +107 -38
  37. data/vendor/scs/src/scs.c +103 -69
  38. data/vendor/scs/src/util.c +12 -3
  39. data/vendor/scs/test/minunit.h +2 -1
  40. data/vendor/scs/test/problem_utils.h +2 -1
  41. data/vendor/scs/test/problems/hs21_tiny_qp.h +1 -1
  42. data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +8 -3
  43. data/vendor/scs/test/problems/max_ent +0 -0
  44. data/vendor/scs/test/problems/max_ent.h +8 -0
  45. data/vendor/scs/test/problems/mpc_bug.h +19 -0
  46. data/vendor/scs/test/problems/mpc_bug1 +0 -0
  47. data/vendor/scs/test/problems/mpc_bug2 +0 -0
  48. data/vendor/scs/test/problems/mpc_bug3 +0 -0
  49. data/vendor/scs/test/problems/random_prob.h +2 -43
  50. data/vendor/scs/test/problems/rob_gauss_cov_est.h +7 -2
  51. data/vendor/scs/test/problems/test_exp_cone.h +84 -0
  52. data/vendor/scs/test/problems/test_prob_from_data_file.h +73 -0
  53. data/vendor/scs/test/run_from_file.c +7 -1
  54. data/vendor/scs/test/run_tests.c +25 -9
  55. metadata +14 -3
data/vendor/scs/Makefile CHANGED
@@ -1,7 +1,7 @@
1
1
  # MAKEFILE for scs
2
2
  include scs.mk
3
3
 
4
- SCS_OBJECTS = src/util.o src/cones.o src/aa.o src/rw.o src/linalg.o src/ctrlc.o src/scs_version.o src/normalize.o
4
+ SCS_OBJECTS = src/util.o src/cones.o src/exp_cone.o src/aa.o src/rw.o src/linalg.o src/ctrlc.o src/scs_version.o src/normalize.o
5
5
  SCS_O = src/scs.o
6
6
  SCS_INDIR_O = src/scs_indir.o
7
7
 
@@ -19,7 +19,7 @@ TARGETS = $(OUT)/demo_socp_indirect $(OUT)/demo_socp_direct $(OUT)/run_from_file
19
19
  default: $(TARGETS) $(OUT)/libscsdir.a $(OUT)/libscsindir.a $(OUT)/libscsdir.$(SHARED) $(OUT)/libscsindir.$(SHARED)
20
20
  @echo "****************************************************************************************"
21
21
  @echo "Successfully compiled scs, copyright Brendan O'Donoghue 2012."
22
- @echo "To test, type '$(OUT)/demo_socp_direct' to solve a random SOCP."
22
+ @echo "To test, run 'make test' and then '$(OUT)/run_tests_direct'."
23
23
  @echo "**********************************************************************************"
24
24
  ifneq ($(USE_LAPACK), 0)
25
25
  @echo "Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs"
@@ -41,6 +41,7 @@ $(SCS_INDIR_O): src/scs.c $(INC_FILES)
41
41
 
42
42
  src/util.o : src/util.c $(INC_FILES)
43
43
  src/cones.o : src/cones.c $(INC_FILES)
44
+ src/exp_cone.o : src/exp_cone.c $(INC_FILES)
44
45
  src/aa.o : src/aa.c $(INC_FILES)
45
46
  src/rw.o : src/rw.c $(INC_FILES)
46
47
  src/linalg.o: src/linalg.c $(INC_FILES)
@@ -49,6 +50,7 @@ src/scs_version.o: src/scs_version.c $(INC_FILES)
49
50
 
50
51
  $(DIRSRC)/private.o: $(DIRSRC)/private.c $(DIRSRC)/private.h
51
52
  $(INDIRSRC)/indirect/private.o: $(INDIRSRC)/private.c $(INDIRSRC)/private.h
53
+ $(MKLSRC)/private.o: $(MKLSRC)/private.c $(MKLSRC)/private.h
52
54
  $(LINSYS)/scs_matrix.o: $(LINSYS)/scs_matrix.c $(LINSYS)/scs_matrix.h
53
55
  $(LINSYS)/csparse.o: $(LINSYS)/csparse.c $(LINSYS)/csparse.h
54
56
 
@@ -62,45 +64,68 @@ $(OUT)/libscsindir.a: $(SCS_INDIR_O) $(SCS_OBJECTS) $(INDIRSRC)/private.o $(LINS
62
64
  $(ARCHIVE) $@ $^
63
65
  - $(RANLIB) $@
64
66
 
67
+ $(OUT)/libscsmkl.a: $(SCS_O) $(SCS_OBJECTS) $(MKLSRC)/private.o $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o
68
+ mkdir -p $(OUT)
69
+ $(ARCHIVE) $@ $^
70
+ - $(RANLIB) $@
71
+
65
72
  $(OUT)/libscsdir.$(SHARED): $(SCS_O) $(SCS_OBJECTS) $(DIRSRC)/private.o $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o
66
73
  mkdir -p $(OUT)
67
- $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS)
74
+ $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS)
68
75
 
69
76
  $(OUT)/libscsindir.$(SHARED): $(SCS_INDIR_O) $(SCS_OBJECTS) $(INDIRSRC)/private.o $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o
70
77
  mkdir -p $(OUT)
71
- $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS)
78
+ $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS)
79
+
80
+ $(OUT)/libscsmkl.$(SHARED): $(SCS_O) $(SCS_OBJECTS) $(MKLSRC)/private.o $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o
81
+ mkdir -p $(OUT)
82
+ $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(MKLFLAGS)
72
83
 
73
84
  $(OUT)/demo_socp_direct: test/random_socp_prob.c $(OUT)/libscsdir.a
74
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
85
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS)
75
86
 
76
87
  $(OUT)/demo_socp_indirect: test/random_socp_prob.c $(OUT)/libscsindir.a
77
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
88
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS)
89
+
90
+ $(OUT)/demo_socp_mkl: test/random_socp_prob.c $(OUT)/libscsmkl.a
91
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(MKLFLAGS)
78
92
 
79
93
  $(OUT)/run_from_file_direct: test/run_from_file.c $(OUT)/libscsdir.a
80
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
94
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS)
81
95
 
82
96
  $(OUT)/run_from_file_indirect: test/run_from_file.c $(OUT)/libscsindir.a
83
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
97
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS)
84
98
 
85
99
  $(OUT)/run_from_file_gpu_indirect: test/run_from_file.c $(OUT)/libscsgpuindir.a
86
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(CULDFLAGS)
100
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS)
87
101
 
88
102
  # basic testing
89
103
  .PHONY: test
90
104
  test: $(OUT)/run_tests_indirect $(OUT)/run_tests_direct
91
105
  $(OUT)/run_tests_indirect: test/run_tests.c $(OUT)/libscsindir.a
92
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -Itest
106
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) -Itest
93
107
  $(OUT)/run_tests_direct: test/run_tests.c $(OUT)/libscsdir.a
94
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -Itest
108
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) -Itest
109
+ $(OUT)/run_tests_mkl: test/run_tests.c $(OUT)/libscsmkl.a
110
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(MKLFLAGS) -Itest
111
+
95
112
 
96
113
  .PHONY: test_gpu
97
114
  test_gpu: $(OUT)/run_tests_gpu_indirect # $(OUT)/run_tests_gpu_direct
98
115
 
116
+ .PHONY: mkl
117
+ mkl: mklroot $(OUT)/libscsmkl.a $(OUT)/libscsmkl.$(SHARED) $(OUT)/run_tests_mkl $(OUT)/demo_socp_mkl
118
+ mklroot:
119
+ ifndef MKLROOT
120
+ $(error MKLROOT is undefined, set MKLROOT to the MKL install location)
121
+ endif
122
+
123
+
99
124
  $(OUT)/run_tests_gpu_indirect: test/run_tests.c $(OUT)/libscsgpuindir.a
100
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(CULDFLAGS) -Itest
125
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS) -Itest
101
126
 
102
127
  # $(OUT)/run_tests_gpu_direct: test/run_tests.c $(OUT)/libscsgpudir.a
103
- # $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(CULDFLAGS) -Itest
128
+ # $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS) -Itest
104
129
 
105
130
  # REQUIRES GPU AND CUDA INSTALLED
106
131
  gpu: gpu_indirect # gpu_direct
@@ -119,16 +144,16 @@ $(GPUINDIR)/private.o: $(GPUINDIR)/private.c
119
144
 
120
145
  # $(OUT)/libscsgpudir.$(SHARED): $(SCS_O) $(SCS_OBJECTS) $(GPUDIR)/private.o $(AMD_OBJS) $(LINSYS)/scs_matrix.o $(LINSYS)/gpu/gpu.o
121
146
  # mkdir -p $(OUT)
122
- # $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(CULDFLAGS)
147
+ # $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS)
123
148
 
124
149
  # $(OUT)/libscsgpudir.a: $(SCS_INDIR_O) $(SCS_OBJECTS) $(GPUDIR)/private.o $(AMD_OBJS) $(LINSYS)/scs_matrix.o $(LINSYS)/gpu/gpu.o
125
150
  # mkdir -p $(OUT)
126
151
  # $(ARCHIVE) $@ $^
127
152
  # - $(RANLIB) $@
128
153
 
129
- $(OUT)/libscsgpuindir.$(SHARED): $(SCS_O) $(SCS_OBJECTS) $(GPUINDIR)/private.o $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o $(LINSYS)/gpu/gpu.o
154
+ $(OUT)/libscsgpuindir.$(SHARED): $(SCS_INDIR_O) $(SCS_OBJECTS) $(GPUINDIR)/private.o $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o $(LINSYS)/gpu/gpu.o
130
155
  mkdir -p $(OUT)
131
- $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(CULDFLAGS)
156
+ $(CC) $(CFLAGS) -shared -Wl,$(SONAME),$(@:$(OUT)/%=%) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS)
132
157
 
133
158
  $(OUT)/libscsgpuindir.a: $(SCS_INDIR_O) $(SCS_OBJECTS) $(GPUINDIR)/private.o $(LINSYS)/scs_matrix.o $(LINSYS)/csparse.o $(LINSYS)/gpu/gpu.o
134
159
  mkdir -p $(OUT)
@@ -136,14 +161,14 @@ $(OUT)/libscsgpuindir.a: $(SCS_INDIR_O) $(SCS_OBJECTS) $(GPUINDIR)/private.o $(L
136
161
  - $(RANLIB) $@
137
162
 
138
163
  # $(OUT)/demo_socp_gpu_direct: test/random_socp_prob.c $(OUT)/libscsgpudir.a
139
- # $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(CULDFLAGS)
164
+ # $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS)
140
165
 
141
166
  $(OUT)/demo_socp_gpu_indirect: test/random_socp_prob.c $(OUT)/libscsgpuindir.a
142
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(CULDFLAGS)
167
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(BLASLDFLAGS) $(CULDFLAGS)
143
168
 
144
169
  .PHONY: clean purge
145
170
  clean:
146
- @rm -rf $(TARGETS) $(SCS_O) $(SCS_INDIR_O) $(SCS_OBJECTS) $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/*.o $(DIRSRC)/*.o $(INDIRSRC)/*.o $(GPUDIR)/*.o $(GPUINDIR)/*.o $(LINSYS)/gpu/*.o
171
+ @rm -rf $(TARGETS) $(SCS_O) $(SCS_INDIR_O) $(SCS_OBJECTS) $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/*.o $(DIRSRC)/*.o $(INDIRSRC)/*.o $(MKLSRC)/*.o $(GPUDIR)/*.o $(GPUINDIR)/*.o $(LINSYS)/gpu/*.o
147
172
  @rm -rf $(OUT)/*.dSYM
148
173
  @rm -rf matlab/*.mex*
149
174
  @rm -rf .idea
data/vendor/scs/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
  SCS (`splitting conic solver`) is a numerical optimization package for solving
11
- large-scale convex cone problems. The current version is `3.2.0`.
11
+ large-scale convex cone problems. The current version is `3.2.6`.
12
12
 
13
13
  The full documentation is available [here](https://www.cvxgrp.org/scs/).
14
14
 
@@ -12,16 +12,17 @@ extern "C" {
12
12
  #define SCS(x) _scs_##x
13
13
  #endif
14
14
 
15
- /* SCS VERSION NUMBER ---------------------------------------------- */
15
+ /* SCS VERSION NUMBER ---------------------------------------------- */
16
16
  /* string literals automatically null-terminated */
17
- #define SCS_VERSION ("3.2.0")
17
+ #define SCS_VERSION ("3.2.6")
18
18
 
19
19
  /* verbosity level */
20
20
  #ifndef VERBOSITY
21
21
  #define VERBOSITY (0)
22
22
  #endif
23
23
 
24
- /* DEFAULT SOLVER PARAMETERS AND SETTINGS -------------------------- */
24
+ /* DEFAULT SOLVER PARAMETERS AND SETTINGS -------------------------- */
25
+ /* If you update any of these you must update the documentation manually */
25
26
  #define MAX_ITERS (100000)
26
27
  #define EPS_REL (1E-4)
27
28
  #define EPS_ABS (1E-4)
@@ -38,15 +39,15 @@ extern "C" {
38
39
  #define WRITE_DATA_FILENAME (0)
39
40
  #define LOG_CSV_FILENAME (0)
40
41
  #define TIME_LIMIT_SECS (0.)
41
-
42
- /* redefine printfs and memory allocators as needed */
42
+ /* Tolerance to check negativity condition for infeasibility */
43
+ #define INFEAS_NEGATIVITY_TOL (1e-9)
44
+ /* redefine printfs as needed */
45
+ #if NO_PRINTING > 0 /* Disable all printing */
46
+ #define scs_printf(...) /* No-op */
47
+ #else
43
48
  #ifdef MATLAB_MEX_FILE
44
49
  #include "mex.h"
45
50
  #define scs_printf mexPrintf
46
- #define scs_free mxFree
47
- #define scs_malloc mxMalloc
48
- #define scs_calloc mxCalloc
49
- #define scs_realloc mxRealloc
50
51
  #elif defined PYTHON
51
52
  #include <Python.h>
52
53
  /* see:
@@ -58,6 +59,27 @@ extern "C" {
58
59
  PySys_WriteStdout(__VA_ARGS__); \
59
60
  PyGILState_Release(gilstate); \
60
61
  }
62
+ #elif defined R_LANG
63
+ #include <R_ext/Print.h> /* Rprintf etc */
64
+ #include <stdio.h>
65
+ #include <stdlib.h>
66
+ #define scs_printf Rprintf
67
+ #else
68
+ #include <stdio.h>
69
+ #include <stdlib.h>
70
+ #define scs_printf printf
71
+ #endif
72
+ #endif
73
+
74
+ /* redefine memory allocators as needed */
75
+ #ifdef MATLAB_MEX_FILE
76
+ #include "mex.h"
77
+ #define scs_free mxFree
78
+ #define scs_malloc mxMalloc
79
+ #define scs_calloc mxCalloc
80
+ #define scs_realloc mxRealloc
81
+ #elif defined PYTHON
82
+ #include <Python.h>
61
83
  #if PY_MAJOR_VERSION >= 3
62
84
  #define scs_free PyMem_RawFree
63
85
  #define scs_malloc PyMem_RawMalloc
@@ -74,10 +96,8 @@ static inline void *scs_calloc(size_t count, size_t size) {
74
96
  }
75
97
  #endif
76
98
  #elif defined R_LANG
77
- #include <R_ext/Print.h> /* Rprintf etc */
78
99
  #include <stdio.h>
79
100
  #include <stdlib.h>
80
- #define scs_printf Rprintf
81
101
  #define scs_free free
82
102
  #define scs_malloc malloc
83
103
  #define scs_calloc calloc
@@ -85,7 +105,6 @@ static inline void *scs_calloc(size_t count, size_t size) {
85
105
  #else
86
106
  #include <stdio.h>
87
107
  #include <stdlib.h>
88
- #define scs_printf printf
89
108
  #define scs_free free
90
109
  #define scs_malloc malloc
91
110
  #define scs_calloc calloc
@@ -144,8 +163,9 @@ static inline void *scs_calloc(size_t count, size_t size) {
144
163
  /* how many iterations between heuristic residual rescaling */
145
164
  #define RESCALING_MIN_ITERS (100)
146
165
 
147
- #define EPS_TOL (1E-18)
148
- #define SAFEDIV_POS(X, Y) ((Y) < EPS_TOL ? ((X) / EPS_TOL) : (X) / (Y))
166
+ #define _DIV_EPS_TOL (1E-18)
167
+ #define SAFEDIV_POS(X, Y) \
168
+ ((Y) < _DIV_EPS_TOL ? ((X) / _DIV_EPS_TOL) : (X) / (Y))
149
169
 
150
170
  #if VERBOSITY > 0
151
171
  #define PRINT_INTERVAL (1)
@@ -23,15 +23,15 @@ extern "C" {
23
23
  * @return Linear system solver workspace.
24
24
  *
25
25
  */
26
- ScsLinSysWork *SCS(init_lin_sys_work)(const ScsMatrix *A, const ScsMatrix *P,
27
- const scs_float *diag_r);
26
+ ScsLinSysWork *scs_init_lin_sys_work(const ScsMatrix *A, const ScsMatrix *P,
27
+ const scs_float *diag_r);
28
28
 
29
29
  /**
30
30
  * Frees `ScsLinSysWork` structure and associated allocated memory.
31
31
  *
32
32
  * @param w Linear system private workspace.
33
33
  */
34
- void SCS(free_lin_sys_work)(ScsLinSysWork *w);
34
+ void scs_free_lin_sys_work(ScsLinSysWork *w);
35
35
 
36
36
  /**
37
37
  * Solves the linear system as required by SCS at each iteration:
@@ -48,11 +48,11 @@ void SCS(free_lin_sys_work)(ScsLinSysWork *w);
48
48
  * @param b Right hand side, contains solution at the end.
49
49
  * @param s Contains warm-start (may be NULL).
50
50
  * @param tol Tolerance required for the system solve.
51
- * @return status < 0 indicates failure.
51
+ * @return status != 0 indicates failure.
52
52
  *
53
53
  */
54
- scs_int SCS(solve_lin_sys)(ScsLinSysWork *w, scs_float *b, const scs_float *s,
55
- scs_float tol);
54
+ scs_int scs_solve_lin_sys(ScsLinSysWork *w, scs_float *b, const scs_float *s,
55
+ scs_float tol);
56
56
  /**
57
57
  * Update the linsys workspace when `R` is changed. For example, a
58
58
  * direct method for solving the linear system might need to update the
@@ -62,14 +62,14 @@ scs_int SCS(solve_lin_sys)(ScsLinSysWork *w, scs_float *b, const scs_float *s,
62
62
  * @param new_diag_r Updated `diag_r`, diagonal entries of R.
63
63
  *
64
64
  */
65
- void SCS(update_lin_sys_diag_r)(ScsLinSysWork *w, const scs_float *new_diag_r);
65
+ void scs_update_lin_sys_diag_r(ScsLinSysWork *w, const scs_float *new_diag_r);
66
66
 
67
67
  /**
68
68
  * Name of the linear solver.
69
69
  *
70
70
  * @return name of method.
71
71
  */
72
- const char *SCS(get_lin_sys_method)(void);
72
+ const char *scs_get_lin_sys_method(void);
73
73
 
74
74
  #ifdef __cplusplus
75
75
  }
@@ -1,5 +1,9 @@
1
- /* This file contains the outward facing SCS API. */
2
- /* It includes all the input/output data structs and the API functions. */
1
+ /*
2
+ * Public header containing the outward facing SCS API. It includes all the
3
+ * input/output data structs and the API functions. Make sure this file and
4
+ * `scs_types.h` are somewhere appropriate and then use `#include "scs.h"` to
5
+ * access the SCS public API.
6
+ */
3
7
 
4
8
  #ifndef SCS_H_GUARD
5
9
  #define SCS_H_GUARD
@@ -17,8 +17,10 @@ extern "C" {
17
17
  /* single or double precision */
18
18
  #ifndef SFLOAT
19
19
  #define BLAS(x) d##x
20
+ #define BLASI(x) id##x
20
21
  #else
21
22
  #define BLAS(x) s##x
23
+ #define BLASI(x) is##x
22
24
  #endif
23
25
  #else
24
26
  /* this extra indirection is needed for BLASSUFFIX to work correctly as a
@@ -28,8 +30,10 @@ extern "C" {
28
30
  /* single or double precision */
29
31
  #ifndef SFLOAT
30
32
  #define BLAS(x) stitch__(d, x, BLASSUFFIX)
33
+ #define BLASI(x) stitch__(id, x, BLASSUFFIX)
31
34
  #else
32
35
  #define BLAS(x) stitch__(s, x, BLASSUFFIX)
36
+ #define BLASI(x) stitch__(is, x, BLASSUFFIX)
33
37
  #endif
34
38
  #endif
35
39
 
@@ -1,5 +1,7 @@
1
1
  /*
2
- * Definitions of primitive types used in SCS.
2
+ * Pulic header including definitions of primitive types used in SCS.
3
+ * Make sure this file and `scs.h` are somewhere appropriate and then use
4
+ * `#include "scs.h"` to access the SCS public API.
3
5
  */
4
6
 
5
7
  #ifndef SCS_TYPES_H_GUARD
@@ -54,14 +54,15 @@ struct SCS_WORK {
54
54
  scs_float *g; /* g = (I + M)^{-1} h */
55
55
  scs_float *lin_sys_warm_start; /* linear system warm-start (indirect only) */
56
56
  scs_float *diag_r; /* vector of R matrix diagonals (affects cone proj) */
57
- scs_float *b_orig, *c_orig; /* original unnormalized b and c vectors */
58
- AaWork *accel; /* struct for acceleration workspace */
59
- ScsData *d; /* Problem data deep copy NORMALIZED */
60
- ScsCone *k; /* Problem cone deep copy */
61
- ScsSettings *stgs; /* contains solver settings specified by user */
62
- ScsLinSysWork *p; /* struct populated by linear system solver */
63
- ScsScaling *scal; /* contains the re-scaling data */
64
- ScsConeWork *cone_work; /* workspace for the cone projection step */
57
+ scs_float *b_orig, *c_orig; /* original unnormalized b and c vectors */
58
+ scs_float nm_b_orig, nm_c_orig; /* unnormalized NORM(b), NORM(c) */
59
+ AaWork *accel; /* struct for acceleration workspace */
60
+ ScsData *d; /* Problem data deep copy NORMALIZED */
61
+ ScsCone *k; /* Problem cone deep copy */
62
+ ScsSettings *stgs; /* contains solver settings specified by user */
63
+ ScsLinSysWork *p; /* struct populated by linear system solver */
64
+ ScsScaling *scal; /* contains the re-scaling data */
65
+ ScsConeWork *cone_work; /* workspace for the cone projection step */
65
66
  /* normalized and unnormalized residuals */
66
67
  ScsResiduals *r_orig, *r_normalized;
67
68
  /* track x,y,s as alg progresses, tau *not* divided out */
@@ -11,7 +11,7 @@ extern "C" {
11
11
  #include <stdlib.h>
12
12
 
13
13
  /* timing code courtesy of A. Domahidi */
14
- #if (defined NOTIMER)
14
+ #if (defined NO_TIMER)
15
15
  typedef void *SCS(timer);
16
16
  #elif (defined _WIN32 || defined _WIN64 || defined _WINDLL)
17
17
  /* Use Windows QueryPerformanceCounter for timing */