Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
===================================================================
--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13601)
+++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13602)
@@ -5,8 +5,9 @@
 #include <stdio.h>
 #include <math.h>
 #include "../../../shared/shared.h"
+#include "../../../include/types.h"
 
-int DetermineLocalSize(int global_size){
+int DetermineLocalSize(int global_size,COMM comm){
 
 	/*output: */
 	int  local_size;
@@ -17,25 +18,30 @@
 	int* num_local_rows=NULL;
 
 	/*from MPI: */
-	extern int num_procs;
-	extern int my_rank;
+	int num_procs2;
+	int my_rank2;
+
+	/*recover my_rank2*/
+	MPI_Comm_rank(comm,&my_rank2);
+	MPI_Comm_size(comm,&num_procs2);
+
 	
 	/*We are  not bound by any library, just use what seems most logical*/
-	num_local_rows=xNew<int>(num_procs);    
+	num_local_rows=xNew<int>(num_procs2);    
 
-	for (i=0;i<num_procs;i++){
+	for (i=0;i<num_procs2;i++){
 		/*Here, we use floor. We under distribute rows. The rows 
 		  left  are then redistributed, therefore resulting in a 
 		  more even distribution.*/
-		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs); 
+		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs2); 
 	}
 	
 	/*There may be some rows left. Distribute evenly.*/ 
-	row_rest=global_size - num_procs*(int)floor((double)global_size/(double)num_procs);
+	row_rest=global_size - num_procs2*(int)floor((double)global_size/(double)num_procs2);
 	for (i=0;i<row_rest;i++){
 		num_local_rows[i]++;
 	}
-	local_size=num_local_rows[my_rank];
+	local_size=num_local_rows[my_rank2];
 	
 	/*free ressources: */
 	xDelete<int>(num_local_rows);
Index: ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h
===================================================================
--- ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13601)
+++ ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13602)
@@ -5,5 +5,9 @@
 
 #ifndef MPI_PATCHES_H_ 
 #define MPI_PATCHES_H_
-int DetermineLocalSize(int global_size);
+
+#include "../../../include/types.h"
+
+int DetermineLocalSize(int global_size,COMM comm);
+
 #endif
Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
===================================================================
--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13601)
+++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13602)
@@ -29,7 +29,7 @@
 		local_size=size;
 	}
 	else{
-		local_size=DetermineLocalSize(size);
+		local_size=DetermineLocalSize(size,comm);
 	}
 	
 	VecCreate(comm,&vector); 
Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
===================================================================
--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13601)
+++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13602)
@@ -31,8 +31,8 @@
 	int    d_nz,o_nz,nnz;
 
 	/*Determine local sizes: */
-	m=DetermineLocalSize(M);
-	n=DetermineLocalSize(N);
+	m=DetermineLocalSize(M,comm);
+	n=DetermineLocalSize(N,comm);
 	
 	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
 	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
@@ -59,8 +59,8 @@
 	int    nnz;
 
 	/*Determine local sizes: */
-	m=DetermineLocalSize(M);
-	n=DetermineLocalSize(N);
+	m=DetermineLocalSize(M,comm);
+	n=DetermineLocalSize(N,comm);
 	
 	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
 	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
@@ -98,8 +98,8 @@
 	#endif
 
 	/*Determine local sizes: */
-	m=DetermineLocalSize(M);
-	n=DetermineLocalSize(N);
+	m=DetermineLocalSize(M,comm);
+	n=DetermineLocalSize(N,comm);
 
 	/*Figure out number of non zeros per row: */
 	d_nz=(int)connectivity*numberofdofspernode/2;
