Index: /issm/trunk-jpl/src/c/analyses/ad_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16265)
+++ /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16266)
@@ -61,31 +61,47 @@
 			tapestats(my_rank,tape_stats); //reading of tape statistics
 			if(VerboseAutodiff()){
-				int offset=50;
-				_printf0_("   ADOLC statistics: \n");
-				_printf0_("     "<<setw(offset)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
-				_printf0_("     operations: \n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
-				_printf0_("     locations: \n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(locint) << "B\n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
-				_printf0_("     constant values: \n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(double) << "B\n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
-				_printf0_("     Taylor stack: \n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(revreal) << "B\n");
-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
+				int commSize=IssmComm::GetSize();
+				int *sstats=new int[7];
+				sstats[0]=tape_stats[NUM_OPERATIONS];
+				sstats[1]=tape_stats[OP_FILE_ACCESS];
+				sstats[2]=tape_stats[NUM_LOCATIONS];
+				sstats[3]=tape_stats[LOC_FILE_ACCESS];
+				sstats[4]=tape_stats[NUM_VALUES];
+				sstats[5]=tape_stats[VAL_FILE_ACCESS];
+				sstats[6]=tape_stats[TAY_STACK_SIZE];
+				int *rstats=NULL;
+				if (my_rank==0) rstats=new int[commSize*7];
+				ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
+				if (my_rank==0) {
+					int offset=50;
+					int rOffset=(commSize/10)+1;
+					_printf_("   ADOLC statistics: \n");
+					_printf_("     "<<setw(offset)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
+					_printf_("     "<<setw(offset)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
+					_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
+					_printf_("     operations: \n");
+					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
+					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
+					for (int r=0;r<commSize;++r)
+					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
+					_printf_("     locations: \n");
+					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
+					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(locint) << "B\n");
+					for (int r=0;r<commSize;++r)
+					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
+					_printf_("     constant values: \n");
+					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
+					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(double) << "B\n");
+					for (int r=0;r<commSize;++r)
+					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?"->file":"") << "\n");
+					_printf_("     Taylor stack: \n");
+					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
+					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(revreal) << "B\n");
+					for (int r=0;r<commSize;++r)
+					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?"->file":"") << "\n");
+					delete []rstats;
+				}
+				delete [] sstats;
 			}
-
 
 			/*retrieve state variable: */
