Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "DistributeVecLib.h"
int main(int argc, char **argv) {
struct sparsematrix A;
long t, LB;
int P, q, Pact;
printf("Test CalcLocalLowerBound: ");
/* Hardcoded example 4.10 (p. 200) from book
Parallel Scientific Computation by Rob H. Bisseling */
P = 4; /* number of processors */
A.m = 4;
A.n = 8;
A.NrNzElts = 20;
A.NrProcs = P;
A.i = (long *) malloc(A.NrNzElts* sizeof(long));
A.j = (long *) malloc(A.NrNzElts* sizeof(long));
A.Pstart = (long *) malloc((P+1)* sizeof(long));
if ( A.i == NULL || A.j == NULL || A.Pstart == NULL ){
printf("Error\n");
exit(1);
}
A.Pstart[0] = 0;
A.Pstart[1] = 6;
A.Pstart[2] = 12;
A.Pstart[3] = 16;
A.Pstart[4] = 20;
/* Fill matrix with nonzeros (row indices) */
for (q=0; q<P; q++)
for (t=A.Pstart[q]; t<A.Pstart[q+1]; t++)
A.i[t] = q;
/* Fill matrix with nonzeros (column indices) */
A.j[0] = 0; A.j[1] = 2; A.j[2] = 4; A.j[3] = 5; A.j[4] = 6; A.j[5] = 7;
A.j[6] = 0; A.j[7] = 1; A.j[8] = 3; A.j[9] = 4; A.j[10] = 5; A.j[11] = 6;
A.j[12] = 1; A.j[13] = 5; A.j[14] = 6; A.j[15] = 7;
A.j[16] = 2; A.j[17] = 3; A.j[18] = 4; A.j[19] = 7;
if (!CalcLocalLowerBound(&A, ROW, &LB, &Pact)) {
printf("Error\n");
exit(1);
}
/* Check result values */
if (LB != 4 || Pact != P ){
printf("Error\n");
exit(1);
}
printf("OK\n");
exit(0);
} /* end main */