root / synthbench / euroben-ports / base / C-MPI / mod2as / getmatvec.c @ 0:839f52ef7657
History | View | Annotate | Download (1.1 kB)
1 |
#include <stdlib.h> |
---|---|
2 |
#include <stdio.h> |
3 |
|
4 |
double rand64( void ); |
5 |
|
6 |
void getmatvec( int ncols, int nrows, int nelmts, int indx[], int rowp[], |
7 |
double matvals[], double invec[] ) |
8 |
{ |
9 |
int felprow, i, nvarelts;
|
10 |
// -----------------------------------------------------------------------
|
11 |
felprow = (int)(0.80*nelmts/nrows) + 1; |
12 |
nvarelts = felprow/2 + 1; |
13 |
setrand( 2003 );
|
14 |
// --- Generate the rowpointers subject to a variability of 20% in the
|
15 |
// number of elements per row.
|
16 |
|
17 |
rowp[0] = 1; |
18 |
for( i = 1; i < nrows; i++ ) { |
19 |
rowp[i] = rowp[i-1] + felprow +
|
20 |
(int)( nvarelts*( rand64() - 0.5 )); |
21 |
} |
22 |
|
23 |
// --- Be sure that the last rowpointer is <= nelmts.
|
24 |
|
25 |
rowp[nrows-1] = ( rowp[nrows-1] <= nelmts ) ? rowp[nrows-1] : nelmts; |
26 |
|
27 |
// --- Generate index array 'indx' and array with matrix entries 'matvals'.
|
28 |
|
29 |
for( i = 0; i < nelmts; i++ ) { |
30 |
indx[i] = (int)( ncols*rand64() );
|
31 |
matvals[i] = 1.0; |
32 |
} |
33 |
|
34 |
// --- Generate input vector 'invec'.
|
35 |
|
36 |
for( i = 0; i < ncols; i++ ) { |
37 |
invec[i] = 1.0; |
38 |
} |
39 |
} |