1 /* ========================================================================== */
2 /* === Tcov/cmread ========================================================== */
3 /* ========================================================================== */
4
5 /* -----------------------------------------------------------------------------
6 * CHOLMOD/Tcov Module. Copyright (C) 2005-2006, Timothy A. Davis
7 * http://www.suitesparse.com
8 * -------------------------------------------------------------------------- */
9
10 /* Read in a matrix from a file and print it out.
11 *
12 * Usage:
13 * cmread matrixfile
14 * cmread < matrixfile
15 */
16
17 #include "cholmod.h"
18
19 #ifdef DLONG
20 #define CHOLMOD(routine) cholmod_l_ ## routine
21 #define Int SuiteSparse_long
22 #else
23 #define CHOLMOD(routine) cholmod_ ## routine
24 #define Int int
25 #endif
26
main(int argc,char ** argv)27 int main (int argc, char **argv)
28 {
29 cholmod_sparse *A, *C, *Z ;
30 cholmod_dense *X ;
31 cholmod_triplet *T ;
32 void *V ;
33 FILE *f, *f2 ;
34 cholmod_common Common, *cm ;
35 int mtype, prefer, option ;
36
37 /* ---------------------------------------------------------------------- */
38 /* get the file containing the input matrix */
39 /* ---------------------------------------------------------------------- */
40
41 if (argc > 1)
42 {
43 if ((f = fopen (argv [1], "r")) == NULL)
44 {
45 printf ("cannot open file: %s\n", argv [1]) ;
46 return (0) ;
47 }
48 }
49 else
50 {
51 f = stdin ;
52 }
53
54 /* ---------------------------------------------------------------------- */
55 /* start CHOLMOD, read the matrix, print it, and free it */
56 /* ---------------------------------------------------------------------- */
57
58 cm = &Common ;
59 CHOLMOD (start) (cm) ;
60 cm->print = 5 ;
61 A = CHOLMOD (read_sparse) (f, cm) ;
62 if (argc > 1) fclose (f) ;
63 CHOLMOD (print_sparse) (A, "A", cm) ;
64
65 if (argc > 1)
66 {
67 for (prefer = 0 ; prefer <= 2 ; prefer++)
68 {
69 printf ("\n---------------------- Prefer: %d\n", prefer) ;
70 f = fopen (argv [1], "r") ;
71 V = CHOLMOD (read_matrix) (f, prefer, &mtype, cm) ;
72 if (V != NULL) switch (mtype)
73 {
74 case CHOLMOD_TRIPLET:
75 T = V ;
76 CHOLMOD (print_triplet) (T, "T", cm) ;
77 CHOLMOD (free_triplet) (&T, cm) ;
78 break ;
79 case CHOLMOD_SPARSE:
80 C = V ;
81 CHOLMOD (print_sparse) (C, "C", cm) ;
82 Z = CHOLMOD (speye) (C->nrow, C->ncol, CHOLMOD_PATTERN, cm);
83 for (option = 0 ; option <= 2 ; option++)
84 {
85 int asym ;
86 Int xmatch = 0, pmatch = 0, nzoff = 0, nzd = 0 ;
87 asym = CHOLMOD (symmetry) (C, option,
88 &xmatch, &pmatch, &nzoff, &nzd, cm) ;
89 f2 = fopen ("temp5.mtx", "w") ;
90 CHOLMOD (write_sparse) (f2, C, Z, NULL, cm) ;
91 fclose (f2) ;
92 printf ("asym %d\n", asym) ;
93 }
94 CHOLMOD (free_sparse) (&C, cm) ;
95 CHOLMOD (free_sparse) (&Z, cm) ;
96 break ;
97 case CHOLMOD_DENSE:
98 X = V ;
99 CHOLMOD (print_dense) (X, "X", cm) ;
100 f2 = fopen ("temp5.mtx", "w") ;
101 CHOLMOD (write_dense) (f2, X, NULL, cm) ;
102 fclose (f2) ;
103 CHOLMOD (free_dense) (&X, cm) ;
104 break ;
105 }
106 fclose (f) ;
107 }
108 }
109
110 CHOLMOD (free_sparse) (&A, cm) ;
111 CHOLMOD (finish) (cm) ;
112 return (0) ;
113 }
114