Index: ../trunk-jpl/test/NightlyRun/test3019.m
===================================================================
--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13515)
+++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13516)
@@ -1,3 +1,4 @@
+%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
 md=triangle(model,'../Exp/Square.exp',100000);
 md=setmask(md,'all','');
 md=parameterize(md,'../Par/SquareShelfConstrained.par');
Index: ../trunk-jpl/test/NightlyRun/test3020.m
===================================================================
--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 0)
+++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13516)
@@ -0,0 +1,86 @@
+%This test runs test3020 with autodiff on, and checks that 
+%the value of the scalar forward difference match a step-wise differential
+
+%First configure
+md=triangle(model,'../Exp/Square.exp',150000);
+md=setmask(md,'all','');
+md=parameterize(md,'../Par/SquareShelfConstrained.par');
+md=setflowequation(md,'macayeal','all');
+md.cluster=generic('name',oshostname(),'np',3);
+md.transient.requested_outputs=[IceVolumeEnum;MaxVelEnum];
+md.verbose=verbose('autodiff',true);
+md.diagnostic.restol=.000001;
+
+%setup autodiff parameters
+index=1; %this is the scalar component we are checking against
+md.autodiff.independents={...
+	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+	};
+
+md.autodiff.dependents={...
+	dependent('name','IceVolume','type','scalar'),...
+	dependent('name','MaxVel','type','scalar')...
+	};
+md.autodiff.driver='fos_forward';
+
+%parameters for the step-wise devivative
+delta=.00001;
+h1=md.geometry.thickness(index);
+h0=h1*(1-delta);
+h2=h1*(1+delta);
+deltaH=(h2-h0);
+
+%save model:
+md2=md;
+
+%evaluate derivative by forward and backward stepping 
+%forward
+md=md2;
+md.autodiff.isautodiff=false;
+md.geometry.thickness(index)=h0;
+md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+md=SetIceShelfBC(md);
+
+md=solve(md,TransientSolutionEnum);
+V0=md.results.TransientSolution(end).IceVolume;
+MaxV0=md.results.TransientSolution(end).MaxVel;
+
+%backward
+md=md2;
+md.autodiff.isautodiff=false;
+md.geometry.thickness(index)=h2;
+md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+md=SetIceShelfBC(md);
+
+md=solve(md,TransientSolutionEnum);
+V2=md.results.TransientSolution(end).IceVolume;
+MaxV2=md.results.TransientSolution(end).MaxVel;
+
+%compute resulting derivative
+dVdh_an=(V2-V0)/deltaH;
+dMaxVdh_an=(MaxV2-MaxV0)/deltaH;
+
+
+%evaluate derivative using ADOLC 
+md=md2;
+md.autodiff.isautodiff=true;
+md.geometry.thickness(index)=h1;
+md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+md=SetIceShelfBC(md);
+
+md=solve(md,TransientSolutionEnum);
+%retrieve directly
+dVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(1);
+dMaxVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(2);
+
+disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
+disp(sprintf('dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dMaxVdh_an,dMaxVdh_ad));
+
+
+%Fields and tolerances to track changes
+field_names     ={'dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0'};
+field_tolerances={1e-13,1e-13};
+field_values={dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad};
Index: ../trunk-jpl/test/Archives/Archive3020.nc
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: ../trunk-jpl/test/Archives/Archive3020.nc
===================================================================
--- ../trunk-jpl/test/Archives/Archive3020.nc	(revision 13515)
+++ ../trunk-jpl/test/Archives/Archive3020.nc	(revision 13516)

Property changes on: ../trunk-jpl/test/Archives/Archive3020.nc
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
Index: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
===================================================================
--- ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz	(revision 13515)
+++ ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz	(revision 13516)

Property changes on: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13515)
+++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13516)
@@ -30,6 +30,7 @@
 	AutodiffFovForwardIndicesEnum,
 	AutodiffFosReverseIndexEnum,
 	AutodiffMassFluxSegmentsPresentEnum,
+	AutodiffKeepEnum,
 	BalancethicknessSpcthicknessEnum,
 	BalancethicknessStabilizationEnum,
 	BalancethicknessThickeningRateEnum,
Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13515)
+++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13516)
@@ -36,6 +36,7 @@
 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
 	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
 	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
+	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
@@ -136,11 +137,11 @@
 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
 	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
 	      else if (strcmp(name,"MeshEdges")==0) return MeshEdgesEnum;
-	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+	      if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
@@ -259,11 +260,11 @@
 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
 	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
-	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+	      if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
@@ -382,11 +383,11 @@
 	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
 	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
-	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+	      if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
 	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
@@ -505,11 +506,11 @@
 	      else if (strcmp(name,"Sset")==0) return SsetEnum;
 	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
-	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+	      if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
 	      else if (strcmp(name,"XY")==0) return XYEnum;
 	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
 	      else if (strcmp(name,"Option")==0) return OptionEnum;
Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13515)
+++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13516)
@@ -35,6 +35,7 @@
 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
 		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
 		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
+		case AutodiffKeepEnum : return "AutodiffKeep";
 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13515)
+++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13516)
@@ -37,8 +37,11 @@
 	iomodel->Constant(&autodiff_analysis,AutodiffIsautodiffEnum);
 	
 	if(autodiff_analysis){
+	
+		/*Copy some parameters from IoModel to parameters dataset: */
+		parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
 
-		/*retrieve driver: */
+		/*retrieve driver: {{{*/
 		iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
 		
@@ -54,7 +57,7 @@
 			parameters->AddObject(new IntMatParam(AutodiffFovForwardIndicesEnum,indices,num_indices,1));
 			xDelete<int>(indices);
 		}
-
+		/*}}}*/
 		/*Deal with dependents first: {{{*/
 		iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
 		dependent_objects=new DataSet();
Index: ../trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13515)
+++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13516)
@@ -211,7 +211,7 @@
 
 	int         numberofvertices;
 	int         dummy;
-	char*       driver=NULL;
+	bool        keep=false;
 
 
 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
@@ -225,34 +225,11 @@
 		
 		#ifdef _HAVE_ADOLC_
 
-		/*Start the trace:  {{{
-		 * to do so, figure out what kind of driver we are running. Then, according to ADOLC documentation, 
-		 * we'll need to activate keep. 
-		 *
-		 * From ADOLC userdoc: 
-		 * The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
-		 * recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
-		 * prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
-		 * mode as described in the Section 4 and Section 5. 
-		 *
-		 */
-		this->FetchData(&driver,AutodiffDriverEnum);
-		if (strlen(driver)<=3){
-			/*there is no "_reverse" string within the driver string: */
-			if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
-			trace_on(1);
-		}
-		else{
-			if (strncmp((const char*)(driver+3),"_reverse",8)==0){
-				if(VerboseAutodiff())_pprintLine_("   trace activated with keep on");
-				trace_on(1,1);
-			}
-			else{
-				if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
-				trace_on(1);
-			}
-		}
-		xDelete<char>(driver);
+		/*Start trace: {{{*/
+		this->FetchData(&keep,AutodiffKeepEnum);
+		if(keep)trace_on(1,1);
+		else    trace_on(1);
+
 		/*}}}*/
 		/*build dataset made of independent objects: {{{*/
 		this->independent_objects=new DataSet();
Index: ../trunk-jpl/src/m/classes/autodiff.py
===================================================================
--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 13515)
+++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 13516)
@@ -39,5 +39,6 @@
 	def marshall(self,fid):    # {{{
 		WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
 		WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+		WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean');
 	# }}}
 
Index: ../trunk-jpl/src/m/classes/autodiff.m
===================================================================
--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13515)
+++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13516)
@@ -57,6 +57,7 @@
 			%early return
 			if ~obj.isautodiff, 
 				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
+				WriteData(fid,'data',false,'enum',AutodiffKeepEnum,'format','Boolean');
 				return; 
 			end
 
@@ -179,7 +180,28 @@
 			end
 			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
 			%}}}
+			%deal with trace keep on: {{{
+			keep=false;
 
+			%From ADOLC userdoc: 
+			% The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
+			% recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
+			% prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
+			% mode as described in the Section 4 and Section 5. 
+			%
+
+			if length(obj.driver)<=3,
+				keep=false; %there is no "_reverse" string within the driver string: 
+			else
+				if strncmpi(obj.driver(4:end),'_reverse',8),
+					keep=true;
+				else
+					keep=false;
+				end
+			end
+			WriteData(fid,'data',keep,'enum',AutodiffKeepEnum,'format','Boolean');
+			%}}}
+
 		end % }}}
 	end
 end
Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13515)
+++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13516)
@@ -8,4 +8,4 @@
 %   Usage:
 %      macro=MaximumNumberOfEnums()
 
-macro=492;
+macro=493;
Index: ../trunk-jpl/src/m/enum/AutodiffKeepEnum.m
===================================================================
--- ../trunk-jpl/src/m/enum/AutodiffKeepEnum.m	(revision 0)
+++ ../trunk-jpl/src/m/enum/AutodiffKeepEnum.m	(revision 13516)
@@ -0,0 +1,11 @@
+function macro=AutodiffKeepEnum()
+%AUTODIFFKEEPENUM - Enum of AutodiffKeep
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=AutodiffKeepEnum()
+
+macro=StringToEnum('AutodiffKeep');
Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13515)
+++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13516)
@@ -198,6 +198,16 @@
 
 	return StringToEnum('AutodiffMassFluxSegmentsPresent')[0]
 
+def AutodiffKeepEnum():
+	"""
+	AUTODIFFKEEPENUM - Enum of AutodiffKeep
+
+	   Usage:
+	      macro=AutodiffKeepEnum()
+	"""
+
+	return StringToEnum('AutodiffKeep')[0]
+
 def BalancethicknessSpcthicknessEnum():
 	"""
 	BALANCETHICKNESSSPCTHICKNESSENUM - Enum of BalancethicknessSpcthickness
@@ -4936,5 +4946,5 @@
 	      macro=MaximumNumberOfEnums()
 	"""
 
-	return 492
+	return 493
 
Index: ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh
===================================================================
--- ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13515)
+++ ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13516)
@@ -11,7 +11,7 @@
 	--with-matlab-dir=$MATLAB_DIR \
 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
 	--with-python-version=$pythonversion \
-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
+	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
