The R Project SVN R-packages

Rev

Rev 4529 | Rev 4543 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4529 Rev 4530
Line 307... Line 307...
307
    return ans;
307
    return ans;
308
}
308
}
309
 
309
 
310
SEXP dgCMatrix_cholsol(SEXP x, SEXP y)
310
SEXP dgCMatrix_cholsol(SEXP x, SEXP y)
311
{
311
{
312
    cholmod_sparse *cx = as_cholmod_sparse(x);
312
    CHM_SP cx = AS_CHM_SP(x);
313
    cholmod_factor *L;
313
    CHM_FR L;
314
    cholmod_dense *cy = as_cholmod_dense(y), *rhs, *cAns;
314
    CHM_DN cy = AS_CHM_DN(y), rhs, cAns;
315
    double one[] = {1,0}, zero[] = {0,0};
315
    double one[] = {1,0}, zero[] = {0,0};
316
    SEXP ans = PROTECT(allocVector(VECSXP, 3));
316
    SEXP ans = PROTECT(allocVector(VECSXP, 3));
317
 
317
 
318
    if (cx->ncol < cx->nrow || cx->ncol <= 0)
318
    if (cx->ncol < cx->nrow || cx->ncol <= 0)
319
	error(_("dgCMatrix_cholsol requires a 'short, wide' rectangular matrix"));
319
	error(_("dgCMatrix_cholsol requires a 'short, wide' rectangular matrix"));
Line 338... Line 338...
338
    Memcpy(REAL(VECTOR_ELT(ans, 1)), (double*)(rhs->x), cx->nrow);
338
    Memcpy(REAL(VECTOR_ELT(ans, 1)), (double*)(rhs->x), cx->nrow);
339
 
339
 
340
    cholmod_free_factor(&L, &c);
340
    cholmod_free_factor(&L, &c);
341
    cholmod_free_dense(&rhs, &c);
341
    cholmod_free_dense(&rhs, &c);
342
    cholmod_free_dense(&cAns, &c);
342
    cholmod_free_dense(&cAns, &c);
343
    Free(cx); Free(cy);
-
 
344
    UNPROTECT(1);
343
    UNPROTECT(1);
345
    return ans;
344
    return ans;
346
}
345
}
347
 
346
 
348
 
347