17 int CMatInit(
CMat *A,
int r,
int *m,
int *nnz,
int **indices,
double **values,
int flag
22 int M, k, *tmp_indices;
26 A->
disp = (
int *) malloc((A->
r+1)*
sizeof(int));
29 for(k=1; k<=A->
r; k++){
46 tmp_indices = (
int *) malloc(A->
disp[A->
r]*
sizeof(
int));
47 for(k=0; k<A->
r; k++){
48 memcpy(tmp_indices+A->
disp[k], A->
indices[k], A->
m[k]*A->
nnz[k]*
sizeof(
int));
56 for(k=0; k<A->
r; k++){
100 MPI_Comm_size(mat->
comm, &size);
119 mat->
S = (
int** ) malloc(mat->
steps *
sizeof(
int* ));
120 mat->
R = (
int** ) malloc(mat->
steps *
sizeof(
int* ));
121 mat->
nS = (
int* ) malloc(mat->
steps *
sizeof(
int));
122 mat->
nR = (
int* ) malloc(mat->
steps *
sizeof(
int));
124 if(mat->
flag == BUTTERFLY){
142 for(i=0; i<A->
disp[A->
r]; i++)
145 for(k=0; k<A->
r; k++){
146 for(i=0; i<A->
m[k]; i+=A->
nnz[k]){
147 for(j=0; j<A->
nnz[k]; j++){
148 yvalues[l] += A->
values[k][i+j] * xvalues[A->
indices[k][i+j]];
165 lvalues = (
double *) malloc(A->
lcount *
sizeof(
double));
166 for(i=0; i < A->
lcount; i++)
170 for(k=0; k<A->
r; k++){
171 for(i=0; i<A->
m[k]; i+=A->
nnz[k]){
172 for(j=0; j<A->
nnz[k]; j++){
173 lvalues[A->
indices[k][i+j]] += A->
values[k][i+j] * in_values[l];
178 memcpy(out_values, lvalues, (A->
lcount) *
sizeof(
double));
183 if(A->
flag == BUTTERFLY){
184 for(k=0; k< A->
steps; k++)
187 for(k=0; k< A->
steps; k++)
192 com_val=(
double *) malloc( A->
com_count *
sizeof(
double));
201 else if(A->
flag == RING){
202 for(k=1; k< A->
steps; k++)
209 else if(A->
flag == NONBLOCKING){
212 else if(A->
flag == NOEMPTY){
214 for(k=1; k< A->
steps; k++)