Statistics
| Branch: | Revision:

root / synthbench / euroben-ports / base / C-MPI / mod2as / .svn / text-base / getmatvec.c.svn-base @ 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
}