annotate main/sparse/SuperLU/SRC/dutil.c @ 0:6b33357c7561 octave-forge

Initial revision
author pkienzle
date Wed, 10 Oct 2001 19:54:49 +0000
parents
children 7dad48fc229c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
2
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
3 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
4 * -- SuperLU routine (version 2.0) --
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
5 * Univ. of California Berkeley, Xerox Palo Alto Research Center,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
6 * and Lawrence Berkeley National Lab.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
7 * November 15, 1997
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
8 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
9 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
10 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
11 Copyright (c) 1994 by Xerox Corporation. All rights reserved.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
12
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
13 THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
14 EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
15
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
16 Permission is hereby granted to use or copy this program for any
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
17 purpose, provided the above notices are retained on all copies.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
18 Permission to modify the code and to distribute modified code is
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
19 granted, provided the above notices are retained, and a notice that
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
20 the code was modified is included with the above copyright notice.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
21 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
22
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
23 #include <math.h>
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
24 #include "dsp_defs.h"
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
25 #include "util.h"
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
26
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
27 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
28 dCreate_CompCol_Matrix(SuperMatrix *A, int m, int n, int nnz,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
29 double *nzval, int *rowind, int *colptr,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
30 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
31 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
32 NCformat *Astore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
33
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
34 A->Stype = stype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
35 A->Dtype = dtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
36 A->Mtype = mtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
37 A->nrow = m;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
38 A->ncol = n;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
39 A->Store = (void *) SUPERLU_MALLOC( sizeof(NCformat) );
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
40 if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
41 Astore = A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
42 Astore->nnz = nnz;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
43 Astore->nzval = nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
44 Astore->rowind = rowind;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
45 Astore->colptr = colptr;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
46 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
47
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
48 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
49 dCreate_CompRow_Matrix(SuperMatrix *A, int m, int n, int nnz,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
50 double *nzval, int *colind, int *rowptr,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
51 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
52 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
53 NRformat *Astore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
54
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
55 A->Stype = stype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
56 A->Dtype = dtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
57 A->Mtype = mtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
58 A->nrow = m;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
59 A->ncol = n;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
60 A->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat) );
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
61 if ( !(A->Store) ) ABORT("SUPERLU_MALLOC fails for A->Store");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
62 Astore = A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
63 Astore->nnz = nnz;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
64 Astore->nzval = nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
65 Astore->colind = colind;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
66 Astore->rowptr = rowptr;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
67 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
68
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
69 /* Copy matrix A into matrix B. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
70 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
71 dCopy_CompCol_Matrix(SuperMatrix *A, SuperMatrix *B)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
72 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
73 NCformat *Astore, *Bstore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
74 int ncol, nnz, i;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
75
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
76 B->Stype = A->Stype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
77 B->Dtype = A->Dtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
78 B->Mtype = A->Mtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
79 B->nrow = A->nrow;;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
80 B->ncol = ncol = A->ncol;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
81 Astore = (NCformat *) A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
82 Bstore = (NCformat *) B->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
83 Bstore->nnz = nnz = Astore->nnz;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
84 for (i = 0; i < nnz; ++i)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
85 ((double *)Bstore->nzval)[i] = ((double *)Astore->nzval)[i];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
86 for (i = 0; i < nnz; ++i) Bstore->rowind[i] = Astore->rowind[i];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
87 for (i = 0; i <= ncol; ++i) Bstore->colptr[i] = Astore->colptr[i];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
88 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
89
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
90
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
91 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
92 dCreate_Dense_Matrix(SuperMatrix *X, int m, int n, double *x, int ldx,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
93 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
94 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
95 DNformat *Xstore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
96
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
97 X->Stype = stype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
98 X->Dtype = dtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
99 X->Mtype = mtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
100 X->nrow = m;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
101 X->ncol = n;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
102 X->Store = (void *) SUPERLU_MALLOC( sizeof(DNformat) );
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
103 if ( !(X->Store) ) ABORT("SUPERLU_MALLOC fails for X->Store");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
104 Xstore = (DNformat *) X->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
105 Xstore->lda = ldx;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
106 Xstore->nzval = (double *) x;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
107 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
108
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
109 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
110 dCopy_Dense_Matrix(int M, int N, double *X, int ldx,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
111 double *Y, int ldy)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
112 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
113 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
114 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
115 * Purpose
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
116 * =======
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
117 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
118 * Copies a two-dimensional matrix X to another matrix Y.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
119 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
120 int i, j;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
121
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
122 for (j = 0; j < N; ++j)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
123 for (i = 0; i < M; ++i)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
124 Y[i + j*ldy] = X[i + j*ldx];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
125 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
126
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
127 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
128 dCreate_SuperNode_Matrix(SuperMatrix *L, int m, int n, int nnz,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
129 double *nzval, int *nzval_colptr, int *rowind,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
130 int *rowind_colptr, int *col_to_sup, int *sup_to_col,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
131 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
132 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
133 SCformat *Lstore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
134
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
135 L->Stype = stype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
136 L->Dtype = dtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
137 L->Mtype = mtype;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
138 L->nrow = m;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
139 L->ncol = n;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
140 L->Store = (void *) SUPERLU_MALLOC( sizeof(SCformat) );
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
141 if ( !(L->Store) ) ABORT("SUPERLU_MALLOC fails for L->Store");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
142 Lstore = L->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
143 Lstore->nnz = nnz;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
144 Lstore->nsuper = col_to_sup[n];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
145 Lstore->nzval = nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
146 Lstore->nzval_colptr = nzval_colptr;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
147 Lstore->rowind = rowind;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
148 Lstore->rowind_colptr = rowind_colptr;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
149 Lstore->col_to_sup = col_to_sup;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
150 Lstore->sup_to_col = sup_to_col;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
151
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
152 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
153
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
154
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
155 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
156 * Convert a row compressed storage into a column compressed storage.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
157 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
158 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
159 dCompRow_to_CompCol(int m, int n, int nnz,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
160 double *a, int *colind, int *rowptr,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
161 double **at, int **rowind, int **colptr)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
162 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
163 register int i, j, col, relpos;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
164 int *marker;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
165
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
166 /* Allocate storage for another copy of the matrix. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
167 *at = (double *) doubleMalloc(nnz);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
168 *rowind = (int *) intMalloc(nnz);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
169 *colptr = (int *) intMalloc(n+1);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
170 marker = (int *) intCalloc(n);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
171
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
172 /* Get counts of each column of A, and set up column pointers */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
173 for (i = 0; i < m; ++i)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
174 for (j = rowptr[i]; j < rowptr[i+1]; ++j) ++marker[colind[j]];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
175 (*colptr)[0] = 0;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
176 for (j = 0; j < n; ++j) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
177 (*colptr)[j+1] = (*colptr)[j] + marker[j];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
178 marker[j] = (*colptr)[j];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
179 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
180
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
181 /* Transfer the matrix into the compressed column storage. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
182 for (i = 0; i < m; ++i) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
183 for (j = rowptr[i]; j < rowptr[i+1]; ++j) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
184 col = colind[j];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
185 relpos = marker[col];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
186 (*rowind)[relpos] = i;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
187 (*at)[relpos] = a[j];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
188 ++marker[col];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
189 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
190 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
191
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
192 SUPERLU_FREE(marker);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
193 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
194
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
195
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
196 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
197 dPrint_CompCol_Matrix(char *what, SuperMatrix *A)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
198 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
199 NCformat *Astore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
200 register int i,n;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
201 double *dp;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
202
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
203 printf("\nCompCol matrix %s:\n", what);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
204 printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
205 n = A->ncol;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
206 Astore = (NCformat *) A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
207 dp = (double *) Astore->nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
208 printf("nrow %d, ncol %d, nnz %d\n", A->nrow,A->ncol,Astore->nnz);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
209 printf("nzval: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
210 for (i = 0; i < Astore->colptr[n]; ++i) printf("%f ", dp[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
211 printf("\nrowind: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
212 for (i = 0; i < Astore->colptr[n]; ++i) printf("%d ", Astore->rowind[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
213 printf("\ncolptr: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
214 for (i = 0; i <= n; ++i) printf("%d ", Astore->colptr[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
215 printf("\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
216 fflush(stdout);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
217 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
218
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
219 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
220 dPrint_SuperNode_Matrix(char *what, SuperMatrix *A)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
221 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
222 SCformat *Astore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
223 register int i,n;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
224 double *dp;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
225
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
226 printf("\nSuperNode matrix %s:\n", what);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
227 printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
228 n = A->ncol;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
229 Astore = (SCformat *) A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
230 dp = (double *) Astore->nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
231 printf("nrow %d, ncol %d, nnz %d, nsuper %d\n",
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
232 A->nrow,A->ncol,Astore->nnz,Astore->nsuper);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
233 printf("nzval: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
234 for (i = 0; i < Astore->nzval_colptr[n]; ++i) printf("%f ", dp[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
235 printf("\nnzval_colptr: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
236 for (i = 0; i <= n; ++i) printf("%d ", Astore->nzval_colptr[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
237 printf("\nrowind: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
238 for (i = 0; i < Astore->rowind_colptr[n]; ++i)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
239 printf("%d ", Astore->rowind[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
240 printf("\nrowind_colptr: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
241 for (i = 0; i <= n; ++i) printf("%d ", Astore->rowind_colptr[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
242 printf("\ncol_to_sup: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
243 for (i = 0; i < n; ++i) printf("%d ", Astore->col_to_sup[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
244 printf("\nsup_to_col: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
245 for (i = 0; i <= Astore->nsuper+1; ++i)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
246 printf("%d ", Astore->sup_to_col[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
247 printf("\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
248 fflush(stdout);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
249 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
250
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
251 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
252 dPrint_Dense_Matrix(char *what, SuperMatrix *A)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
253 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
254 DNformat *Astore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
255 register int i;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
256 double *dp;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
257
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
258 printf("\nDense matrix %s:\n", what);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
259 printf("Stype %d, Dtype %d, Mtype %d\n", A->Stype,A->Dtype,A->Mtype);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
260 Astore = (DNformat *) A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
261 dp = (double *) Astore->nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
262 printf("nrow %d, ncol %d, lda %d\n", A->nrow,A->ncol,Astore->lda);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
263 printf("\nnzval: ");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
264 for (i = 0; i < A->nrow; ++i) printf("%f ", dp[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
265 printf("\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
266 fflush(stdout);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
267 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
268
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
269 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
270 * Diagnostic print of column "jcol" in the U/L factor.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
271 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
272 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
273 dprint_lu_col(char *msg, int jcol, int pivrow, int *xprune, GlobalLU_t *Glu)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
274 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
275 int i, k, fsupc;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
276 int *xsup, *supno;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
277 int *xlsub, *lsub;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
278 double *lusup;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
279 int *xlusup;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
280 double *ucol;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
281 int *usub, *xusub;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
282
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
283 xsup = Glu->xsup;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
284 supno = Glu->supno;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
285 lsub = Glu->lsub;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
286 xlsub = Glu->xlsub;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
287 lusup = Glu->lusup;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
288 xlusup = Glu->xlusup;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
289 ucol = Glu->ucol;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
290 usub = Glu->usub;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
291 xusub = Glu->xusub;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
292
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
293 printf("%s", msg);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
294 printf("col %d: pivrow %d, supno %d, xprune %d\n",
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
295 jcol, pivrow, supno[jcol], xprune[jcol]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
296
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
297 printf("\tU-col:\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
298 for (i = xusub[jcol]; i < xusub[jcol+1]; i++)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
299 printf("\t%d%10.4f\n", usub[i], ucol[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
300 printf("\tL-col in rectangular snode:\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
301 fsupc = xsup[supno[jcol]]; /* first col of the snode */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
302 i = xlsub[fsupc];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
303 k = xlusup[jcol];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
304 while ( i < xlsub[fsupc+1] && k < xlusup[jcol+1] ) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
305 printf("\t%d\t%10.4f\n", lsub[i], lusup[k]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
306 i++; k++;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
307 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
308 fflush(stdout);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
309 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
310
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
311
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
312 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
313 * Check whether tempv[] == 0. This should be true before and after
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
314 * calling any numeric routines, i.e., "panel_bmod" and "column_bmod".
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
315 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
316 void dcheck_tempv(int n, double *tempv)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
317 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
318 int i;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
319
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
320 for (i = 0; i < n; i++) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
321 if (tempv[i] != 0.0)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
322 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
323 fprintf(stderr,"tempv[%d] = %f\n", i,tempv[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
324 ABORT("dcheck_tempv");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
325 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
326 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
327 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
328
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
329
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
330 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
331 dGenXtrue(int n, int nrhs, double *x, int ldx)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
332 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
333 int i, j;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
334 for (j = 0; j < nrhs; ++j)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
335 for (i = 0; i < n; ++i) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
336 x[i + j*ldx] = 1.0;/* + (double)(i+1.)/n;*/
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
337 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
338 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
339
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
340 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
341 * Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
342 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
343 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
344 dFillRHS(char *trans, int nrhs, double *x, int ldx,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
345 SuperMatrix *A, SuperMatrix *B)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
346 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
347 NCformat *Astore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
348 double *Aval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
349 DNformat *Bstore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
350 double *rhs;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
351 double one = 1.0;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
352 double zero = 0.0;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
353 int ldc;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
354
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
355 Astore = A->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
356 Aval = (double *) Astore->nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
357 Bstore = B->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
358 rhs = Bstore->nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
359 ldc = Bstore->lda;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
360
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
361 sp_dgemm(trans, "N", A->nrow, nrhs, A->ncol, one, A,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
362 x, ldx, zero, rhs, ldc);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
363
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
364 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
365
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
366 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
367 * Fills a double precision array with a given value.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
368 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
369 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
370 dfill(double *a, int alen, double dval)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
371 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
372 register int i;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
373 for (i = 0; i < alen; i++) a[i] = dval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
374 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
375
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
376
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
377
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
378 /*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
379 * Check the inf-norm of the error vector
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
380 */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
381 void dinf_norm_error(int nrhs, SuperMatrix *X, double *xtrue)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
382 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
383 DNformat *Xstore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
384 double err, xnorm;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
385 double *Xmat, *soln_work;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
386 int i, j;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
387
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
388 Xstore = X->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
389 Xmat = Xstore->nzval;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
390
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
391 for (j = 0; j < nrhs; j++) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
392 soln_work = &Xmat[j*Xstore->lda];
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
393 err = xnorm = 0.0;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
394 for (i = 0; i < X->nrow; i++) {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
395 err = MAX(err, fabs(soln_work[i] - xtrue[i]));
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
396 xnorm = MAX(xnorm, fabs(soln_work[i]));
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
397 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
398 err = err / xnorm;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
399 printf("||X - Xtrue||/||X|| = %e\n", err);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
400 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
401 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
402
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
403
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
404
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
405 /* Print performance of the code. */
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
406 void
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
407 dPrintPerf(SuperMatrix *L, SuperMatrix *U, mem_usage_t *mem_usage,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
408 double rpg, double rcond, double *ferr,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
409 double *berr, char *equed)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
410 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
411 SCformat *Lstore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
412 NCformat *Ustore;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
413 extern SuperLUStat_t SuperLUStat;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
414 double *utime;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
415 flops_t *ops;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
416
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
417 utime = SuperLUStat.utime;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
418 ops = SuperLUStat.ops;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
419
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
420 if ( utime[FACT] != 0. )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
421 printf("Factor flops = %e\tMflops = %8.2f\n", ops[FACT],
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
422 ops[FACT]*1e-6/utime[FACT]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
423 printf("Identify relaxed snodes = %8.2f\n", utime[RELAX]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
424 if ( utime[SOLVE] != 0. )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
425 printf("Solve flops = %.0f, Mflops = %8.2f\n", ops[SOLVE],
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
426 ops[SOLVE]*1e-6/utime[SOLVE]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
427
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
428 Lstore = (SCformat *) L->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
429 Ustore = (NCformat *) U->Store;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
430 printf("\tNo of nonzeros in factor L = %d\n", Lstore->nnz);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
431 printf("\tNo of nonzeros in factor U = %d\n", Ustore->nnz);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
432 printf("\tNo of nonzeros in L+U = %d\n", Lstore->nnz + Ustore->nnz);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
433
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
434 printf("L\\U MB %.3f\ttotal MB needed %.3f\texpansions %d\n",
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
435 mem_usage->for_lu/1e6, mem_usage->total_needed/1e6,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
436 mem_usage->expansions);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
437
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
438 printf("\tFactor\tMflops\tSolve\tMflops\tEtree\tEquil\tRcond\tRefine\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
439 printf("PERF:%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f\n",
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
440 utime[FACT], ops[FACT]*1e-6/utime[FACT],
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
441 utime[SOLVE], ops[SOLVE]*1e-6/utime[SOLVE],
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
442 utime[ETREE], utime[EQUIL], utime[RCOND], utime[REFINE]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
443
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
444 printf("\tRpg\t\tRcond\t\tFerr\t\tBerr\t\tEquil?\n");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
445 printf("NUM:\t%e\t%e\t%e\t%e\t%s\n",
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
446 rpg, rcond, ferr[0], berr[0], equed);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
447
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
448 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
449
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
450
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
451
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
452
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
453 print_double_vec(char *what, int n, double *vec)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
454 {
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
455 int i;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
456 printf("%s: n %d\n", what, n);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
457 for (i = 0; i < n; ++i) printf("%d\t%f\n", i, vec[i]);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
458 return 0;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
459 }
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
460