/* ========================================================================== */
/* === Tcov/cmread ========================================================== */
/* ========================================================================== */
/* -----------------------------------------------------------------------------
* 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
* -------------------------------------------------------------------------- */
/* Read in a matrix from a file and print it out.
*
* Usage:
* cmread matrixfile
* cmread < matrixfile
*/
#include "cholmod.h"
#ifdef DLONG
#define CHOLMOD(routine) cholmod_l_ ## routine
#define Int UF_long
#else
#define CHOLMOD(routine) cholmod_ ## routine
#define Int int
#endif
int main (int argc, char **argv)
{
cholmod_sparse *A, *C, *Z ;
cholmod_dense *X ;
cholmod_triplet *T ;
void *V ;
FILE *f, *f2 ;
cholmod_common Common, *cm ;
int mtype, prefer, option ;
/* ---------------------------------------------------------------------- */
/* get the file containing the input matrix */
/* ---------------------------------------------------------------------- */
if (argc > 1)
{
if ((f = fopen (argv [1], "r")) == NULL)
{
printf ("cannot open file: %s\n", argv [1]) ;
return (0) ;
}
}
else
{
f = stdin ;
}
/* ---------------------------------------------------------------------- */
/* start CHOLMOD, read the matrix, print it, and free it */
/* ---------------------------------------------------------------------- */
cm = &Common ;
CHOLMOD (start) (cm) ;
cm->print = 5 ;
A = CHOLMOD (read_sparse) (f, cm) ;
if (argc > 1) fclose (f) ;
CHOLMOD (print_sparse) (A, "A", cm) ;
if (argc > 1)
{
for (prefer = 0 ; prefer <= 2 ; prefer++)
{
printf ("\n---------------------- Prefer: %d\n", prefer) ;
f = fopen (argv [1], "r") ;
V = CHOLMOD (read_matrix) (f, prefer, &mtype, cm) ;
if (V != NULL) switch (mtype)
{
case CHOLMOD_TRIPLET:
T = V ;
CHOLMOD (print_triplet) (T, "T", cm) ;
CHOLMOD (free_triplet) (&T, cm) ;
break ;
case CHOLMOD_SPARSE:
C = V ;
CHOLMOD (print_sparse) (C, "C", cm) ;
Z = CHOLMOD (speye) (C->nrow, C->ncol, CHOLMOD_PATTERN, cm);
for (option = 0 ; option <= 2 ; option++)
{
int asym ;
Int xmatch = 0, pmatch = 0, nzoff = 0, nzd = 0 ;
asym = CHOLMOD (symmetry) (C, option,
&xmatch, &pmatch, &nzoff, &nzd, cm) ;
f2 = fopen ("temp5.mtx", "w") ;
CHOLMOD (write_sparse) (f2, C, Z, NULL, cm) ;
fclose (f2) ;
printf ("asym %d\n", asym) ;
}
CHOLMOD (free_sparse) (&C, cm) ;
CHOLMOD (free_sparse) (&Z, cm) ;
break ;
case CHOLMOD_DENSE:
X = V ;
CHOLMOD (print_dense) (X, "X", cm) ;
f2 = fopen ("temp5.mtx", "w") ;
CHOLMOD (write_dense) (f2, X, NULL, cm) ;
fclose (f2) ;
CHOLMOD (free_dense) (&X, cm) ;
break ;
}
fclose (f) ;
}
}
CHOLMOD (free_sparse) (&A, cm) ;
CHOLMOD (finish) (cm) ;
return (0) ;
}
syntax highlighted by Code2HTML, v. 0.9.1