/* ========================================================================== */
/* === Tcov/huge ============================================================ */
/* ========================================================================== */
/* -----------------------------------------------------------------------------
* CHOLMOD/Tcov Module. Copyright (C) 2005-2006, Timothy A. Davis
* The CHOLMOD/Tcov Module is licensed under Version 2.0 of the GNU
* General Public License. See gpl.txt for a text of the license.
* CHOLMOD is also available under other licenses; contact authors for details.
* http://www.cise.ufl.edu/research/sparse
* -------------------------------------------------------------------------- */
/* Tests on huge matrices */
#include "cm.h"
#include "amd.h"
#ifndef NPARTITION
#include "camd.h"
#endif
/* ========================================================================== */
/* === huge ================================================================= */
/* ========================================================================== */
void huge ( )
{
cholmod_sparse *A, *C ;
cholmod_triplet *T ;
cholmod_factor *L ;
cholmod_dense *X ;
size_t n, nbig ;
int ok = TRUE, save ;
Int junk ;
FILE *f ;
double beta [2] ;
n = Size_max ;
CHOLMOD (free_work) (cm) ;
CHOLMOD (allocate_work) (n, 0, 0, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
n = CHOLMOD(add_size_t) (n, 1, &ok) ;
NOT (ok) ;
/* create a fake zero sparse matrix, with huge dimensions */
A = CHOLMOD (spzeros) (1, 1, 0, CHOLMOD_REAL, cm) ;
A->nrow = Size_max ;
A->ncol = Size_max ;
A->stype = 0 ;
/* create a fake factor, with huge dimensions. */
L = CHOLMOD (allocate_factor) (1, cm) ;
OKP (L) ;
L->n = Size_max ;
CHOLMOD (factorize) (A, L, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
/* free the fake factor */
L->n = 1 ;
CHOLMOD (free_factor) (&L, cm) ;
/* create a valid factor to test resymbol */
C = CHOLMOD (speye) (1, 1, CHOLMOD_REAL, cm) ;
C->stype = 1 ;
L = CHOLMOD (analyze) (C, cm) ;
OKP (L) ;
CHOLMOD (factorize) (C, L, cm) ;
ok = CHOLMOD (resymbol) (C, NULL, 0, 0, L, cm) ;
OK (ok) ;
C->nrow = Size_max ;
C->ncol = Size_max ;
L->n = Size_max ;
ok = CHOLMOD (resymbol) (C, NULL, 0, 0, L, cm) ;
NOT (ok) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
printf ("rowfac:\n") ;
beta [0] = 1 ;
beta [1] = 0 ;
C->xtype = CHOLMOD_COMPLEX ;
L->xtype = CHOLMOD_COMPLEX ;
ok = CHOLMOD (rowfac) (C, NULL, beta, 0, 0, L, cm) ;
printf ("rowfac %d\n", cm->status) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
C->xtype = CHOLMOD_REAL ;
L->xtype = CHOLMOD_REAL ;
printf ("rowfac done:\n") ;
C->stype = -1 ;
ok = CHOLMOD (resymbol_noperm) (C, NULL, 0, 0, L, cm) ;
NOT (ok) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
C->ncol = 1 ;
CHOLMOD (rowadd) (0, C, L, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
CHOLMOD (rowdel) (0, C, L, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
C->ncol = 4 ;
CHOLMOD (updown) (1, C, L, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
C->nrow = 1 ;
C->ncol = 1 ;
L->n = 1 ;
CHOLMOD (free_sparse) (&C, cm) ;
CHOLMOD (free_factor) (&L, cm) ;
C = CHOLMOD (allocate_sparse) (Size_max, Size_max, Size_max, 0, 0, 0, 0, cm);
NOP (C) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
CHOLMOD (rowcolcounts) (A, NULL, 0,
&junk, &junk, &junk, &junk, &junk, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
C = CHOLMOD (submatrix) (A, &junk, Size_max/2, &junk, Size_max/2, 0, 0, cm) ;
NOP (C) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
ok = CHOLMOD (transpose_unsym) (A, 0, &junk, &junk, Size_max, A, cm) ;
NOT (ok) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
A->stype = 1 ;
ok = CHOLMOD (transpose_sym) (A, 0, &junk, A, cm) ;
NOT (ok) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
C = CHOLMOD (ptranspose) (A, 0, &junk, NULL, 0, cm) ;
NOP (C) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
A->stype = 0 ;
CHOLMOD (amd) (A, NULL, 0, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
L = CHOLMOD (analyze) (A, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
NOP (L) ;
#ifndef NPARTITION
CHOLMOD (camd) (A, NULL, 0, &junk, NULL, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
#endif
printf ("calling colamd\n") ;
CHOLMOD (colamd) (A, NULL, 0, 0, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
#ifndef NPARTITION
printf ("calling ccolamd\n") ;
CHOLMOD (ccolamd) (A, NULL, 0, NULL, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
#endif
CHOLMOD (etree) (A, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
L = CHOLMOD (allocate_factor) (Size_max, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
NOP (L) ;
#ifndef NPARTITION
CHOLMOD (metis) (A, NULL, 0, 0, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
CHOLMOD (bisect) (A, NULL, 0, 0, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
CHOLMOD (nested_dissection) (A, NULL, 0, &junk, &junk, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
#endif
CHOLMOD (postorder) (&junk, Size_max, &junk, &junk, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
f = fopen ("../Tcov/Matrix/mega.tri", "r") ;
T = CHOLMOD (read_triplet) (f, cm) ;
NOP (T) ;
OK (cm->status != CHOLMOD_OK) ;
fclose (f) ;
n = Size_max ;
X = CHOLMOD (allocate_dense) (n, 1, n, CHOLMOD_REAL, cm) ;
NOP (X) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
/* supernodal symbolic test */
C = CHOLMOD (speye) (1, 1, CHOLMOD_REAL, cm) ;
C->stype = 1 ;
save = cm->supernodal ;
cm->supernodal = CHOLMOD_SIMPLICIAL ;
L = CHOLMOD (analyze) (C, cm) ;
OKP (L) ;
junk = 0 ;
C->nrow = Size_max ;
C->ncol = Size_max ;
L->n = Size_max ;
CHOLMOD (super_symbolic) (C, C, &junk, L, cm) ;
OK (cm->status == CHOLMOD_TOO_LARGE) ;
cm->supernodal = save ;
C->nrow = 1 ;
C->ncol = 1 ;
L->n = 1 ;
CHOLMOD (free_sparse) (&C, cm) ;
CHOLMOD (free_factor) (&L, cm) ;
/* supernodal numeric test */
C = CHOLMOD (speye) (1, 1, CHOLMOD_REAL, cm) ;
C->stype = -1 ;
save = cm->supernodal ;
cm->supernodal = CHOLMOD_SUPERNODAL ;
L = CHOLMOD (analyze) (C, cm) ;
OKP (L) ;
OK (cm->status == CHOLMOD_OK) ;
C->nrow = Size_max ;
C->ncol = Size_max ;
L->n = Size_max ;
CHOLMOD (super_numeric) (C, C, beta, L, cm) ;
cm->supernodal = save ;
C->nrow = 1 ;
C->ncol = 1 ;
L->n = 1 ;
CHOLMOD (free_sparse) (&C, cm) ;
CHOLMOD (free_factor) (&L, cm) ;
/* free the fake matrix */
A->nrow = 1 ;
A->ncol = 1 ;
CHOLMOD (free_sparse) (&A, cm) ;
fprintf (stderr, "\n") ;
}
syntax highlighted by Code2HTML, v. 0.9.1