AcouSTO  version 2.0

◆ Pzgemv()

void Pzgemv ( COMPLEX  alpha,
COMPLEX **  A,
int  ia,
int  ni,
int  ja,
int  nj,
COMPLEX x,
COMPLEX  beta,
COMPLEX y,
COMPLEX z 
)
36  {
37 
38  int i,j;
39  int* sendcounts;
40  int* displs;
41  int _start,_end;
42  COMPLEX u[ia];
43  COMPLEX _z[ia];
44 
45 
46  sendcounts = calloc(size,sizeof(int));
47  displs = calloc(size,sizeof(int));
48  for(i=0;i<size;i++){
49  calculate_bounds(i,ni,size, &_start,&_end);
50  sendcounts[i] = _end-_start;
51  displs[i] = _start;
52  }
53 
54 
55  for(i=0;i<ia;i++){
56  u[i] = 0.0+I*0.0;
57  for(j=0;j<nj;j++){
58  u[i] += A[i][j]*x[j];
59  }
60  }
61 
62 
63 
64  if(NULL != y){
65  for(i=0;i<ia;i++){ // WARNING
66  _z[i] = alpha * u[i] + beta*y[i+displs[rank]];
67  }
68  }else{
69  for(i=0;i<ia;i++){ // WARNING
70  _z[i] = alpha * u[i];
71  }
72  }
73 
74 
75 
76  MPI_Allgatherv(_z,ia,MPI_ACOUSTO_COMPLEX,z,sendcounts,displs,MPI_ACOUSTO_COMPLEX,MPI_COMM_WORLD);
77 
78 
79  free(sendcounts);
80  free(displs);
81 
82 }
#define MPI_ACOUSTO_COMPLEX
Definition: types.h:56
int size
Definition: globals.h:81
#define COMPLEX
Definition: types.h:48
void calculate_bounds(int _rank, int _nelmb, int _size, int *nstart, int *nend)
Definition: math.c:219
DOUBLE z
Definition: structs.h:35
int rank
Definition: globals.h:79
DOUBLE x
Definition: structs.h:31
#define calloc(n, size)
Definition: allocation.h:37
DOUBLE y
Definition: structs.h:33