Index: /issm/trunk-jpl/src/c/Container/Elements.cpp
===================================================================
--- /issm/trunk-jpl/src/c/Container/Elements.cpp	(revision 10994)
+++ /issm/trunk-jpl/src/c/Container/Elements.cpp	(revision 10995)
@@ -170,6 +170,6 @@
 	Patch  *patch        = NULL;
 	int    *resultsenums = NULL;
-	int    *resultssize  = NULL;
-	int    *resultsstep  = NULL;
+	int    *resultssizes  = NULL;
+	int    *resultssteps  = NULL;
 	double *resultstimes = NULL;
 	double *vector_serial= NULL;
@@ -187,9 +187,22 @@
 
 	if(!results_as_patches){
-		/*No patch here, we prepare vectors*/
-
-		/*OK, see what the first element of this partition has in stock (this is common to all partitions)*/
-		Element* element=(Element*)this->GetObjectByOffset(0);
-		element->ListResultsInfo(&resultsenums,&resultssize,&resultstimes,&resultsstep,&numberofresults);
+
+		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+		if(my_rank==0){
+			if(this->Size()==0) _error_("Cannot write results because first partition has no element. Maybe too many cpus were requested");
+			Element* element=(Element*)this->GetObjectByOffset(0);
+			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+		}
+		MPI_Bcast(&numberofresults,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
+		if(my_rank!=0){
+			resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
+			resultssizes=(int*)xmalloc(numberofresults*sizeof(int));
+			resultstimes=(double*)xmalloc(numberofresults*sizeof(double));
+			resultssteps=(int*)xmalloc(numberofresults*sizeof(int));
+		}
+		MPI_Bcast(resultsenums,numberofresults,MPI_INT,0,MPI_COMM_WORLD);
+		MPI_Bcast(resultssizes,numberofresults,MPI_INT,0,MPI_COMM_WORLD);
+		MPI_Bcast(resultstimes,numberofresults,MPI_DOUBLE,0,MPI_COMM_WORLD);
+		MPI_Bcast(resultssteps,numberofresults,MPI_INT,0,MPI_COMM_WORLD);
 
 		/*Loop over all results and get nodal vector*/
@@ -197,12 +210,12 @@
 
 			/*Get vector for result number i*/
-			if(resultssize[i]==P1Enum)      vectorsize=numberofvertices;
-			else if(resultssize[i]==P0Enum) vectorsize=numberofelements;
-			else _error_("Unkown result size: %s",EnumToStringx(resultssize[i]));
+			if(resultssizes[i]==P1Enum)      vectorsize=numberofvertices;
+			else if(resultssizes[i]==P0Enum) vectorsize=numberofelements;
+			else _error_("Unkown result size: %s",EnumToStringx(resultssizes[i]));
 			vector=NewVec(vectorsize);
 
 			for(int j=0;j<this->Size();j++){
 				Element* element=(Element*)this->GetObjectByOffset(j);
-				element->GetVectorFromResults(vector,i,resultssize[i]);
+				element->GetVectorFromResults(vector,i,resultssizes[i]);
 			}
 			VecAssemblyBegin(vector);
@@ -213,5 +226,5 @@
 			if(my_rank==0){
 				/*No need to add this vector for all cpus*/
-				results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,vectorsize,resultsstep[i],resultstimes[i]));
+				results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,vectorsize,resultssteps[i],resultstimes[i]));
 			}
 
@@ -240,7 +253,7 @@
 	/*Free ressources:*/
 	xfree((void**)&resultsenums);
-	xfree((void**)&resultssize);
+	xfree((void**)&resultssizes);
 	xfree((void**)&resultstimes);
-	xfree((void**)&resultsstep);
+	xfree((void**)&resultssteps);
 	delete patch;
 }
