18 #define CS_MAX(a,b) (((a) > (b)) ? (a) : (b))
20 #define CS_MIN(a,b) (((a) < (b)) ? (a) : (b))
22 #define CS_FLIP(i) (-(i)-2)
24 #define CS_UNFLIP(i) (((i) < 0) ? CS_FLIP(i) : (i))
26 #define CS_MARKED(w,j) (w [j] < 0)
28 #define CS_MARK(w,j) { w [j] = CS_FLIP (w [j]) ; }
30 #define CS_CSC(A) (A && (A->nz == -1))
32 #define CS_TRIPLET(A) (A && (A->nz >= 0))
36 static int proj_search = BCLS_PROJ_SEARCH_EXACT;
39 static int newton_step = BCLS_NEWTON_STEP_LSQR;
76 fprintf( io_file,
"%s", msg );
96 return (malloc (
CS_MAX (n,1) * size)) ;
104 return (calloc (
CS_MAX (n,1), size)) ;
114 if (!A)
return (NULL) ;
128 if (!A)
return (NULL) ;
132 A->
nz = triplet ? 0 : -1 ;
133 A->
p =
cs_malloc (triplet ? nzmax : n+1,
sizeof (
int)) ;
135 A->
x = values ?
cs_malloc (nzmax,
sizeof (
double)) : NULL ;
136 return ((!A->
p || !A->
i || (values && !A->
x)) ?
cs_spfree (A) : A) ;
144 void dload(
const int n,
const double alpha,
double x[] ) {
147 for (j = 0; j < n; j++) x[j] = alpha;
163 int Aprod(
int mode,
int m,
int n,
int nix,
int ix[],
164 double x[],
double y[],
void *UsrWrk ) {
170 cs *A = (
cs *)Wrk->
A;
174 int * acol = Wrk->
acol;
177 if (mode == BCLS_PROD_A) {
181 for (l = 0; l < nix; l++) {
185 if (!acol[j])
continue;
191 for (k = Ap[j]; k < Ap[j+1]; k++) {
204 else if (mode == BCLS_PROD_At) {
205 for (l = 0; l < nix; l++) {
215 for (k = Ap[j]; k < Ap[j+1]; k++) {
248 double * bl,
double * bu,
249 double beta,
double * c){
258 BCLS *ls = bcls_create_prob( m, n );
260 bcls_set_problem_data(ls, m, n,
Aprod, Wrk, beta, x, bb, c, bl, bu);
264 ls->optTol = ctrl->
optTol;
268 ls->proj_search = proj_search;
269 ls->newton_step = newton_step;
277 int err = bcls_solve_prob( ls );
282 printf(
"\n Solution\n --------\n");
283 printf(
"%4s %18s %1s %18s %1s %18s %18s\n",
284 "Var",
"Lower",
"",
"Value",
"",
"Upper",
"Gradient");
285 for (
int j = 0; j < n; j++) {
290 if (x[j] - bl[j] < ls->epsx) blActiv =
"=";
291 if (bu[j] - x[j] < ls->epsx) buActiv =
"=";
292 printf(
"%4d %18.11e %1s %18.11e %1s %18.11e %18.11e\n",
293 j+1, bl[j], blActiv, x[j], buActiv, bu[j], (ls->g)[j]);
296 printf(
"%d nnz solution values\n", nnzx);
301 err = bcls_free_prob( ls );