Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp =================================================================== --- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp (revision 13600) +++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp (revision 13601) @@ -15,8 +15,8 @@ void MatToSerial(double** poutmatrix,Mat matrix,COMM comm){ int i; - extern int my_rank; - extern int num_procs; + int my_rank2; + int num_procs2; /*Petsc variables*/ PetscInt lower_row,upper_row; @@ -28,6 +28,10 @@ double* local_matrix=NULL; /*matrix local to each node used for temporary holding matrix values*/ int buffer[3]; + /*recover my_rank2 and num_procs2:*/ + MPI_Comm_size(comm,&num_procs2); + MPI_Comm_rank(comm,&my_rank2); + /*Output*/ double* outmatrix=NULL; @@ -40,7 +44,7 @@ range=upper_row-lower_row+1; /*Local and global allocation*/ - if (my_rank==0)outmatrix=xNew(M*N); + if (my_rank2==0)outmatrix=xNew(M*N); if (range){ local_matrix=xNew(N*range); @@ -60,20 +64,20 @@ /*Now each node holds its local_matrix containing range rows. * We send these rows to the matrix on node 0*/ - for (i=1;i(num_procs); + allranges=xNew(num_procs2); MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm); /*From all ranges, get lower row and upper row*/ lower_row=0; upper_row=lower_row+allranges[0]; - for (i=1;i<=my_rank;i++){ + for (i=1;i<=my_rank2;i++){ lower_row=lower_row+allranges[i-1]; upper_row=upper_row+allranges[i]; }