76 #define P(k) ((Perm == NULL) ? (k) : Perm [k])
115 double *Yx, *Yz, *Bx, *Bz ;
116 Int k2, nk, p, k, j, nrow, ncol, d, dual, dj, j2 ;
124 k2 =
MIN (k1+ncols, ncol) ;
125 nk =
MAX (k2 - k1, 0) ;
151 for (j = k1 ; j < k2 ; j++)
155 for (k = 0 ; k < nrow ; k++)
158 Yx [k + j2] = Bx [p] ;
165 for (j = k1 ; j < k2 ; j++)
168 j2 = nrow * 2 * (j-k1) ;
169 for (k = 0 ; k < nrow ; k++)
172 Yx [k + j2 ] = Bx [2*p ] ;
173 Yx [k + j2 + nrow] = Bx [2*p+1] ;
180 for (j = k1 ; j < k2 ; j++)
183 j2 = nrow * 2 * (j-k1) ;
184 for (k = 0 ; k < nrow ; k++)
187 Yx [k + j2 ] = Bx [p] ;
188 Yx [k + j2 + nrow] = Bz [p] ;
203 for (j = k1 ; j < k2 ; j++)
206 j2 = nrow * 2 * (j-k1) ;
207 for (k = 0 ; k < nrow ; k++)
210 Yx [2*k + j2] = Bx [p] ;
211 Yx [2*k+1 + j2] = 0 ;
218 for (j = k1 ; j < k2 ; j++)
221 j2 = nrow * 2 * (j-k1) ;
222 for (k = 0 ; k < nrow ; k++)
225 Yx [2*k + j2] = Bx [2*p ] ;
226 Yx [2*k+1 + j2] = Bx [2*p+1] ;
233 for (j = k1 ; j < k2 ; j++)
236 j2 = nrow * 2 * (j-k1) ;
237 for (k = 0 ; k < nrow ; k++)
240 Yx [2*k + j2] = Bx [p] ;
241 Yx [2*k+1 + j2] = Bz [p] ;
262 for (j = k1 ; j < k2 ; j++)
266 for (k = 0 ; k < nrow ; k++)
269 Yx [k + j2] = Bx [2*p ] ;
270 Yz [k + j2] = Bx [2*p+1] ;
277 for (j = k1 ; j < k2 ; j++)
281 for (k = 0 ; k < nrow ; k++)
284 Yx [k + j2] = Bx [p] ;
285 Yz [k + j2] = Bz [p] ;
332 double *Yx, *Yz, *Xx, *Xz ;
333 Int k2, nk, p, k, j, nrow, ncol, d, dj, j2 ;
341 k2 =
MIN (k1+ncols, ncol) ;
342 nk =
MAX (k2 - k1, 0) ;
365 for (j = k1 ; j < k2 ; j++)
369 for (k = 0 ; k < nrow ; k++)
372 Xx [p] = Yx [k + j2] ;
379 for (j = k1 ; j < k2 ; j++)
382 j2 = nrow * 2 * (j-k1) ;
383 for (k = 0 ; k < nrow ; k++)
386 Xx [2*p ] = Yx [k + j2 ] ;
387 Xx [2*p+1] = Yx [k + j2 + nrow] ;
394 for (j = k1 ; j < k2 ; j++)
397 j2 = nrow * 2 * (j-k1) ;
398 for (k = 0 ; k < nrow ; k++)
401 Xx [p] = Yx [k + j2 ] ;
402 Xz [p] = Yx [k + j2 + nrow] ;
423 for (j = k1 ; j < k2 ; j++)
426 j2 = nrow * 2 * (j-k1) ;
427 for (k = 0 ; k < nrow ; k++)
430 Xx [2*p ] = Yx [2*k + j2] ;
431 Xx [2*p+1] = Yx [2*k+1 + j2] ;
438 for (j = k1 ; j < k2 ; j++)
441 j2 = nrow * 2 * (j-k1) ;
442 for (k = 0 ; k < nrow ; k++)
445 Xx [p] = Yx [2*k + j2] ;
446 Xz [p] = Yx [2*k+1 + j2] ;
467 for (j = k1 ; j < k2 ; j++)
471 for (k = 0 ; k < nrow ; k++)
474 Xx [2*p ] = Yx [k + j2] ;
475 Xx [2*p+1] = Yz [k + j2] ;
482 for (j = k1 ; j < k2 ; j++)
486 for (k = 0 ; k < nrow ; k++)
489 Xx [p] = Yx [k + j2] ;
490 Xz [p] = Yz [k + j2] ;
537 double *Yx, *Yz, *Bx, *Bz ;
538 Int k2, nk, p, k, j, nrow, ncol, d, dual, dj, j2 ;
546 k2 =
MIN (k1+ncols, ncol) ;
547 nk =
MAX (k2 - k1, 0) ;
573 for (j = k1 ; j < k2 ; j++)
577 for (k = 0 ; k < nrow ; k++)
580 Yx [j2 + k*nk] = Bx [p] ;
587 for (j = k1 ; j < k2 ; j++)
591 for (k = 0 ; k < nrow ; k++)
594 Yx [j2 + k*2*nk] = Bx [2*p ] ;
595 Yx [j2+1 + k*2*nk] = Bx [2*p+1] ;
602 for (j = k1 ; j < k2 ; j++)
606 for (k = 0 ; k < nrow ; k++)
609 Yx [j2 + k*2*nk] = Bx [p] ;
610 Yx [j2+1 + k*2*nk] = Bz [p] ;
625 for (j = k1 ; j < k2 ; j++)
629 for (k = 0 ; k < nrow ; k++)
632 Yx [j2 + k*2*nk] = Bx [p] ;
633 Yx [j2+1 + k*2*nk] = 0 ;
640 for (j = k1 ; j < k2 ; j++)
644 for (k = 0 ; k < nrow ; k++)
647 Yx [j2 + k*2*nk] = Bx [2*p ] ;
648 Yx [j2+1 + k*2*nk] = Bx [2*p+1] ;
655 for (j = k1 ; j < k2 ; j++)
659 for (k = 0 ; k < nrow ; k++)
662 Yx [j2 + k*2*nk] = Bx [p] ;
663 Yx [j2+1 + k*2*nk] = Bz [p] ;
678 for (j = k1 ; j < k2 ; j++)
682 for (k = 0 ; k < nrow ; k++)
685 Yx [j2 + k*nk] = Bx [p] ;
693 for (j = k1 ; j < k2 ; j++)
697 for (k = 0 ; k < nrow ; k++)
700 Yx [j2 + k*nk] = Bx [2*p ] ;
701 Yz [j2 + k*nk] = Bx [2*p+1] ;
708 for (j = k1 ; j < k2 ; j++)
712 for (k = 0 ; k < nrow ; k++)
715 Yx [j2 + k*nk] = Bx [p] ;
716 Yz [j2 + k*nk] = Bz [p] ;
764 double *Yx, *Yz, *Xx, *Xz ;
765 Int k2, nk, p, k, j, nrow, ncol, d, dj, j2 ;
773 k2 =
MIN (k1+ncols, ncol) ;
774 nk =
MAX (k2 - k1, 0) ;
797 for (j = k1 ; j < k2 ; j++)
801 for (k = 0 ; k < nrow ; k++)
804 Xx [p] = Yx [j2 + k*nk] ;
811 for (j = k1 ; j < k2 ; j++)
815 for (k = 0 ; k < nrow ; k++)
818 Xx [2*p ] = Yx [j2 + k*2*nk] ;
819 Xx [2*p+1] = Yx [j2+1 + k*2*nk] ;
826 for (j = k1 ; j < k2 ; j++)
830 for (k = 0 ; k < nrow ; k++)
833 Xx [p] = Yx [j2 + k*2*nk] ;
834 Xz [p] = Yx [j2+1 + k*2*nk] ;
855 for (j = k1 ; j < k2 ; j++)
859 for (k = 0 ; k < nrow ; k++)
862 Xx [2*p ] = Yx [j2 + k*2*nk] ;
863 Xx [2*p+1] = Yx [j2+1 + k*2*nk] ;
870 for (j = k1 ; j < k2 ; j++)
874 for (k = 0 ; k < nrow ; k++)
877 Xx [p] = Yx [j2 + k*2*nk] ;
878 Xz [p] = Yx [j2+1 + k*2*nk] ;
899 for (j = k1 ; j < k2 ; j++)
903 for (k = 0 ; k < nrow ; k++)
906 Xx [2*p ] = Yx [j2 + k*nk] ;
907 Xx [2*p+1] = Yz [j2 + k*nk] ;
914 for (j = k1 ; j < k2 ; j++)
918 for (k = 0 ; k < nrow ; k++)
921 Xx [p] = Yx [j2 + k*nk] ;
922 Xz [p] = Yz [j2 + k*nk] ;
957 Int n, nrhs, ncols, ctype, xtype, k1, nr, ytype ;
973 if (B->d < L->n || B->nrow != L->n)
1006 if (sys ==
CHOLMOD_P || sys == CHOLMOD_Pt)
1043 else if (sys == CHOLMOD_Pt)
1053 else if (L->is_super)
1084 blas_ok =
CHOLMOD(super_lsolve) (L, Y, E, Common) ;
1085 blas_ok = blas_ok &&
1086 CHOLMOD(super_ltsolve) (L, Y, E, Common) ;
1090 blas_ok =
CHOLMOD(super_lsolve) (L, Y, E, Common) ;
1094 blas_ok =
CHOLMOD(super_ltsolve) (L, Y, E, Common) ;
1130 nr =
MAX (4, nrhs) ;
1159 for (k1 = 0 ; k1 < nrhs ; k1 += ncols)
1174 r_simplicial_solver (sys, L, Y) ;
1178 c_simplicial_solver (sys, L, Y) ;
1182 z_simplicial_solver (sys, L, Y) ;
#define CHOLMOD_NOT_INSTALLED
static void amesos_iperm(cholmod_dense *Y, Int *Perm, Int k1, Int ncols, cholmod_dense *X)
#define RETURN_IF_NULL_COMMON(result)
static void amesos_iptrans(cholmod_dense *Y, Int *Perm, Int k1, Int ncols, cholmod_dense *X)
int CHOLMOD() dump_dense(cholmod_dense *X, char *name, cholmod_common *Common)
#define ASSERT(expression)
int CHOLMOD() free_dense(cholmod_dense **XHandle, cholmod_common *Common)
static void amesos_ptrans(cholmod_dense *B, Int *Perm, Int k1, Int ncols, cholmod_dense *Y)
cholmod_dense *CHOLMOD() solve(int sys, cholmod_factor *L, cholmod_dense *B, cholmod_common *Common)
#define RETURN_IF_NULL(A, result)
cholmod_dense *CHOLMOD() allocate_dense(size_t nrow, size_t ncol, size_t d, int xtype, cholmod_common *Common)
int CHOLMOD() dump_factor(cholmod_factor *L, char *name, cholmod_common *Common)
static void amesos_perm(cholmod_dense *B, Int *Perm, Int k1, Int ncols, cholmod_dense *Y)
#define ERROR(status, msg)
#define RETURN_IF_XTYPE_INVALID(A, xtype1, xtype2, result)