Index: /issm/trunk-jpl/src/c/analyses/ad_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16241)
+++ /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16242)
@@ -41,16 +41,40 @@
 
 		#ifdef _HAVE_ADOLC_
+			if(VerboseAutodiff())_printf0_("   start ad core\n");
 
 			/*First, stop tracing: */
 			trace_off();
 
-			/*preliminary checks: */
+			/*retrieve num_dependents and num_independents only on rank 0: */
 			if (my_rank==0) {
 				femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
 				femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
-				if(!(num_dependents*num_independents)) return;
 			}
-
-			if(VerboseAutodiff())_printf0_("   start ad core\n");
+				
+			/*if we don't have dependents or independents, no point in running ad_core: */
+			if(!(num_dependents*num_independents)) return;
+
+			/*Print tape statistics so that user can kill this run if something is off already:*/
+			tapestats(my_rank,tape_stats); //reading of tape statistics
+			if(VerboseAutodiff()){
+				_printf0_("   ADOLC statistics: \n");
+				_printf0_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
+				_printf0_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1] << "\n");
+				_printf0_("   "<<setw(45)<<left<<"Maximum number of live active variables: " <<tape_stats[2] << "\n");
+				_printf0_("   "<<setw(45)<<left<<"Number of values in the taylor (value) stack: " <<tape_stats[3] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" Number of operations per buffer == OBUFSIZE (usrparms.h) " <<tape_stats[4] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" overall number of operations " <<tape_stats[5] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" operations file written or not " <<tape_stats[6] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" overall number of locations " <<tape_stats[7] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" locations file written or not " <<tape_stats[8] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" overall number of values " <<tape_stats[9] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" values file written or not " <<tape_stats[10] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" Number of locations per buffer == LBUFSIZE (usrparms.h) " <<tape_stats[11] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" Number of values per buffer == CBUFSIZE (usrparms.h) " <<tape_stats[12] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" Number of taylors per buffer <= TBUFSIZE (usrparms.h) " <<tape_stats[13] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" Number of eq_*_prod for sparsity pattern " <<tape_stats[14] << "\n");
+				_printf0_("   "<<setw(45)<<left<<" represents the size of the stats vector " <<tape_stats[15] << "\n");
+			}
+
 
 			/*retrieve state variable: */
@@ -73,5 +97,5 @@
 			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
 
-			if (strcmp(driver,"fos_forward")==0){
+			if (strcmp(driver,"fos_forward")==0){ /*{{{*/
 
 				int     anIndepIndex;
@@ -110,6 +134,6 @@
 				xDelete(jacTimesTangentDir);
 				xDelete(tangentDir);
-			}
-			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
+			} /*}}}*/
+			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){ /*{{{*/
 
 				int      tangentDirNum;
@@ -181,6 +205,6 @@
 				xDelete(jacTimesSeed);
 				xDelete(indepIndices);
-			}
-			else if (strcmp(driver,"fos_reverse")==0) {
+			} /*}}}*/
+			else if (strcmp(driver,"fos_reverse")==0) { /*{{{*/
 
 				int     aDepIndex=0;
@@ -219,6 +243,6 @@
 				xDelete(weightVectorTimesJac);
 				xDelete(aWeightVector);
-			}
-			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
+			} /*}}}*/
+			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){ /*{{{*/
 
 				int* depIndices=NULL;
@@ -246,7 +270,7 @@
 
 				/*set the forward method function pointers: */
-#ifdef _HAVE_GSL_
+				#ifdef _HAVE_GSL_
 				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
-#endif
+				#endif
 
 				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
@@ -282,5 +306,5 @@
 				xDelete(weightsTimesJac);
 				xDelete(depIndices);
-			}
+			} /*}}}*/
 			else _error_("driver: " << driver << " not yet supported!");
 
@@ -297,15 +321,4 @@
 			xDelete(anEDF_for_solverx_p->dpp_Z);
 
-			/*Print statistics:*/
-			tapestats(my_rank,tape_stats); //reading of tape statistics
-			if(VerboseAutodiff()){
-				_printf0_("   ADOLC statistics: \n");
-				_printf0_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
-				_printf0_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1] << "\n");
-				_printf0_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2] << "\n");
-				_printf0_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3] << "\n");
-				_printf0_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4] << "\n");
-				_printf0_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5] << "\n");
-			}
 			if(VerboseAutodiff())_printf0_("   end AD core\n");
 
